type MessageModelType = 'incoming' | 'outgoing'; type MessageDeliveryStatus = | 'sending' | 'sent' | 'delivered' | 'read' | 'error'; export type EndSessionType = 'done' | 'ongoing'; interface MessageAttributes { id: number; source: string; endSessionType: EndSessionType; quote: any; expireTimer: number; received_at: number; sent_at: number; preview: any; body: string; expirationStartTimestamp: any; read_by: Array; delivered_to: Array; decrypted_at: number; recipients: Array; delivered: number; type: MessageModelType; group_update: any; groupInvitation: any; attachments: any; contact: any; conversationId: any; errors: any; flags: number; hasAttachments: boolean; hasFileAttachments: boolean; hasVisualMediaAttachments: boolean; schemaVersion: number; expirationTimerUpdate: any; unread: boolean; group: any; bodyPending: boolean; timestamp: number; status: MessageDeliveryStatus; } export interface MessageModel extends Backbone.Model { idForLogging: () => string; isGroupUpdate: () => boolean; isExpirationTimerUpdate: () => boolean; getNotificationText: () => string; isEndSession: () => boolean; markRead: () => void; merge: (other: MessageModel) => void; saveErrors: (error: any) => void; sendSyncMessageOnly: (message: any) => void; isUnread: () => boolean; commit: () => Promise; getPropsForMessageDetail: () => any; propsForMessage?: any; propsForTimerNotification?: any; propsForResetSessionNotification?: any; propsForGroupInvitation?: any; propsForGroupNotification?: any; propsForVerificationNotification?: any; firstMessageOfSeries: boolean; }