cetirizine

An experimental matrix client written in reactjs utilizing tailwind and storybook
git clone git://archive.git.mtrnord.blog/MTRNord/cetirizine.git
Log | Files | Refs | README | LICENSE

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 }