events.ts (5294B)
1 2 export interface IRoomEvent<Content = any> { 3 content: Content; 4 event_id: string; 5 origin_server_ts: number; 6 sender: string; 7 type: string; 8 unsigned?: { 9 transaction_id?: string; 10 age?: number; 11 [key: string]: any; 12 }; 13 "m.relates.to"?: any; 14 [key: string]: any; 15 } 16 17 export interface IRoomMessageContent<MsgType = any> { 18 body: string; 19 msgtype: MsgType; 20 } 21 22 export interface IRoomMessageTextContent extends IRoomMessageContent<"m.text"> { 23 format?: string; 24 formatted_body?: string; 25 } 26 27 export interface IRoomMessageImageContent extends IRoomMessageContent<"m.image"> { 28 info?: IImageInfo; 29 url?: string; 30 file?: IEncryptedFile; 31 } 32 33 export interface IRoomMessageVideoContent extends IRoomMessageContent<"m.video"> { 34 info?: IImageInfo; 35 url?: string; 36 file?: IEncryptedFile; 37 } 38 39 export interface IRoomMessageAudioContent extends IRoomMessageContent<"m.audio"> { 40 info?: IAudioInfo; 41 url?: string; 42 file?: IEncryptedFile; 43 } 44 45 export interface IRoomMessageEvent<Content = any> extends IRoomEvent<Content> { } 46 47 export interface IRoomMessageTextEvent extends IRoomMessageEvent<IRoomMessageTextContent> { } 48 49 export function isRoomMessageTextEvent(event: IRoomEvent): event is IRoomMessageTextEvent { 50 return event.type === "m.room.message" && event.content.msgtype === "m.text"; 51 } 52 53 export interface IRoomMessageNoticeEvent extends IRoomMessageEvent<IRoomMessageTextContent> { } 54 55 export function isRoomMessageNoticeEvent(event: IRoomEvent): event is IRoomMessageNoticeEvent { 56 return event.type === "m.room.message" && event.content.msgtype === "m.notice"; 57 } 58 59 export function isRoomMessageImageEvent(event: IRoomEvent): event is IRoomMessageEvent<IRoomMessageImageContent> { 60 return event.type === "m.room.message" && event.content.msgtype === "m.image"; 61 } 62 63 export function isRoomMessageVideoEvent(event: IRoomEvent): event is IRoomMessageEvent<IRoomMessageVideoContent> { 64 return event.type === "m.room.message" && event.content.msgtype === "m.video"; 65 } 66 67 export function isRoomMessageAudioEvent(event: IRoomEvent): event is IRoomMessageEvent<IRoomMessageAudioContent> { 68 return event.type === "m.room.message" && event.content.msgtype === "m.audio"; 69 } 70 71 export function isRoomMessageEvent(event: IRoomEvent): event is IRoomMessageEvent { 72 return event.type === "m.room.message"; 73 } 74 75 export interface IRoomStateEvent<Content = any> extends IRoomEvent<Content> { 76 state_key: string; 77 } 78 79 export function isRoomStateEvent(event: IRoomEvent): event is IRoomStateEvent { 80 return event.state_key !== undefined; 81 } 82 83 export interface IRoomMemberContent { 84 avatar_url?: string; 85 displayname?: string; 86 membership: "invite" | "join" | "knock" | "leave" | "ban"; 87 is_direct?: boolean; 88 reason?: string; 89 } 90 91 export interface IRoomMemberEvent extends IRoomStateEvent<IRoomMemberContent> { } 92 93 export function isRoomMemberEvent(event: IRoomEvent): event is IRoomMemberEvent { 94 return event.type === "m.room.member"; 95 } 96 97 export interface IRoomCreateContent { 98 creator: string; 99 "m.federate"?: boolean; 100 predecessor?: { 101 room_id: string; 102 event_id: string; 103 }; 104 room_version?: string; 105 type?: string; 106 } 107 108 export interface IRoomCreateEvent extends IRoomStateEvent<IRoomCreateContent> { } 109 110 export function isRoomCreateEvent(event: IRoomEvent): event is IRoomCreateEvent { 111 return event.type === "m.room.create"; 112 } 113 114 export interface IThumbnailInfo { 115 h: number; 116 mimetype: string; 117 size: number; 118 w: number; 119 } 120 121 export interface IEncryptedFile { 122 v: string; 123 key: { 124 alg: string; 125 ext: boolean; 126 k: string; 127 key_ops: string[]; 128 kty: string; 129 }; 130 iv: string; 131 hashes: { 132 [key: string]: string; 133 }; 134 url: string; 135 } 136 137 export interface IImageInfo { 138 h: number; 139 mimetype: string; 140 size: number; 141 thumbnail_info?: IThumbnailInfo; 142 thumbnail_url?: string; 143 thumbnail_file?: IEncryptedFile; 144 w: number; 145 } 146 147 export interface IAudioInfo { 148 duration?: number; 149 mimetype?: string; 150 size?: number; 151 } 152 153 export interface IRoomAvatarContent { 154 info: IImageInfo; 155 url?: string; 156 } 157 158 export interface IRoomAvatarEvent extends IRoomStateEvent<IRoomAvatarContent> { } 159 160 export function isRoomAvatarEvent(event: IRoomEvent): event is IRoomAvatarEvent { 161 return event.type === "m.room.avatar"; 162 } 163 164 export interface ISpaceChildContent { 165 via: string[]; 166 order?: string; 167 suggested?: boolean; 168 } 169 170 export interface ISpaceChildEvent extends IRoomStateEvent<ISpaceChildContent> { } 171 172 export function isSpaceChildEvent(event: IRoomEvent): event is ISpaceChildEvent { 173 return event.type === "m.space.child"; 174 } 175 176 export interface ISpaceParentContent { 177 via: string[]; 178 canonical?: boolean; 179 } 180 181 export interface ISpaceParentEvent extends IRoomStateEvent<ISpaceParentContent> { } 182 183 export function isSpaceParentEvent(event: IRoomEvent): event is ISpaceParentEvent { 184 return event.type === "m.space.parent"; 185 } 186 187 export interface IRoomTopicContent { 188 topic: string; 189 } 190 191 export interface IRoomTopicEvent extends IRoomStateEvent<IRoomTopicContent> { } 192 193 export function isRoomTopicEvent(event: IRoomEvent): event is IRoomTopicEvent { 194 return event.type === "m.room.topic"; 195 }