import { PostCommentResponse } from './adapters/message'; import * as model from './model'; export type IQCallback2 = (response?: T, error?: Error) => void; export type IQCallback1 = (error?: Error) => void; export type IQProgressListener = (error?: Error, progress?: number, url?: O) => void; export interface Callback { (data1: T1): void; } export interface Subscription { (): void; } export interface IQiscus { setup(appId: string, syncInterval: number): void; setupWithCustomServer(appId: string, baseUrl: string, brokerUrl: string, brokerLbUrl: string, syncInterval: number): void; onMessageReceived(handler: (message: IQMessage) => void): Subscription; onMessageDeleted(handler: (message: IQMessage) => void): Subscription; onMessageDelivered(handler: (message: IQMessage) => void): Subscription; onMessageRead(handler: (message: IQMessage) => void): Subscription; onUserTyping(handler: (userId: string, roomId: number, isTyping: boolean) => void): Subscription; onUserOnlinePresence(handler: (userId: string, isOnline: boolean, lastSeen: Date) => void): Subscription; onChatRoomCleared(handler: (roomId: number) => void): Subscription; onConnected(handler: () => void): Subscription; onReconnecting(handler: () => void): Subscription; onDisconnected(handler: () => void): Subscription; subscribeChatRoom(room: IQRoom): void; unsubscribeChatRoom(room: IQRoom): void; subscribeUserOnlinePresence(userId: string): void; unsubscribeUserOnlinePresence(userId: string): void; setUser(userId: string, userKey: string, username: string, avatarUrl: string, extras: object, callback: IQCallback2): void | Promise; setUserWithIdentityToken(token: string, callback?: IQCallback2): void | Promise; blockUser(userId: string, callback?: IQCallback2): void | Promise; unblockUser(userId: string, callback?: IQCallback2): void | Promise; getBlockedUsers(page?: number, limit?: number, callback?: IQCallback2): void | Promise; getUserData(callback?: IQCallback2): void | Promise; updateUser(username?: string, avatarUrl?: string, extras?: object, callback?: IQCallback2): void | Promise; getUsers(searchUsername?: string, page?: number, limit?: number, callback?: IQCallback2): void | Promise; clearUser(callback?: IQCallback2): void; chatUser(userId: string, extras: object, callback?: IQCallback2): void | Promise; createGroupChat(name: string, userIds: string[], avatarUrl: string, extras: object, callback?: IQCallback2): void | Promise; createChannel(uniqueId: string, name: string, avatarUrl: string, extras: object, callback?: IQCallback2): void | Promise; getChannel(uniqueId: string, callback?: IQCallback2): void | Promise; updateChatRoom(roomId: number, name: string, avatarUrl: string, extras: object, callback?: IQCallback2): void | Promise; addParticipants(roomId: number, userIds: string[], callback?: IQCallback2): void | Promise; removeParticipants(roomId: number, userIds: string[], callback?: IQCallback2): void | Promise; getChatRoomWithMessages(roomId: number, callback?: IQCallback2): void | Promise; getChatRooms(roomIds: number[], page?: number, showRemoved?: boolean, showParticipant?: boolean, callback?: IQCallback2): void | Promise; getChatRooms(uniqueIds: string[], page?: number, showRemoved?: boolean, showParticipant?: boolean, callback?: IQCallback2): void | Promise; getAllChatRooms(showParticipant?: boolean, showRemoved?: boolean, showEmpty?: boolean, page?: number, limit?: number, callback?: IQCallback2): void | Promise; getParticipants(roomUniqueId: string, offset?: number, sorting?: 'asc' | 'desc' | null, callback?: IQCallback2): void; sendMessage(roomId: number, message: IQMessageT, callback?: IQCallback2): void | Promise; markAsRead(roomId: number, messageId: number, callback?: IQCallback2): void | Promise; markAsDelivered(roomId: number, messageId: number, callback?: IQCallback2): void | Promise; getPreviouseMessagesById(roomId: number, limit?: number, messageId?: number, callback?: IQCallback2): void | Promise; getNextMessagesById(roomId: number, limit?: number, messageId?: number, callback?: IQCallback2): void | Promise; deleteMessages(messageUniqueIds: string[], callback?: IQCallback2): void | Promise; clearMessagesByChatRoomId(roomUniqueIds: string[], callback?: IQCallback2): void | Promise; upload(file: File, callback?: IQProgressListener): void; registerDeviceToken(token: string, isDevelopment: boolean, callback?: IQCallback2): void | Promise; removeDeviceToken(token: string, isDevelopment: boolean, callback?: IQCallback2): void | Promise; getJWTNonce(callback?: IQCallback2): void | Promise; synchronize(lastMessageId: number): void; synchronizeEvent(lastEventId: number): void; getTotalUnreadCount(callback?: IQCallback2): void | Promise; setSyncInterval(interval: number): void; hasSetupUser(callback?: (isSetup: boolean) => void): void | Promise; getThumbnailURL(url: string): string; sendFileMessage(roomId: number, message: string, file: File, callback: (error: Error, progress: number, message: IQMessage) => void): void; publishTyping(roomId: number, isTyping?: boolean): void; publishCustomEvent(roomId: number, data: any): void; subscribeCustomEvent(roomId: number, callback: IQCallback2): void; unsubscribeCustomEvent(roomId: number): void; } export interface IQUserExtraProps { avatarUrl?: model.IQAccount['avatarUrl']; name?: model.IQAccount['name']; extras?: model.IQAccount['extras']; } export interface IQUserAdapter { login(userId: string, userKey: string, extra: IQUserExtraProps): Promise; clear(): void; updateUser(name: string, avatarUrl: string, extras: string): Promise; getNonce(): Promise; setUserFromIdentityToken(token: string): Promise; getUserList(query: string, page?: number, limit?: number): Promise; getBlockedUser(page?: number, limit?: number): Promise; blockUser(userId: string): Promise; unblockUser(userId: string): Promise; getUserData(): Promise; registerDeviceToken(token: string, isDevelopment: boolean): Promise; unregisterDeviceToken(token: string, isDevelopment: boolean): Promise; readonly token: string; readonly currentUser: IQUser; } export interface IQUser { id: number; userId: string; displayName: string; avatarUrl?: string | null; } export type QNonce = { expired: number; nonce: string; }; export declare enum IQRoomType { Group = "group", Single = "single" } export interface IQRoom { id: number; name: string; avatarUrl: string; isChannel: boolean; lastMessageId?: number; lastMessageContent?: string; uniqueId: string; unreadCount: number; type: IQRoomType; totalParticipants?: number; participants?: IQParticipant[]; options?: string; messages?: IQMessage[]; } export interface IQParticipant extends IQUser { lastReadMessageId: number; lastReceivedMessageId: number; } export interface IQRoomAdapter { chatUser(userId: string, extras: any): Promise; getRoomList(showParticipant?: boolean, showRemoved?: boolean, showEmpty?: boolean, page?: number, limit?: number): Promise; getRoom(roomId: number): Promise; getChannel(uniqueId: string, name?: string, avatarUrl?: string, extras?: string): Promise; updateRoom(roomId: number, name?: string | null, avatarUrl?: string | null, extras?: string | null): Promise; getParticipantList(roomId: string, offset?: number | null, sorting?: 'asc' | 'desc' | null): Promise; createGroup(name: string, userIds: string[], avatarUrl?: string, extras?: string): Promise; removeParticipants(roomId: number, participantIds: string[]): Promise; addParticipants(roomId: number, participantIds: string[]): Promise; getRoomInfo(roomId?: number[], uniqueId?: string[], page?: number, showRemoved?: boolean, showParticipant?: boolean): Promise; clearRoom(roomUniqueIds: string[]): Promise; getUnreadCount(): Promise; readonly rooms: { [key: string]: IQRoom; }; readonly getRoomDataWithId: (roomId: number) => IQRoom; readonly getRoomDataWithUniqueId: (roomUniqueId: string) => IQRoom; } export type IQMessageT = { payload: object; extras: object; type: string; message: string; }; export declare enum IQMessageStatus { Sending = "sending", Sent = "sent", Delivered = "delivered", Read = "read", Failed = "failed" } export declare enum IQMessageType { Text = "text", Custom = "custom", Attachment = "file_attachment", Reply = "reply" } export interface IQMessage { id: number; uniqueId: string; roomId: number; userId: string; content: string; previousMessageId: number; extras: object; payload: object; timestamp: Date; type: IQMessageType; status: IQMessageStatus; updateFromJson(json: PostCommentResponse.Comment): IQMessage; } export interface IQMessageAdapter { readonly messages: { [key: string]: IQMessage; }; readonly getMessageDataWithId: (messageId: number) => IQMessage; sendMessage(roomId: number, message: IQMessageT): Promise; getMessages(roomId: number, lastMessageId?: number, limit?: number, after?: boolean): Promise; deleteMessage(messageUniqueIds: string[]): Promise; markAsRead(roomId: number, messageId: number): Promise; markAsDelivered(roomId: number, messageId: number): Promise; } export type UploadResult = { results: { file: { name: string; pages: number; size: number; url: string; }; }; status: number; }; export interface IAppConfig { baseUrl: string; brokerLbUrl: string; brokerUrl: string; enableEventReport: boolean; enableRealtime: boolean; enableRealtimeCheck: boolean; extras: Record; syncInterval: number; syncOnConnect: number; isSyncEnabled: boolean | undefined; isSyncEventEnabled: boolean | undefined; }