jugglechat-websdk 1.7.11 → 1.7.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +102 -102
- package/index.js +4 -4
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -26,116 +26,116 @@ interface EVENT {
|
|
|
26
26
|
CHATROOM_DESTROYED: string;
|
|
27
27
|
CHATROOM_USER_QUIT: string;
|
|
28
28
|
CHATROOM_USER_KICKED: string;
|
|
29
|
-
}
|
|
29
|
+
}
|
|
30
30
|
interface CONNECT_STATE {
|
|
31
|
-
CONNECTED
|
|
32
|
-
CONNECTING
|
|
33
|
-
DISCONNECTED
|
|
34
|
-
CONNECT_FAILED
|
|
35
|
-
DB_OPENED
|
|
36
|
-
DB_CLOSED
|
|
37
|
-
RECONNECTING
|
|
31
|
+
CONNECTED: number;
|
|
32
|
+
CONNECTING: number;
|
|
33
|
+
DISCONNECTED: number;
|
|
34
|
+
CONNECT_FAILED: number;
|
|
35
|
+
DB_OPENED: number;
|
|
36
|
+
DB_CLOSED: number;
|
|
37
|
+
RECONNECTING: number;
|
|
38
38
|
}
|
|
39
39
|
interface CONVERATION_TYPE {
|
|
40
|
-
PRIVATE
|
|
41
|
-
GROUP
|
|
42
|
-
CHATROOM
|
|
43
|
-
SYSTEM
|
|
40
|
+
PRIVATE: number;
|
|
41
|
+
GROUP: number;
|
|
42
|
+
CHATROOM: number;
|
|
43
|
+
SYSTEM: number;
|
|
44
44
|
}
|
|
45
45
|
interface MESSAGE_ORDER {
|
|
46
|
-
FORWARD
|
|
47
|
-
BACKWARD
|
|
46
|
+
FORWARD: number;
|
|
47
|
+
BACKWARD: number;
|
|
48
48
|
}
|
|
49
49
|
interface CONVERSATION_ORDER {
|
|
50
|
-
BACKWARD
|
|
51
|
-
FORWARD
|
|
50
|
+
BACKWARD: number;
|
|
51
|
+
FORWARD: number;
|
|
52
52
|
}
|
|
53
53
|
interface MENTION_ORDER {
|
|
54
|
-
BACKWARD
|
|
55
|
-
FORWARD
|
|
54
|
+
BACKWARD: number;
|
|
55
|
+
FORWARD: number;
|
|
56
56
|
}
|
|
57
57
|
interface UPLOAD_TYPE {
|
|
58
|
-
NONE
|
|
59
|
-
QINIU
|
|
60
|
-
ALI
|
|
58
|
+
NONE: number;
|
|
59
|
+
QINIU: number;
|
|
60
|
+
ALI: number;
|
|
61
61
|
}
|
|
62
62
|
interface UNDISTURB_TYPE {
|
|
63
|
-
DISTURB
|
|
64
|
-
UNDISTURB
|
|
63
|
+
DISTURB: number;
|
|
64
|
+
UNDISTURB: number;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
interface MESSAGE_TYPE {
|
|
68
|
-
TEXT
|
|
69
|
-
IMAGE
|
|
70
|
-
VOICE
|
|
71
|
-
VIDEO
|
|
72
|
-
FILE
|
|
73
|
-
MERGE
|
|
74
|
-
RECALL
|
|
75
|
-
RECALL_INFO
|
|
76
|
-
READ_MSG
|
|
77
|
-
READ_GROUP_MSG
|
|
78
|
-
MODIFY
|
|
79
|
-
CLEAR_MSG
|
|
80
|
-
CLEAR_UNREAD
|
|
81
|
-
COMMAND_DELETE_MSGS
|
|
82
|
-
COMMAND_UNDISTURB
|
|
83
|
-
COMMAND_TOPCONVERS
|
|
84
|
-
COMMAND_REMOVE_CONVERS
|
|
85
|
-
COMMAND_ADD_CONVER
|
|
86
|
-
COMMAND_CLEAR_TOTALUNREAD
|
|
87
|
-
COMMAND_MARK_UNREAD
|
|
88
|
-
COMMAND_LOG_REPORT
|
|
89
|
-
COMMAND_MSG_EXSET
|
|
90
|
-
COMMAND_CONVERSATION_TAG_ADD
|
|
91
|
-
COMMAND_REMOVE_CONVERS_FROM_TAG
|
|
92
|
-
COMMAND_CONVERSATION_TAG_REMOVE
|
|
93
|
-
CLIENT_REMOVE_MSGS
|
|
94
|
-
CLIENT_REMOVE_CONVERS
|
|
95
|
-
CLIENT_RECALL_MSG
|
|
96
|
-
CLIENT_MARK_UNREAD
|
|
68
|
+
TEXT: string;
|
|
69
|
+
IMAGE: string;
|
|
70
|
+
VOICE: string;
|
|
71
|
+
VIDEO: string;
|
|
72
|
+
FILE: string;
|
|
73
|
+
MERGE: string;
|
|
74
|
+
RECALL: string;
|
|
75
|
+
RECALL_INFO: string;
|
|
76
|
+
READ_MSG: string;
|
|
77
|
+
READ_GROUP_MSG: string;
|
|
78
|
+
MODIFY: string;
|
|
79
|
+
CLEAR_MSG: string;
|
|
80
|
+
CLEAR_UNREAD: string;
|
|
81
|
+
COMMAND_DELETE_MSGS: string;
|
|
82
|
+
COMMAND_UNDISTURB: string;
|
|
83
|
+
COMMAND_TOPCONVERS: string;
|
|
84
|
+
COMMAND_REMOVE_CONVERS: string;
|
|
85
|
+
COMMAND_ADD_CONVER: string;
|
|
86
|
+
COMMAND_CLEAR_TOTALUNREAD: string;
|
|
87
|
+
COMMAND_MARK_UNREAD: string;
|
|
88
|
+
COMMAND_LOG_REPORT: string;
|
|
89
|
+
COMMAND_MSG_EXSET: string;
|
|
90
|
+
COMMAND_CONVERSATION_TAG_ADD: string;
|
|
91
|
+
COMMAND_REMOVE_CONVERS_FROM_TAG: string;
|
|
92
|
+
COMMAND_CONVERSATION_TAG_REMOVE: string;
|
|
93
|
+
CLIENT_REMOVE_MSGS: string;
|
|
94
|
+
CLIENT_REMOVE_CONVERS: string;
|
|
95
|
+
CLIENT_RECALL_MSG: string;
|
|
96
|
+
CLIENT_MARK_UNREAD: string;
|
|
97
97
|
}
|
|
98
98
|
interface MENTION_TYPE {
|
|
99
|
-
ALL
|
|
100
|
-
SOMEONE
|
|
101
|
-
ALL_SOMEONE
|
|
99
|
+
ALL: string;
|
|
100
|
+
SOMEONE: string;
|
|
101
|
+
ALL_SOMEONE: string;
|
|
102
102
|
}
|
|
103
103
|
interface FILE_TYPE {
|
|
104
|
-
IMAGE
|
|
105
|
-
AUDIO
|
|
106
|
-
VIDEO
|
|
107
|
-
FILE
|
|
104
|
+
IMAGE: number;
|
|
105
|
+
AUDIO: number;
|
|
106
|
+
VIDEO: number;
|
|
107
|
+
FILE: number;
|
|
108
108
|
}
|
|
109
109
|
interface MESSAGE_SENT_STATE {
|
|
110
|
-
NONE
|
|
111
|
-
SENDING
|
|
112
|
-
SUCCESS
|
|
113
|
-
FAILED
|
|
114
|
-
UPLOADING
|
|
110
|
+
NONE: number;
|
|
111
|
+
SENDING: number;
|
|
112
|
+
SUCCESS: number;
|
|
113
|
+
FAILED: number;
|
|
114
|
+
UPLOADING: number;
|
|
115
115
|
}
|
|
116
116
|
interface DISCONNECT_TYPE {
|
|
117
|
-
DISCONNECT
|
|
118
|
-
CLOSE
|
|
119
|
-
ERROR
|
|
120
|
-
SERVER
|
|
117
|
+
DISCONNECT: number;
|
|
118
|
+
CLOSE: number;
|
|
119
|
+
ERROR: number;
|
|
120
|
+
SERVER: number;
|
|
121
121
|
}
|
|
122
122
|
interface UNREAD_TAG {
|
|
123
|
-
READ
|
|
124
|
-
UNREAD
|
|
123
|
+
READ: number;
|
|
124
|
+
UNREAD: number;
|
|
125
125
|
}
|
|
126
126
|
interface SET_SEARCH_CONTENT_TYPE {
|
|
127
|
-
APPEND
|
|
128
|
-
REPLACE
|
|
127
|
+
APPEND: number;
|
|
128
|
+
REPLACE: number;
|
|
129
129
|
}
|
|
130
130
|
interface CONVERATION_TAG_TYPE {
|
|
131
|
-
USER
|
|
132
|
-
SYSNTEM
|
|
133
|
-
GLOBAL
|
|
131
|
+
USER: number;
|
|
132
|
+
SYSNTEM: number;
|
|
133
|
+
GLOBAL: number;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
interface Error {
|
|
137
|
-
code: number
|
|
138
|
-
msg: string
|
|
137
|
+
code: number;
|
|
138
|
+
msg: string;
|
|
139
139
|
}
|
|
140
140
|
declare class IMUser {
|
|
141
141
|
id?: string;
|
|
@@ -255,14 +255,14 @@ interface GetConversationOptions {
|
|
|
255
255
|
count?: number;
|
|
256
256
|
time?: number;
|
|
257
257
|
}
|
|
258
|
-
interface TotalUnreadResult{
|
|
258
|
+
interface TotalUnreadResult {
|
|
259
259
|
total: number;
|
|
260
260
|
}
|
|
261
|
-
interface GetTotalOptions{
|
|
261
|
+
interface GetTotalOptions {
|
|
262
262
|
conversationTypes?: CONVERATION_TYPE[];
|
|
263
263
|
ignoreConversations?: Conversation[];
|
|
264
264
|
}
|
|
265
|
-
declare class TimeZone{
|
|
265
|
+
declare class TimeZone {
|
|
266
266
|
start: string;
|
|
267
267
|
end: string;
|
|
268
268
|
}
|
|
@@ -276,51 +276,51 @@ declare class TagInfo {
|
|
|
276
276
|
name?: string;
|
|
277
277
|
conversations?: Conversation[]
|
|
278
278
|
}
|
|
279
|
-
interface SendMsgCbData { message: Message, percent?: number, count?: number, total?: number
|
|
280
|
-
interface SendMsgCbCompleteData {
|
|
281
|
-
messages: Message[]
|
|
279
|
+
interface SendMsgCbData { message: Message, percent?: number, count?: number, total?: number }
|
|
280
|
+
interface SendMsgCbCompleteData {
|
|
281
|
+
messages: Message[]
|
|
282
282
|
}
|
|
283
|
-
interface SendMsgCallbacks{
|
|
283
|
+
interface SendMsgCallbacks {
|
|
284
284
|
onbefore?(message: Message): void;
|
|
285
285
|
onerror?(error: Error): void;
|
|
286
|
-
onprogress?(data: SendMsgCbData):void;
|
|
286
|
+
onprogress?(data: SendMsgCbData): void;
|
|
287
287
|
oncompleted?(data: SendMsgCbCompleteData): void;
|
|
288
288
|
}
|
|
289
|
-
interface GetMsgByIdOptions{
|
|
289
|
+
interface GetMsgByIdOptions {
|
|
290
290
|
conversationType: CONVERATION_TYPE,
|
|
291
291
|
conversationId: string;
|
|
292
292
|
messageIds: string[];
|
|
293
293
|
}
|
|
294
|
-
interface ClearMsgsOptions{
|
|
294
|
+
interface ClearMsgsOptions {
|
|
295
295
|
conversationType: CONVERATION_TYPE,
|
|
296
296
|
conversationId: string;
|
|
297
297
|
time: number;
|
|
298
298
|
}
|
|
299
|
-
interface ReadMember{
|
|
299
|
+
interface ReadMember {
|
|
300
300
|
readTime: number;
|
|
301
301
|
member: IMUser;
|
|
302
302
|
}
|
|
303
|
-
interface GetGroupMessageDetailResult{
|
|
303
|
+
interface GetGroupMessageDetailResult {
|
|
304
304
|
readCount: number;
|
|
305
305
|
unreadCount: number;
|
|
306
306
|
unreadMembers: ReadMember[];
|
|
307
307
|
readMembers: ReadMember[];
|
|
308
308
|
}
|
|
309
|
-
interface GetMentionOptions{
|
|
309
|
+
interface GetMentionOptions {
|
|
310
310
|
conversationType: CONVERATION_TYPE,
|
|
311
311
|
conversationId: string;
|
|
312
312
|
messageIndex: number;
|
|
313
313
|
count?: number;
|
|
314
314
|
order?: number;
|
|
315
315
|
}
|
|
316
|
-
interface SendMergeOptions{
|
|
316
|
+
interface SendMergeOptions {
|
|
317
317
|
conversationType: CONVERATION_TYPE,
|
|
318
318
|
conversationId: string;
|
|
319
319
|
messageIdList: string[];
|
|
320
|
-
previewList:
|
|
320
|
+
previewList: any;
|
|
321
321
|
title: string;
|
|
322
322
|
}
|
|
323
|
-
interface SearchOptions{
|
|
323
|
+
interface SearchOptions {
|
|
324
324
|
conversationType?: CONVERATION_TYPE,
|
|
325
325
|
conversationId?: string;
|
|
326
326
|
keywords: string[];
|
|
@@ -331,7 +331,7 @@ interface SearchOptions{
|
|
|
331
331
|
page?: number;
|
|
332
332
|
pageSize?: number;
|
|
333
333
|
}
|
|
334
|
-
interface SearchMatchMsg{
|
|
334
|
+
interface SearchMatchMsg {
|
|
335
335
|
conversationType: CONVERATION_TYPE;
|
|
336
336
|
conversationId: string;
|
|
337
337
|
conversationExts: string;
|
|
@@ -340,18 +340,18 @@ interface SearchMatchMsg{
|
|
|
340
340
|
matchedCount: number;
|
|
341
341
|
matchedList: Message[];
|
|
342
342
|
}
|
|
343
|
-
interface SearchResult{
|
|
343
|
+
interface SearchResult {
|
|
344
344
|
isFinished: boolean;
|
|
345
345
|
total: number;
|
|
346
346
|
list: SearchMatchMsg[];
|
|
347
347
|
}
|
|
348
|
-
interface ReactionOptions{
|
|
348
|
+
interface ReactionOptions {
|
|
349
349
|
conversationType: CONVERATION_TYPE;
|
|
350
350
|
conversationId: string;
|
|
351
351
|
messageId: string;
|
|
352
352
|
reactionId: string;
|
|
353
353
|
}
|
|
354
|
-
interface CustomMsgOption{
|
|
354
|
+
interface CustomMsgOption {
|
|
355
355
|
name: string;
|
|
356
356
|
isCount?: boolean;
|
|
357
357
|
isStorage?: boolean;
|
|
@@ -359,7 +359,7 @@ interface CustomMsgOption{
|
|
|
359
359
|
}
|
|
360
360
|
|
|
361
361
|
declare class IMProvider {
|
|
362
|
-
connect: (user: IMUser) => Promise
|
|
362
|
+
connect: (user: IMUser) => Promise<any>;
|
|
363
363
|
disconnect: () => Promise<any>;
|
|
364
364
|
getDevice: () => Promise<any>;
|
|
365
365
|
isConnected: () => boolean;
|
|
@@ -394,7 +394,7 @@ declare class IMProvider {
|
|
|
394
394
|
sendMessage: (message: Message, callbacks?: SendMsgCallbacks) => Promise<Message>;
|
|
395
395
|
sendMassMessage: (messages: Message[], callbacks?: SendMsgCallbacks) => Promise<any>;
|
|
396
396
|
getMessages: (conversation: Conversation) => Promise<{ isFinished: boolean, messages: Message[] }>;
|
|
397
|
-
removeMessages: (messages:
|
|
397
|
+
removeMessages: (messages: Message[]) => Promise<any>;
|
|
398
398
|
getMessagesByIds: (options: GetMsgByIdOptions) => Promise<{ messages: Message[] }>;
|
|
399
399
|
clearMessage: (options: ClearMsgsOptions) => Promise<any>;
|
|
400
400
|
recallMessage: (message: Message) => Promise<any>;
|
|
@@ -417,7 +417,7 @@ declare class IMProvider {
|
|
|
417
417
|
addMessageReaction: (message: ReactionOptions) => Promise<any>;
|
|
418
418
|
removeMessageReaction: (message: ReactionOptions) => Promise<any>;
|
|
419
419
|
registerMessage: (names: CustomMsgOption[]) => any;
|
|
420
|
-
isDesktop:
|
|
420
|
+
isDesktop: () => boolean;
|
|
421
421
|
on: (name: string, event: any) => any;
|
|
422
422
|
off: (name: string) => any;
|
|
423
423
|
clear: () => any;
|
|
@@ -443,7 +443,7 @@ declare class IMProvider {
|
|
|
443
443
|
|
|
444
444
|
interface InitOptions {
|
|
445
445
|
appkey: string;
|
|
446
|
-
navList?:
|
|
446
|
+
navList?: string[];
|
|
447
447
|
isSync?: boolean;
|
|
448
448
|
upload?: Object;
|
|
449
449
|
}
|
|
@@ -469,4 +469,4 @@ declare namespace IMCore {
|
|
|
469
469
|
export let IMProvider: IMProvider;
|
|
470
470
|
}
|
|
471
471
|
|
|
472
|
-
export default
|
|
472
|
+
export default IMCore;
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* JuggleIM.js v1.7.
|
|
2
|
+
* JuggleIM.js v1.7.13
|
|
3
3
|
* (c) 2022-2024 JuggleIM
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/const noop=()=>{},isObject=e=>"[object Object]"===Object.prototype.toString.call(e),isArray=e=>"[object Array]"===Object.prototype.toString.call(e),isFunction=e=>"[object Function]"===Object.prototype.toString.call(e),isString=e=>"[object String]"===Object.prototype.toString.call(e),isBoolean=e=>"[object Boolean]"===Object.prototype.toString.call(e),isUndefined=e=>"[object Undefined]"===Object.prototype.toString.call(e),isNull=e=>"[object Null]"===Object.prototype.toString.call(e),isNumber=e=>"[object Number]"===Object.prototype.toString.call(e),stringify=e=>JSON.stringify(e),parse=t=>{let n={};try{n=JSON.parse(t)}catch(s){n=t}return n},forEach=(e,t)=>{t=t||noop;isObject(e)&&(()=>{for(var n in e)t(e[n],n,e)})(),isArray(e)&&(()=>{for(var n=0,s=e.length;n<s;n++)t(e[n],n,e)})()},isEmpty=e=>{let t=!0;return isObject(e)&&forEach(e,()=>{t=!1}),(isString(e)||isArray(e))&&(t=0===e.length),isNumber(e)&&(t=-1===e),t},rename=(e,t)=>{var n=isObject(e);n&&(e=[e]),e=parse(stringify(e));var s=function(e,n,s){delete s[n],n=t[n],s[n]=e};return forEach(e,e=>{forEach(e,(e,n,o)=>{var i=(n in t);(i?s:noop)(e,n,o)})}),isObject?e[0]:e},extend=(e,t)=>(t=isArray(t)?t:[t],forEach(t,t=>{for(let n in t){let s=t[n];isUndefined(s)||(e[n]=s)}}),e),Defer=Promise,deferred=e=>new Defer(e),templateFormat=(e,t,n)=>{isArray(t)||(t=[t]);let s=[],o=t=>e.replace(n||/\\?\{([^}]+)\}/g,(e,n)=>"\\"===e.charAt(0)?e.slice(1):void 0===t[n]?"{"+n+"}":t[n]);for(let r=0,i=t.length;r<i;r++)s.push(o(t[r]));return s.join("")},isContain=(e,t)=>-1<e.indexOf(t),isEqual=(e,t)=>e===t,Cache$1=e=>{isObject(e)||(e={});let t=(t,n)=>{e[t]=n},n=t=>e[t],s=t=>{delete e[t]},o=()=>{let t=[];for(let n in e)t.push(n);return t},i=()=>{e={}};return{set:t,get:n,remove:s,getKeys:o,clear:i}},request=(e,t)=>deferred((n,s)=>{requestNormal(e,t,{success:n,fail:s})}),requestNormal=(e,t,n)=>{t=t||{},n=n||{success:noop,fail:noop,progress:noop};let s=new XMLHttpRequest,o=t.method||"GET";s.open(o,e,!0);let i=t.headers||{};forEach(i,(e,t)=>{s.setRequestHeader(t,e)});let r=t.body||{},a=()=>/^(200|202)$/.test(s.status),d=t.timeout;return d&&(s.timeout=d),s.onreadystatechange=function(){if(isEqual(s.readyState,4)){let{responseText:e}=s;e=e||"{}";let t=parse(e);if(a())n.success(t,s);else{let{status:e}=s,o={status:e,result:t};n.fail(o)}}},s.upload.onprogress=function(e){e.lengthComputable&&n.progress(e)},s.onerror=e=>{n.fail(e)},s.send(r),s},map=(e,t)=>e.map(t),filter=(e,t)=>e.filter(t),uniq=(e,t)=>{let n=[],s={};return e.forEach(e=>{let n=t(e);s[n.key]=n.value}),forEach(s,e=>{n.push(e)}),n},some=(e,t)=>e.some(t),toJSON=e=>JSON.stringify(e),toArray=e=>{let t=[];return forEach(e,(e,n)=>{t.push([n,e])}),t},isInclude=(e,t)=>-1<e.indexOf(t),clone$1=e=>JSON.parse(JSON.stringify(e));// 暂时支持 String
|
|
@@ -59,7 +59,7 @@ let props = [
|
|
|
59
59
|
function initSyncTime(e){let{appkey:t,userId:n,times:s}=e;Storage.setPrefix(`${t}_${n}`),utils.forEach(s,(e,t)=>{if(utils.isInclude([STORAGE.SYNC_RECEIVED_MSG_TIME,STORAGE.SYNC_SENT_MSG_TIME,STORAGE.SYNC_CONVERSATION_TIME],t)){let n=Storage.get(t),s=n.time||0;e>s&&Storage.set(t,{time:e})}})}function getError(e){let t=ErrorMessages.find(t=>t.code==e)||{code:e,msg:""},{msg:n}=t;return{code:e,msg:n}}// 内置消息类型和动态注入的自定消息类型
|
|
60
60
|
let _MSG_FLAG_NAMES=[{name:MESSAGE_TYPE.TEXT,isCount:!0,isStorage:!0},{name:MESSAGE_TYPE.FILE,isCount:!0,isStorage:!0},{name:MESSAGE_TYPE.IMAGE,isCount:!0,isStorage:!0},{name:MESSAGE_TYPE.VOICE,isCount:!0,isStorage:!0},{name:MESSAGE_TYPE.VIDEO,isCount:!0,isStorage:!0},{name:MESSAGE_TYPE.MERGE,isCount:!0,isStorage:!0,isMerge:!0},{name:MESSAGE_TYPE.RECALL,isCommand:!0},{name:MESSAGE_TYPE.RECALL_INFO,isCommand:!0},{name:MESSAGE_TYPE.READ_MSG,isCommand:!0},{name:MESSAGE_TYPE.READ_GROUP_MSG,isCommand:!0},{name:MESSAGE_TYPE.MODIFY,isCommand:!0},{name:MESSAGE_TYPE.CLEAR_MSG,isCommand:!0},{name:MESSAGE_TYPE.CLEAR_UNREAD,isCommand:!0,isCount:!1,isStorage:!1}],formatter={toFlag:({isCommand:e,isCount:t,isStorage:n,isMerge:s,isMass:o})=>{let i=0;return e&&(i|=1),t&&(i|=2),n&&(i|=8),s&&(i|=32),o&&(i|=128),i},toMsg:e=>{let t={1:{name:"isCommand"},2:{name:"isCount"},3:{name:"isStatus"},4:{name:"isStorage"},5:{name:"isUpdated"},6:{name:"isMerge"},7:{name:"isMute"},8:{name:"isMass"}},n={};for(let s in t){// 创建一个只有第 N 位为 1 其他都为 0 的掩码
|
|
61
61
|
let o=Math.pow(2,s-1),i=t[s].name;n[i]=0!==(e&o)}return n}},registerMessage=e=>{e=utils.isArray(e)?e:[e],utils.forEach(e,e=>{_MSG_FLAG_NAMES.push(e)})},getMsgFlag=(e,t={})=>{let n=utils.filter(_MSG_FLAG_NAMES,t=>utils.isEqual(t.name,e))[0]||{},s={...n,...t},o=formatter.toFlag(s);return o};function ConversationUtils(){let e=[],t=!1,n=t=>{let n=utils.find(e,({conversationType:e,conversationId:n})=>utils.isEqual(t.conversationType,e)&&utils.isEqual(t.conversationId,n));return-1<n},s=t=>{t=utils.isArray(t)?t:[t],utils.forEach(t,t=>{let n=utils.find(e,({conversationType:e,conversationId:n})=>utils.isEqual(t.conversationType,e)&&utils.isEqual(t.conversationId,n)),s=t,{latestMessage:o,updatedTime:i,conversationExts:r,mentions:a,undisturbType:d}=t,p=o.tags,c=o.name,m=formatter.toMsg(o.flags)||{},l=o.isSender,E=utils.isBoolean(l)&&l;if(!utils.isEqual(n,-1)){s=e.splice(n,1)[0];let{conversationTitle:p,conversationPortrait:c}=o;p=p||t.conversationTitle,c=c||t.conversationPortrait,utils.isEmpty(p)&&(p=s.conversationTitle),utils.isEmpty(c)&&(c=s.conversationPortrait),utils.isEmpty(r)&&(r=s.conversationExts),utils.isEqual(o.name,MESSAGE_TYPE.CLEAR_MSG)&&o.isSender&&(o={}),s=utils.extend(s,{latestMessage:o,conversationTitle:p,conversationPortrait:c,conversationExts:r,mentions:a,updatedTime:i,undisturbType:d})}let{unreadCount:u=0,latestReadIndex:g=0,latestUnreadIndex:y=0}=s;// 自己发送的多端同步清空消息,未读数设置为 0,最后一条消息保持不变
|
|
62
|
-
utils.isEqual(c,MESSAGE_TYPE.CLEAR_UNREAD)&&o.isSender&&(u=0,o=s.latestMessage),(0>u||utils.isNull(u))&&(u=0),!E&&m.isCount&&(y=o.unreadIndex||
|
|
62
|
+
utils.isEqual(c,MESSAGE_TYPE.CLEAR_UNREAD)&&o.isSender&&(u=0,o=s.latestMessage),(0>u||utils.isNull(u))&&(u=0),!E&&m.isCount&&(y=o.unreadIndex||y,u=y-g);let T=getDraftKey(s),_=Storage.get(T);_=utils.isEmpty(_)?"":_,utils.extend(s,{draft:_}),utils.isEmpty(p)||utils.extend(s,{tags:p});let C=o.sentTime||s.sortTime;// 如果是自己发发送的群发消息不更新会话列表, 自己本地发送的消息通过 isMass 区分,接收或同步消息通过消息位计算
|
|
63
63
|
o.isMass&&E&&(C=s.sortTime),s=utils.extend(s,{sortTime:C,unreadCount:u,latestUnreadIndex:y,latestReadIndex:g}),e.push(s)}),e=utils.quickSort(e,(e,t)=>e.sortTime>t.sortTime);let n=1e3;e.length>1000&&(e.length=1000)},o=()=>{t=!0},i=e=>{s(e)},r=t=>{let n=t,s=utils.find(e,({conversationType:e,conversationId:n,latestMessage:s={}})=>{let o=!0;// 删除会话指令中包含 time,用来判断是否是过期的删除指令
|
|
64
64
|
return 0<t.time&&(o=t.time>=s.sentTime),o&&utils.isEqual(t.conversationType,e)&&utils.isEqual(t.conversationId,n)});if(!utils.isEqual(s,-1)){let t=e.splice(s,1);n=t[0]}return n},a=()=>{t=!1,e.length=0},d=t=>{let n=utils.find(e,({conversationType:e,conversationId:n})=>utils.isEqual(t.conversationType,e)&&utils.isEqual(t.conversationId,n));return utils.isEqual(n,-1)||utils.extend(e[n],t),e[n]||{}},p=(e,t={})=>{let n=[];return e=utils.isArray(e)?e:[e],utils.forEach(e,e=>{let s=m(e);if(!utils.isEmpty(s)){utils.extend(s,t),utils.isEmpty(t)&&utils.extend(s,e);let o=d(s);n.push(o)}else n.push(e)}),n},c=()=>e,m=t=>{let n=utils.find(e,({conversationType:e,conversationId:n})=>utils.isEqual(t.conversationType,e)&&utils.isEqual(t.conversationId,n));return e[n]||{}},l=()=>t,E=t=>{t=utils.isArray(t)?t:[t];let n=[];return utils.forEach(t,t=>{let s=utils.find(e,({conversationType:e,conversationId:n})=>utils.isEqual(t.conversationType,e)&&utils.isEqual(t.conversationId,n));-1<s&&(e[s].latestReadIndex=t.unreadIndex,e[s].unreadCount=0,e[s].mentions={},e[s].unreadTag=UNREAD_TAG.READ,n.push(e[s]))}),n};return{remove:r,update:s,clear:a,get:c,isSync:l,add:i,relpace:d,setSynced:o,modify:p,getPer:m,read:E,isExisted:n}}// 特性检查
|
|
65
65
|
function checkUploadType(e){e=e||{};let t=UPLOAD_TYPE.NONE;return e.QiniuError&&(t=UPLOAD_TYPE.QINIU),e.urllib&&(t=UPLOAD_TYPE.ALI),t}function formatMediaMessage(e,t){let{name:n,content:s}=e;if(utils.isEqual(n,MESSAGE_TYPE.FILE)){let{file:n}=s,o=n.size/1e3;utils.extend(e.content,{size:o,url:t})}if(utils.isEqual(n,MESSAGE_TYPE.IMAGE)){let{height:n,width:o}=s,i="h";o>n&&(i="w");let r=`${t}&imageView2/2/${i}/100`;utils.extend(e.content,{url:t,thumbnail:r})}return utils.isInclude([MESSAGE_TYPE.VIDEO,MESSAGE_TYPE.VOICE],n)&&utils.extend(e.content,{url:t}),e}function uploadThumbnail(e,t,n){let{type:s,token:o,domain:i,file:r,url:a}=t,d=Uploder(e,{type:s});d.compress(r,(e,t)=>{let s={file:e},r={token:o,domain:i,url:a},p={onprogress:utils.noop,oncompleted:({url:e})=>{let s=null;n(s,e,t)},onerror:e=>{n(e)}};d.exec(s,r,p)},t)}function uploadFrame(e,t,n){let{type:s,token:o,domain:i,file:r,url:a}=t,d=Uploder(e,{type:s});d.capture(r,(e,t)=>{let s={file:e},r={token:o,domain:i,url:a},p={onprogress:utils.noop,oncompleted:({url:e})=>{let s=null;n(s,e,t)},onerror:e=>{n(e)}};d.exec(s,r,p)},t)}function getDraftKey(e){return`draft_${e.conversationType}_${e.conversationId}`}function formatUser(e){let t=utils.toObject(e.extFields);return{id:e.userId,name:e.nickname||"",portrait:e.userPortrait||"",updatedTime:e.updatedTime||0,exts:t||{}}}function toKVs(e){let t=[];return utils.forEach(e,(e,n)=>{t.push({key:n,value:e})}),t}function formatProvider(e,t){let n={};return utils.forEach(e,e=>{n[e]=function(){let n=[];for(let e=0;e<arguments.length;e++){let t=arguments[e],s={};s=utils.isArray(t)?t:clone(t),n.push(s)}let s=t[e];return s?s(...n):Promise.reject(ErrorType.SDK_FUNC_NOT_DEFINED)}}),n}function clone(e){let t=e=>{let n={};return utils.forEach(e,(e,s)=>{n[s]=utils.isObject(e)?t(e):utils.isArray(e)?utils.clone(e):e}),n},n=t(e);return n}function isDesktop(){return"undefined"!=typeof JGChatPCClient}function getSessionId(){return"s-xxxxxxxxxx".replace(/[xy]/g,function(e){let t=0|16*Math.random(),n="x"==e?t:8|3&t;return n.toString(16)})}function getTokenKey(e,t){return`${e}_${t}`}function genUId(){return"xxxxxxxxxxxx".replace(/[xy]/g,function(e){let t=0|16*Math.random(),n="x"==e?t:8|3&t;return n.toString(16)})}function getClientSession(){let e=sessionStorage.getItem(STORAGE.CLIENT_SESSION);return e||(e=genUId(),sessionStorage.setItem(STORAGE.CLIENT_SESSION,e)),e}function encrypto(e,t){let n=[];return e.forEach((e,s)=>{let o=s%8,i=e^t[o];n.push(i)}),new Uint8Array(n)}function decrypto(e,t){let n=[];return e.forEach((e,s)=>{let o=s%8,i=e^t[o];n.push(i)}),new Uint8Array(n)}function reportLogs({logger:e,params:t}){return e.report({...t})}var common={check,getNum,getTokenKey,getNaviStorageKey,initSyncTime,updateSyncTime,getError,ConversationUtils,checkUploadType,formatMediaMessage,uploadThumbnail,uploadFrame,getDraftKey,formatUser,toKVs,registerMessage,getMsgFlag,formatter,formatProvider,isDesktop,getSessionId,getClientSession,encrypto,decrypto,reportLogs};function getConnectBody({data:e}){let{appkey:t,token:n,deviceId:s,platform:o,clientSession:i,sdkVersion:r}=e,a="jug9le1m",d=$root.lookup("codec.ConnectMsgBody"),p=d.create({appkey:t,token:n,platform:o,deviceId:s,clientSession:i,protoId:a,sdkVersion:r}),c=d.encode(p).finish();return{buffer:c}}function getPublishBody({data:e,callback:t,index:n}){let{conversationId:s,conversationType:o,topic:i}=e,r=[];if(utils.isInclude([COMMAND_TOPICS.SEND_GROUP,COMMAND_TOPICS.SEND_PRIVATE,COMMAND_TOPICS.SEND_CHATROOM],i)){let{name:t,content:n,mentionInfo:s,flag:o,mergeMsg:i,referMsg:a,push:d}=e;n=utils.toJSON(n);let p=$root.lookup("codec.UpMsg"),c={};if(s){let{members:t=[],mentionType:e}=s;t=utils.map(t,e=>({userId:e.id})),utils.extend(c,{mentionType:e,targetUsers:t})}if(!utils.isEmpty(a)){let{messageIndex:e,sentTime:t,messageId:n,sender:s={exts:{}}}=a,o=utils.toJSON(a.content);// let referTarget = {
|
|
@@ -76,7 +76,7 @@ if(utils.isUndefined(R.name)){let e=UserCacher.get(A);R=utils.isEmpty(e)?{id:A}:
|
|
|
76
76
|
utils.isEmpty(m)||Storage.setPrefix(`${d}_${m}`);let l=common.getNaviStorageKey(d,m),E=Storage.get(l);return utils.isEmpty(E)?void utils.forEach(e,t=>{let m=t.replaceAll(/http:\/\/|https:\/\/|file:\/\//g,""),{http:E}=utils.getProtocol(t);m=`${E}//${m}/navigator/general`;let u={headers:{"x-appkey":d,"x-token":p}},g=utils.requestNormal(m,u,{success:function(e,t){if(!r){let{responseURL:i}=t,a=i.replace(/(\/navigator\/general)/g,"");r=!0;let{code:p,data:m={}}=e,{servers:E,user_id:u}=m,g={servers:E,userId:u,code:p,url:a};// 默认规则:导航和 CMP 的协议必须一致
|
|
77
77
|
utils.isEmpty(E)||(Storage.set(c,u),Storage.setPrefix(`${d}_${u}`),l=common.getNaviStorageKey(),Storage.set(l,g),o.info({tag:LOG_MODULE.NAV_REQEST,remote:g})),n(g),s()}},fail:function(t){a.push(t),utils.isEqual(a.length,e.length)&&n(t.result)}});i.push(g)}):(o.info({tag:LOG_MODULE.NAV_REQEST,local:E}),n(E))};var Network={detect,getNavis};function Consumer(){let e=[],t=!1,n=!1,s=(t,n)=>n?e.unshift(t):void e.push(t),o=s=>{// 如果正在执行,终止本次任务,执行任务结束后自动消费队列 ntf, 1 是首次,所以判断大于 1
|
|
78
78
|
if(n)return;n=!0,t=utils.isEqual(e.length,0);let i=e.shift(),r={item:i},a=()=>{n=!1,o(s)};t?n=!1:s(r,a)};return{consume:o,produce:s}}function MessageSyncer(e,t,n,{logger:s}){let o=Consumer(),i=i=>{function r(s,o){let{msg:i}=s,r=common.updateSyncTime({...i,io:n});if(r){let{msgIndex:n,ackIndex:s}=i,o={msgIndex:n,ackIndex:s};e(SIGNAL_CMD.PUBLISH_ACK,o),t.emit(SIGNAL_NAME.CMD_RECEIVED,i)}o()}function a(i,r){let{user:a,msg:d,name:p,$message:c}=i,m=Storage.get(STORAGE.SYNC_RECEIVED_MSG_TIME).time||1700927161470,l=Storage.get(STORAGE.SYNC_SENT_MSG_TIME).time||1700927161470;// 如果本地记录时间戳大于 ntf 中的接收时间,认为消息已被当前端接收过,不再执行拉取动作
|
|
79
|
-
if(m>=d.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncReceiveTime:m,msg:d}),r();let E={userId:a.id,syncTime:m,containsSendBox:!0,sendBoxSyncTime:l,topic:COMMAND_TOPICS.SYNC_MESSAGES};e(SIGNAL_CMD.QUERY,E,({isFinished:e,messages:a,code:p})=>{if(s.info({tag:LOG_MODULE.MSG_SYNC,data:E,msg:d,code:p,count:a.length}),!utils.isEqual(p,ErrorType.COMMAND_SUCCESS.code))return r();let m=[];utils.forEach(a,(e,t)=>{let{flags:n,sentTime:s,isSender:o}=e,i=common.formatter.toMsg(n);i.isStorage&&m.push(e)}),c.insertBatchMsgs({msgs:utils.clone(m)}).then(()=>{utils.forEach(a,(s,o)=>{let{sentTime:i,isSender:r}=s,d=common.updateSyncTime({sentTime:i,isSender:r,io:n});if(d){let n=e&&utils.isEqual(a.length-1,o);t.emit(SIGNAL_NAME.CMD_RECEIVED,[s,n])}});let s=!e;s&&o.produce(i,s),r()})})}function d(n,i){let{user:r,name:a,time:d,$conversation:p}=n,c=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;if(c>d)return s.info({tag:LOG_MODULE.CONV_SYNC,syncTime:c,time:d}),i();let m={userId:r.id,syncTime:c,topic:COMMAND_TOPICS.SYNC_CONVERSATIONS,count:200};e(SIGNAL_CMD.QUERY,m,e=>{let{isFinished:r,conversations:a,code:d}=e;if(s.info({tag:LOG_MODULE.CONV_SYNC,data:m,code:d,count:a.length}),!utils.isEqual(d,ErrorType.COMMAND_SUCCESS.code))return t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i();let l=a.length,E=a[l-1]||{syncTime:0},{syncTime:u}=E;u>c&&(Storage.set(STORAGE.SYNC_CONVERSATION_TIME,{time:u}),n=utils.extend(n,{time:u})),a=utils.clone(a),p._batchInsertConversations({conversations:a,syncTime:u}).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATIONS_PROGRESS,e);let s=!r;s?o.produce(n,s):t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i()})})}o.produce(i),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.CMD_RECEIVED)&&r(e,t),utils.isEqual(n,SIGNAL_NAME.S_SYNC_CONVERSATION_NTF)&&d(e,t),utils.isEqual(n,SIGNAL_NAME.S_NTF)&&a(e,t)})};return{exec:i}}let chatroomCacher=Cache();var chatroomCacher$1={set:(e,t)=>{let n=chatroomCacher.get(e),{msgs:s=[]}=t;200<=s.length&&(s.shift(0),t=utils.extend(t,{msgs:s})),n=utils.extend(n,t),chatroomCacher.set(e,n)},get:e=>{let t=chatroomCacher.get(e);return t},remove:e=>{chatroomCacher.remove(e)},getAll:()=>chatroomCacher.getAll()};function ChatroomSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){s.info({tag:LOG_MODULE.MSG_SYNC,...e});let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM)&&i&&a(e,t),utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_DESTORY)&&i&&r(e,t)}function r(e,n){let{msg:s}=e,o=s.targetId;t.emit(SIGNAL_NAME.CMD_CHATROOM_DESTROY,{id:o}),n()}function a(n,o){let{msg:i}=n,r=i.targetId,a=d(r);if(a>=i.receiveTime&&0<i.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),o();let c={syncTime:a,chatroomId:r,topic:COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES};e(SIGNAL_CMD.QUERY,c,({messages:e,code:n})=>{if(s.info({tag:LOG_MODULE.MSG_SYNC,data:c,msg:i,code:n,count:e.length}),!utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code))return o();let{msgs:a=[]}=chatroomCacher$1.get(r);utils.forEach(e,e=>{p(e.conversationId,e.sentTime);let{messageId:n}=e,s=utils.isInclude(a,n);s||(a.push(n),t.emit(SIGNAL_NAME.CMD_RECEIVED,[e]))}),chatroomCacher$1.set(r,{msgs:a}),o()})}function d(e){let t=chatroomCacher$1.get(e);return t.syncMsgTime||0}function p(e,t){let n=d(e);t>n&&chatroomCacher$1.set(e,{syncMsgTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function ChatroomAttSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){s.info({tag:LOG_MODULE.MSG_SYNC,...e});let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_ATTR)&&i&&r(e,t)}function r(n,o){let{msg:i}=n,r=i.targetId,p=a(r);if(p>=i.receiveTime&&0<i.receiveTime)return o();let c={syncTime:p,chatroomId:r,targetId:r,topic:COMMAND_TOPICS.SYNC_CHATROOM_ATTRS};e(SIGNAL_CMD.QUERY,c,e=>{let{code:n,attrs:r,chatroomId:a}=e;return s.info({tag:LOG_MODULE.MSG_SYNC,data:c,msg:i,code:n,count:r.length}),utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code)?void(utils.forEach(r,e=>{d(a,e.updateTime)}),t.emit(SIGNAL_NAME.CMD_CHATROOM_ATTR_RECEIVED,{attrs:r,chatroomId:a}),o()):o()})}function a(e){let t=chatroomCacher$1.get(e);return t.syncAttTime||0}function d(e,t){let n=a(e);t>n&&chatroomCacher$1.set(e,{syncAttTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function TagSyncer(e,t,n,{logger:s}){let o=({$conversation:e})=>{let{id:s}=n.getCurrentUser(),o={topic:COMMAND_TOPICS.CONVERSATION_TAG_QUERY,userId:s};n.sendCommand(SIGNAL_CMD.QUERY,o,n=>{let{code:s,tags:o}=n;utils.isEqual(ErrorType.COMMAND_SUCCESS.code,s)&&(utils.map(o,e=>{let t=CONVERSATION_TAG[e.id]||{};return utils.extend(e,t),e}),e._batchInsertTags(o).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_TAG_FINISHED,e)}))})};return{exec:o}}function Timer(e={}){let t={timeout:60000};utils.extend(t,e);let{timeout:n}=t,s=0,o=utils.noop,i=e=>{o=e,s=setInterval(()=>{o()},n)},r=()=>{clearInterval(s)},a=()=>{r(),i(o)};return{resume:i,pause:r,reset:a}}function Counter(e={}){let t={timeout:10000};utils.extend(t,e);let{timeout:n}=t,s=0,o=e=>{s=setTimeout(()=>{e(t)},n)},i=()=>{clearTimeout(s)};return{start:o,clear:i}}let VERSION="1.7.
|
|
79
|
+
if(m>=d.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncReceiveTime:m,msg:d}),r();let E={userId:a.id,syncTime:m,containsSendBox:!0,sendBoxSyncTime:l,topic:COMMAND_TOPICS.SYNC_MESSAGES};e(SIGNAL_CMD.QUERY,E,({isFinished:e,messages:a,code:p})=>{if(s.info({tag:LOG_MODULE.MSG_SYNC,data:E,msg:d,code:p,count:a.length}),!utils.isEqual(p,ErrorType.COMMAND_SUCCESS.code))return r();let m=[];utils.forEach(a,(e,t)=>{let{flags:n,sentTime:s,isSender:o}=e,i=common.formatter.toMsg(n);i.isStorage&&m.push(e)}),c.insertBatchMsgs({msgs:utils.clone(m)}).then(()=>{utils.forEach(a,(s,o)=>{let{sentTime:i,isSender:r}=s,d=common.updateSyncTime({sentTime:i,isSender:r,io:n});if(d){let n=e&&utils.isEqual(a.length-1,o);t.emit(SIGNAL_NAME.CMD_RECEIVED,[s,n])}});let s=!e;s&&o.produce(i,s),r()})})}function d(n,i){let{user:r,name:a,time:d,$conversation:p}=n,c=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;if(c>d)return s.info({tag:LOG_MODULE.CONV_SYNC,syncTime:c,time:d}),i();let m={userId:r.id,syncTime:c,topic:COMMAND_TOPICS.SYNC_CONVERSATIONS,count:200};e(SIGNAL_CMD.QUERY,m,e=>{let{isFinished:r,conversations:a,code:d}=e;if(s.info({tag:LOG_MODULE.CONV_SYNC,data:m,code:d,count:a.length}),!utils.isEqual(d,ErrorType.COMMAND_SUCCESS.code))return t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i();let l=a.length,E=a[l-1]||{syncTime:0},{syncTime:u}=E;u>c&&(Storage.set(STORAGE.SYNC_CONVERSATION_TIME,{time:u}),n=utils.extend(n,{time:u})),a=utils.clone(a),p._batchInsertConversations({conversations:a,syncTime:u}).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATIONS_PROGRESS,e);let s=!r;s?o.produce(n,s):t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i()})})}o.produce(i),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.CMD_RECEIVED)&&r(e,t),utils.isEqual(n,SIGNAL_NAME.S_SYNC_CONVERSATION_NTF)&&d(e,t),utils.isEqual(n,SIGNAL_NAME.S_NTF)&&a(e,t)})};return{exec:i}}let chatroomCacher=Cache();var chatroomCacher$1={set:(e,t)=>{let n=chatroomCacher.get(e),{msgs:s=[]}=t;200<=s.length&&(s.shift(0),t=utils.extend(t,{msgs:s})),n=utils.extend(n,t),chatroomCacher.set(e,n)},get:e=>{let t=chatroomCacher.get(e);return t},remove:e=>{chatroomCacher.remove(e)},getAll:()=>chatroomCacher.getAll()};function ChatroomSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){s.info({tag:LOG_MODULE.MSG_SYNC,...e});let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM)&&i&&a(e,t),utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_DESTORY)&&i&&r(e,t)}function r(e,n){let{msg:s}=e,o=s.targetId;t.emit(SIGNAL_NAME.CMD_CHATROOM_DESTROY,{id:o}),n()}function a(n,o){let{msg:i}=n,r=i.targetId,a=d(r);if(a>=i.receiveTime&&0<i.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),o();let c={syncTime:a,chatroomId:r,topic:COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES};e(SIGNAL_CMD.QUERY,c,({messages:e,code:n})=>{if(s.info({tag:LOG_MODULE.MSG_SYNC,data:c,msg:i,code:n,count:e.length}),!utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code))return o();let{msgs:a=[]}=chatroomCacher$1.get(r);utils.forEach(e,e=>{p(e.conversationId,e.sentTime);let{messageId:n}=e,s=utils.isInclude(a,n);s||(a.push(n),t.emit(SIGNAL_NAME.CMD_RECEIVED,[e]))}),chatroomCacher$1.set(r,{msgs:a}),o()})}function d(e){let t=chatroomCacher$1.get(e);return t.syncMsgTime||0}function p(e,t){let n=d(e);t>n&&chatroomCacher$1.set(e,{syncMsgTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function ChatroomAttSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){s.info({tag:LOG_MODULE.MSG_SYNC,...e});let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_ATTR)&&i&&r(e,t)}function r(n,o){let{msg:i}=n,r=i.targetId,p=a(r);if(p>=i.receiveTime&&0<i.receiveTime)return o();let c={syncTime:p,chatroomId:r,targetId:r,topic:COMMAND_TOPICS.SYNC_CHATROOM_ATTRS};e(SIGNAL_CMD.QUERY,c,e=>{let{code:n,attrs:r,chatroomId:a}=e;return s.info({tag:LOG_MODULE.MSG_SYNC,data:c,msg:i,code:n,count:r.length}),utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code)?void(utils.forEach(r,e=>{d(a,e.updateTime)}),t.emit(SIGNAL_NAME.CMD_CHATROOM_ATTR_RECEIVED,{attrs:r,chatroomId:a}),o()):o()})}function a(e){let t=chatroomCacher$1.get(e);return t.syncAttTime||0}function d(e,t){let n=a(e);t>n&&chatroomCacher$1.set(e,{syncAttTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function TagSyncer(e,t,n,{logger:s}){let o=({$conversation:e})=>{let{id:s}=n.getCurrentUser(),o={topic:COMMAND_TOPICS.CONVERSATION_TAG_QUERY,userId:s};n.sendCommand(SIGNAL_CMD.QUERY,o,n=>{let{code:s,tags:o}=n;utils.isEqual(ErrorType.COMMAND_SUCCESS.code,s)&&(utils.map(o,e=>{let t=CONVERSATION_TAG[e.id]||{};return utils.extend(e,t),e}),e._batchInsertTags(o).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_TAG_FINISHED,e)}))})};return{exec:o}}function Timer(e={}){let t={timeout:60000};utils.extend(t,e);let{timeout:n}=t,s=0,o=utils.noop,i=e=>{o=e,s=setInterval(()=>{o()},n)},r=()=>{clearInterval(s)},a=()=>{r(),i(o)};return{resume:i,pause:r,reset:a}}function Counter(e={}){let t={timeout:10000};utils.extend(t,e);let{timeout:n}=t,s=0,o=e=>{s=setTimeout(()=>{e(t)},n)},i=()=>{clearTimeout(s)};return{start:o,clear:i}}let VERSION="1.7.13";/*
|
|
80
80
|
fileCompressLimit: 图片缩略图压缩限制,小于设置数值将不执行压缩,单位 KB
|
|
81
81
|
config = { appkey, nav, isSync, upload, uploadType, fileCompressLimit }
|
|
82
82
|
*/function IO(e){function t(){m&&L.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:M.id}})}function n(){return M}function s(){return e}function o(t){utils.extend(e,t)}function i(e,t){let n={topic:COMMAND_TOPICS.GET_USER_INFO,userId:e.id};k(SIGNAL_CMD.QUERY,n,e=>{t(e)})}let r=Emitter(),{appkey:a,navList:d,serverList:c=[],isSync:m=!0,reconnectCount:l=100,logger:p}=e;utils.isArray(d)||(d=["https://nav.fake.com"]);let E={},u={},g=Cache(),y=Decoder(g,u),T=Encoder(g),_=Timer({timeout:HEART_TIMEOUT}),C=Timer({timeout:SYNC_MESSAGE_TIME}),f=!0,S=CONNECT_STATE.DISCONNECTED,O=[ErrorType.CONNECT_APPKEY_IS_REQUIRE.code,ErrorType.CONNECT_TOKEN_NOT_EXISTS.code,ErrorType.CONNECT_APPKEY_NOT_EXISTS.code,ErrorType.CONNECT_TOKEN_ILLEGAL.code,ErrorType.CONNECT_TOKEN_UNAUTHORIZED.code,ErrorType.CONNECT_TOKEN_EXPIRE.code,ErrorType.CONNECT_APP_BLOCKED.code,ErrorType.CONNECT_USER_BLOCKED.code,ErrorType.CONNECT_USER_KICKED.code,ErrorType.CONNECT_USER_LOGOUT.code],I=e=>{S=e.state,r.emit(SIGNAL_NAME.CONN_CHANGED,{...e})},A=()=>{_.pause(),C.pause()},N=!1,R=(e={})=>{let{code:t}=e;if(!N&&!utils.isInclude(O,t)&&!utils.isEqual(S,CONNECT_STATE.DISCONNECTED)){let e=n();return A(),U(e,({next:e})=>{e()})}if(!utils.isEqual(S,CONNECT_STATE.DISCONNECTED)){let t=n();I({state:CONNECT_STATE.DISCONNECTED,...e,user:t}),A()}},M={},v=e=>{utils.extend(M,e)},h=e=>{let t=common.getNaviStorageKey(a,e);Storage.remove(t)},D=({token:e,deviceId:t,_isReconnect:n=!1},s)=>{function o({servers:n,userId:o}){v({id:o,token:e,deviceId:t}),g.set(SIGNAL_NAME.S_CONNECT_ACK,s),Network.detect(n,(n,i)=>{// 如果嗅探失败,返回连接断开,同时清理已缓存的 CMP 地址
|
|
@@ -110,7 +110,7 @@ if(!utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_MARK_UNREAD)&&!utils.isEqual(o.nam
|
|
|
110
110
|
// 消息监听无需处理会话删除
|
|
111
111
|
// 消息监听无需处理会话添加
|
|
112
112
|
// 消息监听无需处理清理总数消息
|
|
113
|
-
{if(utils.isEqual(o.name,MESSAGE_TYPE.RECALL)){let{conversationId:e,conversationType:n,content:s,sender:i}=o;return t.emit(EVENT.MESSAGE_RECALLED,{conversationId:e,conversationType:n,content:s,sender:i})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_MSG_EXSET)){let{content:e}=o;return t.emit(EVENT.MESSAGE_REACTION_CHANGED,{...e})}if(utils.isEqual(o.name,MESSAGE_TYPE.CLEAR_MSG)){let{content:{conversationType:e,conversationId:n,cleanTime:s,senderId:i}}=o;return utils.isEmpty(i)?t.emit(EVENT.MESSAGE_CLEAN,{conversationType:e,conversationId:n,cleanTime:s}):t.emit(EVENT.MESSAGE_CLEAN_SOMEONE,{conversationType:e,conversationId:n,senderId:i})}if(utils.isEqual(o.name,MESSAGE_TYPE.MODIFY)){let{conversationType:e,conversationId:n,content:s,messageId:i}=o;return t.emit(EVENT.MESSAGE_UPDATED,{conversationType:e,conversationId:n,messageId:i,content:s})}if(utils.isEqual(o.name,MESSAGE_TYPE.READ_MSG)||utils.isEqual(o.name,MESSAGE_TYPE.READ_GROUP_MSG)){let{conversationType:e,conversationId:n,content:{msgs:s}}=o,i={conversationType:e,conversationId:n,messages:s};return t.emit(EVENT.MESSAGE_READ,i)}if(!s.isInclude(o)){t.emit(EVENT.MESSAGE_RECEIVED,[o,i]);let{conversationId:e,conversationType:n}=o;s.add({conversationId:e,conversationType:n},o)}}}});let o=[[CONVERATION_TYPE.PRIVATE,"p_msg"],[CONVERATION_TYPE.GROUP,"g_msg"],[CONVERATION_TYPE.CHATROOM,"c_msg"]],i={};utils.forEach(o,e=>{i[e[0]]=e[1]});let r=(t,s={})=>utils.deferred((o,r)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SENDMSG);if(!utils.isEmpty(a))return r(a);let{referMsg:d}=t;if(!utils.isUndefined(d)){let{messageIndex:e,messageId:t}=d;if(utils.isUndefined(e)||utils.isUndefined(t))return r(ErrorType.SEND_REFER_MESSAGE_ERROR)}n.info({tag:LOG_MODULE.MSG_SEND});let p={onbefore:()=>{}};utils.extend(p,s);let c=utils.clone(t),{name:m,conversationType:l,conversationId:E,isMass:u}=c,g=common.getMsgFlag(m,{isMass:u});utils.extend(c,{flag:g});let y=i[l];utils.extend(c,{topic:y});let T=t.tid||utils.getUUID();utils.extend(t,{tid:T,sentState:MESSAGE_SENT_STATE.SENDING}),p.onbefore(t),e.sendCommand(SIGNAL_CMD.PUBLISH,c,({messageId:n,sentTime:s,code:i,msg:a,msgIndex:d,memberCount:p})=>{
|
|
113
|
+
{if(utils.isEqual(o.name,MESSAGE_TYPE.RECALL)){let{conversationId:e,conversationType:n,content:s,sender:i}=o;return t.emit(EVENT.MESSAGE_RECALLED,{conversationId:e,conversationType:n,content:s,sender:i})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_MSG_EXSET)){let{content:e}=o;return t.emit(EVENT.MESSAGE_REACTION_CHANGED,{...e})}if(utils.isEqual(o.name,MESSAGE_TYPE.CLEAR_MSG)){let{content:{conversationType:e,conversationId:n,cleanTime:s,senderId:i}}=o;return utils.isEmpty(i)?t.emit(EVENT.MESSAGE_CLEAN,{conversationType:e,conversationId:n,cleanTime:s}):t.emit(EVENT.MESSAGE_CLEAN_SOMEONE,{conversationType:e,conversationId:n,senderId:i})}if(utils.isEqual(o.name,MESSAGE_TYPE.MODIFY)){let{conversationType:e,conversationId:n,content:s,messageId:i}=o;return t.emit(EVENT.MESSAGE_UPDATED,{conversationType:e,conversationId:n,messageId:i,content:s})}if(utils.isEqual(o.name,MESSAGE_TYPE.READ_MSG)||utils.isEqual(o.name,MESSAGE_TYPE.READ_GROUP_MSG)){let{conversationType:e,conversationId:n,content:{msgs:s}}=o,i={conversationType:e,conversationId:n,messages:s};return t.emit(EVENT.MESSAGE_READ,i)}if(!s.isInclude(o)){t.emit(EVENT.MESSAGE_RECEIVED,[o,i]);let{conversationId:e,conversationType:n}=o;s.add({conversationId:e,conversationType:n},o)}}}});let o=[[CONVERATION_TYPE.PRIVATE,"p_msg"],[CONVERATION_TYPE.GROUP,"g_msg"],[CONVERATION_TYPE.CHATROOM,"c_msg"]],i={};utils.forEach(o,e=>{i[e[0]]=e[1]});let r=(t,s={})=>utils.deferred((o,r)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SENDMSG);if(!utils.isEmpty(a))return r(a);let{referMsg:d}=t;if(!utils.isUndefined(d)){let{messageIndex:e,messageId:t}=d;if(utils.isUndefined(e)||utils.isUndefined(t))return r(ErrorType.SEND_REFER_MESSAGE_ERROR)}n.info({tag:LOG_MODULE.MSG_SEND});let p={onbefore:()=>{}};utils.extend(p,s);let c=utils.clone(t),{name:m,conversationType:l,conversationId:E,isMass:u}=c,g=common.getMsgFlag(m,{isMass:u});utils.extend(c,{flag:g});let y=i[l];utils.extend(c,{topic:y});let T=t.tid||utils.getUUID(),_=e.getCurrentUser()||{};utils.extend(t,{tid:T,sentState:MESSAGE_SENT_STATE.SENDING,sender:_,isSender:!0}),p.onbefore(t),e.sendCommand(SIGNAL_CMD.PUBLISH,c,({messageId:n,sentTime:s,code:i,msg:a,msgIndex:d,memberCount:p})=>{if(i)return utils.extend(t,{error:{code:i,msg:a},sentState:MESSAGE_SENT_STATE.FAILED}),r(t);utils.extend(t,{sentTime:s,messageId:n,messageIndex:d,sentState:MESSAGE_SENT_STATE.SUCCESS});let c=e.getConfig();c.isPC||utils.isEqual(l,CONVERATION_TYPE.CHATROOM)||e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,t);let m=utils.isEqual(t.conversationType,CONVERATION_TYPE.CHATROOM);if(m){let{conversationId:e}=t,{msgs:n=[]}=chatroomCacher$1.get(e);n.push(t.messageId),chatroomCacher$1.set(e,{msgs:n})}let E=utils.isEqual(t.conversationType,CONVERATION_TYPE.GROUP);E&&(t=utils.extend(t,{unreadCount:p,readCount:0})),o(t)})}),a=(t,s={})=>utils.deferred((o,i)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SENDMSG);if(!utils.isEmpty(a))return i(a);n.info({tag:LOG_MODULE.MSG_SEND_MASS});let d={onprogress:()=>{},oncompleted:()=>{}};utils.extend(d,s),t=utils.isArray(t)?t:[t],t=utils.map(t,e=>({isMass:!0,...e}));let p=[],c=t.length;utils.iterator(t,(e,t,n)=>{let i=()=>n?(o(),d.oncompleted({messages:p})):void t(),a=e=>{p.push(e),d.onprogress({message:e,count:p.length,total:c}),i()};r(e,s).then(a,a)})}),d=t=>utils.deferred((n,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.GETMSGS);if(!utils.isEmpty(i))return o(i);let{conversationId:r}=t,{id:a}=e.getCurrentUser(),d={time:0,order:MESSAGE_ORDER.BACKWARD,count:20,userId:a,topic:COMMAND_TOPICS.HISTORY_MESSAGES,targetId:r,names:[]};d=utils.extend(d,t),e.sendCommand(SIGNAL_CMD.QUERY,d,e=>{let{messages:o}=e;s.add(t,o),n(e)})}),p=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GETMSG);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),r={topic:COMMAND_TOPICS.GET_MSG_BY_IDS,userId:i.id};r=utils.extend(r,t),e.sendCommand(SIGNAL_CMD.QUERY,r,({messages:e})=>{n({messages:e})})}),c=t=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.CLEARMSG);if(!utils.isEmpty(i))return o(i);n.info({tag:LOG_MODULE.MSG_CLEAR,...t});let r={topic:COMMAND_TOPICS.CLEAR_MESSAGE,time:0};utils.extend(r,t),e.sendCommand(SIGNAL_CMD.QUERY,r,({code:t,timestamp:n})=>{utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)&&common.updateSyncTime({isSender:!0,sentTime:n,io:e});let o=e.getConfig();if(!o.isPC){let t={name:MESSAGE_TYPE.CLEAR_MSG,content:{...r}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,t)}s()})}),m=t=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.REMOVE_MSGS);if(!utils.isEmpty(i))return o(i);t=utils.isArray(t)?t:[t];let r=utils.quickSort(utils.clone(t),(e,t)=>e.sentTime>t.sentTime),a=r[0]||{sentTime:-10};n.info({tag:LOG_MODULE.MSG_DELETE,time:a.sentTime});let d=e.getCurrentUser(),p={topic:COMMAND_TOPICS.REMOVE_MESSAGE,messages:t,userId:d.id};e.sendCommand(SIGNAL_CMD.QUERY,p,({code:n,timestamp:o})=>{utils.isEqual(ErrorType.COMMAND_SUCCESS.code,n)&&common.updateSyncTime({isSender:!0,sentTime:o,io:e});let i=e.getConfig();i.isPC||e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,{name:MESSAGE_TYPE.CLIENT_REMOVE_MSGS,content:{messages:t},...a}),s()})}),l=t=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.RECALLMSG);if(!utils.isEmpty(i))return o(i);let r={topic:COMMAND_TOPICS.RECALL};utils.extend(r,t),n.info({tag:LOG_MODULE.MSG_RECALL,messageId:t.messageId,sentTime:t.sentTime}),e.sendCommand(SIGNAL_CMD.QUERY,r,n=>{let{code:i,timestamp:r}=n;if(utils.isEqual(i,ErrorType.COMMAND_SUCCESS.code)){common.updateSyncTime({isSender:!0,sentTime:r,io:e});let n=utils.clone(t),{messageId:o,sentTime:i,exts:a}=t,d=e.getCurrentUser();utils.extend(n,{name:MESSAGE_TYPE.RECALL,sender:d,isSender:!0,content:{messageId:o,sentTime:i,exts:a}});let p=e.getConfig();return p.isPC||e.emit(SIGNAL_NAME.CMD_RECEIVED,n),utils.clone(n),delete n.exts,utils.extend(n,{name:MESSAGE_TYPE.RECALL_INFO}),s(n)}let{msg:a}=common.getError(i);o({code:i,msg:a})})}),E=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.READMESSAGE);if(!utils.isEmpty(o))return s(o);let i={topic:COMMAND_TOPICS.READ_MESSAGE,messages:t};e.sendCommand(SIGNAL_CMD.QUERY,i,({code:t,timestamp:s})=>{utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)&&common.updateSyncTime({isSender:!0,sentTime:s,io:e}),n()})}),u=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_MESSAGE_READ_DETAILS);if(!utils.isEmpty(o))return s(o);let i={topic:COMMAND_TOPICS.GET_READ_MESSAGE_DETAIL,message:t};e.sendCommand(SIGNAL_CMD.QUERY,i,e=>{delete e.index,n(e)})}),g=t=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.UPDATEMESSAGE);if(!utils.isEmpty(i))return o(i);n.info({tag:LOG_MODULE.MSG_UPDATE,messageId:t.messageId});let r={...t,name:MESSAGE_TYPE.MODIFY},a=(t={})=>{utils.extend(r,t);let n=e.getConfig();n.isPC||e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,r)};// 兼容 PC 端修改非 content 属性,保证多端行为一致性,直接返回,PC 端会做本地消息 update
|
|
114
114
|
if(utils.isUndefined(t.content))return a(),s(r);let d={topic:COMMAND_TOPICS.UPDATE_MESSAGE,...t};e.sendCommand(SIGNAL_CMD.QUERY,d,n=>{let o=e.getCurrentUser();a({sender:o,isSender:!0,isUpdated:!0,content:{messageId:t.messageId,...t.content}}),s(r)})}),y=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_MENTIOIN_MESSAGES);if(!utils.isEmpty(o))return s(o);let i={count:20,order:MENTION_ORDER.BACKWARD,messageIndex:0},r=e.getCurrentUser();utils.extend(i,t);let a={topic:COMMAND_TOPICS.GET_MENTION_MSGS,userId:r.id,...i};e.sendCommand(SIGNAL_CMD.QUERY,a,({isFinished:e,msgs:t})=>{n({isFinished:e,msgs:t})})}),T=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_FILE_TOKEN);if(!utils.isEmpty(o))return s(o);let{id:i}=e.getCurrentUser(),r={topic:COMMAND_TOPICS.GET_FILE_TOKEN,...t,userId:i};e.sendCommand(SIGNAL_CMD.QUERY,r,({cred:{token:e,domain:t,type:s,url:o}})=>{n({token:e,domain:t,type:s,url:o})})}),_=(t,n,s={})=>{function o(e,t){let{content:n}=t,s={onprogress:({percent:e})=>{d.onprogress({percent:e,message:t})},oncompleted:({url:e})=>{let s=n.file.size/1024;utils.extend(t.content,{url:e,size:s.toFixed(2)}),delete t.content.file,d.oncompleted(t)},onerror:e=>{d.onerror(ErrorType.UPLOADING_FILE_ERROR,e)}};m.exec(n,e,s)}let{uploadType:i,upload:r,fileCompressLimit:a}=e.getConfig(),d={onprogress:()=>{},onerror:()=>{}};utils.extend(d,s);let{fileType:p,scale:c}=t,m=Uploder(r,{type:i}),{name:l,content:E}=n,u=E.file,g=u.name.split("."),y=g[g.length-1];T({type:p,ext:y}).then(e=>{let{type:t}=e;if(!utils.isEqual(t,i))return d.onerror(ErrorType.UPLOAD_PLUGIN_NOTMATCH);let s=utils.extend(e,{file:E.file,scale:c,fileCompressLimit:a});if(utils.isEqual(l,MESSAGE_TYPE.IMAGE)){// 业务层设置缩略图,传入优先,不再执行生成缩略图逻辑
|
|
115
115
|
let{thumbnail:t}=E;if(t)return o(e,n);T({type:p,ext:y}).then(t=>{common.uploadThumbnail(r,{...s,...t},(t,s,i)=>{let{height:r,width:a}=i;utils.extend(n.content,{thumbnail:s,height:r,width:a,type:E.file.type}),o(e,n)})})}if(utils.isEqual(l,MESSAGE_TYPE.VIDEO)){// 业务层设置封面,传入优先,不再执行生成缩略图逻辑
|
|
116
116
|
let{poster:t}=E;if(t)return o(e,n);T({type:p,ext:"png"}).then(t=>{common.uploadFrame(r,{...s,...t},(t,s,i)=>{let{height:r,width:a,duration:d}=i;utils.extend(n.content,{poster:s,height:r,width:a,duration:d}),o(e,n)})})}utils.isInclude([MESSAGE_TYPE.FILE,MESSAGE_TYPE.VOICE],l)&&o(e,n)})},C=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.FILE});let o={fileType:FILE_TYPE.FILE};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.FILE});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING});let{size:l=0}=t.content;l/=1024;let E=utils.clone(t);E.content={...t.content,size:l},c(E),_(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},f=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.IMAGE});let o={fileType:FILE_TYPE.IMAGE,scale:t.scale};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.IMAGE});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),_(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},S=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.VOICE});let o={fileType:FILE_TYPE.AUDIO};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.AUDIO});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),_(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},O=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.VIDEO});let o={fileType:FILE_TYPE.VIDEO,scale:t.scale};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.VIDEO});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),_(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},I=(t,s={})=>utils.deferred((o,i)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SEND_MERGE_MESSAGE);if(!utils.isEmpty(a))return i(a);n.info({tag:LOG_MODULE.MSG_SEND_MERGE});let{conversationType:d,conversationId:p,messages:c,previewList:m,title:l}=t;if(20<c.length)return i(ErrorType.TRANSFER_MESSAGE_COUNT_EXCEED);let E={channelType:CONVERATION_TYPE.PRIVATE,targetId:""},u=[];c=utils.map(c,e=>(utils.extend(E,{channelType:e.conversationType,targetId:e.conversationId}),{msgId:e.messageId,msgTime:e.sentTime,msgIndex:e.messageIndex})),utils.forEach(c,({msgId:e})=>{u.push(e)});let g=e.getCurrentUser();utils.extend(E,{userId:g.id,msgs:c});let y={conversationId:p,conversationType:d,name:MESSAGE_TYPE.MERGE,mergeMsg:E,content:{previewList:m,messageIdList:u,title:l}};return r(y,s).then(o,i)}),A=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_MERGE_MESSAGES);if(!utils.isEmpty(o))return s(o);let i={time:0,order:MESSAGE_ORDER.FORWARD,count:20,topic:COMMAND_TOPICS.GET_MERGE_MSGS};utils.extend(i,t),e.sendCommand(SIGNAL_CMD.QUERY,i,({isFinished:e,messages:t})=>{n({isFinished:e,messages:t})})}),N=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_FIRST_UNREAD_MSG);if(!utils.isEmpty(o))return s(o);let i={...t,topic:COMMAND_TOPICS.GET_FIRST_UNREAD_MSG};e.sendCommand(SIGNAL_CMD.QUERY,i,({code:e,msg:t})=>utils.isEqual(ErrorType.COMMAND_SUCCESS.code,e)?void n({message:t}):s({code:e}))}),R=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SEARCH_MESSAGES);return utils.isEmpty(o)?s(ErrorType.SDK_FUNC_NOT_DEFINED):s(o)}),M=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.UPDATE_MESSAGE_ATTR);return utils.isEmpty(o)?s(ErrorType.SDK_FUNC_NOT_DEFINED):s(o)}),v=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SET_MESSAGE_SEARCH_CONTENT);return utils.isEmpty(o)?s(ErrorType.SDK_FUNC_NOT_DEFINED):s(o)}),h=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.INSERT_MESSAGE);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),{sender:r}=t,a=utils.isEqual(i.id,r.id),d=utils.getUUID(),p={tid:d,...t,isSender:a,sender:r};n(p)}),D=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.ADD_MSG_REACTION);if(!utils.isEmpty(o))return s(o);let{reactionId:i}=t;i=escape(i);let{id:r}=e.getCurrentUser(),a={topic:COMMAND_TOPICS.ADD_MSG_REACTION,...t,reactionId:i,userId:r};e.sendCommand(SIGNAL_CMD.QUERY,a,({code:t,timestamp:s})=>{utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)&&common.updateSyncTime({isSender:!0,sentTime:s,io:e}),n()})}),U=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.REMOVE_MSG_REACTION);if(!utils.isEmpty(o))return s(o);let{id:i}=e.getCurrentUser(),{reactionId:r}=t;r=escape(r);let a={topic:COMMAND_TOPICS.REMOVE_MSG_REACTION,...t,reactionId:r,userId:i};e.sendCommand(SIGNAL_CMD.QUERY,a,({code:t,timestamp:s})=>{utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)&&common.updateSyncTime({isSender:!0,sentTime:s,io:e}),n()})});/*
|