import { RequestApi } from '@/constant/api'; import OpenIMSDK from '.'; import type { AtMsgParams, CustomMsgParams, FaceMessageParams, FileMsgParams, FindMessageParams, GetAdvancedHistoryMsgParams, ImageMsgParams, InsertGroupMsgParams, InsertSingleMsgParams, LocationMsgParams, MergerMsgParams, OpreateMessageParams, QuoteMsgParams, SearchLocalParams, SendMsgParams, SetMessageLocalExParams, SoundMsgParams, TypingUpdateParams, VideoMsgParams, } from '@/types/params'; import type { AdvancedGetMessageResult, CardElem, MessageItem, SearchMessageResult, WsResponse, } from '@/types/entity'; export function setupMessage(openIMSDK: OpenIMSDK) { return { createTextMessage: openIMSDK.createRequestFunction( RequestApi.CreateTextMessage ), createTextAtMessage: openIMSDK.createRequestFunction< AtMsgParams, MessageItem >(RequestApi.CreateTextAtMessage, data => JSON.stringify([ data.text, JSON.stringify(data.atUserIDList), JSON.stringify(data.atUsersInfo), JSON.stringify(data.message) ?? '', ]) ), createImageMessageByURL: openIMSDK.createRequestFunction< ImageMsgParams, MessageItem >(RequestApi.CreateImageMessageByURL, data => JSON.stringify([ data.sourcePath, JSON.stringify(data.sourcePicture), JSON.stringify(data.bigPicture), JSON.stringify(data.snapshotPicture), ]) ), createSoundMessageByURL: openIMSDK.createRequestFunction< SoundMsgParams, MessageItem >(RequestApi.CreateSoundMessageByURL), createVideoMessageByURL: openIMSDK.createRequestFunction< VideoMsgParams, MessageItem >(RequestApi.CreateVideoMessageByURL), createFileMessageByURL: openIMSDK.createRequestFunction< FileMsgParams, MessageItem >(RequestApi.CreateFileMessageByURL), createMergerMessage: openIMSDK.createRequestFunction< MergerMsgParams, MessageItem >(RequestApi.CreateMergerMessage, data => JSON.stringify([ JSON.stringify(data.messageList), data.title, JSON.stringify(data.summaryList), ]) ), createForwardMessage: openIMSDK.createRequestFunction< MessageItem, MessageItem >(RequestApi.CreateForwardMessage), createLocationMessage: openIMSDK.createRequestFunction< LocationMsgParams, MessageItem >(RequestApi.CreateLocationMessage, data => JSON.stringify([data.description, data.longitude, data.latitude]) ), createQuoteMessage: openIMSDK.createRequestFunction< QuoteMsgParams, MessageItem >(RequestApi.CreateQuoteMessage, data => JSON.stringify([data.text, data.message]) ), createCardMessage: openIMSDK.createRequestFunction( RequestApi.CreateCardMessage ), createCustomMessage: openIMSDK.createRequestFunction< CustomMsgParams, MessageItem >(RequestApi.CreateCustomMessage, data => JSON.stringify([data.data, data.extension, data.description]) ), createFaceMessage: openIMSDK.createRequestFunction< FaceMessageParams, MessageItem >(RequestApi.CreateFaceMessage, data => JSON.stringify([data.index, data.data]) ), sendMessage: openIMSDK.createRequestFunction( RequestApi.SendMessageNotOss, data => { const offlinePushInfo = data.offlinePushInfo ?? { title: 'You has a new message.', desc: 'message', ex: '', iOSPushSound: '+1', iOSBadgeCount: true, }; return JSON.stringify([ JSON.stringify(data.message), data.recvID, data.groupID, JSON.stringify(offlinePushInfo), data.isOnlineOnly ?? false, ]); } ), sendMessageNotOss: openIMSDK.createRequestFunction< SendMsgParams, MessageItem >(RequestApi.SendMessageNotOss, data => { const offlinePushInfo = data.offlinePushInfo ?? { title: 'You has a new message.', desc: 'message', ex: '', iOSPushSound: '+1', iOSBadgeCount: true, }; return JSON.stringify([ JSON.stringify(data.message), data.recvID, data.groupID, JSON.stringify(offlinePushInfo), data.isOnlineOnly ?? false, ]); }), typingStatusUpdate: openIMSDK.createRequestFunction( RequestApi.TypingStatusUpdate, data => JSON.stringify([data.recvID, data.msgTip]) ), revokeMessage: openIMSDK.createRequestFunction( RequestApi.RevokeMessage, data => JSON.stringify([data.conversationID, data.clientMsgID]) ), deleteMessage: openIMSDK.createRequestFunction( RequestApi.DeleteMessage, data => JSON.stringify([data.conversationID, data.clientMsgID]) ), deleteMessageFromLocalStorage: openIMSDK.createRequestFunction( RequestApi.DeleteMessageFromLocalStorage, data => JSON.stringify([data.conversationID, data.clientMsgID]) ), deleteAllMsgFromLocal: openIMSDK.createRequestFunctionWithoutParams( RequestApi.DeleteAllMsgFromLocal ), deleteAllMsgFromLocalAndSvr: openIMSDK.createRequestFunctionWithoutParams( RequestApi.DeleteAllMsgFromLocalAndSvr ), searchLocalMessages: openIMSDK.createRequestFunction< SearchLocalParams, SearchMessageResult >(RequestApi.SearchLocalMessages), getAdvancedHistoryMessageList: openIMSDK.createRequestFunction< GetAdvancedHistoryMsgParams, AdvancedGetMessageResult >(RequestApi.GetAdvancedHistoryMessageList), getAdvancedHistoryMessageListReverse: openIMSDK.createRequestFunction< GetAdvancedHistoryMsgParams, AdvancedGetMessageResult >(RequestApi.GetAdvancedHistoryMessageListReverse), findMessageList: openIMSDK.createRequestFunction< FindMessageParams[], MessageItem[] >(RequestApi.FindMessageList), insertGroupMessageToLocalStorage: openIMSDK.createRequestFunction( RequestApi.InsertGroupMessageToLocalStorage, data => JSON.stringify([ JSON.stringify(data.message), data.groupID, data.sendID, ]) ), insertSingleMessageToLocalStorage: openIMSDK.createRequestFunction( RequestApi.InsertSingleMessageToLocalStorage, data => JSON.stringify([ JSON.stringify(data.message), data.recvID, data.sendID, ]) ), setMessageLocalEx: openIMSDK.createRequestFunction( RequestApi.SetMessageLocalEx, data => JSON.stringify([data.conversationID, data.clientMsgID, data.localEx]) ), }; } export interface MessageApi { createTextMessage: ( params: string, operationID?: string ) => Promise>; createTextAtMessage: ( params: AtMsgParams, operationID?: string ) => Promise>; createImageMessageByURL: ( params: ImageMsgParams, operationID?: string ) => Promise>; createSoundMessageByURL: ( params: SoundMsgParams, operationID?: string ) => Promise>; createVideoMessageByURL: ( params: VideoMsgParams, operationID?: string ) => Promise>; createFileMessageByURL: ( params: FileMsgParams, operationID?: string ) => Promise>; createMergerMessage: ( params: MergerMsgParams, operationID?: string ) => Promise>; createForwardMessage: ( params: MessageItem, operationID?: string ) => Promise>; createLocationMessage: ( params: LocationMsgParams, operationID?: string ) => Promise>; createQuoteMessage: ( params: QuoteMsgParams, operationID?: string ) => Promise>; createCardMessage: ( params: CardElem, operationID?: string ) => Promise>; createCustomMessage: ( params: CustomMsgParams, operationID?: string ) => Promise>; createFaceMessage: ( params: FaceMessageParams, operationID?: string ) => Promise>; sendMessage: ( params: SendMsgParams, operationID?: string ) => Promise>; sendMessageNotOss: ( params: SendMsgParams, operationID?: string ) => Promise>; typingStatusUpdate: ( params: TypingUpdateParams, operationID?: string ) => Promise>; revokeMessage: ( params: OpreateMessageParams, operationID?: string ) => Promise>; deleteMessage: ( params: OpreateMessageParams, operationID?: string ) => Promise>; deleteMessageFromLocalStorage: ( params: OpreateMessageParams, operationID?: string ) => Promise>; deleteAllMsgFromLocal: (operationID?: string) => Promise>; deleteAllMsgFromLocalAndSvr: ( operationID?: string ) => Promise>; searchLocalMessages: ( params: SearchLocalParams, operationID?: string ) => Promise>; getAdvancedHistoryMessageList: ( params: GetAdvancedHistoryMsgParams, operationID?: string ) => Promise>; getAdvancedHistoryMessageListReverse: ( params: GetAdvancedHistoryMsgParams, operationID?: string ) => Promise>; findMessageList: ( params: FindMessageParams[], operationID?: string ) => Promise>; insertGroupMessageToLocalStorage: ( params: InsertGroupMsgParams, operationID?: string ) => Promise>; insertSingleMessageToLocalStorage: ( params: InsertSingleMsgParams, operationID?: string ) => Promise>; setMessageLocalEx: ( params: SetMessageLocalExParams, operationID?: string ) => Promise>; }