jugglechat-websdk 1.9.1 → 1.9.3

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 +1 -0
  2. package/index.js +18 -15
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -444,6 +444,7 @@ declare class IMProvider {
444
444
  interface InitOptions {
445
445
  appkey: string;
446
446
  navList?: string[];
447
+ serverList?: string[];
447
448
  isSync?: boolean;
448
449
  upload?: Object;
449
450
  }
package/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /*
2
- * JuggleIM.js v1.9.1
2
+ * JuggleIM.js v1.9.3
3
3
  * (c) 2022-2025 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),_isNaN=e=>isNaN(+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}},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
6
- function Index(){let e=0;this.add=()=>{e+=1},this.get=()=>e,this.reset=()=>{e=0}}function Observer(){let e=[];this.add=(t,n)=>{if(isFunction(t)){if(n)return e=[t];e.push(t)}},this.remove=t=>{e=filter(e,e=>e!==t)},this.emit=t=>{forEach(e,e=>{e(t)})}}function Prosumer(){let e=[],t=!1;this.produce=t=>{e.push(t)},this.consume=(n,s)=>{if(t)return;t=!0;let o=()=>{let i=e.shift();return isUndefined(i)?(t=!1,void(s&&s())):void n(i,o)};o()},this.isExeuting=function(){return t}}const getBrowser=()=>{let e=navigator.userAgent,t="",n="";return /(Msie|Firefox|Opera|Chrome|Netscape)\D+(\d[\d.]*)/.test(e)&&(t=RegExp.$1,n=RegExp.$2),/Version\D+(\d[\d.]*).*Safari/.test(e)&&(t="Safari",n=RegExp.$1),{name:t,version:n}},getUUID=()=>"j"+"xxxx-xxxx-xxxx".replace(/[xy]/g,function(e){let t=0|16*Math.random(),n="x"==e?t:8|3&t;return n.toString(16)}),getProtocol=(e="")=>{"undefined"==typeof location&&(location={protocol:"https:"});let t=location.protocol;isEqual(t,"file:")&&(t="http:"),isInclude(e,"https://")&&(t="https:");let n={"http:":"ws:","https:":"wss:"},s=n[t];return{http:t,ws:s}},sort=(e,t)=>{const n=e.length;if(2>n)return e;for(let s=0;s<n-1;s++)for(let o=s+1;o<n;o++)t(e[o],e[s])&&([e[s],e[o]]=[e[o],e[s]]);return e},quickSort=(e,t)=>{if(2>e.length)return e;let n=e[0],s=[],o=[];for(let r=1;r<e.length;r++)t(e[r],n)?s.push(e[r]):o.push(e[r]);return[...quickSort(s,t),n,...quickSort(o,t)]},find=(e,t)=>{let n=e.length,s=-1;for(let o=0,i;o<n;o++)if(i=e[o],t(i)){s=o;break}return s},toObject=e=>{let t={};return forEach(e,(e={})=>{let n=e.key,s=e.value;t[n]=s}),t},decodeBase64=function(e){var t=String.fromCharCode;let n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",s="",o=0,r,a,d,p,c,m,l;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");o<e.length;)p=n.indexOf(e.charAt(o++)),c=n.indexOf(e.charAt(o++)),m=n.indexOf(e.charAt(o++)),l=n.indexOf(e.charAt(o++)),r=p<<2|c>>4,a=(15&c)<<4|m>>2,d=(3&m)<<6|l,s+=t(r),64!==m&&(s+=t(a)),64!==l&&(s+=t(d));return s=decodeURIComponent(escape(s)),s},isContinuous=(e,t)=>{e.sort((e,n)=>e[t]-n[t]);for(let n=0;n<e.length-1;n++)if(!isEmpty(e[n+1][t])&&e[n+1][t]!==e[n][t]+1)return!1;return!0},isBase64=e=>{var t=/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/;return t.test(e)};function iterator(e,t){let n=()=>{let s=e.splice(0,1);if(!isEmpty(s)){let o=isEqual(e.length,0);t(s[0],n,o)}};n()}function formatTime(e,t="yyyy-MM-dd hh:mm:ss"){var n=Math.floor;let s=new Date(e);var i={"M+":s.getMonth()+1,// 月份
6
+ function Index(){let e=0;this.add=()=>{e+=1},this.get=()=>e,this.reset=()=>{e=0}}function Observer(){let e=[];this.add=(t,n)=>{if(isFunction(t)){if(n)return e=[t];e.push(t)}},this.remove=t=>{e=filter(e,e=>e!==t)},this.emit=t=>{forEach(e,e=>{e(t)})}}function Prosumer(){let e=[],t=!1;this.produce=t=>{e.push(t)},this.consume=(n,s)=>{if(t)return;t=!0;let o=()=>{let i=e.shift();return isUndefined(i)?(t=!1,void(s&&s())):void n(i,o)};o()},this.isExeuting=function(){return t}}const getBrowser=()=>{let e=navigator.userAgent,t="",n="";return /(Msie|Firefox|Opera|Chrome|Netscape)\D+(\d[\d.]*)/.test(e)&&(t=RegExp.$1,n=RegExp.$2),/Version\D+(\d[\d.]*).*Safari/.test(e)&&(t="Safari",n=RegExp.$1),{name:t,version:n}},getUUID=()=>"j"+"xxxx-xxxx-xxxx".replace(/[xy]/g,function(e){let t=0|16*Math.random(),n="x"==e?t:8|3&t;return n.toString(16)}),getProtocol=(e="")=>{"undefined"==typeof location&&(location={protocol:"https:"});let t=location.protocol;isEqual(t,"file:")&&(t="http:"),(isInclude(e,"https://")||isInclude(e,"wss://"))&&(t="https:");let n={"http:":"ws:","https:":"wss:"},s=n[t];return{http:t,ws:s}},sort=(e,t)=>{const n=e.length;if(2>n)return e;for(let s=0;s<n-1;s++)for(let o=s+1;o<n;o++)t(e[o],e[s])&&([e[s],e[o]]=[e[o],e[s]]);return e},quickSort=(e,t)=>{if(2>e.length)return e;let n=e[0],s=[],o=[];for(let r=1;r<e.length;r++)t(e[r],n)?s.push(e[r]):o.push(e[r]);return[...quickSort(s,t),n,...quickSort(o,t)]},find=(e,t)=>{let n=e.length,s=-1;for(let o=0,i;o<n;o++)if(i=e[o],t(i)){s=o;break}return s},toObject=e=>{let t={};return forEach(e,(e={})=>{let n=e.key,s=e.value;t[n]=s}),t},decodeBase64=function(e){var t=String.fromCharCode;let n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",s="",o=0,r,a,d,p,c,m,l;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");o<e.length;)p=n.indexOf(e.charAt(o++)),c=n.indexOf(e.charAt(o++)),m=n.indexOf(e.charAt(o++)),l=n.indexOf(e.charAt(o++)),r=p<<2|c>>4,a=(15&c)<<4|m>>2,d=(3&m)<<6|l,s+=t(r),64!==m&&(s+=t(a)),64!==l&&(s+=t(d));return s=decodeURIComponent(escape(s)),s},isContinuous=(e,t)=>{e.sort((e,n)=>e[t]-n[t]);for(let n=0;n<e.length-1;n++)if(!isEmpty(e[n+1][t])&&e[n+1][t]!==e[n][t]+1)return!1;return!0},isBase64=e=>{var t=/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/;return t.test(e)};function iterator(e,t){let n=()=>{let s=e.splice(0,1);if(!isEmpty(s)){let o=isEqual(e.length,0);t(s[0],n,o)}};n()}function formatTime(e,t="yyyy-MM-dd hh:mm:ss"){var n=Math.floor;let s=new Date(e);var i={"M+":s.getMonth()+1,// 月份
7
7
  "d+":s.getDate(),// 日
8
8
  "h+":s.getHours(),// 小时
9
9
  "m+":s.getMinutes(),// 分
@@ -12,7 +12,10 @@ function Index(){let e=0;this.add=()=>{e+=1},this.get=()=>e,this.reset=()=>{e=0}
12
12
  S:s.getMilliseconds()// 毫秒
13
13
  };for(var o in /(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length))),i)new RegExp("("+o+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[o]:("00"+i[o]).substr((""+i[o]).length)));return t}function isValidHMTime(e){const t=/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/;return t.test(e)}function getRandoms(e){return Array(e).fill(0).map(()=>Math.floor(10*Math.random()))}// input: groupBy([{a:1},{a:1}, {a:2}], ['a'])
14
14
  // output: { 1: [{a:1},{a:1}], 2: [{a:2}] }
15
- let groupBy=(e,t)=>{let n={};return forEach(e,e=>{let s=[];forEach(e,(e,n)=>{isInclude(t,n)&&s.push(e)});let o=s.join("_"),i=n[o]||[];i.push(e),n[o]=i}),n};const getDeviceID=()=>"xxxxxxxxxxxxxxxxxxxx".replace(/[xy]/g,function(e){let t=0|16*Math.random(),n="x"==e?t:8|3&t;return n.toString(16)});var utils={Prosumer,Observer,isUndefined,isBoolean,isString,isObject,isArray,isFunction,stringify,parse,rename,extend,clone:clone$1,deferred,Defer,forEach,templateFormat,isContain,noop,Cache:Cache$1,map,filter,uniq,some,isEqual,isEmpty,toJSON,isInclude,isNull,isNumber,toArray,Index,getBrowser,getUUID,getProtocol,sort,find,quickSort,toObject,decodeBase64,isContinuous,isBase64,iterator,formatTime,isValidHMTime,getRandoms,groupBy,isNaN:_isNaN,getDeviceID};function Emitter(){/*
15
+ let groupBy=(e,t)=>{let n={};return forEach(e,e=>{let s=[];forEach(e,(e,n)=>{isInclude(t,n)&&s.push(e)});let o=s.join("_"),i=n[o]||[];i.push(e),n[o]=i}),n};const getDeviceID=()=>"xxxxxxxxxxxxxxxxxxxx".replace(/[xy]/g,function(e){let t=0|16*Math.random(),n="x"==e?t:8|3&t;return n.toString(16)});function formatToQueryStr(e){return Object.entries(e).filter(([e,t])=>t!==void 0)// 过滤 undefined
16
+ .map(([e,t])=>{// 对键和值进行 URL 编码,处理特殊字符
17
+ const n=encodeURIComponent(e),s=encodeURIComponent(t??"");// null 转为空字符串
18
+ return`${n}=${s}`}).join("&")}var utils={Prosumer,Observer,isUndefined,isBoolean,isString,isObject,isArray,isFunction,stringify,parse,rename,extend,clone:clone$1,deferred,Defer,forEach,templateFormat,isContain,noop,Cache:Cache$1,map,filter,uniq,some,isEqual,isEmpty,toJSON,isInclude,isNull,isNumber,toArray,Index,getBrowser,getUUID,getProtocol,sort,find,quickSort,toObject,decodeBase64,isContinuous,isBase64,iterator,formatTime,isValidHMTime,getRandoms,groupBy,isNaN:_isNaN,getDeviceID,formatToQueryStr};function Emitter(){/*
16
19
  EmitterEvents = {
17
20
  name: [event1, event2, ...]
18
21
  }
@@ -82,26 +85,26 @@ function uploadUniFrame(e,t,n){let s=null,o="";n(s,o,t.content)}function uploadW
82
85
  // extFields: common.toKVs(sender.exts)
83
86
  // };
84
87
  a={msgIndex:e,msgTime:t,msgId:n,msgContent:JTextEncoder$1.encoder(o),msgType:a.name,type:a.conversationType,senderId:s.id// targetUserInfo: referTarget
85
- }}let u={msgType:t,mentionInfo:E,flags:o,referMsg:a,mergedMsgs:i,clientUid:p,msgContent:JTextEncoder$1.encoder(n)};if(d){let{text:e,title:t}=d,n={title:t,pushText:e};n=utils.clone(n),utils.isEmpty(n)||(u=utils.extend(u,{pushData:n}))}utils.isNumber(c)&&(u.lifeTime=c),utils.isNumber(m)&&(u.lifeTimeAfterRead=m);let g=l.create(u);r=l.encode(g).finish()}let a=$root.lookup("codec.PublishMsgBody"),d=a.create({index:n,targetId:s,topic:i,data:r}),p=a.encode(d).finish();return{buffer:p}}function getPublishAckBody({data:e}){let{msgIndex:t,ackIndex:n}=e,s=$root.lookup("codec.PublishAckMsgBody"),o=s.create({index:n,msgIndex:t,code:0}),i=s.encode(o).finish();return{buffer:i}}function getQueryBody({data:e,callback:t,index:n}){let{targetId:s,userId:o,topic:i}=e,r=[];if(utils.isEqual(i,COMMAND_TOPICS.HISTORY_MESSAGES)){let{conversationType:t,time:n,count:o,order:i,names:a}=e,d=$root.lookup("codec.QryHisMsgsReq"),p=d.create({converId:s,type:t,startTime:n,count:o,order:i,msgTypes:a});r=d.encode(p).finish()}if(utils.isEqual(i,COMMAND_TOPICS.CONVERSATIONS)){let{count:t,time:n,order:i,conversationType:a,tag:d}=e;s=o;let p=$root.lookup("codec.QryConversationsReq"),c={startTime:n,count:t,order:i};utils.isUndefined(a)||utils.extend(c,{channelType:a}),d&&utils.extend(c,{tag:d});let m=p.create(c);r=p.encode(m).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_CONVERSATION,i)){let{conversation:t,userId:n}=e,{conversationId:o,conversationType:i}=t,a=$root.lookup("codec.QryConverReq"),d=a.create({channelType:i,targetId:o});s=n,r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.SYNC_CONVERSATIONS,i)){let{count:t,syncTime:n}=e;s=o;let i=$root.lookup("codec.SyncConversationsReq"),a=i.create({startTime:n,count:t});r=i.encode(a).finish()}if(utils.isEqual(i,COMMAND_TOPICS.SYNC_MESSAGES)){let{syncTime:t,containsSendBox:n,sendBoxSyncTime:i}=e;s=o;let a=$root.lookup("codec.SyncMsgReq"),d=a.create({syncTime:t,containsSendBox:n,sendBoxSyncTime:i});r=a.encode(d).finish()}if(utils.isEqual(i,COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES)){let{syncTime:t,chatroomId:n,count:o}=e,i=$root.lookup("codec.SyncChatroomReq"),a=i.create({syncTime:t,chatroomId:n,count:o});s=n,r=i.encode(a).finish()}if(utils.isEqual(i,COMMAND_TOPICS.SYNC_CHATROOM_ATTRS)){let{syncTime:t,chatroomId:n}=e,o=$root.lookup("codec.SyncChatroomReq"),i=o.create({syncTime:t,chatroomId:n});s=n,r=o.encode(i).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_MSG_BY_IDS,i)){let{conversationId:t,conversationType:n,messageIds:o,userId:i}=e,a=$root.lookup("codec.QryHisMsgByIdsReq"),d=a.create({channelType:n,targetId:t,msgIds:o});s=i,r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_UNREAD_TOTLAL_CONVERSATION,i)){s=o;let t=$root.lookup("codec.QryTotalUnreadCountReq"),{conversationTypes:i=[],ignoreConversations:a=[],tag:n}=e,d=[];utils.forEach(a,({conversationId:e,conversationType:t})=>{d.push({targetId:e,channelType:t})});let p={channelTypes:i,ignoreConvers:d};n&&utils.extend(p,{tag:n});let c=t.create({filter:p});r=t.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.CLEAR_UNREAD_TOTLAL_CONVERSATION,i)){s=o;let e=$root.lookup("codec.QryTotalUnreadCountReq"),t=e.create({});r=e.encode(t).finish()}if(utils.isEqual(COMMAND_TOPICS.READ_MESSAGE,i)){let{messages:t}=e;t=utils.isArray(t)?t:[t];let n=CONVERATION_TYPE.PRIVATE,o="",i=utils.map(t,e=>{let{conversationType:t,conversationId:i,sentTime:r,messageId:a,unreadIndex:d}=e;return n=t,o=i,s=i,{msgId:a,msgTime:r,msgIndex:d}}),a=$root.lookup("codec.MarkReadReq"),d=a.create({channelType:n,targetId:o,msgs:i});r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_READ_MESSAGE_DETAIL,i)){let{message:t}=e,{conversationType:n,conversationId:o,messageId:i}=t,a=$root.lookup("codec.QryReadDetailReq"),d=a.create({channelType:n,targetId:o,msgId:i});s=i,r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_MENTION_MSGS,i)){let{conversationId:t,conversationType:n,count:o,order:i,messageIndex:a,userId:d}=e,p=$root.lookup("codec.QryMentionMsgsReq"),c=p.create({targetId:t,channelType:n,count:o,order:i,startIndex:a});s=d,r=p.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_FILE_TOKEN,i)){s=o;let{type:t,ext:n}=e,i=$root.lookup("codec.QryUploadTokenReq"),a=i.create({fileType:t,ext:n});r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_USER_INFO,i)){s=o;let e=$root.lookup("codec.UserIdReq"),t=e.create({userId:o});r=e.encode(t).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_MERGE_MSGS,i)){let{messageId:t,time:n,count:o,order:i}=e;s=t;let a=$root.lookup("codec.QryMergedMsgsReq"),d=a.create({startTime:n,count:o,order:i});r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_FIRST_UNREAD_MSG,i)){let{conversationType:t,conversationId:n}=e;s=n;let o=$root.lookup("codec.QryFirstUnreadMsgReq"),i=o.create({channelType:t,targetId:n});r=o.encode(i).finish()}if(utils.isEqual(COMMAND_TOPICS.QUERY_TOP_CONVERSATIONS,i)){let{time:t,userId:n,sortType:o}=e,i=$root.lookup("codec.QryTopConversReq"),a=i.create({startTime:t,sortType:o});s=n,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.RECALL,i)){let{messageId:t,sentTime:n,exts:o,conversationType:i,conversationId:a}=e,d=[];utils.forEach(o,(e,t)=>{d.push({key:t,value:e})});let p=$root.lookup("codec.RecallMsgReq"),c=p.create({targetId:a,channelType:i,msgId:t,msgTime:n,exts:d});s=a,r=p.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.CLEAR_UNREAD,i)){let{conversations:t,userId:n}=e;t=utils.isArray(t)?t:[t];let o=$root.lookup("codec.ClearUnreadReq"),i=utils.map(t,({conversationType:e,conversationId:t,unreadIndex:n})=>({channelType:e,targetId:t,latestReadIndex:n})),a=o.create({conversations:i});s=n,r=o.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.SET_ALL_DISTURB,i)){let{userId:t,times:n,timezone:o,type:i}=e,a=$root.lookup("codec.UserUndisturb"),d=utils.isEqual(UNDISTURB_TYPE.DISTURB,i),p=a.create({switch:d,timezone:o,rules:n});s=t,r=a.encode(p).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_ALL_DISTURB,i)){let{userId:t}=e,n=$root.lookup("codec.Nil"),o=n.create({});s=t,r=n.encode(o).finish()}if(utils.isEqual(COMMAND_TOPICS.MARK_CONVERSATION_UNREAD,i)){let{userId:t,conversations:n}=e;n=utils.map(n,e=>{let{conversationId:t,conversationType:n,unreadTag:s}=e;return{channelType:n,targetId:t,unreadTag:s}});let o=$root.lookup("codec.ConversationsReq"),i=o.create({conversations:n});s=t,r=o.encode(i).finish()}if(utils.isInclude([COMMAND_TOPICS.SET_CHATROOM_ATTRIBUTES,COMMAND_TOPICS.REMOVE_CHATROOM_ATTRIBUTES],i)){let{chatroom:{id:t,attributes:n,options:o}}=e,{notify:i}=o,a=$root.lookup("codec.ChatAttBatchReq"),d={atts:n};utils.isUndefined(i)||utils.extend(d,{msg:JTextEncoder$1.encoder(i)});let p=a.create(d);s=t,r=a.encode(p).finish()}if(utils.isEqual(COMMAND_TOPICS.REMOVE_CONVERSATION,i)){let{conversations:t,userId:n}=e;t=utils.isArray(t)?t:[t];let o=utils.map(t,({conversationType:e,conversationId:t})=>({channelType:e,targetId:t})),i=$root.lookup("codec.DelConversationReq"),a=i.create({conversations:o});s=n,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.UPDATE_MESSAGE,i)){let{conversationId:t,conversationType:n,messageId:o,content:i,sentTime:a,msgName:d}=e,p=$root.lookup("codec.ModifyMsgReq");i=utils.toJSON(i);let c=p.create({channelType:n,targetId:t,msgId:o,msgTime:a,msgType:d,msgContent:JTextEncoder$1.encoder(i)});s=t,r=p.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.CLEAR_MESSAGE,i)){let{conversationId:t,conversationType:n,time:o}=e,i=$root.lookup("codec.CleanHisMsgReq"),a=i.create({channelType:n,targetId:t,cleanMsgTime:o});s=t,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.JOIN_CHATROOM,i)){let{chatroom:{id:t,isAutoCreate:n}}=e,o=$root.lookup("codec.ChatRoomReq"),i=o.create({chatId:t,isAutoCreate:n});s=t,r=o.encode(i).finish()}if(utils.isEqual(COMMAND_TOPICS.QUIT_CHATROOM,i)){let{chatroom:{id:t}}=e,n=$root.lookup("codec.ChatRoomReq"),o=n.create({chatId:t});s=t,r=n.encode(o).finish()}if(utils.isEqual(COMMAND_TOPICS.INSERT_CONVERSATION,i)){let{conversation:t,userId:n}=e,{conversationId:o,conversationType:i}=t,a=$root.lookup("codec.Conversation"),d=a.create({channelType:i,targetId:o});s=n,r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.MUTE_CONVERSATION,i)){let{userId:t,conversations:n}=e,o=utils.isArray(n)?n:[n];o=utils.map(o,e=>{let{conversationType:t,conversationId:n,undisturbType:s}=e;return{targetId:n,channelType:t,undisturbType:s}});let i=$root.lookup("codec.UndisturbConversReq"),a=i.create({userId:t,items:o});s=t,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.TOP_CONVERSATION,i)){let{userId:t,conversations:n}=e,o=utils.isArray(n)?n:[n];o=utils.map(o,e=>{let{conversationType:t,conversationId:n,isTop:s}=e;return{targetId:n,channelType:t,isTop:s}});let i=$root.lookup("codec.ConversationsReq"),a=i.create({conversations:o});s=t,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.REMOVE_MESSAGE,i)){let{userId:t,messages:n}=e,o=[],i="",a=CONVERATION_TYPE.PRIVATE;utils.forEach(n,e=>{let{conversationType:t,conversationId:n,messageIndex:s,sentTime:r,messageId:d}=e;i=n,a=t,o.push({msgId:d,msgIndex:s,msgTime:r})});let d=$root.lookup("codec.DelHisMsgsReq"),p=d.create({channelType:a,targetId:i,msgs:o});s=i,r=d.encode(p).finish()}if(utils.isInclude([COMMAND_TOPICS.ADD_MSG_REACTION,COMMAND_TOPICS.REMOVE_MSG_REACTION],i)){let{messageId:t,reactionId:n,userId:o,conversationId:i,conversationType:a}=e,d=$root.lookup("codec.MsgExt"),p=d.create({channelType:a,targetId:i,msgId:t,ext:{key:n,value:o}});s=t,r=d.encode(p).finish()}if(utils.isInclude([COMMAND_TOPICS.CONVERSATION_TAG_ADD,COMMAND_TOPICS.CONVERSATION_TAG_REMOVE],i)){let{userId:t,tag:n}=e,{name:i="",id:o,conversations:a=[]}=n,d=utils.map(a,({conversationId:e,conversationType:t})=>({targetId:e,channelType:t})),p=$root.lookup("codec.TagConvers"),c=p.create({tag:o,tagName:i,convers:d});s=t,r=p.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.TAG_REMOVE,i)){let{userId:t,tag:n}=e,o=utils.isArray(n)?n:[n];o=utils.map(o,e=>({tag:e.id}));let i=$root.lookup("codec.UserConverTags"),a=i.create({tags:o});s=t,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.CONVERSATION_TAG_QUERY,i)){let{userId:t}=e,n=$root.lookup("codec.Nil"),o=n.create({});s=t,r=n.encode(o).finish()}if(utils.isInclude([COMMAND_TOPICS.RTC_CREATE_ROOM,COMMAND_TOPICS.RTC_JOIN_ROOM],i)){let{room:t,user:n}=e,{id:o,type:a,option:d={}}=t,{cameraEnable:p=!1,micEnable:c=!1}=d,m=$root.lookup("codec.RtcRoomReq"),l=m.create({roomId:o,roomType:a,joinMember:{member:n,rtcState:RTC_STATE.NONE,cameraEnable:p,micEnable:c}});s=n.id,utils.isEqual(COMMAND_TOPICS.RTC_JOIN_ROOM,i)&&(s=t.id),r=m.encode(l).finish()}if(utils.isEqual(COMMAND_TOPICS.RTC_QUIT_ROOM,i)){let{room:t}=e,n=$root.lookup("codec.RtcRoomReq"),o=n.create({roomId:t.id,roomType:t.type});s=t.id,r=n.encode(o).finish()}if(utils.isEqual(COMMAND_TOPICS.RTC_QRY_ROOM,i)){let{room:t}=e,n=$root.lookup("codec.Nil"),o=n.create({});s=t.id,r=n.encode(o).finish()}if(utils.isEqual(COMMAND_TOPICS.RTC_PING,i)){let{room:t}=e,n=$root.lookup("codec.Nil"),o=n.create({});s=t.id,r=n.encode(o).finish()}if(utils.isEqual(COMMAND_TOPICS.RTC_INVITE,i)){let{roomId:t,roomType:n,memberIds:o,channel:i,user:a,mediaType:d,ext:p}=e,c=$root.lookup("codec.RtcInviteReq"),m=c.create({roomId:t,roomType:n,targetIds:o,rtcChannel:i,rtcMediaType:d,ext:p||""});s=t,r=c.encode(m).finish()}if(utils.isEqual(COMMAND_TOPICS.RTC_UPDATE_STATE,i)){let{memberId:t,state:n,roomId:o}=e,i=$root.lookup("codec.RtcMember"),a=i.create({member:{userId:t},rtcState:n});s=o,r=i.encode(a).finish()}if(utils.isInclude([COMMAND_TOPICS.RTC_ACCEPT,COMMAND_TOPICS.RTC_HANGUP],i)){let{roomId:t,user:n}=e,o=$root.lookup("codec.Nil"),i=o.create({});s=t,r=o.encode(i).finish()}if(utils.isInclude([COMMAND_TOPICS.SET_TOP_MSG,COMMAND_TOPICS.DEL_TOP_MSG],i)){let{conversationId:t,conversationType:n,messageId:o,isTop:i,userId:a}=e,d=$root.lookup("codec.SetTopMsgReq"),p=d.create({channelType:n,targetId:t,msgId:o});s=a,r=d.encode(p).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_TOP_MSG,i)){let{conversationId:t,conversationType:n}=e,o=$root.lookup("codec.GetTopMsgReq"),i=o.create({channelType:n,targetId:t});s=t,r=o.encode(i).finish()}if(utils.isInclude([COMMAND_TOPICS.MSG_ADD_FAVORITE,COMMAND_TOPICS.MSG_REMOVE_FAVORITE],i)){let{messages:t,userId:n}=e,o=$root.lookup("codec.FavoriteMsgIds"),i=utils.map(t,e=>{let{conversationId:t,conversationType:n,senderId:s,messageId:o}=e;return{channelType:n,receiverId:t,senderId:s,msgId:o}}),a=o.create({items:i});s=n,r=o.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.MSG_QRY_FAVORITE,i)){let{limit:t,offset:n,userId:o}=e,i=$root.lookup("codec.QryFavoriteMsgsReq"),a=i.create({limit:t,offset:n});s=o,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.UPLOAD_PUSH_TOKEN,i)){let{deviceId:t,pushToken:n,platform:o,packageName:i,pushChannel:a,userId:d}=e,p=$root.lookup("codec.RegPushTokenReq"),c=p.create({deviceId:t,pushToken:n,platform:o,packageName:i,pushChannel:a});s=d,r=p.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.SWITCH_PUSH,i)){let{isOpen:t}=e,n=$root.lookup("codec.PushSwitch"),i=n.create({switch:t});s=o,r=n.encode(i).finish()}if(utils.isEqual(COMMAND_TOPICS.BATCH_TRANSLATE,i)){let{userId:t,content:n,sourceLang:o,targetLang:i}=e,a=$root.lookup("codec.TransReq"),d=[];utils.forEach(n,(e,t)=>{d.push({key:t,content:e})}),o=utils.isEqual(o,"auto")?"":o;let p=a.create({items:d,sourceLang:o,targetLang:i});s=t,r=a.encode(p).finish()}let a=$root.lookup("codec.QueryMsgBody"),d=a.create({index:n,topic:i,targetId:s,data:r}),p=a.encode(d).finish();return{buffer:p}}function getPingBody(){return{}}function Encoder(e){let t=$root.lookup("codec.ImWebsocketMsg"),n=(n,s)=>{let o={},i={},r={version:1,cmd:n,qos:QOS.YES},{counter:a,callback:d,index:p}=s;switch(n){case SIGNAL_CMD.CONNECT:o=getConnectBody(s),i={counter:a};break;case SIGNAL_CMD.PUBLISH:o=getPublishBody(s),i={callback:d,data:s.data,counter:a};break;case SIGNAL_CMD.PUBLISH_ACK:o=getPublishAckBody(s),i={callback:d,data:s.data,counter:a};break;case SIGNAL_CMD.QUERY:o=getQueryBody(s);let{targetId:e,userId:t,topic:n}=s.data;i={callback:d,index:p,topic:n,targetId:e,counter:a};break;case SIGNAL_CMD.PING:o=getPingBody(),i={counter:a}}if(e.set(p,i),o.buffer){let t=e.get(STORAGE.CRYPTO_RANDOM),n=common.encrypto(o.buffer,t);utils.extend(r,{payload:n})}let c=t.create(r),m=t.encode(c).finish();return m};return{encode:n}}function InfoCacher(){let e=Cache(),t=(t,n={})=>{let s=e.get(t);utils.isEmpty(s)&&(s={updatedTime:0}),n.updatedTime>s.updatedTime&&e.set(t,n)},n=t=>{let n=e.get(t)||{};return n},s=()=>{e.clear()};return{set:t,get:n,clear:s}}let $groupCacher=InfoCacher();var GroupCacher={...$groupCacher};let $userCacher=InfoCacher();var UserCacher={...$userCacher};function msgFormat(e,{currentUser:t}){let{msgItems:n,converTags:s,undisturbType:o,msgExtSet:i,senderId:r,unreadIndex:a,memberCount:d,referMsg:p,readCount:c,msgId:m,msgTime:l,msgType:E,msgContent:u,type:g,targetId:T,mentionInfo:y,isSend:_,msgIndex:C,isRead:S,flags:O,targetUserInfo:f,groupInfo:I,grpMemberInfo:R,destroyTime:A,lifeTimeAfterRead:N,readTime:M}=e,v="";u&&0<u.length&&(v=JTextEncoder$1.decoder(u),v=utils.parse(v)),f=f||{userId:r},I=I||{groupId:T};// 默认更新内存数据
88
+ }}let u={msgType:t,mentionInfo:E,flags:o,referMsg:a,mergedMsgs:i,clientUid:p,msgContent:JTextEncoder$1.encoder(n)};if(d){let{text:e,title:t}=d,n={title:t,pushText:e};n=utils.clone(n),utils.isEmpty(n)||(u=utils.extend(u,{pushData:n}))}utils.isNumber(c)&&(u.lifeTime=c),utils.isNumber(m)&&(u.lifeTimeAfterRead=m);let g=l.create(u);r=l.encode(g).finish()}let a=$root.lookup("codec.PublishMsgBody"),d=a.create({index:n,targetId:s,topic:i,data:r}),p=a.encode(d).finish();return{buffer:p}}function getPublishAckBody({data:e}){let{msgIndex:t,ackIndex:n}=e,s=$root.lookup("codec.PublishAckMsgBody"),o=s.create({index:n,msgIndex:t,code:0}),i=s.encode(o).finish();return{buffer:i}}function getQueryBody({data:e,callback:t,index:n}){let{targetId:s,userId:o,topic:i}=e,r=[];if(utils.isEqual(i,COMMAND_TOPICS.HISTORY_MESSAGES)){let{conversationType:t,time:n,count:o,order:i,names:a}=e,d=$root.lookup("codec.QryHisMsgsReq"),p=d.create({converId:s,type:t,startTime:n,count:o,order:i,msgTypes:a});r=d.encode(p).finish()}if(utils.isEqual(i,COMMAND_TOPICS.CONVERSATIONS)){let{count:t,time:n,order:i,conversationType:a,tag:d}=e;s=o;let p=$root.lookup("codec.QryConversationsReq"),c={startTime:n,count:t,order:i};utils.isUndefined(a)||utils.extend(c,{channelType:a}),d&&utils.extend(c,{tag:d});let m=p.create(c);r=p.encode(m).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_CONVERSATION,i)){let{conversation:t,userId:n}=e,{conversationId:o,conversationType:i}=t,a=$root.lookup("codec.QryConverReq"),d=a.create({channelType:i,targetId:o});s=n,r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.SYNC_CONVERSATIONS,i)){let{count:t,syncTime:n}=e;s=o;let i=$root.lookup("codec.SyncConversationsReq"),a=i.create({startTime:n,count:t});r=i.encode(a).finish()}if(utils.isEqual(i,COMMAND_TOPICS.SYNC_MESSAGES)){let{syncTime:t,containsSendBox:n,sendBoxSyncTime:i}=e;s=o;let a=$root.lookup("codec.SyncMsgReq"),d=a.create({syncTime:t,containsSendBox:n,sendBoxSyncTime:i});r=a.encode(d).finish()}if(utils.isEqual(i,COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES)){let{syncTime:t,chatroomId:n,count:o}=e,i=$root.lookup("codec.SyncChatroomReq"),a=i.create({syncTime:t,chatroomId:n,count:o});s=n,r=i.encode(a).finish()}if(utils.isEqual(i,COMMAND_TOPICS.SYNC_CHATROOM_ATTRS)){let{syncTime:t,chatroomId:n}=e,o=$root.lookup("codec.SyncChatroomReq"),i=o.create({syncTime:t,chatroomId:n});s=n,r=o.encode(i).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_MSG_BY_IDS,i)){let{conversationId:t,conversationType:n,messageIds:o,userId:i}=e,a=$root.lookup("codec.QryHisMsgByIdsReq"),d=a.create({channelType:n,targetId:t,msgIds:o});s=i,r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_UNREAD_TOTLAL_CONVERSATION,i)){s=o;let t=$root.lookup("codec.QryTotalUnreadCountReq"),{conversationTypes:i=[],ignoreConversations:a=[],tag:n}=e,d=[];utils.forEach(a,({conversationId:e,conversationType:t})=>{d.push({targetId:e,channelType:t})});let p={channelTypes:i,ignoreConvers:d};n&&utils.extend(p,{tag:n});let c=t.create({filter:p});r=t.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.CLEAR_UNREAD_TOTLAL_CONVERSATION,i)){s=o;let e=$root.lookup("codec.QryTotalUnreadCountReq"),t=e.create({});r=e.encode(t).finish()}if(utils.isEqual(COMMAND_TOPICS.READ_MESSAGE,i)){let{messages:t}=e;t=utils.isArray(t)?t:[t];let n=CONVERATION_TYPE.PRIVATE,o="",i=utils.map(t,e=>{let{conversationType:t,conversationId:i,sentTime:r,messageId:a,unreadIndex:d}=e;return n=t,o=i,s=i,{msgId:a,msgTime:r,msgIndex:d}}),a=$root.lookup("codec.MarkReadReq"),d=a.create({channelType:n,targetId:o,msgs:i});r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_READ_MESSAGE_DETAIL,i)){let{message:t}=e,{conversationType:n,conversationId:o,messageId:i}=t,a=$root.lookup("codec.QryReadDetailReq"),d=a.create({channelType:n,targetId:o,msgId:i});s=i,r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_MENTION_MSGS,i)){let{conversationId:t,conversationType:n,count:o,order:i,messageIndex:a,userId:d}=e,p=$root.lookup("codec.QryMentionMsgsReq"),c=p.create({targetId:t,channelType:n,count:o,order:i,startIndex:a});s=d,r=p.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_FILE_TOKEN,i)){s=o;let{type:t,ext:n}=e,i=$root.lookup("codec.QryUploadTokenReq"),a=i.create({fileType:t,ext:n});r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_USER_INFO,i)){s=o;let e=$root.lookup("codec.UserIdReq"),t=e.create({userId:o});r=e.encode(t).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_MERGE_MSGS,i)){let{messageId:t,time:n,count:o,order:i}=e;s=t;let a=$root.lookup("codec.QryMergedMsgsReq"),d=a.create({startTime:n,count:o,order:i});r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_FIRST_UNREAD_MSG,i)){let{conversationType:t,conversationId:n}=e;s=n;let o=$root.lookup("codec.QryFirstUnreadMsgReq"),i=o.create({channelType:t,targetId:n});r=o.encode(i).finish()}if(utils.isEqual(COMMAND_TOPICS.QUERY_TOP_CONVERSATIONS,i)){let{time:t,userId:n,sortType:o}=e,i=$root.lookup("codec.QryTopConversReq"),a=i.create({startTime:t,sortType:o});s=n,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.RECALL,i)){let{messageId:t,sentTime:n,exts:o,conversationType:i,conversationId:a}=e,d=[];utils.forEach(o,(e,t)=>{d.push({key:t,value:e})});let p=$root.lookup("codec.RecallMsgReq"),c=p.create({targetId:a,channelType:i,msgId:t,msgTime:n,exts:d});s=a,r=p.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.CLEAR_UNREAD,i)){let{conversations:t,userId:n}=e;t=utils.isArray(t)?t:[t];let o=$root.lookup("codec.ClearUnreadReq"),i=utils.map(t,({conversationType:e,conversationId:t,unreadIndex:n})=>({channelType:e,targetId:t,latestReadIndex:n})),a=o.create({conversations:i});s=n,r=o.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.SET_ALL_DISTURB,i)){let{userId:t,times:n,timezone:o,type:i}=e,a=$root.lookup("codec.UserUndisturb"),d=utils.isEqual(UNDISTURB_TYPE.DISTURB,i),p=a.create({switch:d,timezone:o,rules:n});s=t,r=a.encode(p).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_ALL_DISTURB,i)){let{userId:t}=e,n=$root.lookup("codec.Nil"),o=n.create({});s=t,r=n.encode(o).finish()}if(utils.isEqual(COMMAND_TOPICS.MARK_CONVERSATION_UNREAD,i)){let{userId:t,conversations:n}=e;n=utils.map(n,e=>{let{conversationId:t,conversationType:n,unreadTag:s}=e;return{channelType:n,targetId:t,unreadTag:s}});let o=$root.lookup("codec.ConversationsReq"),i=o.create({conversations:n});s=t,r=o.encode(i).finish()}if(utils.isInclude([COMMAND_TOPICS.SET_CHATROOM_ATTRIBUTES,COMMAND_TOPICS.REMOVE_CHATROOM_ATTRIBUTES],i)){let{chatroom:{id:t,attributes:n,options:o}}=e,{notify:i}=o,a=$root.lookup("codec.ChatAttBatchReq"),d={atts:n};utils.isUndefined(i)||utils.extend(d,{msg:JTextEncoder$1.encoder(i)});let p=a.create(d);s=t,r=a.encode(p).finish()}if(utils.isEqual(COMMAND_TOPICS.REMOVE_CONVERSATION,i)){let{conversations:t,userId:n}=e;t=utils.isArray(t)?t:[t];let o=utils.map(t,({conversationType:e,conversationId:t})=>({channelType:e,targetId:t})),i=$root.lookup("codec.DelConversationReq"),a=i.create({conversations:o});s=n,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.UPDATE_MESSAGE,i)){let{conversationId:t,conversationType:n,messageId:o,content:i,sentTime:a,msgName:d}=e,p=$root.lookup("codec.ModifyMsgReq");i=utils.toJSON(i);let c=p.create({channelType:n,targetId:t,msgId:o,msgTime:a,msgType:d,msgContent:JTextEncoder$1.encoder(i)});s=t,r=p.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.CLEAR_MESSAGE,i)){let{conversationId:t,conversationType:n,time:o}=e,i=$root.lookup("codec.CleanHisMsgReq"),a=i.create({channelType:n,targetId:t,cleanMsgTime:o});s=t,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.JOIN_CHATROOM,i)){let{chatroom:{id:t,isAutoCreate:n}}=e,o=$root.lookup("codec.ChatRoomReq"),i=o.create({chatId:t,isAutoCreate:n});s=t,r=o.encode(i).finish()}if(utils.isEqual(COMMAND_TOPICS.QUIT_CHATROOM,i)){let{chatroom:{id:t}}=e,n=$root.lookup("codec.ChatRoomReq"),o=n.create({chatId:t});s=t,r=n.encode(o).finish()}if(utils.isEqual(COMMAND_TOPICS.INSERT_CONVERSATION,i)){let{conversation:t,userId:n}=e,{conversationId:o,conversationType:i}=t,a=$root.lookup("codec.Conversation"),d=a.create({channelType:i,targetId:o});s=n,r=a.encode(d).finish()}if(utils.isEqual(COMMAND_TOPICS.MUTE_CONVERSATION,i)){let{userId:t,conversations:n}=e,o=utils.isArray(n)?n:[n];o=utils.map(o,e=>{let{conversationType:t,conversationId:n,undisturbType:s}=e;return{targetId:n,channelType:t,undisturbType:s}});let i=$root.lookup("codec.UndisturbConversReq"),a=i.create({userId:t,items:o});s=t,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.TOP_CONVERSATION,i)){let{userId:t,conversations:n}=e,o=utils.isArray(n)?n:[n];o=utils.map(o,e=>{let{conversationType:t,conversationId:n,isTop:s}=e;return{targetId:n,channelType:t,isTop:s}});let i=$root.lookup("codec.ConversationsReq"),a=i.create({conversations:o});s=t,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.REMOVE_MESSAGE,i)){let{userId:t,messages:n}=e,o=[],i="",a=CONVERATION_TYPE.PRIVATE;utils.forEach(n,e=>{let{conversationType:t,conversationId:n,messageIndex:s,sentTime:r,messageId:d}=e;i=n,a=t,o.push({msgId:d,msgIndex:s,msgTime:r})});let d=$root.lookup("codec.DelHisMsgsReq"),p=d.create({channelType:a,targetId:i,msgs:o});s=i,r=d.encode(p).finish()}if(utils.isInclude([COMMAND_TOPICS.ADD_MSG_REACTION,COMMAND_TOPICS.REMOVE_MSG_REACTION],i)){let{messageId:t,reactionId:n,userId:o,conversationId:i,conversationType:a}=e,d=$root.lookup("codec.MsgExt"),p=d.create({channelType:a,targetId:i,msgId:t,ext:{key:n,value:o}});s=t,r=d.encode(p).finish()}if(utils.isInclude([COMMAND_TOPICS.CONVERSATION_TAG_ADD,COMMAND_TOPICS.CONVERSATION_TAG_REMOVE],i)){let{userId:t,tag:n}=e,{name:i="",id:o,conversations:a=[]}=n,d=utils.map(a,({conversationId:e,conversationType:t})=>({targetId:e,channelType:t})),p=$root.lookup("codec.TagConvers"),c=p.create({tag:o,tagName:i,convers:d});s=t,r=p.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.TAG_REMOVE,i)){let{userId:t,tag:n}=e,o=utils.isArray(n)?n:[n];o=utils.map(o,e=>({tag:e.id}));let i=$root.lookup("codec.UserConverTags"),a=i.create({tags:o});s=t,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.CONVERSATION_TAG_QUERY,i)){let{userId:t}=e,n=$root.lookup("codec.Nil"),o=n.create({});s=t,r=n.encode(o).finish()}if(utils.isInclude([COMMAND_TOPICS.RTC_CREATE_ROOM,COMMAND_TOPICS.RTC_JOIN_ROOM],i)){let{room:t,user:n}=e,{id:o,type:a,option:d={}}=t,{cameraEnable:p=!1,micEnable:c=!1}=d,m=$root.lookup("codec.RtcRoomReq"),l=m.create({roomId:o,roomType:a,joinMember:{member:n,rtcState:RTC_STATE.NONE,cameraEnable:p,micEnable:c}});s=n.id,utils.isEqual(COMMAND_TOPICS.RTC_JOIN_ROOM,i)&&(s=t.id),r=m.encode(l).finish()}if(utils.isEqual(COMMAND_TOPICS.RTC_QUIT_ROOM,i)){let{room:t}=e,n=$root.lookup("codec.RtcRoomReq"),o=n.create({roomId:t.id,roomType:t.type});s=t.id,r=n.encode(o).finish()}if(utils.isEqual(COMMAND_TOPICS.RTC_QRY_ROOM,i)){let{room:t}=e,n=$root.lookup("codec.Nil"),o=n.create({});s=t.id,r=n.encode(o).finish()}if(utils.isEqual(COMMAND_TOPICS.RTC_PING,i)){let{room:t}=e,n=$root.lookup("codec.Nil"),o=n.create({});s=t.id,r=n.encode(o).finish()}if(utils.isEqual(COMMAND_TOPICS.RTC_INVITE,i)){let{roomId:t,roomType:n,memberIds:o,channel:i,user:a,mediaType:d,ext:p}=e,c=$root.lookup("codec.RtcInviteReq"),m=c.create({roomId:t,roomType:n,targetIds:o,rtcChannel:i,rtcMediaType:d,ext:p||""});s=t,r=c.encode(m).finish()}if(utils.isEqual(COMMAND_TOPICS.RTC_UPDATE_STATE,i)){let{memberId:t,state:n,roomId:o}=e,i=$root.lookup("codec.RtcMember"),a=i.create({member:{userId:t},rtcState:n});s=o,r=i.encode(a).finish()}if(utils.isInclude([COMMAND_TOPICS.RTC_ACCEPT,COMMAND_TOPICS.RTC_HANGUP],i)){let{roomId:t,user:n}=e,o=$root.lookup("codec.Nil"),i=o.create({});s=t,r=o.encode(i).finish()}if(utils.isInclude([COMMAND_TOPICS.SET_TOP_MSG,COMMAND_TOPICS.DEL_TOP_MSG],i)){let{conversationId:t,conversationType:n,messageId:o,isTop:i,userId:a}=e,d=$root.lookup("codec.SetTopMsgReq"),p=d.create({channelType:n,targetId:t,msgId:o});s=a,r=d.encode(p).finish()}if(utils.isEqual(COMMAND_TOPICS.GET_TOP_MSG,i)){let{conversationId:t,conversationType:n}=e,o=$root.lookup("codec.GetTopMsgReq"),i=o.create({channelType:n,targetId:t});s=t,r=o.encode(i).finish()}if(utils.isInclude([COMMAND_TOPICS.MSG_ADD_FAVORITE,COMMAND_TOPICS.MSG_REMOVE_FAVORITE],i)){let{messages:t,userId:n}=e,o=$root.lookup("codec.FavoriteMsgIds"),i=utils.map(t,e=>{let{conversationId:t,conversationType:n,senderId:s,messageId:o}=e;return{channelType:n,receiverId:t,senderId:s,msgId:o}}),a=o.create({items:i});s=n,r=o.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.MSG_QRY_FAVORITE,i)){let{limit:t,offset:n,userId:o}=e,i=$root.lookup("codec.QryFavoriteMsgsReq"),a=i.create({limit:t,offset:n});s=o,r=i.encode(a).finish()}if(utils.isEqual(COMMAND_TOPICS.UPLOAD_PUSH_TOKEN,i)){let{deviceId:t,pushToken:n,platform:o,packageName:i,pushChannel:a,userId:d}=e,p=$root.lookup("codec.RegPushTokenReq"),c=p.create({deviceId:t,pushToken:n,platform:o,packageName:i,pushChannel:a});s=d,r=p.encode(c).finish()}if(utils.isEqual(COMMAND_TOPICS.SWITCH_PUSH,i)){let{isOpen:t}=e,n=$root.lookup("codec.PushSwitch"),i=n.create({switch:t});s=o,r=n.encode(i).finish()}if(utils.isEqual(COMMAND_TOPICS.BATCH_TRANSLATE,i)){let{userId:t,content:n,sourceLang:o,targetLang:i}=e,a=$root.lookup("codec.TransReq"),d=[];utils.forEach(n,(e,t)=>{d.push({key:t,content:e})}),o=utils.isEqual(o,"auto")?"":o;let p=a.create({items:d,sourceLang:o,targetLang:i});s=t,r=a.encode(p).finish()}let a=$root.lookup("codec.QueryMsgBody"),d=a.create({index:n,topic:i,targetId:s,data:r}),p=a.encode(d).finish();return{buffer:p}}function getPingBody(){return{}}function Encoder(e,t){let n=$root.lookup("codec.ImWebsocketMsg"),s=(s,o)=>{let i={},r={},a={version:1,cmd:s,qos:QOS.YES},{counter:d,callback:p,index:c}=o;switch(s){case SIGNAL_CMD.CONNECT:i=getConnectBody(o),r={counter:d};break;case SIGNAL_CMD.PUBLISH:i=getPublishBody(o),r={callback:p,data:o.data,counter:d};break;case SIGNAL_CMD.PUBLISH_ACK:i=getPublishAckBody(o),r={callback:p,data:o.data,counter:d};break;case SIGNAL_CMD.QUERY:i=getQueryBody(o);let{targetId:e,userId:t,topic:n}=o.data;r={callback:p,index:c,topic:n,targetId:e,counter:d};break;case SIGNAL_CMD.PING:i=getPingBody(),r={counter:d}}if(e.set(c,r),i.buffer){let n=e.get(STORAGE.CRYPTO_RANDOM),s=common.encrypto(i.buffer,n),{msgEncryptHook:o}=t.getConfig();o=o||{},utils.isFunction(o.onEncrypt)&&(s=o.onEncrypt(s)),utils.extend(a,{payload:s})}let m=n.create(a),l=n.encode(m).finish();return l};return{encode:s}}function InfoCacher(){let e=Cache(),t=(t,n={})=>{let s=e.get(t);utils.isEmpty(s)&&(s={updatedTime:0}),n.updatedTime>s.updatedTime&&e.set(t,n)},n=t=>{let n=e.get(t)||{};return n},s=()=>{e.clear()};return{set:t,get:n,clear:s}}let $groupCacher=InfoCacher();var GroupCacher={...$groupCacher};let $userCacher=InfoCacher();var UserCacher={...$userCacher};function msgFormat(e,{currentUser:t}){let{msgItems:n,converTags:s,undisturbType:o,msgExtSet:i,senderId:r,unreadIndex:a,memberCount:d,referMsg:p,readCount:c,msgId:m,msgTime:l,msgType:E,msgContent:u,type:g,targetId:T,mentionInfo:y,isSend:_,msgIndex:C,isRead:S,flags:O,targetUserInfo:f,groupInfo:I,grpMemberInfo:R,destroyTime:A,lifeTimeAfterRead:N,readTime:M}=e,v="";u&&0<u.length&&(v=JTextEncoder$1.decoder(u),v=utils.parse(v)),f=f||{userId:r},I=I||{groupId:T};// 默认更新内存数据
86
89
  let h=f.userId,D=I.groupId;GroupCacher.set(D,I),UserCacher.set(h,f);let U=common.formatUser(f);// 特性检查,如果没有 name 尝试从内存获取信息
87
90
  if(utils.isUndefined(U.name)){let e=UserCacher.get(h);U=utils.isEmpty(e)?{id:h}:e}if(utils.isUndefined(I.groupName)){let e=GroupCacher.get(D);I=utils.isEmpty(e)?{id:D}:e}if(y){let{targetUsers:e,mentionType:t}=y,n=utils.map(e,e=>(e=common.formatUser(e),e));y={mentionType:t,members:n}}let b={};if(p){let e=p.msgContent||"";0!=e.length&&(e=JTextEncoder$1.decoder(e),b.content=utils.parse(e)),p.targetUserInfo=common.formatUser(p.targetUserInfo||{}),utils.extend(b,{name:p.msgType,messageId:p.messageIndex,messageIndex:p.msgIndex,sentTime:p.msgTime,sender:p.targetUserInfo})}let x=common.formatter.toMsg(O),G=t,k={};i&&(i=utils.map(i,e=>{let{key:t,value:n,timestamp:s,userInfo:o}=e,i=common.formatUser(o);return{key:t,value:n,user:i,timestamp:s}}),k=utils.groupBy(i,["key"])),s=s||[];let q=utils.map(s,e=>{let{tag:t,tagName:n,tagType:s}=e;return{id:t,name:n,type:s}}),L={};utils.isEqual(CONVERATION_TYPE.GROUP,g)&&(L=common.formatGroupMember(R));let P={conversationType:g,conversationId:T,conversationTitle:"",conversationPortrait:"",conversationExts:{},sender:utils.clone(U),groupMember:L,messageId:m,tid:m,sentTime:l,name:E,isSender:utils.isEqual(G.id,r),messageIndex:C,mentionInfo:y,isRead:!!S,readTime:M||0,isUpdated:x.isUpdated,isMuted:x.isMute,isMass:x.isMass,isStatus:x.isStatus,isStreamMsg:x.isStream,referMsg:b,sentState:MESSAGE_SENT_STATE.SUCCESS,undisturbType:o||0,unreadIndex:a||0,flags:O,reactions:k,tags:q,destroyTime:A||0};utils.isNumber(N)&&(P.lifeTimeAfterRead=N),P.isSender&&utils.extend(P.sender,G);let V=[];if(P.isStreamMsg&&(V=formatStreams(n)),utils.extend(P,{streams:V}),utils.isEqual(g,CONVERATION_TYPE.GROUP)){let{groupName:e,groupPortrait:t,extFields:n,groupId:s,updatedTime:o}=I||{extFields:{}};n=utils.toObject(n),utils.extend(P,{conversationTitle:e||"",conversationPortrait:t||"",conversationExts:n,conversationUpdatedTime:I.updatedTime||0,unreadCount:d-c,readCount:c})}if(utils.isEqual(g,CONVERATION_TYPE.PRIVATE)&&utils.extend(P,{conversationTitle:U.name,conversationPortrait:U.portrait,conversationExts:U.exts,conversationUpdatedTime:U.updatedTime,conversationUserType:U.userType||0}),utils.isInclude([MESSAGE_TYPE.RECALL_INFO,MESSAGE_TYPE.RECALL],E)&&(v=utils.rename(v,{msg_id:"messageId",msg_time:"sentTime"})),utils.isEqual(MESSAGE_TYPE.MODIFY,E)&&(v=utils.rename(v,{msg_type:"name",msg_content:"content",msg_id:"messageId",msg_seq:"messageIndex",msg_time:"sentTime"})),utils.isEqual(MESSAGE_TYPE.READ_MSG,E)){delete v.index_scopes;let{msgs:e}=v;e=utils.map(e,({msg_id:e})=>({messageId:e})),utils.extend(v,{msgs:e})}if(utils.isEqual(MESSAGE_TYPE.READ_GROUP_MSG,E)){let{msgs:e}=v;e=utils.map(e,({msg_id:e,member_count:t,read_count:n})=>({messageId:e,unreadCount:t-n,readCount:n})),utils.extend(v,{msgs:e})}if(utils.isEqual(MESSAGE_TYPE.CLEAR_UNREAD,E)){let{conversations:e}=v;e=utils.map(e,({channel_type:e,target_id:t,latest_read_index:n})=>({conversationType:e,conversationId:t,unreadIndex:n})),utils.extend(v,{conversations:e})}if(utils.isEqual(MESSAGE_TYPE.COMMAND_UNDISTURB,E)){let{conversations:e}=v;e=utils.map(e,e=>({conversationId:e.target_id,conversationType:e.channel_type,undisturbType:e.undisturb_type})),utils.extend(v,{conversations:e})}if(utils.isEqual(MESSAGE_TYPE.COMMAND_TOPCONVERS,E)){let{conversations:e}=v;e=utils.map(e,e=>({conversationId:e.target_id,conversationType:e.channel_type,isTop:!!e.is_top})),utils.extend(v,{conversations:e})}if(utils.isEqual(MESSAGE_TYPE.COMMAND_REMOVE_CONVERS,E)){let{conversations:t}=v;t=utils.map(t,t=>({conversationId:t.target_id,conversationType:t.channel_type,time:e.msgTime})),utils.extend(v,{conversations:t})}if(utils.isEqual(MESSAGE_TYPE.COMMAND_DELETE_MSGS,E)){let t=utils.map(v.msgs,t=>({tid:t.msg_id,messageId:t.msg_id,conversationId:e.targetId,conversationType:v.channel_type}));v={conversationId:e.targetId,conversationType:v.channel_type,messages:t}}if(utils.isEqual(MESSAGE_TYPE.CLEAR_MSG,E)&&(v={cleanTime:v.clean_time,conversationType:v.channel_type,conversationId:e.targetId,senderId:v.sender_id}),utils.isEqual(MESSAGE_TYPE.COMMAND_ADD_CONVER,E)){let e=v.conversation,{target_id:t,channel_type:n,sort_time:s,sync_time:o,target_user_info:i={}}=e,{nickname:r,user_portrait:a,ext_fields:d,updated_time:p}=i;v={conversationId:t,conversationType:n,conversationTitle:r,conversationPortrait:a,conversationExts:d,latestMessage:{conversationId:t,conversationType:n},unreadCount:0,updatedTime:p,sortTime:s,syncTime:o}}if(utils.isEqual(MESSAGE_TYPE.COMMAND_CLEAR_TOTALUNREAD,E)&&(v={clearTime:v.clear_time}),utils.isEqual(MESSAGE_TYPE.COMMAND_CONVERSATION_TAG_ADD,E)){let{tag:e,tag_name:t,convers:n}=v;n=n||[],n=utils.map(n,e=>({conversationId:e.target_id,conversationType:e.channel_type})),v={id:e,name:t,conversations:n}}if(utils.isEqual(MESSAGE_TYPE.COMMAND_CONVERSATION_TAG_REMOVE,E)){let{tags:e}=v;e=utils.map(e,e=>({id:e.tag})),v={tags:e}}if(utils.isEqual(MESSAGE_TYPE.COMMAND_REMOVE_CONVERS_FROM_TAG,E)){let{tag:e,convers:t}=v;t=utils.map(t,e=>({conversationId:e.target_id,conversationType:e.channel_type})),v={id:e,conversations:t}}if(utils.isEqual(MESSAGE_TYPE.COMMAND_MARK_UNREAD,E)){let e=v.conversations,t=utils.map(e,e=>{let{unread_tag:t,channel_type:n,target_id:s}=e;return{conversationId:s,conversationType:n,unreadTag:t}});v={conversations:t}}if(utils.isEqual(MESSAGE_TYPE.COMMAND_MSG_EXSET,E)){let{channel_type:e,msg_id:t,exts:n}=v,s=utils.map(n,e=>{let{is_del:t,timestamp:n,key:s,value:o,user:i}=e;s=unescape(s);let r={};return i&&(r={id:i.user_id,name:i.nickname,portrait:i.user_portrait}),{isRemove:!!t,key:s,value:o,timestamp:n,user:r}});v={conversationId:T,conversationType:g,messageId:t,reactions:s}}return utils.extend(P,{content:v}),P}function formatConversations$1(e,t={}){return e.map(e=>{let{msg:n,targetId:s,unreadCount:o,sortTime:i,topUpdatedTime:r,targetUserInfo:a,groupInfo:d,syncTime:p,undisturbType:c,mentions:m,channelType:l,latestReadIndex:E,latestUnreadIndex:u,isTop:g,unreadTag:T,converTags:y}=e;n||(n={msgContent:[]});let{topic:_,currentUser:C}=t;if(utils.extend(n,{targetId:s}),o=o||0,T=T||0,m=m||{},!utils.isEmpty(m)){let{isMentioned:e,senders:t,mentionMsgs:n}=m;t=utils.map(t,e=>common.formatUser(e)),n=utils.map(n,e=>{let{senderId:t,msgId:n,msgTime:s,mentionType:o}=e;return{senderId:t,messageId:n,sentTime:s,mentionType:o}}),m={isMentioned:e,senders:t,msgs:n,count:n.length}}let S={};if(utils.isEqual(n.msgContent.length,0)||(S=msgFormat(n,{currentUser:C})),utils.isEqual(l,CONVERATION_TYPE.GROUP)){d=d||{extFields:{}};let{groupName:e,groupPortrait:t,extFields:n,groupId:s,updatedTime:o}=d;n=utils.toObject(n),utils.extend(S,{conversationTitle:e||"",conversationPortrait:t||"",conversationExts:n,conversationUpdatedTime:o||0}),GroupCacher.set(s,d)}if(utils.isEqual(l,CONVERATION_TYPE.PRIVATE)){a=a||{extFields:{}};let{userPortrait:e,nickname:t,extFields:n,userId:s,updatedTime:o,userType:i}=a;n=utils.toObject(n),utils.extend(S,{conversationTitle:t||"",conversationPortrait:e||"",conversationExts:n,conversationUpdatedTime:o||0,conversationUserType:i||0}),UserCacher.set(s,a)}let{conversationTitle:O,conversationPortrait:f,conversationExts:I,conversationUpdatedTime:R,conversationUserType:A}=S;y=y||[];let N=utils.map(y,e=>{let{tag:t,tagName:n,tagType:s}=e;return{id:t,name:n,type:s}});return{conversationType:l,conversationId:s,unreadCount:o,sortTime:i,topUpdatedTime:r||0,latestMessage:S,conversationTitle:O,conversationPortrait:f,conversationUpdatedTime:R,conversationUserType:A,conversationExts:I,mentions:m,syncTime:p,undisturbType:c||0,latestReadIndex:E,latestUnreadIndex:u,unreadTag:T,tags:N,isTop:!!g}})}function formatRTCRoom(e){let{roomId:t,roomType:n,members:s}=e;return s=utils.map(s,e=>{let{member:t,rtcState:n,cameraEnable:s,micEnable:o,callTime:i,connectTime:r,hangupTime:a,inviter:d}=e;return t=common.formatUser(t),d=common.formatUser(d),{member:t,rtcState:n,cameraEnable:s,micEnable:o,callTime:i,connectTime:r,hangupTime:a,inviter:d}}),{room:{id:t,type:n},members:s}}function formatStreams(e){let t=utils.map(e,e=>formatStream(e));return t}function formatStream(e){let{event:t,subSeq:n,partialContent:s}=e,o="";return s&&0<s.length&&(o=JTextEncoder$1.decoder(s),o=utils.parse(o)),{event:t,seq:n,content:o}}var tools$1={msgFormat,formatConversations:formatConversations$1,formatRTCRoom,formatStreams};function getQueryAckBody(e,{cache:t,currentUser:n}){let s=$root.lookup("codec.QueryAckMsgBody"),o=s.decode(e),{index:i,data:r,code:a,timestamp:d}=o,{topic:p,targetId:c}=t.get(i),m={};return utils.isInclude([COMMAND_TOPICS.HISTORY_MESSAGES,COMMAND_TOPICS.SYNC_MESSAGES,COMMAND_TOPICS.GET_MSG_BY_IDS,COMMAND_TOPICS.GET_MERGE_MSGS],p)&&(m=getMessagesHandler(i,r,{currentUser:n})),utils.isEqual(p,COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES)&&(m=getChatroomMsgsHandler(i,r,{currentUser:n})),utils.isEqual(p,COMMAND_TOPICS.SYNC_CHATROOM_ATTRS)&&(m=getChatroomAttrsHandler(i,r,{targetId:c})),utils.isInclude([COMMAND_TOPICS.CONVERSATIONS,COMMAND_TOPICS.SYNC_CONVERSATIONS,COMMAND_TOPICS.QUERY_TOP_CONVERSATIONS],p)&&(m=getConversationsHandler(i,r,{topic:p,currentUser:n})),utils.isEqual(p,COMMAND_TOPICS.GET_CONVERSATION)&&(m=getConversationHandler(i,r,{currentUser:n})),utils.isEqual(p,COMMAND_TOPICS.GET_UNREAD_TOTLAL_CONVERSATION)&&(m=getTotalUnread(i,r)),utils.isEqual(p,COMMAND_TOPICS.GET_READ_MESSAGE_DETAIL)&&(m=getMessageReadDetails(i,r)),utils.isEqual(p,COMMAND_TOPICS.GET_MENTION_MSGS)&&(m=getMentionMessages(i,r,{currentUser:n})),utils.isEqual(p,COMMAND_TOPICS.GET_FILE_TOKEN)&&(m=getFileToken(i,r)),utils.isEqual(p,COMMAND_TOPICS.GET_USER_INFO)&&(m=getUserInfo(i,r)),utils.isEqual(p,COMMAND_TOPICS.GET_ALL_DISTURB)&&(m=getAllDisturb(i,r)),utils.isInclude([COMMAND_TOPICS.REMOVE_CHATROOM_ATTRIBUTES,COMMAND_TOPICS.SET_CHATROOM_ATTRIBUTES],p)&&(m=getChatroomSetAttrs(i,r)),utils.isEqual(p,COMMAND_TOPICS.GET_FIRST_UNREAD_MSG)&&(m=getMessage(i,r,{currentUser:n})),utils.isEqual(p,COMMAND_TOPICS.CONVERSATION_TAG_QUERY)&&(m=getConversationTags(i,r)),utils.isEqual(p,COMMAND_TOPICS.BATCH_TRANSLATE)&&(m=getBatchTranslate(i,r)),utils.isEqual(p,COMMAND_TOPICS.GET_TOP_MSG)&&(m=getTopMessage(i,r,{currentUser:n})),utils.isEqual(p,COMMAND_TOPICS.MSG_QRY_FAVORITE)&&(m=getFavtoriteMsgs(i,r,{currentUser:n})),utils.isInclude([COMMAND_TOPICS.RTC_ACCEPT,COMMAND_TOPICS.RTC_INVITE],p)&&(m=getRTCAuth(i,r)),utils.isInclude([COMMAND_TOPICS.RTC_CREATE_ROOM,COMMAND_TOPICS.RTC_JOIN_ROOM,COMMAND_TOPICS.RTC_QRY_ROOM],p)&&(m=getRTCRoom(i,r)),m=utils.extend(m,{code:a,timestamp:d,index:i}),m}function getFavtoriteMsgs(e,t,{currentUser:n}){let s=$root.lookup("codec.FavoriteMsgs"),o=s.decode(t),{items:i,offset:r}=o;i||(i=[]);let a=utils.map(i,e=>{let{createdTime:t,msg:s}=e,o=tools$1.msgFormat(s,{currentUser:n});return{createdTime:t,message:o}});return{index:e,list:a,offset:r}}function getTopMessage(e,t,{currentUser:n}){let s=$root.lookup("codec.TopMsg"),o=s.decode(t),{msg:i,operator:r,createdTime:a=0}=o,d={};return i&&(d=tools$1.msgFormat(o.msg,{currentUser:n}),r=common.formatUser(o.operator)),{index:e,message:d,operator:r,createdTime:a}}function getBatchTranslate(e,t){let n=$root.lookup("codec.TransReq"),s=n.decode(t);return{index:e,trans:s}}function getRTCAuth(e,t){let n=$root.lookup("codec.RtcAuth"),s=n.decode(t);return{index:e,auth:s}}function getChatroomSetAttrs(e,t){let n=$root.lookup("codec.ChatAttBatchResp"),{attResps:s}=n.decode(t),o=[],i=[];return utils.forEach(s,e=>{let{code:r=0,key:t,attTime:n,msgTime:s}=e,a={code:r,key:t,updateTime:n,messageTime:s};if(utils.isEqual(r,ErrorType.COMMAND_SUCCESS.code))o.push(a);else{let e=common.getError(r);utils.extend(a,e),i.push(a)}}),{index:e,success:o,fail:i}}function getMentionMessages(e,t,{currentUser:n}){let s=$root.lookup("codec.QryMentionMsgsResp"),{mentionMsgs:o,isFinished:i}=s.decode(t),r=utils.map(o,e=>tools$1.msgFormat(e,{currentUser:n}));return{index:e,msgs:r,isFinished:i}}function getFileToken(e,t){let n=$root.lookup("codec.QryUploadTokenResp"),s=n.decode(t),{ossType:o}=s,i={type:o};if(utils.isEqual(o,UPLOAD_TYPE.QINIU)){let{qiniuCred:e}=s;utils.extend(i,e)}if(utils.isEqual(o,UPLOAD_TYPE.ALI)){let{preSignResp:e}=s;utils.extend(i,e)}if(utils.isEqual(o,UPLOAD_TYPE.S3)||utils.isEqual(o,UPLOAD_TYPE.MINIO)){let{preSignResp:e}=s;utils.extend(i,e)}return{index:e,cred:i}}function getUserInfo(e,t){let n=$root.lookup("codec.UserInfo"),s=n.decode(t);return{index:e,user:s}}function getAllDisturb(e,t){let n=$root.lookup("codec.UserUndisturb"),s=n.decode(t),{timezone:o,rules:i=[]}=s,r=s.switch?UNDISTURB_TYPE.UNDISTURB:UNDISTURB_TYPE.DISTURB,a=[];return utils.forEach(i,({start:e,end:t})=>{a.push({start:e,end:t})}),{index:e,type:r,timezone:o,times:a}}function getMessageReadDetails(e,t){let n=$root.lookup("codec.QryReadDetailResp"),{readCount:s,memberCount:o,readMembers:i,unreadMembers:r}=n.decode(t);return i=utils.map(i,e=>({member:common.formatUser(e.member),readTime:e.time})),r=utils.map(r,e=>({member:common.formatUser(e.member),readTime:e.time})),{index:e,readCount:s,unreadCount:o-s,readMembers:i,unreadMembers:r}}function getTotalUnread(e,t){let n=$root.lookup("codec.QryTotalUnreadCountResp"),{totalCount:s}=n.decode(t);return{index:e,count:s}}function getConversationHandler(e,t,{currentUser:n}){let s=$root.lookup("codec.Conversation"),o=s.decode(t),i=tools$1.formatConversations([o],{currentUser:n}),r=i[0]||{};return{conversation:r,index:e}}function getConversationsHandler(e,t,n={}){let s=$root.lookup("codec.QryConversationsResp"),{conversations:o,isFinished:i}=s.decode(t);return o=tools$1.formatConversations(o,n),{conversations:o,isFinished:i,index:e}}function getChatroomAttrsHandler(e,t,{targetId:n}){let s=$root.lookup("codec.SyncChatroomAttResp"),o=s.decode(t),{atts:i}=o;return i=utils.map(i,e=>{let{key:t,value:n,attTime:s,userId:o,optType:i}=e;return{key:t,value:n,updateTime:s,userId:o,type:i}}),{attrs:i,chatroomId:n,index:e}}function getConversationTags(e,t){let n=$root.lookup("codec.UserConverTags"),s=n.decode(t),{tags:o}=s;return o=utils.map(o,e=>{let{tag:t,tagName:n,tagType:s}=e;return{id:t,name:n,type:s}}),{tags:o,index:e}}function getChatroomMsgsHandler(e,t,{currentUser:n}){let s=$root.lookup("codec.SyncChatroomMsgResp"),o=s.decode(t),{msgs:i}=o,r=utils.map(i,e=>tools$1.msgFormat(e,{currentUser:n}));return{messages:r,index:e}}function getMessage(e,t,{currentUser:n}){let s=$root.lookup("codec.DownMsg"),o=s.decode(t);if(!o.msgId)return{index:e,msg:{}};let i=tools$1.msgFormat(o,{currentUser:n});return{index:e,msg:i}}function getMessagesHandler(e,t,{currentUser:n}){let s=$root.lookup("codec.DownMsgSet"),o=s.decode(t),{isFinished:i,msgs:r,targetUserInfo:a,groupInfo:d}=o,p=utils.map(r,e=>(a&&utils.extend(e,{targetUserInfo:a}),d&&utils.extend(e,{groupInfo:d}),tools$1.msgFormat(e,{currentUser:n})));return{isFinished:i,messages:p,index:e}}function getRTCRoom(e,t){let n=$root.lookup("codec.RtcRoom"),s=n.decode(t);return{room:tools$1.formatRTCRoom(s)}}function getPublishMsgBody(e,{currentUser:t}){let n=$root.lookup("codec.PublishMsgBody"),s=n.decode(e),{targetId:o,data:i,topic:r,timestamp:a,index:d}=s,p={},c=SIGNAL_NAME.CMD_RECEIVED;// 收到 NTF 直接返回,通过 sync_msgs 同步消息
88
- if(utils.isEqual(r,COMMAND_TOPICS.NTF)){let e=$root.lookup("codec.Notify"),t=e.decode(i),{syncTime:n,type:s,chatroomId:o}=t;p={topic:r,receiveTime:n,type:s,targetId:o},c=SIGNAL_NAME.S_NTF}else if(utils.isEqual(r,COMMAND_TOPICS.MSG)){let e=$root.lookup("codec.DownMsg"),n=e.decode(i);p=tools$1.msgFormat(n,{currentUser:t})}else if(utils.isEqual(r,COMMAND_TOPICS.CHATROOM_USER_NTF)){let e=$root.lookup("codec.ChrmEvent"),t=e.decode(i),{chatId:n,eventTime:s,eventType:o,userId:r}=t;p={chatroomId:n,time:s,type:o,userId:r},c=SIGNAL_NAME.S_CHATROOM_USER_NTF}else if(utils.isEqual(r,COMMAND_TOPICS.RTC_INVITE_EVENT)){let e=$root.lookup("codec.RtcInviteEvent"),t=e.decode(i),{room:n,inviteType:s,targetUsers:r=[],user:o}=t;o=common.formatUser(o||{});let a=utils.map(r,e=>common.formatUser(e)),{roomId:d,roomType:m,members:l,ext:E}=n;l=l||[],l=utils.map(l,({member:e,rtcState:t})=>(e=common.formatUser(e),utils.extend(e,{status:t}),e)),p={roomId:d,roomType:m,eventType:s,user:o,members:a,existsMembers:l,ext:E||""},c=SIGNAL_NAME.S_RTC_INVITE_NTF}else if(utils.isEqual(r,COMMAND_TOPICS.RTC_ROOM_EVENT)){let e=$root.lookup("codec.RtcRoomEvent"),t=e.decode(i),{roomEventType:n,members:s,room:o,reason:r}=t;s=s||[],s=utils.map(s,({member:e,rtcState:t})=>(e=common.formatUser(e),utils.extend(e,{status:t}),e));let{owner:a}=o;a=common.formatUser(a||{}),o.owner=a,p={roomEventType:n,room:o,members:s,reason:r},c=SIGNAL_NAME.S_RTC_ROOM_EVENT}else if(utils.isEqual(r,COMMAND_TOPICS.STREAM_MSG)){let e=$root.lookup("codec.StreamDownMsg"),t=e.decode(i),{channelType:n,targetId:s,msgId:o,msgItems:r}=t,a=tools$1.formatStreams(r);p={conversationId:s,conversationType:n,messageId:o,streams:a},c=SIGNAL_NAME.S_STREAM_EVENT}else;return utils.extend(p,{ackIndex:d}),{_msg:p,_name:c}}function Decoder(e,t){let n=$root.lookup("codec.ImWebsocketMsg"),s=s=>{let o=n.decode(new Uint8Array(s)),i={},r="",{cmd:a,payload:d}=o,p=e.get(STORAGE.CRYPTO_RANDOM),c=common.decrypto(o.payload,p),m=null,l=t.getCurrentUser();switch(a){case SIGNAL_CMD.CONNECT_ACK:m=$root.lookup("codec.ConnectAckMsgBody");let n=m.decode(c);i=utils.extend(i,{ack:n,index:CONNECT_ACK_INDEX,extra:n.ext}),r=SIGNAL_NAME.S_CONNECT_ACK;break;case SIGNAL_CMD.PUBLISH_ACK:m=$root.lookup("codec.PublishAckMsgBody");let s=m.decode(c),{index:o,msgId:a,timestamp:d,code:p,msgIndex:E,memberCount:u,modifiedMsg:g}=s;if(g){let{msgContent:e,msgType:t}=g;if(e&&0<e.length){let n=new TextDecoder().decode(e);g={msgContent:utils.parse(n),msgType:t}}}i={messageId:a,sentTime:d,index:o,isSender:!0,code:p,msgIndex:E,memberCount:u,modifiedMsg:g};break;case SIGNAL_CMD.PUBLISH:l=t.getCurrentUser();let{_msg:T,_name:y}=getPublishMsgBody(c,{currentUser:l});r=y,i=T;break;case SIGNAL_CMD.QUERY_ACK:l=t.getCurrentUser(),i=getQueryAckBody(c,{cache:e,currentUser:l}),r=SIGNAL_NAME.S_QUERY_ACK;break;case SIGNAL_CMD.PONG:i={index:PONG_INDEX},r=SIGNAL_NAME.S_PONG;break;case SIGNAL_CMD.DISCONNECT:m=$root.lookup("codec.DisconnectMsgBody");let _=m.decode(c);i=utils.extend(i,{extra:_.ext,code:_.code})}return{cmd:a,result:i,name:r}};return{decode:s}}let detect=(e,t,n={})=>{function s(){utils.forEach(o,e=>{e.abort()}),o=[]}let o=[],i="",r=[];utils.forEach(e,n=>{let{http:a}=utils.getProtocol();n=n.replace(/http:\/\/|https:\/\/|file:\/\/|wss:\/\/|ws:\/\//g,"");let d=`${a}//${n}/health`,p={},c=jrequest.requestNormal(d,p,{success:function(e,n){if(utils.isEmpty(i)){let{responseURL:e}=n;i=e.replace(/(https:\/\/|http:\/\/)|(\/health)/g,""),t(i),s()}},fail:function(n){r.push(n),utils.isEqual(r.length,e.length)&&t(i,n)}});o.push(c)})},getNavis=(e,t,n)=>{function s(){utils.forEach(i,e=>{e.abort()}),i=[]}let{logger:o}=t;o.info({tag:LOG_MODULE.NAV_START,urls:e});let i=[],r=!1,a=[],{appkey:d,token:p}=t,c=common.getTokenKey(d,p),m=Storage.get(c);// 通过 AppKey_Token 获取 userId
91
+ if(utils.isEqual(r,COMMAND_TOPICS.NTF)){let e=$root.lookup("codec.Notify"),t=e.decode(i),{syncTime:n,type:s,chatroomId:o}=t;p={topic:r,receiveTime:n,type:s,targetId:o},c=SIGNAL_NAME.S_NTF}else if(utils.isEqual(r,COMMAND_TOPICS.MSG)){let e=$root.lookup("codec.DownMsg"),n=e.decode(i);p=tools$1.msgFormat(n,{currentUser:t})}else if(utils.isEqual(r,COMMAND_TOPICS.CHATROOM_USER_NTF)){let e=$root.lookup("codec.ChrmEvent"),t=e.decode(i),{chatId:n,eventTime:s,eventType:o,userId:r}=t;p={chatroomId:n,time:s,type:o,userId:r},c=SIGNAL_NAME.S_CHATROOM_USER_NTF}else if(utils.isEqual(r,COMMAND_TOPICS.RTC_INVITE_EVENT)){let e=$root.lookup("codec.RtcInviteEvent"),t=e.decode(i),{room:n,inviteType:s,targetUsers:r=[],user:o}=t;o=common.formatUser(o||{});let a=utils.map(r,e=>common.formatUser(e)),{roomId:d,roomType:m,members:l,ext:E}=n;l=l||[],l=utils.map(l,({member:e,rtcState:t})=>(e=common.formatUser(e),utils.extend(e,{status:t}),e)),p={roomId:d,roomType:m,eventType:s,user:o,members:a,existsMembers:l,ext:E||""},c=SIGNAL_NAME.S_RTC_INVITE_NTF}else if(utils.isEqual(r,COMMAND_TOPICS.RTC_ROOM_EVENT)){let e=$root.lookup("codec.RtcRoomEvent"),t=e.decode(i),{roomEventType:n,members:s,room:o,reason:r}=t;s=s||[],s=utils.map(s,({member:e,rtcState:t})=>(e=common.formatUser(e),utils.extend(e,{status:t}),e));let{owner:a}=o;a=common.formatUser(a||{}),o.owner=a,p={roomEventType:n,room:o,members:s,reason:r},c=SIGNAL_NAME.S_RTC_ROOM_EVENT}else if(utils.isEqual(r,COMMAND_TOPICS.STREAM_MSG)){let e=$root.lookup("codec.StreamDownMsg"),t=e.decode(i),{channelType:n,targetId:s,msgId:o,msgItems:r}=t,a=tools$1.formatStreams(r);p={conversationId:s,conversationType:n,messageId:o,streams:a},c=SIGNAL_NAME.S_STREAM_EVENT}else;return utils.extend(p,{ackIndex:d}),{_msg:p,_name:c}}function Decoder(e,t){let n=$root.lookup("codec.ImWebsocketMsg"),s=s=>{let o=n.decode(new Uint8Array(s)),i={},r="",{cmd:a,payload:d}=o,{msgEncryptHook:p}=t.getConfig();p=p||{},utils.isFunction(p.onDecrypt)&&(d=p.onDecrypt(d));let c=e.get(STORAGE.CRYPTO_RANDOM),m=common.decrypto(d,c),l=null,E=t.getCurrentUser();switch(a){case SIGNAL_CMD.CONNECT_ACK:l=$root.lookup("codec.ConnectAckMsgBody");let n=l.decode(m);i=utils.extend(i,{ack:n,index:CONNECT_ACK_INDEX,extra:n.ext}),r=SIGNAL_NAME.S_CONNECT_ACK;break;case SIGNAL_CMD.PUBLISH_ACK:l=$root.lookup("codec.PublishAckMsgBody");let s=l.decode(m),{index:o,msgId:a,timestamp:d,code:p,msgIndex:c,memberCount:u,modifiedMsg:g}=s;if(g){let{msgContent:e,msgType:t}=g;if(e&&0<e.length){let n=new TextDecoder().decode(e);g={msgContent:utils.parse(n),msgType:t}}}i={messageId:a,sentTime:d,index:o,isSender:!0,code:p,msgIndex:c,memberCount:u,modifiedMsg:g};break;case SIGNAL_CMD.PUBLISH:E=t.getCurrentUser();let{_msg:T,_name:y}=getPublishMsgBody(m,{currentUser:E});r=y,i=T;break;case SIGNAL_CMD.QUERY_ACK:E=t.getCurrentUser(),i=getQueryAckBody(m,{cache:e,currentUser:E}),r=SIGNAL_NAME.S_QUERY_ACK;break;case SIGNAL_CMD.PONG:i={index:PONG_INDEX},r=SIGNAL_NAME.S_PONG;break;case SIGNAL_CMD.DISCONNECT:l=$root.lookup("codec.DisconnectMsgBody");let _=l.decode(m);i=utils.extend(i,{extra:_.ext,code:_.code})}return{cmd:a,result:i,name:r}};return{decode:s}}let detect=(e,t,n={})=>{function s(){utils.forEach(o,e=>{e.abort()}),o=[]}let o=[],i="",r=[];utils.forEach(e,n=>{let{http:a}=utils.getProtocol(n);n=n.replace(/http:\/\/|https:\/\/|file:\/\/|wss:\/\/|ws:\/\//g,"");let d=`${a}//${n}/health`,p={},c=jrequest.requestNormal(d,p,{success:function(e,n){if(utils.isEmpty(i)){let{responseURL:e}=n;i=e.replace(/(\/health)/g,""),t(i),s()}},fail:function(n){r.push(n),utils.isEqual(r.length,e.length)&&t(i,n)}});o.push(c)})},getNavis=(e,t,n)=>{function s(){utils.forEach(i,e=>{e.abort()}),i=[]}let{logger:o}=t;o.info({tag:LOG_MODULE.NAV_START,urls:e});let i=[],r=!1,a=[],{appkey:d,token:p}=t,c=common.getTokenKey(d,p),m=Storage.get(c);// 通过 AppKey_Token 获取 userId
89
92
  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.replace(/http:\/\/|https:\/\/|file:\/\//g,""),{http:E}=utils.getProtocol(t);m=`${E}//${m}/navigator/general`;let u={headers:{"x-appkey":d,"x-token":p}},g=jrequest.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 的协议必须一致
90
93
  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
91
94
  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||utils.isEqual(i.name,MESSAGE_TYPE.STREAM_TEXT)){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 中的接收时间,认为消息已被当前端接收过,不再执行拉取动作
92
- 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(a=a||[],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){let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;s.info({tag:LOG_MODULE.MSG_SYNC,...e,isJoined:i}),i?(utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM)&&a(e,t),utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_DESTORY)&&r(e,t)):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();if(i.isNotSync)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),p(i.targetId,i.receiveTime),o();let c=i.count||50,m={syncTime:a,chatroomId:r,count:c,topic:COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES};e(SIGNAL_CMD.QUERY,m,({messages:e,code:n})=>{if(e=e||[],s.info({tag:LOG_MODULE.MSG_SYNC,data:m,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 r=r||[],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:9000};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.9.1";var WebWS=WebSocket;function UniWS(e){let t={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},n={readyState:t.CONNECTING,onopen:()=>{},onclose:()=>{},onerror:()=>{},onmessage:()=>{}},s=uni.connectSocket({url:e,complete:()=>{}});return s.onOpen(()=>{n.readyState=t.OPEN,n.onopen()}),s.onClose(()=>{n.readyState=t.CLOSED,n.onclose()}),s.onError(()=>{n.readyState=t.CLOSED,n.onerror()}),s.onMessage(e=>{n.onmessage(e)}),n.send=e=>{s.send({data:e})},n.close=()=>{s.close()},n}let JWebSocket=WebWS;common.isUni()&&(JWebSocket=UniWS);var JWebSocket$1=JWebSocket;function NetworkWatcher(e){let t=()=>{let t=e.ononline||utils.noop;t()},n=()=>{"object"==typeof window&&window.addEventListener&&(window.removeEventListener("online",t),window.addEventListener("online",t))};return{watch:n}}/*
95
+ 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(a=a||[],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){let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;s.info({tag:LOG_MODULE.MSG_SYNC,...e,isJoined:i}),i?(utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM)&&a(e,t),utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_DESTORY)&&r(e,t)):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();if(i.isNotSync)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),p(i.targetId,i.receiveTime),o();let c=i.count||50,m={syncTime:a,chatroomId:r,count:c,topic:COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES};e(SIGNAL_CMD.QUERY,m,({messages:e,code:n})=>{if(e=e||[],s.info({tag:LOG_MODULE.MSG_SYNC,data:m,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 r=r||[],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:9000};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.9.3";var WebWS=WebSocket;function UniWS(e){let t={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},n={readyState:t.CONNECTING,onopen:()=>{},onclose:()=>{},onerror:()=>{},onmessage:()=>{}},s=uni.connectSocket({url:e,complete:()=>{}});return s.onOpen(()=>{n.readyState=t.OPEN,n.onopen()}),s.onClose(()=>{n.readyState=t.CLOSED,n.onclose()}),s.onError(()=>{n.readyState=t.CLOSED,n.onerror()}),s.onMessage(e=>{n.onmessage(e)}),n.send=e=>{s.send({data:e})},n.close=()=>{s.close()},n}let JWebSocket=WebWS;common.isUni()&&(JWebSocket=UniWS);var JWebSocket$1=JWebSocket;function NetworkWatcher(e){let t=()=>{let t=e.ononline||utils.noop;t()},n=()=>{"object"==typeof window&&window.addEventListener&&(window.removeEventListener("online",t),window.addEventListener("online",t))};return{watch:n}}/*
93
96
  fileCompressLimit: 图片缩略图压缩限制,小于设置数值将不执行压缩,单位 KB
94
97
  config = { appkey, nav, isSync, upload, uploadType, fileCompressLimit }
95
- */function IO(e){function t(){let e=s({ignores:[]}),t=utils.find(u,e=>e===g),n=u[t]||{};return P(),n.onmessage=utils.noop,n.onclose=utils.noop,n.onerror=utils.noop,_.remove(CONNECT_TOOL.RECONNECT_COUNT),_.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),q(e,({next:e})=>{e=e||utils.noop,e()})}function n(){l&&H.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:U.id}})}function s(e={}){let{ignores:t=["token"]}=e,n=utils.clone(U);return utils.forEach(t,e=>{delete n[e]}),n}function o(){return e}function i(t){utils.extend(e,t)}function r(e,t){let n={topic:COMMAND_TOPICS.GET_USER_INFO,userId:e.id};F(SIGNAL_CMD.QUERY,n,e=>{t(e)})}let a=Emitter(),{appkey:d,navList:p,serverList:m=[],isSync:l=!0,reconnectCount:E=100,logger:c}=e;utils.isArray(p)||(p=["https://nav.fake.com"]);/*
98
+ */function IO(e){function t(){let e=s({ignores:[]}),t=utils.find(g,e=>e===T),n=g[t]||{};return F(),n.onmessage=utils.noop,n.onclose=utils.noop,n.onerror=utils.noop,S.remove(CONNECT_TOOL.RECONNECT_COUNT),S.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),P(e,({next:e})=>{e=e||utils.noop,e()})}function n(){E&&j.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:x.id}})}function s(e={}){let{ignores:t=["token"]}=e,n=utils.clone(x);return utils.forEach(t,e=>{delete n[e]}),n}function o(){return e.currentDomain=_,e}function i(t){utils.extend(e,t)}function r(e,t){let n={topic:COMMAND_TOPICS.GET_USER_INFO,userId:e.id};B(SIGNAL_CMD.QUERY,n,e=>{t(e)})}let a=Emitter(),{appkey:d,navList:p,serverList:l=[],isSync:E=!0,reconnectCount:u=100,logger:c,msgEncryptHook:m}=e;m=m||{},utils.isArray(p)||(p=["https://nav.fake.com"]);/*
96
99
  pool = {
97
100
  }
98
- */let u=[],g={},T={},y=utils.noop,_=Cache(),C=Decoder(_,T),S=Encoder(_),O=Timer({timeout:HEART_TIMEOUT}),f=Timer({timeout:SYNC_MESSAGE_TIME}),I=!0,R=CONNECT_STATE.DISCONNECTED,A=[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],N=e=>{R=e.state,a.emit(SIGNAL_NAME.CONN_CHANGED,{...e})},M=()=>{O.pause(),f.pause()},v=NetworkWatcher({ononline:()=>{t()}});v.watch();let h=!1,D=(e={})=>{let{code:t}=e,n=_.getAll();if(utils.forEach(n,(e,t)=>{if(!utils.isNaN(t)){let{callback:n}=e;n=n||utils.noop,n(ErrorType.COMMAND_FAILED),_.remove(t)}}),!h&&!utils.isInclude(A,t)&&!utils.isEqual(R,CONNECT_STATE.DISCONNECTED)){let e=s({ignores:[]});return M(),q(e,({next:e})=>{e=e||utils.noop,e()})}if(!utils.isEqual(R,CONNECT_STATE.DISCONNECTED)){let t=s();N({state:CONNECT_STATE.DISCONNECTED,...e,user:t}),M()}},U={},b=e=>{utils.extend(U,e)},x=e=>{let t=common.getNaviStorageKey(d,e);Storage.remove(t)},G=({token:e,deviceId:n,_isReconnect:s=!1},o)=>{function i({servers:s,userId:i}){b({id:i,token:e,deviceId:n}),_.set(SIGNAL_NAME.S_CONNECT_ACK,o),Network.detect(s,(s,r)=>{// 如果嗅探失败,返回连接断开,同时清理已缓存的 CMP 地址
99
- if(r)return y(e=>{e=utils.isObject(e)?e:{};let{serverUrls:n}=e;n=n||[],0<n.length&&(m=n.concat(n),t())}),x(i),q({token:e,userId:i,deviceId:n},o);s=s.replace(/http:\/\/|https:\/\/|file:\/\/|wss:\/\/|ws:\/\//g,"");let{ws:a}=utils.getProtocol(),p=`${a}//${s}/im`;g=new JWebSocket$1(p),u.push(g),c.info({tag:LOG_MODULE.WS_CONNECT}),g.onopen=function(){let t=PLATFORM.WEB;common.isDesktop()&&(t=PLATFORM.DESKTOP);let s=common.getClientSession();F(SIGNAL_CMD.CONNECT,{appkey:d,token:e,deviceId:n,platform:t,clientSession:s,sdkVersion:VERSION}),u=utils.filter(u,e=>3!=e.readyState)},g.onclose=t=>{D({type:DISCONNECT_TYPE.CLOSE})},g.onerror=()=>{D({type:DISCONNECT_TYPE.ERROR})},g.onmessage=function({data:e}){// 需要修改在适配层处理
100
- if(common.isUni())Q(e);else{let t=new FileReader;t.onload=function(){Q(this.result)},t.readAsArrayBuffer(e)}}})}_.set(STORAGE.CRYPTO_RANDOM,utils.getRandoms(8));let r=s?CONNECT_STATE.RECONNECTING:CONNECT_STATE.CONNECTING;return N({state:r}),utils.isEmpty(m)?Network.getNavis(p,{appkey:d,token:e,logger:c},e=>{let{code:t,servers:n,userId:s}=e;if(!utils.isEqual(t,ErrorType.COMMAND_SUCCESS.code)){let e=common.getError(t);return x(s),t||(e=ErrorType.IM_SERVER_CONNECT_ERROR),N({state:CONNECT_STATE.DISCONNECTED,code:e.code}),o({error:e})}i({servers:n,userId:s})}):i({servers:m})},k=0,q=({token:e,userId:t,deviceId:n},s)=>{clearTimeout(k),c.info({tag:LOG_MODULE.CON_RECONNECT,userId:t,deviceId:n});let o=_.get(CONNECT_TOOL.RECONNECT_COUNT),i=o.count||1,r=i>E;if(r)return _.remove(CONNECT_TOOL.RECONNECT_COUNT),_.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),N({state:CONNECT_STATE.DISCONNECTED,code:ErrorType.IM_SERVER_CONNECT_ERROR.code});let d=_.get(CONNECT_TOOL.RECONNECT_FREQUENCY),p=d.frequency||1,m=1e3*p;k=setTimeout(()=>{i+=1,_.set(CONNECT_TOOL.RECONNECT_COUNT,{count:i}),p*=2,_.set(CONNECT_TOOL.RECONNECT_FREQUENCY,{frequency:p}),G({token:e,userId:t,deviceId:n,_isReconnect:!0},e=>{let{error:t}=e;utils.isEqual(t.code,ErrorType.COMMAND_SUCCESS.code)&&a.emit(SIGNAL_NAME.CMD_CHATROOM_REJOIN,{}),s(e)})},m)},L=[],P=()=>{g&&g.close&&g.close(),O.pause(),f.pause(),L.length=0},V=()=>{h=!0,R=CONNECT_STATE.DISCONNECTED,P()},F=(e,t,n)=>{n=n||utils.noop;let s=common.getNum();utils.isEqual(e,SIGNAL_CMD.CONNECT)&&(s=CONNECT_ACK_INDEX),utils.isEqual(e,SIGNAL_CMD.PING)&&(s=PONG_INDEX);let o=Counter({cmd:e}),i=S.encode(e,{callback:n,data:t,index:s,counter:o});if(1!=g.readyState)return P(),n(ErrorType.COMMAND_FAILED);g.send(i);let r=utils.clone(t);delete r.messages,r.user&&(r.user={id:r.user.id}),c.info({tag:LOG_MODULE.WS_SEND,cmd:e,...r}),utils.isEqual(SIGNAL_CMD.PUBLISH_ACK,e)||o.start(({cmd:e})=>utils.isEqual(e,SIGNAL_CMD.PING)&&3>L.length?L.push({cmd:e}):void(P(),n(ErrorType.COMMAND_FAILED)))},H=MessageSyncer(F,a,T,{logger:c}),B=ChatroomSyncer(F,a,T,{logger:c}),j=ChatroomAttSyncer(F,a,T,{logger:c}),Y=TagSyncer(F,a,T,{logger:c}),Q=t=>{let{cmd:s,result:o,name:i}=C.decode(t);c.info({tag:LOG_MODULE.WS_RECEIVE,cmd:s,code:o.code});let{index:p}=o,{callback:m,data:l,counter:E}=_.get(p);// 清空计时器,与 counter.start 对应
101
- if(E&&(E.clear(),L.length=0),utils.isEqual(i,SIGNAL_NAME.S_CHATROOM_USER_NTF)){let{chatroomId:e,time:t,type:n,userId:s}=o;a.emit(SIGNAL_NAME.CMD_CHATROOM_EVENT,{chatroomId:e,time:t,type:n,userId:s})}if(utils.isEqual(i,SIGNAL_NAME.S_STREAM_EVENT)){let{conversationType:e,conversationId:t,messageId:n,streams:s}=o,i=[],r=[];if(utils.forEach(s,e=>{let{event:t}=e;utils.isEqual(t,STREAM_EVENT.MESSAGE)&&i.push(e),utils.isEqual(t,STREAM_EVENT.FINISHED)&&r.push(e)}),!utils.isEqual(i.length,0)){let s={conversationType:e,conversationId:t,messageId:n,streams:i};a.emit(SIGNAL_NAME.CMD_STREAM_APPENDED,s)}utils.isEqual(r.length,0)||utils.forEach(r,s=>{let o={conversationType:e,conversationId:t,messageId:n};a.emit(SIGNAL_NAME.CMD_STREAM_COMPLETED,o)})}if(utils.isEqual(i,SIGNAL_NAME.CMD_RECEIVED)&&(H.exec({msg:o,name:i,$message:e.$message,user:{id:U.id}}),f.reset()),utils.isEqual(i,SIGNAL_NAME.S_NTF)){let{type:t}=o,n={msg:o,name:i,$message:e.$message,user:{id:U.id}};utils.isEqual(t,NOTIFY_TYPE.MSG)&&H.exec(n),(utils.isEqual(t,NOTIFY_TYPE.CHATROOM)||utils.isEqual(t,NOTIFY_TYPE.CHATROOM_DESTORY))&&B.exec(n),utils.isEqual(t,NOTIFY_TYPE.CHATROOM_ATTR)&&j.exec(n),f.reset()}if(utils.isEqual(s,SIGNAL_CMD.PUBLISH_ACK)){utils.extend(l,o);let{conversationType:e}=l;// 单群聊和聊天室通知和拉取消息时间戳分开计算,只有发送单群聊消息更新发件箱
102
- utils.isEqual(e,CONVERATION_TYPE.CHATROOM)||common.updateSyncTime({...l,io:T}),m(l)}if(utils.isEqual(s,SIGNAL_CMD.QUERY_ACK)&&m&&m(o),utils.isEqual(s,SIGNAL_CMD.CONNECT_ACK)){h=!1;let t=_.get(SIGNAL_NAME.S_CONNECT_ACK)||utils.noop,{ack:{code:s,userId:i,timestamp:a}}=o,p=CONNECT_STATE.CONNECT_FAILED,m=common.getError(s);if(utils.isEqual(s,ErrorType.CONNECT_SUCCESS.code))return I&&!e.isPC&&(common.updateSyncTime({sentTime:a,isSender:!0,io:T}),common.updateSyncTime({sentTime:a,isSender:!1,io:T})),I=!1,p=CONNECT_STATE.CONNECTED,b({id:i}),Storage.setPrefix(`${d}_${i}`),_.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),r({id:i},({user:s})=>{s=s||{};let o=s.nickname,r=s.userPortrait,a=utils.toObject(s.extFields);// 同步会话和同步消息顺序不能调整,保证先同步会话再同步消息,规避会话列表最后一条消息不是最新的
103
- if(b({name:o,portrait:r,exts:a,updatedTime:s.updatedTime}),t({user:U,error:m,next:()=>{N({state:p,user:U})}}),e.isPC){let t=()=>{H.exec({time:Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0,name:SIGNAL_NAME.S_SYNC_CONVERSATION_NTF,user:{id:U.id},$conversation:e.$conversation}),n(),Y.exec({$conversation:e.$conversation})},s=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;// PC 中先连接后打开数据库,优先将本地数据库中的同步时间更新至 LocalStorage 中,避免换 Token 不换用户 Id 重复同步会话
104
- utils.isEqual(s,0)?e.$socket.openDB({appkey:d,userId:i,token:U.token}).then(()=>{t()}):t()}else n();O.resume(()=>{F(SIGNAL_CMD.PING,{}),c.info({tag:LOG_MODULE.HB_START})}),f.resume(()=>{H.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:U.id}})})});utils.isEqual(s,ErrorType.CONNECT_SECURITY_DOMAIN_ERROR.code)&&(h=!0),N({state:p,user:U,code:s}),t({user:U,error:m})}if(utils.isEqual(s,SIGNAL_CMD.DISCONNECT)){let{code:e,extra:t}=o;D({code:e,extra:t,type:DISCONNECT_TYPE.SERVER})}if(utils.isEqual(i,SIGNAL_NAME.S_PONG)&&c.info({tag:LOG_MODULE.HB_STOP}),utils.isEqual(i,SIGNAL_NAME.S_RTC_INVITE_NTF)&&a.emit(SIGNAL_NAME.CMD_RTC_INVITE_EVENT,o),utils.isEqual(i,SIGNAL_NAME.S_RTC_ROOM_EVENT)){let{roomEventType:e,room:t,members:n,reason:s}=o;a.emit(SIGNAL_NAME.CMD_RTC_ROOM_EVENT,{roomEventType:e,room:t,members:n,reason:s})}_.remove(p)},w=()=>utils.isEqual(R,CONNECT_STATE.CONNECTED),K=()=>utils.isEqual(R,CONNECT_STATE.DISCONNECTED);return utils.extend(T,{getConfig:o,setConfig:i,connect:G,disconnect:V,sendCommand:F,isConnected:w,isNeedConnect:K,getCurrentUser:s,setServerUrlProider:e=>{y=e},getVersion:()=>VERSION,sync:e=>{e=utils.isArray(e)?e:[e];let t=o();utils.forEach(e,e=>{let n={...e,$message:t.$message},{msg:{type:s}}=e;utils.isEqual(s,NOTIFY_TYPE.CHATROOM)&&B.exec(n),utils.isEqual(s,NOTIFY_TYPE.CHATROOM_ATTR)&&j.exec(n)})},...a}),T}let isGroup=e=>utils.isEqual(CONVERATION_TYPE.GROUP,e),formatMsg=({message:e,senders:t,groups:n})=>{let{content:m="{}",senderId:s,conversationType:o,conversationId:i,mentionInfo:l="{}",isRead:r,isStream:a,streams:d,isSender:p,isUpdated:c,referMsg:E="{}",mergeMsg:u="{}",reactions:g="{}",attribute:T=""}=e;m=utils.parse(m),l=utils.parse(l);let y=utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{},_={};return _=isGroup(o)?utils.filter(n,e=>utils.isEqual(e.id,i))[0]||{}:utils.filter(t,e=>utils.isEqual(e.id,i))[0]||{},d||(d="[]"),d=utils.parse(d),e=utils.extend(e,{mergeMsg:utils.parse(u),referMsg:utils.parse(E),reactions:utils.parse(g),conversationTitle:_.name,conversationPortrait:_.portrait,conversationExts:_.exts,content:m,sender:y,mentionInfo:l,streams:d,isStream:!!a,sentTime:+e.sentTime,isRead:!!r,isSender:!!p,isUpdated:!!c,attribute:T}),e},formatMsgs=({messages:e,senders:t,groups:n})=>{let s=utils.map(e,e=>{let s=formatMsg({message:e,senders:t,groups:n});return s});return s},formatConversation=({conversation:e,users:t,groups:n})=>{if(utils.isEmpty(e))return e;let{id:s,type:o,draft:i,unreadCount:r,isTop:a,undisturbType:d,sortTime:p,mentions:c,latestMessageTid:m,latestMessageId:l,latestMessageName:E,latestMessageIsSender:u,latestMessageIsUpdated:g,latestMessageSentTime:T,latestMessageSenderId:y,latestMessageContent:_,latestMessageMessageIndex:C,latestMessageIsRead:S,latestMessageIsMass:O,latestUnreadCount:f,latestReadCount:I,latestReadIndex:R,latestUnreadIndex:A,latestMentionInfo:N,unreadTag:M}=e;c=c||"{}";let v=utils.filter(t,e=>utils.isEqual(e.id,y))[0]||{id:y},h={};h=isGroup(o)?utils.filter(n,e=>utils.isEqual(e.id,s))[0]||{id:s}:utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{id:s},r=0<r?r:0;let D={conversationId:s,conversationType:o,conversationPortrait:h.portrait,conversationTitle:h.name,conversationExts:h.exts,draft:i||"",isTop:!!a,undisturbType:d,latestReadIndex:+R,latestUnreadIndex:+A,latestMessage:{conversationId:s,conversationType:o,conversationPortrait:h.portrait,conversationTitle:h.name,conversationExts:h.exts,content:utils.parse(_),isRead:!!S,isSender:!!u,isUpdated:!!g,isMass:!!O,messageId:l,tid:m,mentionInfo:utils.parse(N),messageIndex:C,name:E,readCount:+(I||0),unreadCount:+(f||0),sentTime:+T,referMsg:{},sender:v},sortTime:+p||0,unreadCount:r||0,mentions:utils.parse(c),unreadTag:M||UNREAD_TAG.READ};return utils.isEmpty(l)&&(D.latestMessage={}),D},formatConversations=({conversations:e,users:t,groups:n})=>{let s=utils.map(e,e=>{let s=formatConversation({conversation:e,users:t,groups:n});return s});return s},createMentions=(e,t,n)=>{let{mentionInfo:s}=t,{senders:o=[],msgs:i=[]}=e;if(utils.isEqual(t.name,MESSAGE_TYPE.RECALL_INFO)){let{content:{messageId:n},sender:e}=t,s=utils.find(i,e=>utils.isEqual(e.messageId,n));-1<s&&i.splice(s,1);// 如果没有消息撤回发送人的消息,移除 senders 中的发送人信息
101
+ */let g=[],T={},y={},_="",C=utils.noop,S=Cache(),O=Decoder(S,y),f=Encoder(S,y),I=Timer({timeout:HEART_TIMEOUT}),R=Timer({timeout:SYNC_MESSAGE_TIME}),A=!0,N=CONNECT_STATE.DISCONNECTED,M=[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],v=e=>{N=e.state,a.emit(SIGNAL_NAME.CONN_CHANGED,{...e})},h=()=>{I.pause(),R.pause()},D=NetworkWatcher({ononline:()=>{t()}});D.watch();let U=!1,b=(e={})=>{let{code:t}=e,n=S.getAll();if(utils.forEach(n,(e,t)=>{if(!utils.isNaN(t)){let{callback:n}=e;n=n||utils.noop,n(ErrorType.COMMAND_FAILED),S.remove(t)}}),!U&&!utils.isInclude(M,t)&&!utils.isEqual(N,CONNECT_STATE.DISCONNECTED)){let e=s({ignores:[]});return h(),P(e,({next:e})=>{e=e||utils.noop,e()})}if(!utils.isEqual(N,CONNECT_STATE.DISCONNECTED)){let t=s();v({state:CONNECT_STATE.DISCONNECTED,...e,user:t}),h()}},x={},G=e=>{utils.extend(x,e)},k=e=>{let t=common.getNaviStorageKey(d,e);Storage.remove(t)},q=({token:e,deviceId:n,_isReconnect:s=!1},o)=>{function i({servers:s,userId:i}){G({id:i,token:e,deviceId:n}),S.set(SIGNAL_NAME.S_CONNECT_ACK,o),Network.detect(s,(s,r)=>{// 如果嗅探失败,返回连接断开,同时清理已缓存的 CMP 地址
102
+ if(r)return C(e=>{e=utils.isObject(e)?e:{};let{serverUrls:n}=e;n=n||[],0<n.length&&(l=n.concat(n),t())}),k(i),P({token:e,userId:i,deviceId:n},o);_=s,s=s.replace(/http:\/\/|https:\/\/|file:\/\/|wss:\/\/|ws:\/\//g,"");let{ws:a}=utils.getProtocol(_),p=`${a}//${s}/im`;T=new JWebSocket$1(p),g.push(T),c.info({tag:LOG_MODULE.WS_CONNECT}),T.onopen=function(){let t=PLATFORM.WEB;common.isDesktop()&&(t=PLATFORM.DESKTOP);let s=common.getClientSession();B(SIGNAL_CMD.CONNECT,{appkey:d,token:e,deviceId:n,platform:t,clientSession:s,sdkVersion:VERSION}),g=utils.filter(g,e=>3!=e.readyState)},T.onclose=t=>{b({type:DISCONNECT_TYPE.CLOSE})},T.onerror=()=>{b({type:DISCONNECT_TYPE.ERROR})},T.onmessage=function({data:e}){// 需要修改在适配层处理
103
+ if(common.isUni())K(e);else{let t=new FileReader;t.onload=function(){K(this.result)},t.readAsArrayBuffer(e)}}})}S.set(STORAGE.CRYPTO_RANDOM,utils.getRandoms(8));let r=s?CONNECT_STATE.RECONNECTING:CONNECT_STATE.CONNECTING;return v({state:r}),utils.isEmpty(l)?Network.getNavis(p,{appkey:d,token:e,logger:c},e=>{let{code:t,servers:n,userId:s}=e;if(!utils.isEqual(t,ErrorType.COMMAND_SUCCESS.code)){let e=common.getError(t);return k(s),t||(e=ErrorType.IM_SERVER_CONNECT_ERROR),v({state:CONNECT_STATE.DISCONNECTED,code:e.code}),o({error:e})}i({servers:n,userId:s})}):i({servers:l})},L=0,P=({token:e,userId:t,deviceId:n},s)=>{clearTimeout(L),c.info({tag:LOG_MODULE.CON_RECONNECT,userId:t,deviceId:n});let o=S.get(CONNECT_TOOL.RECONNECT_COUNT),i=o.count||1,r=i>u;if(r)return S.remove(CONNECT_TOOL.RECONNECT_COUNT),S.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),v({state:CONNECT_STATE.DISCONNECTED,code:ErrorType.IM_SERVER_CONNECT_ERROR.code});let d=S.get(CONNECT_TOOL.RECONNECT_FREQUENCY),p=d.frequency||1,m=1e3*p;L=setTimeout(()=>{i+=1,S.set(CONNECT_TOOL.RECONNECT_COUNT,{count:i}),p*=2,S.set(CONNECT_TOOL.RECONNECT_FREQUENCY,{frequency:p}),q({token:e,userId:t,deviceId:n,_isReconnect:!0},e=>{let{error:t}=e;utils.isEqual(t.code,ErrorType.COMMAND_SUCCESS.code)&&a.emit(SIGNAL_NAME.CMD_CHATROOM_REJOIN,{}),s(e)})},m)},V=[],F=()=>{T&&T.close&&T.close(),I.pause(),R.pause(),V.length=0},H=()=>{U=!0,N=CONNECT_STATE.DISCONNECTED,F()},B=(e,t,n)=>{n=n||utils.noop;let s=common.getNum();utils.isEqual(e,SIGNAL_CMD.CONNECT)&&(s=CONNECT_ACK_INDEX),utils.isEqual(e,SIGNAL_CMD.PING)&&(s=PONG_INDEX);let o=Counter({cmd:e}),i=f.encode(e,{callback:n,data:t,index:s,counter:o});if(1!=T.readyState)return F(),n(ErrorType.COMMAND_FAILED);T.send(i);let r=utils.clone(t);delete r.messages,r.user&&(r.user={id:r.user.id}),c.info({tag:LOG_MODULE.WS_SEND,cmd:e,...r}),utils.isEqual(SIGNAL_CMD.PUBLISH_ACK,e)||o.start(({cmd:e})=>utils.isEqual(e,SIGNAL_CMD.PING)&&3>V.length?V.push({cmd:e}):void(F(),n(ErrorType.COMMAND_FAILED)))},j=MessageSyncer(B,a,y,{logger:c}),Y=ChatroomSyncer(B,a,y,{logger:c}),Q=ChatroomAttSyncer(B,a,y,{logger:c}),w=TagSyncer(B,a,y,{logger:c}),K=t=>{let{cmd:s,result:o,name:i}=O.decode(t);c.info({tag:LOG_MODULE.WS_RECEIVE,cmd:s,code:o.code});let{index:p}=o,{callback:m,data:l,counter:E}=S.get(p);// 清空计时器,与 counter.start 对应
104
+ if(E&&(E.clear(),V.length=0),utils.isEqual(i,SIGNAL_NAME.S_CHATROOM_USER_NTF)){let{chatroomId:e,time:t,type:n,userId:s}=o;a.emit(SIGNAL_NAME.CMD_CHATROOM_EVENT,{chatroomId:e,time:t,type:n,userId:s})}if(utils.isEqual(i,SIGNAL_NAME.S_STREAM_EVENT)){let{conversationType:e,conversationId:t,messageId:n,streams:s}=o,i=[],r=[];if(utils.forEach(s,e=>{let{event:t}=e;utils.isEqual(t,STREAM_EVENT.MESSAGE)&&i.push(e),utils.isEqual(t,STREAM_EVENT.FINISHED)&&r.push(e)}),!utils.isEqual(i.length,0)){let s={conversationType:e,conversationId:t,messageId:n,streams:i};a.emit(SIGNAL_NAME.CMD_STREAM_APPENDED,s)}utils.isEqual(r.length,0)||utils.forEach(r,s=>{let o={conversationType:e,conversationId:t,messageId:n};a.emit(SIGNAL_NAME.CMD_STREAM_COMPLETED,o)})}if(utils.isEqual(i,SIGNAL_NAME.CMD_RECEIVED)&&(j.exec({msg:o,name:i,$message:e.$message,user:{id:x.id}}),R.reset()),utils.isEqual(i,SIGNAL_NAME.S_NTF)){let{type:t}=o,n={msg:o,name:i,$message:e.$message,user:{id:x.id}};utils.isEqual(t,NOTIFY_TYPE.MSG)&&j.exec(n),(utils.isEqual(t,NOTIFY_TYPE.CHATROOM)||utils.isEqual(t,NOTIFY_TYPE.CHATROOM_DESTORY))&&Y.exec(n),utils.isEqual(t,NOTIFY_TYPE.CHATROOM_ATTR)&&Q.exec(n),R.reset()}if(utils.isEqual(s,SIGNAL_CMD.PUBLISH_ACK)){utils.extend(l,o);let{conversationType:e}=l;// 单群聊和聊天室通知和拉取消息时间戳分开计算,只有发送单群聊消息更新发件箱
105
+ utils.isEqual(e,CONVERATION_TYPE.CHATROOM)||common.updateSyncTime({...l,io:y}),m(l)}if(utils.isEqual(s,SIGNAL_CMD.QUERY_ACK)&&m&&m(o),utils.isEqual(s,SIGNAL_CMD.CONNECT_ACK)){U=!1;let t=S.get(SIGNAL_NAME.S_CONNECT_ACK)||utils.noop,{ack:{code:s,userId:i,timestamp:a}}=o,p=CONNECT_STATE.CONNECT_FAILED,m=common.getError(s);if(utils.isEqual(s,ErrorType.CONNECT_SUCCESS.code))return A&&!e.isPC&&(common.updateSyncTime({sentTime:a,isSender:!0,io:y}),common.updateSyncTime({sentTime:a,isSender:!1,io:y})),A=!1,p=CONNECT_STATE.CONNECTED,G({id:i}),Storage.setPrefix(`${d}_${i}`),S.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),r({id:i},({user:s})=>{s=s||{};let o=s.nickname,r=s.userPortrait,a=utils.toObject(s.extFields);// 同步会话和同步消息顺序不能调整,保证先同步会话再同步消息,规避会话列表最后一条消息不是最新的
106
+ if(G({name:o,portrait:r,exts:a,updatedTime:s.updatedTime}),t({user:x,error:m,next:()=>{v({state:p,user:x})}}),e.isPC){let t=()=>{j.exec({time:Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0,name:SIGNAL_NAME.S_SYNC_CONVERSATION_NTF,user:{id:x.id},$conversation:e.$conversation}),n(),w.exec({$conversation:e.$conversation})},s=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;// PC 中先连接后打开数据库,优先将本地数据库中的同步时间更新至 LocalStorage 中,避免换 Token 不换用户 Id 重复同步会话
107
+ utils.isEqual(s,0)?e.$socket.openDB({appkey:d,userId:i,token:x.token}).then(()=>{t()}):t()}else n();I.resume(()=>{B(SIGNAL_CMD.PING,{}),c.info({tag:LOG_MODULE.HB_START})}),R.resume(()=>{j.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:x.id}})})});utils.isEqual(s,ErrorType.CONNECT_SECURITY_DOMAIN_ERROR.code)&&(U=!0),v({state:p,user:x,code:s}),t({user:x,error:m})}if(utils.isEqual(s,SIGNAL_CMD.DISCONNECT)){let{code:e,extra:t}=o;b({code:e,extra:t,type:DISCONNECT_TYPE.SERVER})}if(utils.isEqual(i,SIGNAL_NAME.S_PONG)&&c.info({tag:LOG_MODULE.HB_STOP}),utils.isEqual(i,SIGNAL_NAME.S_RTC_INVITE_NTF)&&a.emit(SIGNAL_NAME.CMD_RTC_INVITE_EVENT,o),utils.isEqual(i,SIGNAL_NAME.S_RTC_ROOM_EVENT)){let{roomEventType:e,room:t,members:n,reason:s}=o;a.emit(SIGNAL_NAME.CMD_RTC_ROOM_EVENT,{roomEventType:e,room:t,members:n,reason:s})}S.remove(p)},J=()=>utils.isEqual(N,CONNECT_STATE.CONNECTED),W=()=>utils.isEqual(N,CONNECT_STATE.DISCONNECTED);return utils.extend(y,{getConfig:o,setConfig:i,connect:q,disconnect:H,sendCommand:B,isConnected:J,isNeedConnect:W,getCurrentUser:s,setServerUrlProider:e=>{C=e},getVersion:()=>VERSION,sync:e=>{e=utils.isArray(e)?e:[e];let t=o();utils.forEach(e,e=>{let n={...e,$message:t.$message},{msg:{type:s}}=e;utils.isEqual(s,NOTIFY_TYPE.CHATROOM)&&Y.exec(n),utils.isEqual(s,NOTIFY_TYPE.CHATROOM_ATTR)&&Q.exec(n)})},...a}),y}let isGroup=e=>utils.isEqual(CONVERATION_TYPE.GROUP,e),formatMsg=({message:e,senders:t,groups:n})=>{let{content:m="{}",senderId:s,conversationType:o,conversationId:i,mentionInfo:l="{}",isRead:r,isStream:a,streams:d,isSender:p,isUpdated:c,referMsg:E="{}",mergeMsg:u="{}",reactions:g="{}",attribute:T=""}=e;m=utils.parse(m),l=utils.parse(l);let y=utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{},_={};return _=isGroup(o)?utils.filter(n,e=>utils.isEqual(e.id,i))[0]||{}:utils.filter(t,e=>utils.isEqual(e.id,i))[0]||{},d||(d="[]"),d=utils.parse(d),e=utils.extend(e,{mergeMsg:utils.parse(u),referMsg:utils.parse(E),reactions:utils.parse(g),conversationTitle:_.name,conversationPortrait:_.portrait,conversationExts:_.exts,content:m,sender:y,mentionInfo:l,streams:d,isStream:!!a,sentTime:+e.sentTime,isRead:!!r,isSender:!!p,isUpdated:!!c,attribute:T}),e},formatMsgs=({messages:e,senders:t,groups:n})=>{let s=utils.map(e,e=>{let s=formatMsg({message:e,senders:t,groups:n});return s});return s},formatConversation=({conversation:e,users:t,groups:n})=>{if(utils.isEmpty(e))return e;let{id:s,type:o,draft:i,unreadCount:r,isTop:a,undisturbType:d,sortTime:p,mentions:c,latestMessageTid:m,latestMessageId:l,latestMessageName:E,latestMessageIsSender:u,latestMessageIsUpdated:g,latestMessageSentTime:T,latestMessageSenderId:y,latestMessageContent:_,latestMessageMessageIndex:C,latestMessageIsRead:S,latestMessageIsMass:O,latestUnreadCount:f,latestReadCount:I,latestReadIndex:R,latestUnreadIndex:A,latestMentionInfo:N,unreadTag:M}=e;c=c||"{}";let v=utils.filter(t,e=>utils.isEqual(e.id,y))[0]||{id:y},h={};h=isGroup(o)?utils.filter(n,e=>utils.isEqual(e.id,s))[0]||{id:s}:utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{id:s},r=0<r?r:0;let D={conversationId:s,conversationType:o,conversationPortrait:h.portrait,conversationTitle:h.name,conversationExts:h.exts,draft:i||"",isTop:!!a,undisturbType:d,latestReadIndex:+R,latestUnreadIndex:+A,latestMessage:{conversationId:s,conversationType:o,conversationPortrait:h.portrait,conversationTitle:h.name,conversationExts:h.exts,content:utils.parse(_),isRead:!!S,isSender:!!u,isUpdated:!!g,isMass:!!O,messageId:l,tid:m,mentionInfo:utils.parse(N),messageIndex:C,name:E,readCount:+(I||0),unreadCount:+(f||0),sentTime:+T,referMsg:{},sender:v},sortTime:+p||0,unreadCount:r||0,mentions:utils.parse(c),unreadTag:M||UNREAD_TAG.READ};return utils.isEmpty(l)&&(D.latestMessage={}),D},formatConversations=({conversations:e,users:t,groups:n})=>{let s=utils.map(e,e=>{let s=formatConversation({conversation:e,users:t,groups:n});return s});return s},createMentions=(e,t,n)=>{let{mentionInfo:s}=t,{senders:o=[],msgs:i=[]}=e;if(utils.isEqual(t.name,MESSAGE_TYPE.RECALL_INFO)){let{content:{messageId:n},sender:e}=t,s=utils.find(i,e=>utils.isEqual(e.messageId,n));-1<s&&i.splice(s,1);// 如果没有消息撤回发送人的消息,移除 senders 中的发送人信息
105
108
  let r=-1<utils.find(i,t=>utils.isEqual(t.senderId,e.id));if(!r){let e=utils.find(o,e=>utils.isEqual(t.sender.id,e.id));utils.isEqual(e,-1)||o.splice(e,1)}let a=i.length;return{isMentioned:0<a,senders:o,msgs:i,count:a}}if(utils.isEqual(t.name,MESSAGE_TYPE.CLIENT_REMOVE_MSGS)){let{content:{messages:n},sender:e}=t,s={};utils.forEach(n,({messageId:e})=>{let t=utils.find(i,t=>{let n=utils.isEqual(t.messageId,e);return n&&(s[t.senderId]=t.senderId),n});-1<t&&i.splice(t,1)}),utils.forEach(s,e=>{let t=-1<utils.find(i,t=>utils.isEqual(t.senderId,e));if(!t){let t=utils.find(o,t=>utils.isEqual(e,t.id));utils.isEqual(t,-1)||o.splice(t,1)}});let r=i.length;return{isMentioned:0<r,senders:o,msgs:i,count:r}}if(utils.isEmpty(s))return e;let{members:r,mentionType:a}=s,d=utils.find(r,e=>utils.isEqual(n.id,e.id));if(-1<d||utils.isEqual(a,MENTION_TYPE.ALL)){i.push({senderId:t.sender.id,messageId:t.messageId,sentTime:t.sentTime,mentionType:a});let e=utils.find(o,e=>utils.isEqual(t.sender.id,e.id));utils.isEqual(e,-1)&&o.push(t.sender)}let p=i.length;return{isMentioned:0<p,senders:o,msgs:i,count:p}};function isNestInclude(e,t,n){let s=!1;for(var o=0;o<e.length;o++)for(var r=0;r<t.length&&(s=n(e[o],t[r]),!s);r++);return s}function hasUncompletedStream(e){let t=!1;for(var n=0;n<e.length;n++){let s=e[n],{isStream:o,streams:i}=s;if(o=!!o,i||(i="[]"),i=utils.parse(i),o&&utils.isEqual(i.length,0)){t=!0;break}}return t}var tools={isGroup,formatMsg,formatMsgs,formatConversations,formatConversation,createMentions,isNestInclude,hasUncompletedStream};function Conversation$1(e,t){function n(t){let{conversationId:n,conversationType:o,conversationTitle:i,conversationPortrait:r,conversationExts:a,mentionInfo:d,messageId:p}=t,c={conversationId:n,conversationType:o,conversationTitle:i,conversationPortrait:r,conversationExts:a,latestMessage:t,unreadCount:0,updatedTime:0,undisturbType:t.undisturbType},m=s.getPer(t),l=m.mentions||{},E=e.getCurrentUser();if(l=tools.createMentions(l,t,E),t.isSender){let e=s.getPer(t);utils.extend(c,{conversationTitle:e.conversationTitle,conversationPortrait:e.conversationPortrait,conversationExts:e.conversationExts})}return utils.extend(c,{mentions:l}),c}/*
106
109
  let params = {
107
110
  type: UNDISTURB_TYPE.DISTURB,
@@ -114,7 +117,7 @@ let r=-1<utils.find(i,t=>utils.isEqual(t.senderId,e.id));if(!r){let e=utils.find
114
117
  1、内存中缓存最近 200 个会话,并按 message.sentTime 倒序排序
115
118
  2、startTime 是 0 时,优先返回内存中会话,内存数量小于 count 数,从服务端获取
116
119
  3、startTime 非 0 是,直接从服务端获取,并更新到内存中
117
- */let s=common.ConversationUtils();e.on(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,o=>{function i(e){let o=n(e);if(s.isExisted(o)){s.update(o);let e=s.getPer(o);return t.emit(EVENT.CONVERSATION_CHANGED,{conversations:utils.clone([e])})}s.update([o]);let i=s.getPer(o);t.emit(EVENT.CONVERSATION_ADDED,{conversations:utils.clone([i])})}if(!utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_MSG_EXSET)){if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_DELETE_MSGS))return e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,{...o,name:MESSAGE_TYPE.CLIENT_REMOVE_MSGS});if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_CONVERSATION_TAG_ADD)){let{content:{id:e,name:n,conversations:s}}=o;return 0<s.length?t.emit(EVENT.TAG_CONVERSATION_ADDED,{id:e,conversations:s}):utils.isEmpty(n)||0!=s.length?t.emit(EVENT.TAG_ADDED,{tags:[{id:e,name:n}]}):t.emit(EVENT.TAG_CHANGED,{tags:[{id:e,name:n}]})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_CONVERSATION_TAG_REMOVE)){let{content:{tags:e}}=o;return t.emit(EVENT.TAG_REMOVED,{tags:e})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_REMOVE_CONVERS_FROM_TAG)){let{content:{id:e,conversations:n}}=o;return t.emit(EVENT.TAG_CONVERSATION_REMOVED,{id:e,conversations:n})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_ADD_CONVER)){let{content:e}=o;s.update(e);let n=s.getPer(e);return t.emit(EVENT.CONVERSATION_ADDED,{conversations:utils.clone([n])})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_CLEAR_TOTALUNREAD)){let{content:{clearTime:e}}=o,n=s.get();return s.read(n),t.emit(EVENT.CLEAR_TOTAL_UNREADCOUNT,{clearTime:e})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_REMOVE_CONVERS)){let{content:{conversations:e}}=o,n=[];return utils.forEach(e,e=>{let t=s.remove(e);n.push(t)}),t.emit(EVENT.CONVERSATION_REMOVED,{conversations:n})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_TOPCONVERS)){let{content:{conversations:e}}=o,n=e[0]||{isTop:!1},i=s.modify(e,{isTop:n.isTop});return t.emit(EVENT.CONVERSATION_TOP,{conversations:e}),t.emit(EVENT.CONVERSATION_CHANGED,{conversations:i})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_UNDISTURB)){let{content:{conversations:e}}=o,n=e[0]||{undisturbType:UNDISTURB_TYPE.UNDISTURB},i=s.modify(e,{undisturbType:n.undisturbType});return t.emit(EVENT.CONVERSATION_UNDISTURBED,{conversations:e}),t.emit(EVENT.CONVERSATION_CHANGED,{conversations:i})}// 如果会话最后一条消息大于清理的时间,不更新会话列表
120
+ */let s=common.ConversationUtils();e.on(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,o=>{function i(e){let o=n(e);if(s.isExisted(o)){s.update(o);let e=s.getPer(o);return t.emit(EVENT.CONVERSATION_CHANGED,{conversations:utils.clone([e])})}s.update([o]);let i=s.getPer(o);t.emit(EVENT.CONVERSATION_ADDED,{conversations:utils.clone([i])})}let r=common.formatter.toMsg(o.flags)||{};if(r.isStorage&&!utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_MSG_EXSET)){if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_DELETE_MSGS))return e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,{...o,name:MESSAGE_TYPE.CLIENT_REMOVE_MSGS});if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_CONVERSATION_TAG_ADD)){let{content:{id:e,name:n,conversations:s}}=o;return 0<s.length?t.emit(EVENT.TAG_CONVERSATION_ADDED,{id:e,conversations:s}):utils.isEmpty(n)||0!=s.length?t.emit(EVENT.TAG_ADDED,{tags:[{id:e,name:n}]}):t.emit(EVENT.TAG_CHANGED,{tags:[{id:e,name:n}]})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_CONVERSATION_TAG_REMOVE)){let{content:{tags:e}}=o;return t.emit(EVENT.TAG_REMOVED,{tags:e})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_REMOVE_CONVERS_FROM_TAG)){let{content:{id:e,conversations:n}}=o;return t.emit(EVENT.TAG_CONVERSATION_REMOVED,{id:e,conversations:n})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_ADD_CONVER)){let{content:e}=o;s.update(e);let n=s.getPer(e);return t.emit(EVENT.CONVERSATION_ADDED,{conversations:utils.clone([n])})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_CLEAR_TOTALUNREAD)){let{content:{clearTime:e}}=o,n=s.get();return s.read(n),t.emit(EVENT.CLEAR_TOTAL_UNREADCOUNT,{clearTime:e})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_REMOVE_CONVERS)){let{content:{conversations:e}}=o,n=[];return utils.forEach(e,e=>{let t=s.remove(e);n.push(t)}),t.emit(EVENT.CONVERSATION_REMOVED,{conversations:n})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_TOPCONVERS)){let{content:{conversations:e}}=o,n=e[0]||{isTop:!1},i=s.modify(e,{isTop:n.isTop});return t.emit(EVENT.CONVERSATION_TOP,{conversations:e}),t.emit(EVENT.CONVERSATION_CHANGED,{conversations:i})}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_UNDISTURB)){let{content:{conversations:e}}=o,n=e[0]||{undisturbType:UNDISTURB_TYPE.UNDISTURB},i=s.modify(e,{undisturbType:n.undisturbType});return t.emit(EVENT.CONVERSATION_UNDISTURBED,{conversations:e}),t.emit(EVENT.CONVERSATION_CHANGED,{conversations:i})}// 如果会话最后一条消息大于清理的时间,不更新会话列表
118
121
  if(utils.isEqual(o.name,MESSAGE_TYPE.CLEAR_MSG)){let{content:{cleanTime:e,conversationType:n,conversationId:i,senderId:r}}=o,a={conversationType:n,conversationId:i},d=s.getPer(a)||a,{latestMessage:p}=d||{};if(p=p||{sender:{id:""}},e>=p.sentTime){if(!utils.isEmpty(r)&&!utils.isEqual(r,p.sender.id))return;d.latestMessage={},t.emit(EVENT.CONVERSATION_CHANGED,{conversations:[d]})}return}if(utils.isEqual(MESSAGE_TYPE.CLIENT_REMOVE_MSGS,o.name)){let{content:{messages:n}}=o;if(utils.isEmpty(n))return;let i=n[0],r=s.getPer(i);utils.isEmpty(r)&&(r={latestMessage:{tid:""}});let a=utils.map(n,e=>e.tid),{latestMessage:d}=r,p=r.mentions||{},c=p.msgs||[],m=tools.isNestInclude(c,n,(e,t)=>utils.isEqual(e.messageId,t.tid)),l=utils.isInclude(a,d.tid);// 只有会话最后一条消息被删除时触发会话列表变更或这删除的消息 @ 消息
119
122
  if(l||m){let n=s.getPer(o),i=n.mentions||{},r=e.getCurrentUser();i=tools.createMentions(i,o,r);let a={mentions:i};l&&utils.extend(a,{latestMessage:{}});let d=s.modify(n,a);t.emit(EVENT.CONVERSATION_CHANGED,{conversations:utils.clone(d)})}return}// 如果会话最后一条消息和被撤回消息不匹配,不更新会话列表
120
123
  if(utils.isEqual(o.name,MESSAGE_TYPE.RECALL)){let{content:{messageId:e}}=o,t=s.getPer(o),{latestMessage:n,mentions:i}=t||{};n=n||{};let r=utils.isEqual(n.messageId,e);i=i||{};let a=i.msgs||[],d=utils.find(a,t=>utils.isEqual(t.messageId,e));if(!r&&utils.isEqual(d,-1))return;// 对外模拟 recallinfo 消息
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  {
3
3
  "name": "jugglechat-websdk",
4
- "version": "1.9.1",
4
+ "version": "1.9.3",
5
5
  "description": "JuggleChat SDK, IM, Chat",
6
6
  "main": "index.js",
7
7
  "types": "index.d.ts",