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.
Files changed (3) hide show
  1. package/index.d.ts +102 -102
  2. package/index.js +4 -4
  3. 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: Array;
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: Messages[]) => Promise<any>;
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: () => boolean;
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?: Array;
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 { ...IMCore };
472
+ export default IMCore;
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * JuggleIM.js v1.7.11
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||0,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 区分,接收或同步消息通过消息位计算
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.11";/*
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})=>{let c=e.getCurrentUser()||{};if(utils.extend(t,{sender:c,isSender:!0}),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 m=e.getConfig();m.isPC||utils.isEqual(l,CONVERATION_TYPE.CHATROOM)||e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,t);let E=utils.isEqual(t.conversationType,CONVERATION_TYPE.CHATROOM);if(E){let{conversationId:e}=t,{msgs:n=[]}=chatroomCacher$1.get(e);n.push(t.messageId),chatroomCacher$1.set(e,{msgs:n})}let u=utils.isEqual(t.conversationType,CONVERATION_TYPE.GROUP);u&&(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
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()})});/*
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  {
3
3
  "name": "jugglechat-websdk",
4
- "version": "1.7.11",
4
+ "version": "1.7.13",
5
5
  "description": "JuggleChat SDK, IM, Chat",
6
6
  "main": "index.js",
7
7
  "types": "index.d.ts",