jugglechat-websdk 1.6.8 → 1.7.0

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 (2) hide show
  1. package/index.js +13 -13
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * JuggleChat.js v1.6.8
2
+ * JuggleChat.js v1.7.0
3
3
  * (c) 2022-2024 JuggleChat
4
4
  * Released under the MIT License.
5
5
  */const noop=()=>{},isObject=e=>"[object Object]"===Object.prototype.toString.call(e),isArray=e=>"[object Array]"===Object.prototype.toString.call(e),isFunction=e=>"[object Function]"===Object.prototype.toString.call(e),isString=e=>"[object String]"===Object.prototype.toString.call(e),isBoolean=e=>"[object Boolean]"===Object.prototype.toString.call(e),isUndefined=e=>"[object Undefined]"===Object.prototype.toString.call(e),isNull=e=>"[object Null]"===Object.prototype.toString.call(e),isNumber=e=>"[object Number]"===Object.prototype.toString.call(e),stringify=e=>JSON.stringify(e),parse=t=>{let n={};try{n=JSON.parse(t)}catch(s){n=t}return n},forEach=(e,t)=>{t=t||noop;isObject(e)&&(()=>{for(var n in e)t(e[n],n,e)})(),isArray(e)&&(()=>{for(var n=0,s=e.length;n<s;n++)t(e[n],n,e)})()},isEmpty=e=>{let t=!0;return isObject(e)&&forEach(e,()=>{t=!1}),(isString(e)||isArray(e))&&(t=0===e.length),isNumber(e)&&(t=-1===e),t},rename=(e,t)=>{var n=isObject(e);n&&(e=[e]),e=parse(stringify(e));var s=function(e,n,s){delete s[n],n=t[n],s[n]=e};return forEach(e,e=>{forEach(e,(e,n,o)=>{var i=(n in t);(i?s:noop)(e,n,o)})}),isObject?e[0]:e},extend=(e,t)=>(t=isArray(t)?t:[t],forEach(t,t=>{for(let n in t){let s=t[n];isUndefined(s)||(e[n]=s)}}),e),Defer=Promise,deferred=e=>new Defer(e),templateFormat=(e,t,n)=>{isArray(t)||(t=[t]);let s=[],o=t=>e.replace(n||/\\?\{([^}]+)\}/g,(e,n)=>"\\"===e.charAt(0)?e.slice(1):void 0===t[n]?"{"+n+"}":t[n]);for(let r=0,i=t.length;r<i;r++)s.push(o(t[r]));return s.join("")},isContain=(e,t)=>-1<e.indexOf(t),isEqual=(e,t)=>e===t,Cache$1=e=>{isObject(e)||(e={});let t=(t,n)=>{e[t]=n},n=t=>e[t],s=t=>{delete e[t]},o=()=>{let t=[];for(let n in e)t.push(n);return t},i=()=>{e={}};return{set:t,get:n,remove:s,getKeys:o,clear:i}},request=(e,t)=>deferred((n,s)=>{requestNormal(e,t,{success:n,fail:s})}),requestNormal=(e,t,n)=>{t=t||{},n=n||{success:noop,fail:noop,progress:noop};let s=new XMLHttpRequest,o=t.method||"GET";s.open(o,e,!0);let i=t.headers||{};forEach(i,(e,t)=>{s.setRequestHeader(t,e)});let r=t.body||{},a=()=>/^(200|202)$/.test(s.status),d=t.timeout;return d&&(s.timeout=d),s.onreadystatechange=function(){if(isEqual(s.readyState,4)){let{responseText:e}=s;e=e||"{}";let t=parse(e);if(a())n.success(t,s);else{let{status:e}=s,o={status:e,result:t};n.fail(o)}}},s.upload.onprogress=function(e){e.lengthComputable&&n.progress(e)},s.onerror=e=>{n.fail(e)},s.send(r),s},map=(e,t)=>e.map(t),filter=(e,t)=>e.filter(t),uniq=(e,t)=>{let n=[],s={};return e.forEach(e=>{let n=t(e);s[n.key]=n.value}),forEach(s,e=>{n.push(e)}),n},some=(e,t)=>e.some(t),toJSON=e=>JSON.stringify(e),toArray=e=>{let t=[];return forEach(e,(e,n)=>{t.push([n,e])}),t},isInclude=(e,t)=>-1<e.indexOf(t),clone$1=e=>JSON.parse(JSON.stringify(e));// 暂时支持 String
@@ -58,29 +58,29 @@ let o=Math.pow(2,s-1),i=t[s].name;n[i]=0!==(e&o)}return n}},registerMessage=e=>{
58
58
  utils.isEqual(p,MESSAGE_TYPE.CLEAR_UNREAD)&&o.isSender&&(u=0,o=s.latestMessage),(0>u||utils.isNull(u))&&(u=0),!m&&c.isCount&&(g=o.unreadIndex||0,u=g-E);let y=getDraftKey(s),T=Storage.get(y);T=utils.isEmpty(T)?"":T,utils.extend(s,{draft:T});let f=o.sentTime||s.sortTime;// 如果是自己发发送的群发消息不更新会话列表, 自己本地发送的消息通过 isMass 区分,接收或同步消息通过消息位计算
59
59
  o.isMass&&m&&(f=s.sortTime),s=utils.extend(s,{sortTime:f,unreadCount:u,latestUnreadIndex:g,latestReadIndex:E}),e.push(s)}),e=utils.quickSort(e,(e,t)=>e.sortTime>t.sortTime);let n=1e3;e.length>1000&&(e.length=1000)},o=()=>{t=!0},i=e=>{s(e)},r=t=>{let n=t,s=utils.find(e,({conversationType:e,conversationId:n,latestMessage:s={}})=>{let o=!0;// 删除会话指令中包含 time,用来判断是否是过期的删除指令
60
60
  return 0<t.time&&(o=t.time>=s.sentTime),o&&utils.isEqual(t.conversationType,e)&&utils.isEqual(t.conversationId,n)});if(!utils.isEqual(s,-1)){let t=e.splice(s,1);n=t[0]}return n},a=()=>{t=!1,e.length=0},d=t=>{let n=utils.find(e,({conversationType:e,conversationId:n})=>utils.isEqual(t.conversationType,e)&&utils.isEqual(t.conversationId,n));return utils.isEqual(n,-1)||utils.extend(e[n],t),e[n]||{}},p=(e,t={})=>{let n=[];return e=utils.isArray(e)?e:[e],utils.forEach(e,e=>{let s=l(e);if(!utils.isEmpty(s)){utils.extend(s,t),utils.isEmpty(t)&&utils.extend(s,e);let o=d(s);n.push(o)}else n.push(e)}),n},c=()=>e,l=t=>{let n=utils.find(e,({conversationType:e,conversationId:n})=>utils.isEqual(t.conversationType,e)&&utils.isEqual(t.conversationId,n));return e[n]||{}},m=()=>t,u=t=>{t=utils.isArray(t)?t:[t];let n=[];return utils.forEach(t,t=>{let s=utils.find(e,({conversationType:e,conversationId:n})=>utils.isEqual(t.conversationType,e)&&utils.isEqual(t.conversationId,n));-1<s&&(e[s].latestReadIndex=t.unreadIndex,e[s].unreadCount=0,e[s].mentions={},e[s].unreadTag=UNREAD_TAG.READ,n.push(e[s]))}),n};return{remove:r,update:s,clear:a,get:c,isSync:m,add:i,relpace:d,setSynced:o,modify:p,getPer:l,read:u,isExisted:n}}// 特性检查
61
- function checkUploadType(e){e=e||{};let t=UPLOAD_TYPE.NONE;return e.QiniuError&&(t=UPLOAD_TYPE.QINIU),e.urllib&&(t=UPLOAD_TYPE.ALI),t}function formatMediaMessage(e,t){let{name:n,content:s}=e;if(utils.isEqual(n,MESSAGE_TYPE.FILE)){let{file:n}=s,o=n.size/1e3;utils.extend(e.content,{size:o,url:t})}if(utils.isEqual(n,MESSAGE_TYPE.IMAGE)){let{height:n,width:o}=s,i="h";o>n&&(i="w");let r=`${t}&imageView2/2/${i}/100`;utils.extend(e.content,{url:t,thumbnail:r})}return utils.isInclude([MESSAGE_TYPE.VIDEO,MESSAGE_TYPE.VOICE],n)&&utils.extend(e.content,{url:t}),e}function uploadThumbnail(e,t,n){let{type:s,token:o,domain:i,file:r,url:a}=t,d=Uploder(e,{type:s});d.compress(r,(e,t)=>{let s={file:e},r={token:o,domain:i,url:a},p={onprogress:utils.noop,oncompleted:({url:e})=>{let s=null;n(s,e,t)},onerror:e=>{n(e)}};d.exec(s,r,p)},t)}function uploadFrame(e,t,n){let{type:s,token:o,domain:i,file:r,url:a}=t,d=Uploder(e,{type:s});d.capture(r,(e,t)=>{let s={file:e},r={token:o,domain:i,url:a},p={onprogress:utils.noop,oncompleted:({url:e})=>{let s=null;n(s,e,t)},onerror:e=>{n(e)}};d.exec(s,r,p)},t)}function getDraftKey(e){return`draft_${e.conversationType}_${e.conversationId}`}function formatUser(e){let t=utils.toObject(e.extFields);return{id:e.userId,name:e.nickname||"",portrait:e.userPortrait||"",updatedTime:e.updatedTime||0,exts:t||{}}}function toKVs(e){let t=[];return utils.forEach(e,(e,n)=>{t.push({key:n,value:e})}),t}function formatProvider(e,t){let n={};return utils.forEach(e,e=>{n[e]=function(){let n=[];for(let e=0;e<arguments.length;e++){let t=arguments[e],s={};s=utils.isArray(t)?t:clone(t),n.push(s)}let s=t[e];return s?s(...n):Promise.reject(ErrorType.SDK_FUNC_NOT_DEFINED)}}),n}function clone(e){let t=e=>{let n={};return utils.forEach(e,(e,s)=>{n[s]=utils.isObject(e)?t(e):utils.isArray(e)?utils.clone(e):e}),n},n=t(e);return n}function isDesktop(){return"undefined"!=typeof JGChatPCClient}function getSessionId(){return"s-xxxxxxxxxx".replace(/[xy]/g,function(e){let t=0|16*Math.random(),n="x"==e?t:8|3&t;return n.toString(16)})}function getTokenKey(e,t){return`${e}_${t}`}function genUId(){return"xxxxxxxxxxxx".replace(/[xy]/g,function(e){let t=0|16*Math.random(),n="x"==e?t:8|3&t;return n.toString(16)})}function getClientSession(){let e=sessionStorage.getItem(STORAGE.CLIENT_SESSION);return e||(e=genUId(),sessionStorage.setItem(STORAGE.CLIENT_SESSION,e)),e}function encrypto(e,t){let n=[];return e.forEach((e,s)=>{let o=s%8,i=e^t[o];n.push(i)}),new Uint8Array(n)}function decrypto(e,t){let n=[];return e.forEach((e,s)=>{let o=s%8,i=e^t[o];n.push(i)}),new Uint8Array(n)}function reportLogs({logger:e,params:t}){return e.report({...t})}var common={check,getNum,getTokenKey,getNaviStorageKey,initSyncTime,updateSyncTime,getError,ConversationUtils,checkUploadType,formatMediaMessage,uploadThumbnail,uploadFrame,getDraftKey,formatUser,toKVs,registerMessage,getMsgFlag,formatter,formatProvider,isDesktop,getSessionId,getClientSession,encrypto,decrypto,reportLogs};function getConnectBody({data:e}){let{appkey:t,token:n,deviceId:s,platform:o,clientSession:i,sdkVersion:r}=e,a="jug9le1m",d=$root.lookup("codec.ConnectMsgBody"),p=d.create({appkey:t,token:n,platform:o,deviceId:s,clientSession:i,protoId:a,sdkVersion:r}),c=d.encode(p).finish();return{buffer:c}}function getPublishBody({data:e,callback:t,index:n}){let{conversationId:s,conversationType:o,topic:i}=e,r=[];if(utils.isInclude([COMMAND_TOPICS.SEND_GROUP,COMMAND_TOPICS.SEND_PRIVATE,COMMAND_TOPICS.SEND_CHATROOM],i)){let{name:t,content:n,mentionInfo:s,flag:o,mergeMsg:i,referMsg:a}=e;n=utils.toJSON(n);let d=$root.lookup("codec.UpMsg"),p={};if(s){let{members:t=[],mentionType:e}=s;t=utils.map(t,e=>({userId:e.id})),utils.extend(p,{mentionType:e,targetUsers:t})}if(!utils.isEmpty(a)){let{messageIndex:e,sentTime:t,messageId:n,sender:s={exts:{}}}=a,o=utils.toJSON(a.content);// let referTarget = {
61
+ function checkUploadType(e){e=e||{};let t=UPLOAD_TYPE.NONE;return e.QiniuError&&(t=UPLOAD_TYPE.QINIU),e.urllib&&(t=UPLOAD_TYPE.ALI),t}function formatMediaMessage(e,t){let{name:n,content:s}=e;if(utils.isEqual(n,MESSAGE_TYPE.FILE)){let{file:n}=s,o=n.size/1e3;utils.extend(e.content,{size:o,url:t})}if(utils.isEqual(n,MESSAGE_TYPE.IMAGE)){let{height:n,width:o}=s,i="h";o>n&&(i="w");let r=`${t}&imageView2/2/${i}/100`;utils.extend(e.content,{url:t,thumbnail:r})}return utils.isInclude([MESSAGE_TYPE.VIDEO,MESSAGE_TYPE.VOICE],n)&&utils.extend(e.content,{url:t}),e}function uploadThumbnail(e,t,n){let{type:s,token:o,domain:i,file:r,url:a}=t,d=Uploder(e,{type:s});d.compress(r,(e,t)=>{let s={file:e},r={token:o,domain:i,url:a},p={onprogress:utils.noop,oncompleted:({url:e})=>{let s=null;n(s,e,t)},onerror:e=>{n(e)}};d.exec(s,r,p)},t)}function uploadFrame(e,t,n){let{type:s,token:o,domain:i,file:r,url:a}=t,d=Uploder(e,{type:s});d.capture(r,(e,t)=>{let s={file:e},r={token:o,domain:i,url:a},p={onprogress:utils.noop,oncompleted:({url:e})=>{let s=null;n(s,e,t)},onerror:e=>{n(e)}};d.exec(s,r,p)},t)}function getDraftKey(e){return`draft_${e.conversationType}_${e.conversationId}`}function formatUser(e){let t=utils.toObject(e.extFields);return{id:e.userId,name:e.nickname||"",portrait:e.userPortrait||"",updatedTime:e.updatedTime||0,exts:t||{}}}function toKVs(e){let t=[];return utils.forEach(e,(e,n)=>{t.push({key:n,value:e})}),t}function formatProvider(e,t){let n={};return utils.forEach(e,e=>{n[e]=function(){let n=[];for(let e=0;e<arguments.length;e++){let t=arguments[e],s={};s=utils.isArray(t)?t:clone(t),n.push(s)}let s=t[e];return s?s(...n):Promise.reject(ErrorType.SDK_FUNC_NOT_DEFINED)}}),n}function clone(e){let t=e=>{let n={};return utils.forEach(e,(e,s)=>{n[s]=utils.isObject(e)?t(e):utils.isArray(e)?utils.clone(e):e}),n},n=t(e);return n}function isDesktop(){return"undefined"!=typeof JGChatPCClient}function getSessionId(){return"s-xxxxxxxxxx".replace(/[xy]/g,function(e){let t=0|16*Math.random(),n="x"==e?t:8|3&t;return n.toString(16)})}function getTokenKey(e,t){return`${e}_${t}`}function genUId(){return"xxxxxxxxxxxx".replace(/[xy]/g,function(e){let t=0|16*Math.random(),n="x"==e?t:8|3&t;return n.toString(16)})}function getClientSession(){let e=sessionStorage.getItem(STORAGE.CLIENT_SESSION);return e||(e=genUId(),sessionStorage.setItem(STORAGE.CLIENT_SESSION,e)),e}function encrypto(e,t){let n=[];return e.forEach((e,s)=>{let o=s%8,i=e^t[o];n.push(i)}),new Uint8Array(n)}function decrypto(e,t){let n=[];return e.forEach((e,s)=>{let o=s%8,i=e^t[o];n.push(i)}),new Uint8Array(n)}function reportLogs({logger:e,params:t}){return e.report({...t})}var common={check,getNum,getTokenKey,getNaviStorageKey,initSyncTime,updateSyncTime,getError,ConversationUtils,checkUploadType,formatMediaMessage,uploadThumbnail,uploadFrame,getDraftKey,formatUser,toKVs,registerMessage,getMsgFlag,formatter,formatProvider,isDesktop,getSessionId,getClientSession,encrypto,decrypto,reportLogs};function getConnectBody({data:e}){let{appkey:t,token:n,deviceId:s,platform:o,clientSession:i,sdkVersion:r}=e,a="jug9le1m",d=$root.lookup("codec.ConnectMsgBody"),p=d.create({appkey:t,token:n,platform:o,deviceId:s,clientSession:i,protoId:a,sdkVersion:r}),c=d.encode(p).finish();return{buffer:c}}function getPublishBody({data:e,callback:t,index:n}){let{conversationId:s,conversationType:o,topic:i}=e,r=[];if(utils.isInclude([COMMAND_TOPICS.SEND_GROUP,COMMAND_TOPICS.SEND_PRIVATE,COMMAND_TOPICS.SEND_CHATROOM],i)){let{name:t,content:n,mentionInfo:s,flag:o,mergeMsg:i,referMsg:a,push:d}=e;n=utils.toJSON(n);let p=$root.lookup("codec.UpMsg"),c={};if(s){let{members:t=[],mentionType:e}=s;t=utils.map(t,e=>({userId:e.id})),utils.extend(c,{mentionType:e,targetUsers:t})}if(!utils.isEmpty(a)){let{messageIndex:e,sentTime:t,messageId:n,sender:s={exts:{}}}=a,o=utils.toJSON(a.content);// let referTarget = {
62
62
  // userId: sender.id,
63
63
  // nickname: sender.name,
64
64
  // userPortrait: sender.portrait,
65
65
  // extFields: common.toKVs(sender.exts)
66
66
  // };
67
67
  a={msgIndex:e,msgTime:t,msgId:n,msgContent:new TextEncoder().encode(o),msgType:a.name,type:a.conversationType,senderId:s.id// targetUserInfo: referTarget
68
- }}let c=d.create({msgType:t,mentionInfo:p,flags:o,referMsg:a,mergedMsgs:i,msgContent:new TextEncoder().encode(n)});r=d.encode(c).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}=e;s=o;let d=$root.lookup("codec.QryConversationsReq"),p={startTime:n,count:t,order:i};utils.isUndefined(a)||utils.extend(p,{channelType:a});let c=d.create(p);r=d.encode(c).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}=e,o=$root.lookup("codec.SyncChatroomReq"),i=o.create({syncTime:t,chatroomId:n});s=n,r=o.encode(i).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:n=[],ignoreConversations:i=[]}=e,a=[];utils.forEach(i,({conversationId:e,conversationType:t})=>{a.push({targetId:e,channelType:t})});let d={channelTypes:n,ignoreConvers:a},p=t.create({filter:d});r=t.encode(p).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}=e,o=$root.lookup("codec.QryTopConversReq"),i=o.create({startTime:t});s=n,r=o.encode(i).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:new TextEncoder().encode(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:s,content:o,sentTime:i}=e,a=$root.lookup("codec.ModifyMsgReq");o=utils.toJSON(o);let d=a.create({channelType:n,targetId:t,msgId:s,msgTime:i,msgContent:new TextEncoder().encode(o)});r=a.encode(d).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}}=e,n=$root.lookup("codec.ChatRoomReq"),o=n.create({chatId:t});s=t,r=n.encode(o).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()}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),l=t.encode(c).finish();return l};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 Decoder(e,t){function n(e){let t=$root.lookup("codec.PublishMsgBody"),n=t.decode(e),{targetId:s,data:o,topic:i,timestamp:r,index:a}=n,d={},p=SIGNAL_NAME.CMD_RECEIVED;// 收到 NTF 直接返回,通过 sync_msgs 同步消息
68
+ }}let l={msgType:t,mentionInfo:c,flags:o,referMsg:a,mergedMsgs:i,msgContent:new TextEncoder().encode(n)};if(d){let{text:e,title:t}=d,n={title:t,pushText:e};n=utils.clone(n),utils.isEmpty(n)||(l=utils.extend(l,{pushData:n}))}let m=p.create(l);r=p.encode(m).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}=e;s=o;let d=$root.lookup("codec.QryConversationsReq"),p={startTime:n,count:t,order:i};utils.isUndefined(a)||utils.extend(p,{channelType:a});let c=d.create(p);r=d.encode(c).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}=e,o=$root.lookup("codec.SyncChatroomReq"),i=o.create({syncTime:t,chatroomId:n});s=n,r=o.encode(i).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:n=[],ignoreConversations:i=[]}=e,a=[];utils.forEach(i,({conversationId:e,conversationType:t})=>{a.push({targetId:e,channelType:t})});let d={channelTypes:n,ignoreConvers:a},p=t.create({filter:d});r=t.encode(p).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}=e,o=$root.lookup("codec.QryTopConversReq"),i=o.create({startTime:t});s=n,r=o.encode(i).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:new TextEncoder().encode(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:s,content:o,sentTime:i}=e,a=$root.lookup("codec.ModifyMsgReq");o=utils.toJSON(o);let d=a.create({channelType:n,targetId:t,msgId:s,msgTime:i,msgContent:new TextEncoder().encode(o)});r=a.encode(d).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}}=e,n=$root.lookup("codec.ChatRoomReq"),o=n.create({chatId:t});s=t,r=n.encode(o).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()}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),l=t.encode(c).finish();return l};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 Decoder(e,t){function n(e){let t=$root.lookup("codec.PublishMsgBody"),n=t.decode(e),{targetId:s,data:o,topic:i,timestamp:r,index:a}=n,d={},p=SIGNAL_NAME.CMD_RECEIVED;// 收到 NTF 直接返回,通过 sync_msgs 同步消息
69
69
  if(utils.isEqual(i,COMMAND_TOPICS.NTF)){let e=$root.lookup("codec.Notify"),t=e.decode(o),{syncTime:n,type:s,chatroomId:r}=t;d={topic:i,receiveTime:n,type:s,targetId:r},p=SIGNAL_NAME.S_NTF}else if(utils.isEqual(i,COMMAND_TOPICS.MSG)){let e=$root.lookup("codec.DownMsg"),t=e.decode(o);d=f(t)}else if(utils.isEqual(i,COMMAND_TOPICS.CHATROOM_USER_NTF)){let e=$root.lookup("codec.ChrmEvent"),t=e.decode(o),{chatId:n,eventTime:s,eventType:i}=t;d={chatroomId:n,time:s,type:i},p=SIGNAL_NAME.S_CHATROOM_USER_NTF}else;return utils.extend(d,{ackIndex:a}),{_msg:d,_name:p}}function s(t){let n=$root.lookup("codec.QueryAckMsgBody"),s=n.decode(t),{index:l,data:f,code:C,timestamp:_}=s,{topic:S,targetId:O}=e.get(l),I={};return utils.isInclude([COMMAND_TOPICS.HISTORY_MESSAGES,COMMAND_TOPICS.SYNC_MESSAGES,COMMAND_TOPICS.GET_MSG_BY_IDS,COMMAND_TOPICS.GET_MERGE_MSGS],S)&&(I=T(l,f)),utils.isEqual(S,COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES)&&(I=g(l,f)),utils.isEqual(S,COMMAND_TOPICS.SYNC_CHATROOM_ATTRS)&&(I=E(l,f,{targetId:O})),utils.isInclude([COMMAND_TOPICS.CONVERSATIONS,COMMAND_TOPICS.SYNC_CONVERSATIONS,COMMAND_TOPICS.QUERY_TOP_CONVERSATIONS],S)&&(I=u(l,f,{topic:S})),utils.isEqual(S,COMMAND_TOPICS.GET_CONVERSATION)&&(I=m(l,f)),utils.isEqual(S,COMMAND_TOPICS.GET_UNREAD_TOTLAL_CONVERSATION)&&(I=c(l,f)),utils.isEqual(S,COMMAND_TOPICS.GET_READ_MESSAGE_DETAIL)&&(I=p(l,f)),utils.isEqual(S,COMMAND_TOPICS.GET_MENTION_MSGS)&&(I=i(l,f)),utils.isEqual(S,COMMAND_TOPICS.GET_FILE_TOKEN)&&(I=r(l,f)),utils.isEqual(S,COMMAND_TOPICS.GET_USER_INFO)&&(I=a(l,f)),utils.isEqual(S,COMMAND_TOPICS.GET_ALL_DISTURB)&&(I=d(l,f)),utils.isInclude([COMMAND_TOPICS.REMOVE_CHATROOM_ATTRIBUTES,COMMAND_TOPICS.SET_CHATROOM_ATTRIBUTES],S)&&(I=o(l,f)),utils.isEqual(S,COMMAND_TOPICS.GET_FIRST_UNREAD_MSG)&&(I=y(l,f)),I=utils.extend(I,{code:C,timestamp:_,index:l}),I}function o(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 i(e,t){let n=$root.lookup("codec.QryMentionMsgsResp"),{mentionMsgs:s,isFinished:o}=n.decode(t),i=utils.map(s,e=>f(e));return{index:e,msgs:i,isFinished:o}}function r(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)}return{index:e,cred:i}}function a(e,t){let n=$root.lookup("codec.UserInfo"),s=n.decode(t);return{index:e,user:s}}function d(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 p(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 c(e,t){let n=$root.lookup("codec.QryTotalUnreadCountResp"),{totalCount:s}=n.decode(t);return{index:e,count:s}}function l(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:l,channelType:m,latestReadIndex:u,latestUnreadIndex:E,isTop:g,unreadTag:y}=e;if(n||(n={msgContent:[]}),utils.extend(n,{targetId:s}),o=o||0,y=y||0,l=l||{},!utils.isEmpty(l)){let{isMentioned:e,senders:t,mentionMsgs:n}=l;t=utils.map(t,e=>common.formatUser(e)),n=utils.map(n,e=>{let{senderId:t,msgId:n,msgTime:s}=e;return{senderId:t,messageId:n,sentTime:s}}),l={isMentioned:e,senders:t,msgs:n,count:n.length}}let T={};if(utils.isEqual(n.msgContent.length,0)||(T=f(n)),utils.isEqual(m,CONVERATION_TYPE.GROUP)){let{groupName:e,groupPortrait:t,extFields:n,groupId:s,updatedTime:o}=d;n=utils.toObject(n),utils.extend(T,{conversationTitle:e,conversationPortrait:t,conversationExts:n,conversationUpdatedTime:o}),GroupCacher.set(s,d)}if(utils.isEqual(m,CONVERATION_TYPE.PRIVATE)){let{userPortrait:e,nickname:t,extFields:n,userId:s,updatedTime:o}=a;n=utils.toObject(n),utils.extend(T,{conversationTitle:t,conversationPortrait:e,conversationExts:n,conversationUpdatedTime:o}),GroupCacher.set(s,a)}let{conversationTitle:C,conversationPortrait:_,conversationExts:S,conversationUpdatedTime:O}=T,{topic:I}=t;return utils.isEqual(COMMAND_TOPICS.QUERY_TOP_CONVERSATIONS,I)&&(i=r),{conversationType:m,conversationId:s,unreadCount:o,sortTime:i,latestMessage:T,conversationTitle:C,conversationPortrait:_,conversationUpdatedTime:O,conversationExts:S,mentions:l,syncTime:p,undisturbType:c||0,latestReadIndex:u,latestUnreadIndex:E,unreadTag:y,isTop:!!g}})}function m(e,t){let n=$root.lookup("codec.Conversation"),s=n.decode(t),o={};if(!s.msg)o={};else{let e=l([s]);o=e[0]||o}return{conversation:o,index:e}}function u(e,t,n={}){let s=$root.lookup("codec.QryConversationsResp"),{conversations:o,isFinished:i}=s.decode(t);return o=l(o,n),{conversations:o,isFinished:i,index:e}}function E(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 g(e,t){let n=$root.lookup("codec.SyncChatroomMsgResp"),s=n.decode(t),{msgs:o}=s,i=utils.map(o,e=>f(e));return{messages:i,index:e}}function y(e,t){let n=$root.lookup("codec.DownMsg"),s=n.decode(t);if(!s.msgId)return{index:e,msg:{}};let o=f(s);return{index:e,msg:o}}function T(e,t){let n=$root.lookup("codec.DownMsgSet"),s=n.decode(t),{isFinished:o,msgs:i,targetUserInfo:r,groupInfo:a}=s,d=utils.map(i,e=>(r&&utils.extend(e,{targetUserInfo:r}),a&&utils.extend(e,{groupInfo:a}),f(e)));return{isFinished:o,messages:d,index:e}}function f(e){let{undisturbType:n,senderId:s,unreadIndex:o,memberCount:i,referMsg:r,readCount:a,msgId:d,msgTime:p,msgType:c,msgContent:l,type:m,targetId:u,mentionInfo:E,isSend:g,msgIndex:y,isRead:T,flags:f,targetUserInfo:C,groupInfo:_}=e,S="";l&&0<l.length&&(S=new TextDecoder().decode(l),S=utils.parse(S)),C=C||{userId:s},_=_||{groupId:u};// 默认更新内存数据
70
70
  let O=C.userId,I=_.groupId;GroupCacher.set(I,_),UserCacher.set(O,C);let N=common.formatUser(C);// 特性检查,如果没有 name 尝试从内存获取信息
71
71
  if(utils.isUndefined(N.name)){let e=UserCacher.get(O);N=utils.isEmpty(e)?{id:O}:e}if(utils.isUndefined(_.groupName)){let e=GroupCacher.get(I);_=utils.isEmpty(e)?{id:I}:e}if(E){let{targetUsers:e,mentionType:t}=E,n=utils.map(e,e=>(e=common.formatUser(e),e));E={type:t,members:n}}let A={};if(r){let e=r.msgContent||"";0!=e.length&&(e=new TextDecoder().decode(e),A.content=utils.parse(e)),r.targetUserInfo=common.formatUser(r.targetUserInfo||{}),utils.extend(A,{name:r.msgType,messageId:r.messageIndex,messageIndex:r.msgIndex,sentTime:r.msgTime,sender:r.targetUserInfo})}let R=common.formatter.toMsg(f),M=t.getCurrentUser(),h={conversationType:m,conversationId:u,conversationTitle:"",conversationPortrait:"",conversationExts:{},sender:utils.clone(N),messageId:d,tid:d,sentTime:p,name:c,isSender:utils.isEqual(M.id,s),messageIndex:y,mentionInfo:E,isRead:!!T,isUpdated:R.isUpdated,isMuted:R.isMute,isMass:R.isMass,referMsg:A,sentState:MESSAGE_SENT_STATE.SUCCESS,undisturbType:n||0,unreadIndex:o||0,flags:f};if(h.isSender&&utils.extend(h.sender,M),utils.isEqual(m,CONVERATION_TYPE.GROUP)){let{groupName:e,groupPortrait:t,extFields:n}=_||{extFields:{}};n=utils.toObject(n),utils.extend(h,{conversationTitle:e,conversationPortrait:t,conversationExts:n,conversationUpdatedTime:_.updatedTime,unreadCount:i-a,readCount:a})}if(utils.isEqual(m,CONVERATION_TYPE.PRIVATE)&&utils.extend(h,{conversationTitle:N.name,conversationPortrait:N.portrait,conversationExts:N.exts,conversationUpdatedTime:N.updatedTime}),utils.isInclude([MESSAGE_TYPE.RECALL_INFO,MESSAGE_TYPE.RECALL],c)&&(S=utils.rename(S,{msg_id:"messageId",msg_time:"sentTime"})),utils.isEqual(MESSAGE_TYPE.MODIFY,c)&&(S=utils.rename(S,{msg_type:"name",msg_content:"content",msg_id:"messageId",msg_seq:"messageIndex",msg_time:"sentTime"})),utils.isEqual(MESSAGE_TYPE.READ_MSG,c)){delete S.index_scopes;let{msgs:e}=S;e=utils.map(e,({msg_id:e})=>({messageId:e})),utils.extend(S,{msgs:e})}if(utils.isEqual(MESSAGE_TYPE.READ_GROUP_MSG,c)){let{msgs:e}=S;e=utils.map(e,({msg_id:e,member_count:t,read_count:n})=>({messageId:e,unreadCount:t-n,readCount:n})),utils.extend(S,{msgs:e})}if(utils.isEqual(MESSAGE_TYPE.CLEAR_UNREAD,c)){let{conversations:e}=S;e=utils.map(e,({channel_type:e,target_id:t,latest_read_index:n})=>({conversationType:e,conversationId:t,unreadIndex:n})),utils.extend(S,{conversations:e})}if(utils.isEqual(MESSAGE_TYPE.COMMAND_UNDISTURB,c)){let{conversations:e}=S;e=utils.map(e,e=>({conversationId:e.target_id,conversationType:e.channel_type,undisturbType:e.undisturb_type})),utils.extend(S,{conversations:e})}if(utils.isEqual(MESSAGE_TYPE.COMMAND_TOPCONVERS,c)){let{conversations:e}=S;e=utils.map(e,e=>({conversationId:e.target_id,conversationType:e.channel_type,isTop:!!e.is_top})),utils.extend(S,{conversations:e})}if(utils.isEqual(MESSAGE_TYPE.COMMAND_REMOVE_CONVERS,c)){let{conversations:t}=S;t=utils.map(t,t=>({conversationId:t.target_id,conversationType:t.channel_type,time:e.msgTime})),utils.extend(S,{conversations:t})}if(utils.isEqual(MESSAGE_TYPE.COMMAND_DELETE_MSGS,c)){let t=utils.map(S.msgs,t=>({tid:t.msg_id,messageId:t.msg_id,conversationId:e.targetId,conversationType:S.channel_type}));S={conversationId:e.targetId,conversationType:S.channel_type,messages:t}}if(utils.isEqual(MESSAGE_TYPE.CLEAR_MSG,c)&&(S={cleanTime:S.clean_time,conversationType:S.channel_type,conversationId:e.targetId,senderId:S.sender_id}),utils.isEqual(MESSAGE_TYPE.COMMAND_ADD_CONVER,c)){let e=S.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;S={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,c)&&(S={clearTime:S.clear_time}),utils.isEqual(MESSAGE_TYPE.COMMAND_MARK_UNREAD,c)){let e=S.conversations,t=utils.map(e,e=>{let{unread_tag:t,channel_type:n,target_id:s}=e;return{conversationId:s,conversationType:n,unreadTag:t}});S={conversations:t}}return utils.extend(h,{content:S}),h}let C=$root.lookup("codec.ImWebsocketMsg"),_=t=>{let o=C.decode(new Uint8Array(t)),i={},r="",{cmd:a,payload:d}=o,p=e.get(STORAGE.CRYPTO_RANDOM),c=common.decrypto(o.payload,p),l=null;switch(a){case SIGNAL_CMD.CONNECT_ACK:l=$root.lookup("codec.ConnectAckMsgBody");let e=l.decode(c);i=utils.extend(i,{ack:e,index:CONNECT_ACK_INDEX,extra:e.ext}),r=SIGNAL_NAME.S_CONNECT_ACK;break;case SIGNAL_CMD.PUBLISH_ACK:l=$root.lookup("codec.PublishAckMsgBody");let t=l.decode(c),{index:o,msgId:a,timestamp:d,code:p,msgIndex:m,memberCount:u}=t;i={messageId:a,sentTime:d,index:o,isSender:!0,code:p,msgIndex:m,memberCount:u};break;case SIGNAL_CMD.PUBLISH:let{_msg:E,_name:g}=n(c);r=g,i=E;break;case SIGNAL_CMD.QUERY_ACK:i=s(c),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 y=l.decode(c);i=utils.extend(i,{extra:y.ext,code:y.code})}return{cmd:a,result:i,name:r}};return{decode:_}}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.replaceAll(/http:\/\/|https:\/\/|file:\/\/|wss:\/\/|ws:\/\//g,"");let d=`${a}//${n}/health`,p={},c=utils.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),l=Storage.get(c);// 通过 AppKey_Token 获取 userId
72
72
  utils.isEmpty(l)||Storage.setPrefix(`${d}_${l}`);let m=common.getNaviStorageKey(d,l),u=Storage.get(m);return utils.isEmpty(u)?void utils.forEach(e,t=>{let l=t.replaceAll(/http:\/\/|https:\/\/|file:\/\//g,""),{http:u}=utils.getProtocol(t);l=`${u}//${l}/navigator/general`;let E={headers:{"x-appkey":d,"x-token":p}},g=utils.requestNormal(l,E,{success:function(e,t){if(!r){let{responseURL:i}=t,a=i.replace(/(\/navigator\/general)/g,"");r=!0;let{code:p,data:l={}}=e,{servers:u,user_id:E}=l,g={servers:u,userId:E,code:p,url:a};// 默认规则:导航和 CMP 的协议必须一致
73
73
  utils.isEmpty(u)||(Storage.set(c,E),Storage.setPrefix(`${d}_${E}`),m=common.getNaviStorageKey(),Storage.set(m,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:u}),n(u))};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
74
74
  if(n)return;n=!0,t=utils.isEqual(e.length,0);let i=e.shift(),r={item:i},a=()=>{n=!1,o(s)};t?n=!1:s(r,a)};return{consume:o,produce:s}}function MessageSyncer(e,t,n,{logger:s}){let o=Consumer(),i=i=>{function r(s,o){let{msg:i}=s,r=common.updateSyncTime({...i,io:n});if(r){let{msgIndex:n,ackIndex:s}=i,o={msgIndex:n,ackIndex:s};e(SIGNAL_CMD.PUBLISH_ACK,o),t.emit(SIGNAL_NAME.CMD_RECEIVED,i)}o()}function a(i,r){let{user:a,msg:d,name:p,$message:c}=i,l=Storage.get(STORAGE.SYNC_RECEIVED_MSG_TIME).time||1700927161470,m=Storage.get(STORAGE.SYNC_SENT_MSG_TIME).time||1700927161470;// 如果本地记录时间戳大于 ntf 中的接收时间,认为消息已被当前端接收过,不再执行拉取动作
75
- if(l>=d.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncReceiveTime:l,msg:d}),r();let u={userId:a.id,syncTime:l,containsSendBox:!0,sendBoxSyncTime:m,topic:COMMAND_TOPICS.SYNC_MESSAGES};e(SIGNAL_CMD.QUERY,u,({isFinished:e,messages:a,code:p})=>{if(s.info({tag:LOG_MODULE.MSG_SYNC,data:u,msg:d,code:p,count:a.length}),!utils.isEqual(p,ErrorType.COMMAND_SUCCESS.code))return r();let l=[];utils.forEach(a,(e,t)=>{let{flags:n,sentTime:s,isSender:o}=e,i=common.formatter.toMsg(n);i.isStorage&&l.push(e)}),c.insertBatchMsgs({msgs:utils.clone(l)}).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()})})}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_NTF)&&a(e,t)})};return{exec:i}}function ConversationSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(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 l={userId:r.id,syncTime:c,topic:COMMAND_TOPICS.SYNC_CONVERSATIONS,count:200};e(SIGNAL_CMD.QUERY,l,e=>{let{isFinished:r,conversations:a,code:d}=e;if(s.info({tag:LOG_MODULE.CONV_SYNC,data:l,code:d,count:a.length}),!utils.isEqual(d,ErrorType.COMMAND_SUCCESS.code))return t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i();let m=a.length,u=a[m-1]||{syncTime:0},{syncTime:E}=u;E>c&&(Storage.set(STORAGE.SYNC_CONVERSATION_TIME,{time:E}),n=utils.extend(n,{time:E})),a=utils.clone(a),p._batchInsertConversations({conversations:a,syncTime:E}).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(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_SYNC_CONVERSATION_NTF)&&i(e,t)})};return{exec:i}}let chatroomCacher=Cache();var chatroomCacher$1={set:(e,t)=>{let n=chatroomCacher.get(e),{msgs:s=[]}=t;200<=s.length&&(s.shift(0),t=utils.extend(t,{msgs:s})),n=utils.extend(n,t),chatroomCacher.set(e,n)},get:e=>{let t=chatroomCacher.get(e);return t},remove:e=>{chatroomCacher.remove(e)},getAll:()=>chatroomCacher.getAll()};function ChatroomSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){s.info({tag:LOG_MODULE.MSG_SYNC,...e});let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM)&&i&&a(e,t),utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_DESTORY)&&i&&r(e,t)}function r(e,n){let{msg:s}=e,o=s.targetId;t.emit(SIGNAL_NAME.CMD_CHATROOM_DESTROY,{id:o}),n()}function a(n,o){let{msg:i}=n,r=i.targetId,a=d(r);if(a>=i.receiveTime&&0<i.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),o();let c={syncTime:a,chatroomId:r,topic:COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES};e(SIGNAL_CMD.QUERY,c,({messages:e,code:n})=>{if(s.info({tag:LOG_MODULE.MSG_SYNC,data:c,msg:i,code:n,count:e.length}),!utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code))return o();let{msgs:a=[]}=chatroomCacher$1.get(r);utils.forEach(e,e=>{p(e.conversationId,e.sentTime);let{messageId:n}=e,s=utils.isInclude(a,n);s||(a.push(n),t.emit(SIGNAL_NAME.CMD_RECEIVED,[e]))}),chatroomCacher$1.set(r,{msgs:a}),o()})}function d(e){let t=chatroomCacher$1.get(e);return t.syncMsgTime||0}function p(e,t){let n=d(e);t>n&&chatroomCacher$1.set(e,{syncMsgTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function ChatroomAttSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){s.info({tag:LOG_MODULE.MSG_SYNC,...e});let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_ATTR)&&i&&r(e,t)}function r(n,o){let{msg:i}=n,r=i.targetId,p=a(r);if(p>=i.receiveTime&&0<i.receiveTime)return o();let c={syncTime:p,chatroomId:r,targetId:r,topic:COMMAND_TOPICS.SYNC_CHATROOM_ATTRS};e(SIGNAL_CMD.QUERY,c,e=>{let{code:n,attrs:r,chatroomId:a}=e;return s.info({tag:LOG_MODULE.MSG_SYNC,data:c,msg:i,code:n,count:r.length}),utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code)?void(utils.forEach(r,e=>{d(a,e.updateTime)}),t.emit(SIGNAL_NAME.CMD_CHATROOM_ATTR_RECEIVED,{attrs:r,chatroomId:a}),o()):o()})}function a(e){let t=chatroomCacher$1.get(e);return t.syncAttTime||0}function d(e,t){let n=a(e);t>n&&chatroomCacher$1.set(e,{syncAttTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function Timer(e={}){let t={timeout:60000};utils.extend(t,e);let{timeout:n}=t,s=0,o=utils.noop,i=e=>{o=e,s=setInterval(()=>{o()},n)},r=()=>{clearInterval(s)},a=()=>{r(),i(o)};return{resume:i,pause:r,reset:a}}function Counter(e={}){let t={timeout:10000};utils.extend(t,e);let{timeout:n}=t,s=0,o=e=>{s=setTimeout(()=>{e(t)},n)},i=()=>{clearTimeout(s)};return{start:o,clear:i}}let VERSION="1.6.8";/*
75
+ if(l>=d.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncReceiveTime:l,msg:d}),r();let u={userId:a.id,syncTime:l,containsSendBox:!0,sendBoxSyncTime:m,topic:COMMAND_TOPICS.SYNC_MESSAGES};e(SIGNAL_CMD.QUERY,u,({isFinished:e,messages:a,code:p})=>{if(s.info({tag:LOG_MODULE.MSG_SYNC,data:u,msg:d,code:p,count:a.length}),!utils.isEqual(p,ErrorType.COMMAND_SUCCESS.code))return r();let l=[];utils.forEach(a,(e,t)=>{let{flags:n,sentTime:s,isSender:o}=e,i=common.formatter.toMsg(n);i.isStorage&&l.push(e)}),c.insertBatchMsgs({msgs:utils.clone(l)}).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 l={userId:r.id,syncTime:c,topic:COMMAND_TOPICS.SYNC_CONVERSATIONS,count:200};e(SIGNAL_CMD.QUERY,l,e=>{let{isFinished:r,conversations:a,code:d}=e;if(s.info({tag:LOG_MODULE.CONV_SYNC,data:l,code:d,count:a.length}),!utils.isEqual(d,ErrorType.COMMAND_SUCCESS.code))return t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i();let m=a.length,u=a[m-1]||{syncTime:0},{syncTime:E}=u;E>c&&(Storage.set(STORAGE.SYNC_CONVERSATION_TIME,{time:E}),n=utils.extend(n,{time:E})),a=utils.clone(a),p._batchInsertConversations({conversations:a,syncTime:E}).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATIONS_PROGRESS,e);let s=!r;s?o.produce(n,s):t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i()})})}o.produce(i),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.CMD_RECEIVED)&&r(e,t),utils.isEqual(n,SIGNAL_NAME.S_SYNC_CONVERSATION_NTF)&&d(e,t),utils.isEqual(n,SIGNAL_NAME.S_NTF)&&a(e,t)})};return{exec:i}}let chatroomCacher=Cache();var chatroomCacher$1={set:(e,t)=>{let n=chatroomCacher.get(e),{msgs:s=[]}=t;200<=s.length&&(s.shift(0),t=utils.extend(t,{msgs:s})),n=utils.extend(n,t),chatroomCacher.set(e,n)},get:e=>{let t=chatroomCacher.get(e);return t},remove:e=>{chatroomCacher.remove(e)},getAll:()=>chatroomCacher.getAll()};function ChatroomSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){s.info({tag:LOG_MODULE.MSG_SYNC,...e});let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM)&&i&&a(e,t),utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_DESTORY)&&i&&r(e,t)}function r(e,n){let{msg:s}=e,o=s.targetId;t.emit(SIGNAL_NAME.CMD_CHATROOM_DESTROY,{id:o}),n()}function a(n,o){let{msg:i}=n,r=i.targetId,a=d(r);if(a>=i.receiveTime&&0<i.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),o();let c={syncTime:a,chatroomId:r,topic:COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES};e(SIGNAL_CMD.QUERY,c,({messages:e,code:n})=>{if(s.info({tag:LOG_MODULE.MSG_SYNC,data:c,msg:i,code:n,count:e.length}),!utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code))return o();let{msgs:a=[]}=chatroomCacher$1.get(r);utils.forEach(e,e=>{p(e.conversationId,e.sentTime);let{messageId:n}=e,s=utils.isInclude(a,n);s||(a.push(n),t.emit(SIGNAL_NAME.CMD_RECEIVED,[e]))}),chatroomCacher$1.set(r,{msgs:a}),o()})}function d(e){let t=chatroomCacher$1.get(e);return t.syncMsgTime||0}function p(e,t){let n=d(e);t>n&&chatroomCacher$1.set(e,{syncMsgTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function ChatroomAttSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){s.info({tag:LOG_MODULE.MSG_SYNC,...e});let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_ATTR)&&i&&r(e,t)}function r(n,o){let{msg:i}=n,r=i.targetId,p=a(r);if(p>=i.receiveTime&&0<i.receiveTime)return o();let c={syncTime:p,chatroomId:r,targetId:r,topic:COMMAND_TOPICS.SYNC_CHATROOM_ATTRS};e(SIGNAL_CMD.QUERY,c,e=>{let{code:n,attrs:r,chatroomId:a}=e;return s.info({tag:LOG_MODULE.MSG_SYNC,data:c,msg:i,code:n,count:r.length}),utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code)?void(utils.forEach(r,e=>{d(a,e.updateTime)}),t.emit(SIGNAL_NAME.CMD_CHATROOM_ATTR_RECEIVED,{attrs:r,chatroomId:a}),o()):o()})}function a(e){let t=chatroomCacher$1.get(e);return t.syncAttTime||0}function d(e,t){let n=a(e);t>n&&chatroomCacher$1.set(e,{syncAttTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function Timer(e={}){let t={timeout:60000};utils.extend(t,e);let{timeout:n}=t,s=0,o=utils.noop,i=e=>{o=e,s=setInterval(()=>{o()},n)},r=()=>{clearInterval(s)},a=()=>{r(),i(o)};return{resume:i,pause:r,reset:a}}function Counter(e={}){let t={timeout:10000};utils.extend(t,e);let{timeout:n}=t,s=0,o=e=>{s=setTimeout(()=>{e(t)},n)},i=()=>{clearTimeout(s)};return{start:o,clear:i}}let VERSION="1.7.0";/*
76
76
  fileCompressLimit: 图片缩略图压缩限制,小于设置数值将不执行压缩,单位 KB
77
77
  config = { appkey, nav, isSync, upload, uploadType, fileCompressLimit }
78
- */function IO(e){function t(){return A}function n(){return e}function s(t){utils.extend(e,t)}function o(e,t){let n={topic:COMMAND_TOPICS.GET_USER_INFO,userId:e.id};x(SIGNAL_CMD.QUERY,n,e=>{t(e)})}let i=Emitter(),{appkey:r,navList:a,serverList:p=[],isSync:c=!0,reconnectCount:l=100,logger:d}=e;utils.isArray(a)||(a=["https://nav.juggleim.com"]);let m={},u={},E=Cache(),g=Decoder(E,u),y=Encoder(E),T=Timer({timeout:HEART_TIMEOUT}),f=Timer({timeout:SYNC_MESSAGE_TIME}),C=CONNECT_STATE.DISCONNECTED,_=[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],S=e=>{C=e.state,i.emit(SIGNAL_NAME.CONN_CHANGED,{...e})},O=()=>{T.pause(),f.pause()},I=!1,N=(e={})=>{let{code:n}=e;if(!I&&!utils.isInclude(_,n)&&!utils.isEqual(C,CONNECT_STATE.DISCONNECTED)){let e=t();return O(),v(e,({next:e})=>{e()})}if(!utils.isEqual(C,CONNECT_STATE.DISCONNECTED)){let n=t();S({state:CONNECT_STATE.DISCONNECTED,...e,user:n}),O()}},A={},R=e=>{utils.extend(A,e)},M=e=>{let t=common.getNaviStorageKey(r,e);Storage.remove(t)},h=({token:e,deviceId:t,_isReconnect:n=!1},s)=>{function o({servers:n,userId:o}){R({id:o,token:e,deviceId:t}),E.set(SIGNAL_NAME.S_CONNECT_ACK,s),Network.detect(n,(n,i)=>{// 如果嗅探失败,返回连接断开,同时清理已缓存的 CMP 地址
79
- if(i)return M(o),v({token:e,userId:o,deviceId:t},s);n=n.replaceAll(/http:\/\/|https:\/\/|file:\/\/|wss:\/\/|ws:\/\//g,"");let{ws:a}=utils.getProtocol(),p=`${a}//${n}/im`;m=new WebSocket(p),d.info({tag:LOG_MODULE.WS_CONNECT}),m.onopen=function(){let n=PLATFORM.WEB;common.isDesktop()&&(n=PLATFORM.DESKTOP);let s=common.getClientSession();x(SIGNAL_CMD.CONNECT,{appkey:r,token:e,deviceId:t,platform:n,clientSession:s,sdkVerion:VERSION})},m.onclose=t=>{N({type:DISCONNECT_TYPE.CLOSE})},m.onerror=()=>{N({type:DISCONNECT_TYPE.ERROR})},m.onmessage=function({data:e}){let t=new FileReader;t.onload=function(){P(this.result)},t.readAsArrayBuffer(e)}})}E.set(STORAGE.CRYPTO_RANDOM,utils.getRandoms(8));let i=n?CONNECT_STATE.RECONNECTING:CONNECT_STATE.CONNECTING;return S({state:i}),utils.isEmpty(p)?Network.getNavis(a,{appkey:r,token:e,logger:d},e=>{let{code:t,servers:n,userId:i}=e;if(!utils.isEqual(t,ErrorType.COMMAND_SUCCESS.code)){let e=common.getError(t);return M(i),t||(e=ErrorType.IM_SERVER_CONNECT_ERROR),S({state:CONNECT_STATE.DISCONNECTED,code:e.code}),s({error:e})}o({servers:n,userId:i})}):o({servers:p})},v=({token:e,userId:t,deviceId:n},s)=>{d.info({tag:LOG_MODULE.CON_RECONNECT,userId:t,deviceId:n});let o=E.get(CONNECT_TOOL.RECONNECT_COUNT),r=o.count||1,a=r>l;if(a)return E.remove(CONNECT_TOOL.RECONNECT_COUNT),E.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),S({state:CONNECT_STATE.DISCONNECTED,code:ErrorType.IM_SERVER_CONNECT_ERROR.code});let p=E.get(CONNECT_TOOL.RECONNECT_FREQUENCY),c=p.frequency||1,m=1e3*c;setTimeout(()=>{r+=1,E.set(CONNECT_TOOL.RECONNECT_COUNT,{count:r}),c*=2,E.set(CONNECT_TOOL.RECONNECT_FREQUENCY,{frequency:c}),h({token:e,userId:t,deviceId:n,_isReconnect:!0},e=>{let{error:t}=e;utils.isEqual(t.code,ErrorType.COMMAND_SUCCESS.code)&&i.emit(SIGNAL_NAME.CMD_CHATROOM_REJOIN,{}),s(e)})},m)},D=[],b=()=>{m&&m.close&&m.close(),T.pause(),f.pause(),D.length=0},U=()=>{I=!0,b()},x=(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=y.encode(e,{callback:n,data:t,index:s,counter:o});m.send(i);let r=utils.clone(t);delete r.messages,d.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>D.length?D.push({cmd:e}):void(n(ErrorType.COMMAND_FAILED),b()))},k=MessageSyncer(x,i,u,{logger:d}),G=ConversationSyncer(x,i,u,{logger:d}),L=ChatroomSyncer(x,i,u,{logger:d}),q=ChatroomAttSyncer(x,i,u,{logger:d}),P=t=>{let{cmd:n,result:s,name:a}=g.decode(t);d.info({tag:LOG_MODULE.WS_RECEIVE,cmd:n,code:s.code});let{index:p}=s,{callback:l,data:m,counter:y}=E.get(p);// 清空计时器,与 counter.start 对应
80
- if(y&&(y.clear(),D.length=0),utils.isEqual(a,SIGNAL_NAME.S_CHATROOM_USER_NTF)){let{chatroomId:e,time:t,type:n}=s;i.emit(SIGNAL_NAME.CMD_CHATROOM_EVENT,{chatroomId:e,time:t,type:n})}if(utils.isEqual(a,SIGNAL_NAME.CMD_RECEIVED)&&(k.exec({msg:s,name:a,$message:e.$message,user:{id:A.id}}),f.reset()),utils.isEqual(a,SIGNAL_NAME.S_NTF)){let{type:t}=s,n={msg:s,name:a,$message:e.$message,user:{id:A.id}};utils.isEqual(t,NOTIFY_TYPE.MSG)&&k.exec(n),(utils.isEqual(t,NOTIFY_TYPE.CHATROOM)||utils.isEqual(t,NOTIFY_TYPE.CHATROOM_DESTORY))&&L.exec(n),utils.isEqual(t,NOTIFY_TYPE.CHATROOM_ATTR)&&q.exec(n),f.reset()}if(utils.isEqual(n,SIGNAL_CMD.PUBLISH_ACK)){utils.extend(m,s);let{conversationType:e}=m;// 单群聊和聊天室通知和拉取消息时间戳分开计算,只有发送单群聊消息更新发件箱
81
- utils.isEqual(e,CONVERATION_TYPE.CHATROOM)||common.updateSyncTime({...m,io:u}),l(m)}if(utils.isEqual(n,SIGNAL_CMD.QUERY_ACK)&&l(s),utils.isEqual(n,SIGNAL_CMD.CONNECT_ACK)){I=!1;let t=E.get(SIGNAL_NAME.S_CONNECT_ACK)||utils.noop,{ack:{code:n,userId:i}}=s,a=CONNECT_STATE.CONNECT_FAILED,p=common.getError(n);if(utils.isEqual(n,ErrorType.CONNECT_SUCCESS.code))return a=CONNECT_STATE.CONNECTED,R({id:i}),Storage.setPrefix(`${r}_${i}`),E.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),o({id:i},({user:n})=>{n=n||{};let s=n.nickname,o=n.userPortrait,l=utils.toObject(n.extFields);// 同步会话和同步消息顺序不能调整,保证先同步会话再同步消息,规避会话列表最后一条消息不是最新的
82
- if(R({name:s,portrait:o,exts:l,updatedTime:n.updatedTime}),t({user:A,error:p,next:()=>{S({state:a,user:A})}}),e.isPC){let t=()=>{G.exec({time:Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0,name:SIGNAL_NAME.S_SYNC_CONVERSATION_NTF,user:{id:A.id},$conversation:e.$conversation})},n=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;// PC 中先连接后打开数据库,优先将本地数据库中的同步时间更新至 LocalStorage 中,避免换 Token 不换用户 Id 重复同步会话
83
- utils.isEqual(n,0)?e.$socket.openDB({appkey:r,userId:i,token:A.token}).then(()=>{t()}):t()}c&&k.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:A.id}}),T.resume(()=>{x(SIGNAL_CMD.PING,{}),d.info({tag:LOG_MODULE.HB_START})}),f.resume(()=>{k.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:A.id}})})});S({state:a,user:A}),t({user:A,error:p})}if(utils.isEqual(n,SIGNAL_CMD.DISCONNECT)){let{code:e,extra:t}=s;N({code:e,extra:t,type:DISCONNECT_TYPE.SERVER})}utils.isEqual(a,SIGNAL_NAME.S_PONG)&&d.info({tag:LOG_MODULE.HB_STOP}),E.remove(p)},V=()=>utils.isEqual(C,CONNECT_STATE.CONNECTED),F=()=>utils.isEqual(C,CONNECT_STATE.DISCONNECTED);return utils.extend(u,{getConfig:n,setConfig:s,connect:h,disconnect:U,sendCommand:x,isConnected:V,isNeedConnect:F,getCurrentUser:t,getVersion:()=>VERSION,sync:e=>{e=utils.isArray(e)?e:[e];let t=n();utils.forEach(e,e=>{let n={...e,$message:t.$message},{msg:{type:s}}=e;utils.isEqual(s,NOTIFY_TYPE.CHATROOM)&&L.exec(n),utils.isEqual(s,NOTIFY_TYPE.CHATROOM_ATTR)&&q.exec(n)})},...i}),u}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},l=s.getPer(t),m=l.mentions||{};if(d){let{members:n,type:s}=d,o=e.getCurrentUser(),i=utils.find(n,e=>utils.isEqual(o.id,e.id));//TODO 撤回 @ 消息需要删除
78
+ */function IO(e){function t(){l&&G.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:R.id}})}function n(){return R}function s(){return e}function o(t){utils.extend(e,t)}function i(e,t){let n={topic:COMMAND_TOPICS.GET_USER_INFO,userId:e.id};k(SIGNAL_CMD.QUERY,n,e=>{t(e)})}let r=Emitter(),{appkey:a,navList:d,serverList:c=[],isSync:l=!0,reconnectCount:m=100,logger:p}=e;utils.isArray(d)||(d=["https://nav.juggleim.com"]);let u={},E={},g=Cache(),y=Decoder(g,E),T=Encoder(g),f=Timer({timeout:HEART_TIMEOUT}),C=Timer({timeout:SYNC_MESSAGE_TIME}),_=CONNECT_STATE.DISCONNECTED,S=[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],O=e=>{_=e.state,r.emit(SIGNAL_NAME.CONN_CHANGED,{...e})},I=()=>{f.pause(),C.pause()},N=!1,A=(e={})=>{let{code:t}=e;if(!N&&!utils.isInclude(S,t)&&!utils.isEqual(_,CONNECT_STATE.DISCONNECTED)){let e=n();return I(),D(e,({next:e})=>{e()})}if(!utils.isEqual(_,CONNECT_STATE.DISCONNECTED)){let t=n();O({state:CONNECT_STATE.DISCONNECTED,...e,user:t}),I()}},R={},M=e=>{utils.extend(R,e)},h=e=>{let t=common.getNaviStorageKey(a,e);Storage.remove(t)},v=({token:e,deviceId:t,_isReconnect:n=!1},s)=>{function o({servers:n,userId:o}){M({id:o,token:e,deviceId:t}),g.set(SIGNAL_NAME.S_CONNECT_ACK,s),Network.detect(n,(n,i)=>{// 如果嗅探失败,返回连接断开,同时清理已缓存的 CMP 地址
79
+ if(i)return h(o),D({token:e,userId:o,deviceId:t},s);n=n.replaceAll(/http:\/\/|https:\/\/|file:\/\/|wss:\/\/|ws:\/\//g,"");let{ws:r}=utils.getProtocol(),d=`${r}//${n}/im`;u=new WebSocket(d),p.info({tag:LOG_MODULE.WS_CONNECT}),u.onopen=function(){let n=PLATFORM.WEB;common.isDesktop()&&(n=PLATFORM.DESKTOP);let s=common.getClientSession();k(SIGNAL_CMD.CONNECT,{appkey:a,token:e,deviceId:t,platform:n,clientSession:s,sdkVerion:VERSION})},u.onclose=t=>{A({type:DISCONNECT_TYPE.CLOSE})},u.onerror=()=>{A({type:DISCONNECT_TYPE.ERROR})},u.onmessage=function({data:e}){let t=new FileReader;t.onload=function(){P(this.result)},t.readAsArrayBuffer(e)}})}g.set(STORAGE.CRYPTO_RANDOM,utils.getRandoms(8));let i=n?CONNECT_STATE.RECONNECTING:CONNECT_STATE.CONNECTING;return O({state:i}),utils.isEmpty(c)?Network.getNavis(d,{appkey:a,token:e,logger:p},e=>{let{code:t,servers:n,userId:i}=e;if(!utils.isEqual(t,ErrorType.COMMAND_SUCCESS.code)){let e=common.getError(t);return h(i),t||(e=ErrorType.IM_SERVER_CONNECT_ERROR),O({state:CONNECT_STATE.DISCONNECTED,code:e.code}),s({error:e})}o({servers:n,userId:i})}):o({servers:c})},D=({token:e,userId:t,deviceId:n},s)=>{p.info({tag:LOG_MODULE.CON_RECONNECT,userId:t,deviceId:n});let o=g.get(CONNECT_TOOL.RECONNECT_COUNT),i=o.count||1,a=i>m;if(a)return g.remove(CONNECT_TOOL.RECONNECT_COUNT),g.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),O({state:CONNECT_STATE.DISCONNECTED,code:ErrorType.IM_SERVER_CONNECT_ERROR.code});let d=g.get(CONNECT_TOOL.RECONNECT_FREQUENCY),c=d.frequency||1,l=1e3*c;setTimeout(()=>{i+=1,g.set(CONNECT_TOOL.RECONNECT_COUNT,{count:i}),c*=2,g.set(CONNECT_TOOL.RECONNECT_FREQUENCY,{frequency:c}),v({token:e,userId:t,deviceId:n,_isReconnect:!0},e=>{let{error:t}=e;utils.isEqual(t.code,ErrorType.COMMAND_SUCCESS.code)&&r.emit(SIGNAL_NAME.CMD_CHATROOM_REJOIN,{}),s(e)})},l)},b=[],U=()=>{u&&u.close&&u.close(),f.pause(),C.pause(),b.length=0},x=()=>{N=!0,U()},k=(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=T.encode(e,{callback:n,data:t,index:s,counter:o});u.send(i);let r=utils.clone(t);delete r.messages,p.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>b.length?b.push({cmd:e}):void(n(ErrorType.COMMAND_FAILED),U()))},G=MessageSyncer(k,r,E,{logger:p}),L=ChatroomSyncer(k,r,E,{logger:p}),q=ChatroomAttSyncer(k,r,E,{logger:p}),P=n=>{let{cmd:s,result:o,name:d}=y.decode(n);p.info({tag:LOG_MODULE.WS_RECEIVE,cmd:s,code:o.code});let{index:c}=o,{callback:l,data:m,counter:u}=g.get(c);// 清空计时器,与 counter.start 对应
80
+ if(u&&(u.clear(),b.length=0),utils.isEqual(d,SIGNAL_NAME.S_CHATROOM_USER_NTF)){let{chatroomId:e,time:t,type:n}=o;r.emit(SIGNAL_NAME.CMD_CHATROOM_EVENT,{chatroomId:e,time:t,type:n})}if(utils.isEqual(d,SIGNAL_NAME.CMD_RECEIVED)&&(G.exec({msg:o,name:d,$message:e.$message,user:{id:R.id}}),C.reset()),utils.isEqual(d,SIGNAL_NAME.S_NTF)){let{type:t}=o,n={msg:o,name:d,$message:e.$message,user:{id:R.id}};utils.isEqual(t,NOTIFY_TYPE.MSG)&&G.exec(n),(utils.isEqual(t,NOTIFY_TYPE.CHATROOM)||utils.isEqual(t,NOTIFY_TYPE.CHATROOM_DESTORY))&&L.exec(n),utils.isEqual(t,NOTIFY_TYPE.CHATROOM_ATTR)&&q.exec(n),C.reset()}if(utils.isEqual(s,SIGNAL_CMD.PUBLISH_ACK)){utils.extend(m,o);let{conversationType:e}=m;// 单群聊和聊天室通知和拉取消息时间戳分开计算,只有发送单群聊消息更新发件箱
81
+ utils.isEqual(e,CONVERATION_TYPE.CHATROOM)||common.updateSyncTime({...m,io:E}),l(m)}if(utils.isEqual(s,SIGNAL_CMD.QUERY_ACK)&&l(o),utils.isEqual(s,SIGNAL_CMD.CONNECT_ACK)){N=!1;let n=g.get(SIGNAL_NAME.S_CONNECT_ACK)||utils.noop,{ack:{code:s,userId:r}}=o,d=CONNECT_STATE.CONNECT_FAILED,c=common.getError(s);if(utils.isEqual(s,ErrorType.CONNECT_SUCCESS.code))return d=CONNECT_STATE.CONNECTED,M({id:r}),Storage.setPrefix(`${a}_${r}`),g.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),i({id:r},({user:s})=>{s=s||{};let o=s.nickname,i=s.userPortrait,l=utils.toObject(s.extFields);// 同步会话和同步消息顺序不能调整,保证先同步会话再同步消息,规避会话列表最后一条消息不是最新的
82
+ if(M({name:o,portrait:i,exts:l,updatedTime:s.updatedTime}),n({user:R,error:c,next:()=>{O({state:d,user:R})}}),e.isPC){let n=()=>{G.exec({time:Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0,name:SIGNAL_NAME.S_SYNC_CONVERSATION_NTF,user:{id:R.id},$conversation:e.$conversation}),t()},s=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;// PC 中先连接后打开数据库,优先将本地数据库中的同步时间更新至 LocalStorage 中,避免换 Token 不换用户 Id 重复同步会话
83
+ utils.isEqual(s,0)?e.$socket.openDB({appkey:a,userId:r,token:R.token}).then(()=>{n()}):n()}else t();f.resume(()=>{k(SIGNAL_CMD.PING,{}),p.info({tag:LOG_MODULE.HB_START})}),C.resume(()=>{G.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:R.id}})})});O({state:d,user:R}),n({user:R,error:c})}if(utils.isEqual(s,SIGNAL_CMD.DISCONNECT)){let{code:e,extra:t}=o;A({code:e,extra:t,type:DISCONNECT_TYPE.SERVER})}utils.isEqual(d,SIGNAL_NAME.S_PONG)&&p.info({tag:LOG_MODULE.HB_STOP}),g.remove(c)},V=()=>utils.isEqual(_,CONNECT_STATE.CONNECTED),F=()=>utils.isEqual(_,CONNECT_STATE.DISCONNECTED);return utils.extend(E,{getConfig:s,setConfig:o,connect:v,disconnect:x,sendCommand:k,isConnected:V,isNeedConnect:F,getCurrentUser:n,getVersion:()=>VERSION,sync:e=>{e=utils.isArray(e)?e:[e];let t=s();utils.forEach(e,e=>{let n={...e,$message:t.$message},{msg:{type:s}}=e;utils.isEqual(s,NOTIFY_TYPE.CHATROOM)&&L.exec(n),utils.isEqual(s,NOTIFY_TYPE.CHATROOM_ATTR)&&q.exec(n)})},...r}),E}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},l=s.getPer(t),m=l.mentions||{};if(d){let{members:n,type:s}=d,o=e.getCurrentUser(),i=utils.find(n,e=>utils.isEqual(o.id,e.id));//TODO 撤回 @ 消息需要删除
84
84
  if(-1<i||utils.isEqual(s,MENTION_TYPE.ALL)){let{isMentioned:e=!0,senders:n=[],msgs:s=[]}=m;s.push({senderId:t.sender.id,messageId:t.messageId,sentTime:t.sentTime});let o=utils.find(n,e=>utils.isEqual(t.sender.id,e.id));utils.isEqual(o,-1)&&n.push(t.sender),m={isMentioned:e,senders:n,msgs:s,count:s.length}}utils.extend(c,{mentions:m})}if(t.isSender){let e=s.getPer(t);utils.extend(c,{conversationTitle:e.conversationTitle,conversationPortrait:e.conversationPortrait,conversationExts:e.conversationExts})}return c}/*
85
85
  let params = {
86
86
  type: UNDISTURB_TYPE.DISTURB,
@@ -98,7 +98,7 @@ if(utils.isEqual(o.name,MESSAGE_TYPE.CLEAR_MSG)){let{content:{cleanTime:e,conver
98
98
  return void(utils.isInclude(r,a.tid)&&i({conversationId:t.conversationId,conversationType:t.conversationType}))}// 如果会话最后一条消息和被撤回消息不匹配,不更新会话列表
99
99
  if(utils.isEqual(o.name,MESSAGE_TYPE.RECALL)){let{content:{messageId:e}}=o,t=s.getPer(o),{latestMessage:n}=t||{};if(n=n||{},!utils.isEqual(n.messageId,e))return;// 对外模拟 recallinfo 消息
100
100
  o=utils.extend(o,{name:MESSAGE_TYPE.RECALL_INFO})}if(!utils.isInclude([MESSAGE_TYPE.READ_MSG,MESSAGE_TYPE.READ_GROUP_MSG],o.name)){if(utils.isEqual(o.name,MESSAGE_TYPE.CLEAR_UNREAD)){let{content:e}=o,{conversations:n}=e,i=s.read(n);return t.emit(EVENT.CONVERSATION_CLEARUNREAD,{conversations:n}),void(utils.isEmpty(i)||t.emit(EVENT.CONVERSATION_CHANGED,{conversations:i}))}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_MARK_UNREAD)){let{content:{conversations:e}}=o,n=s.modify(e);return t.emit(EVENT.CONVERSATION_CHANGED,{conversations:n})}if(utils.isEqual(o.name,MESSAGE_TYPE.MODIFY)){let e=s.getPer(o),{latestMessage:t}=e||{};// 如果会话最后一条消息和被修改消息不匹配,不更新会话列表
101
- if(t=t||{},!utils.isEqual(t.messageId,o.messageId))return;utils.extend(o,{name:t.name,isUpdated:!0})}i(o)}}),e.on(SIGNAL_NAME.CLIENT_CLEAR_MEMORY_CACHE,()=>{s.clear()});let o=(t={})=>utils.deferred((n,o)=>{let i=common.check(e,t,[]);if(!utils.isEmpty(i))return o(i);let{count:a=50,time:d=0,conversationType:r,order:p=CONVERSATION_ORDER.FORWARD}=t;p=utils.isEqual(p,CONVERSATION_ORDER.FORWARD)?CONVERSATION_ORDER.FORWARD:CONVERSATION_ORDER.BACKWARD;let c=e.getCurrentUser(),l={topic:COMMAND_TOPICS.CONVERSATIONS,time:0,count:a,order:p,userId:c.id,conversationType:r};utils.extend(l,t),e.sendCommand(SIGNAL_CMD.QUERY,l,e=>{let{code:t,msg:i}=e;if(!utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t))return o({code:t,msg:i});if(!utils.isUndefined(r)){let t=utils.map(e.conversations,e=>{let{unreadCount:t}=e;return e.unreadCount=0>t?0:t,e});return n(utils.clone({conversations:t.reverse(),isFinished:e.isFinished}))}let{conversations:a}=e;s.setSynced(),s.add(a),n({conversations:utils.clone(a),isFinished:e.isFinished})})}),i=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.REMOVECONVERSATION);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),r={topic:COMMAND_TOPICS.REMOVE_CONVERSATION,conversations:t,userId:i.id};e.sendCommand(SIGNAL_CMD.QUERY,r,s=>{let o=utils.isArray(t)?t:[t],i=e.getConfig(),{timestamp:r,code:a}=s;if(o=utils.map(o,e=>(e.time=r,e)),utils.isEqual(ErrorType.COMMAND_SUCCESS.code,a)&&common.updateSyncTime({isSender:!0,sentTime:r,io:e}),!i.isPC){let t={name:MESSAGE_TYPE.COMMAND_REMOVE_CONVERS,content:{conversations:o}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,t)}n()})}),r=t=>utils.deferred((o,i)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.INSERTCONVERSATION);if(!utils.isEmpty(r))return i(r);let a=e.getCurrentUser(),d={topic:COMMAND_TOPICS.INSERT_CONVERSATION,conversation:t,userId:a.id};e.sendCommand(SIGNAL_CMD.QUERY,d,({code:r,msg:a,timestamp:d})=>{if(r)return i({code:r,msg:a});common.updateSyncTime({isSender:!0,sentTime:d,io:e});let p=n({...t,sentTime:Date.now()});s.update(p);let c=s.getPer(p);o({conversation:c})})}),a=t=>utils.deferred((n,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.GET_CONVERSATION);if(!utils.isEmpty(i))return o(i);let r=e.getCurrentUser(),a={topic:COMMAND_TOPICS.GET_CONVERSATION,conversation:t,userId:r.id};e.sendCommand(SIGNAL_CMD.QUERY,a,({code:e,msg:t,conversation:i})=>e?o({code:e,msg:t}):void(!utils.isEmpty(i)&&s.update(i),n({conversation:i})))}),d=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.MUTE_CONVERSATION);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),r={topic:COMMAND_TOPICS.MUTE_CONVERSATION,conversations:t,userId:i.id};e.sendCommand(SIGNAL_CMD.QUERY,r,({code:o,msg:i,timestamp:r})=>{if(!utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o))return s({code:o,msg:i});common.updateSyncTime({isSender:!0,sentTime:r,io:e});let a=e.getConfig();if(!a.isPC){let n=utils.isArray(t)?t:[t],s={name:MESSAGE_TYPE.COMMAND_UNDISTURB,content:{conversations:n}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,s)}n()})}),p=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SET_TOP_CONVERSATION);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),r={topic:COMMAND_TOPICS.TOP_CONVERSATION,conversations:t,userId:i.id};e.sendCommand(SIGNAL_CMD.QUERY,r,({code:o,msg:i,timestamp:r})=>{if(!utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o))return s({code:o,msg:i});common.updateSyncTime({isSender:!0,sentTime:r,io:e});let a=e.getConfig();if(!a.isPC){let n={name:MESSAGE_TYPE.COMMAND_TOPCONVERS,content:{conversations:t}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,n)}n()})}),c=t=>utils.deferred((n,s)=>{let o=common.check(e,t,[]);if(!utils.isEmpty(o))return s(o);t=t||{};let{count:i=50,time:r=0}=t,a=e.getCurrentUser(),d={topic:COMMAND_TOPICS.QUERY_TOP_CONVERSATIONS,time:0,count:i,userId:a.id};utils.extend(d,t),e.sendCommand(SIGNAL_CMD.QUERY,d,e=>{n({conversations:e.conversations,isFinished:e.isFinished})})}),l=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.CLEARUNREADCOUNT);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),r={topic:COMMAND_TOPICS.CLEAR_UNREAD};utils.extend(r,{conversations:t,userId:i.id}),e.sendCommand(SIGNAL_CMD.QUERY,r,s=>{let{timestamp:o,code:i}=s;utils.isEqual(ErrorType.COMMAND_SUCCESS.code,i)&&common.updateSyncTime({isSender:!0,sentTime:o,io:e});let r=e.getConfig();if(!r.isPC){let n={name:MESSAGE_TYPE.CLEAR_UNREAD,content:{conversations:t}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,n)}n()})}),m=(t={})=>utils.deferred((n,s)=>{let o=common.check(e,{},{});if(!utils.isEmpty(o))return s(o);let{conversationTypes:r=[],ignoreConversations:i}=t;if(r=utils.isArray(r)?r:[r],!utils.isEmpty(i)){let n=common.check(e,t,FUNC_PARAM_CHECKER.GET_TOTAL_UNREADCOUNT);if(!utils.isEmpty(n))return s(n)}let{id:a}=e.getCurrentUser(),d={topic:COMMAND_TOPICS.GET_UNREAD_TOTLAL_CONVERSATION,userId:a,conversationTypes:r,ignoreConversations:i};e.sendCommand(SIGNAL_CMD.QUERY,d,({count:e})=>{n({count:e})})}),u=()=>utils.deferred((t,n)=>{let o=common.check(e,{},{});if(!utils.isEmpty(o))return n(o);let{id:i}=e.getCurrentUser(),r={topic:COMMAND_TOPICS.CLEAR_UNREAD_TOTLAL_CONVERSATION,userId:i};e.sendCommand(SIGNAL_CMD.QUERY,r,()=>{let e=s.get();s.read(e),t()})}),E=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SET_DRAFT);if(!utils.isEmpty(o))return s(o);let i=common.getDraftKey(t),{draft:r}=t;Storage.set(i,r),n()}),g=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_DRAFT);if(!utils.isEmpty(o))return s(o);let i=common.getDraftKey(t),r=Storage.get(i);n(r)}),y=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_DRAFT);if(!utils.isEmpty(o))return s(o);let i=common.getDraftKey(t),r=Storage.remove(i);n(r)}),T=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SET_ALL_DISTURB);if(!utils.isEmpty(o))return s(o);let{code:i}=ErrorType.ILLEGAL_TYPE_PARAMS,r={timezone:"",times:[]},{type:a,timezone:d,times:p}=t,c=utils.isEqual(a,UNDISTURB_TYPE.DISTURB);if(c&&!utils.isString(d)){let e="timezone \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u68C0\u67E5\uFF0C\u683C\u5F0F\u793A\u4F8B\uFF1AAsia/Shanghai";return s({msg:"timezone \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u68C0\u67E5\uFF0C\u683C\u5F0F\u793A\u4F8B\uFF1AAsia/Shanghai",code:i})}if(c&&!utils.isArray(p)){let e="times \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u68C0\u67E5\uFF0C\u683C\u5F0F\u793A\u4F8B\uFF1A[{ start: '12:00', end: '13:00' }]";return s({msg:"times \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u68C0\u67E5\uFF0C\u683C\u5F0F\u793A\u4F8B\uFF1A[{ start: '12:00', end: '13:00' }]",code:i})}let l=!0,m=0;p=p||[];for(let e=0,t;e<p.length;e++){if(t=p[e],!utils.isObject(t)){l=!1,m=e;break}let{start:n,end:s}=t;if(!utils.isValidHMTime(n)||!utils.isValidHMTime(s)){l=!1,m=e;break}}if(!l){let e=`times 下标 ${m} 参数,时间格式不正确`;return s({msg:e,code:i})}r=utils.extend(r,t);let{id:u}=e.getCurrentUser(),E={topic:COMMAND_TOPICS.SET_ALL_DISTURB,userId:u,...r};e.sendCommand(SIGNAL_CMD.QUERY,E,()=>{n()})}),f=()=>utils.deferred((t,n)=>{let s=common.check(e,{},{});if(!utils.isEmpty(s))return n(s);let{id:o}=e.getCurrentUser(),i={topic:COMMAND_TOPICS.GET_ALL_DISTURB,userId:o};e.sendCommand(SIGNAL_CMD.QUERY,i,e=>{let{timezone:s,times:o,type:i,code:r}=e;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,r)?void t({timezone:s,times:o,type:i}):n({code:r,msg:""})})}),C=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.MARK_UNREAD);if(!utils.isEmpty(o))return s(o);t=utils.clone(t);let{id:i}=e.getCurrentUser(),r=utils.isArray(t)?t:[t],a={topic:COMMAND_TOPICS.MARK_CONVERSATION_UNREAD,userId:i,conversations:r};e.sendCommand(SIGNAL_CMD.QUERY,a,t=>{let{timestamp:o,code:i}=t;if(utils.isEqual(ErrorType.COMMAND_SUCCESS.code,i)){common.updateSyncTime({isSender:!0,sentTime:o,io:e});let t=e.getConfig();if(!t.isPC){let t={name:MESSAGE_TYPE.COMMAND_MARK_UNREAD,content:{conversations:r}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,t)}n()}else s({code:i})})});return{getConversations:o,removeConversation:i,insertConversation:r,getConversation:a,markUnread:C,disturbConversation:d,setTopConversation:p,getTopConversations:c,clearUnreadcount:l,getTotalUnreadcount:m,clearTotalUnreadcount:u,setDraft:E,getDraft:g,removeDraft:y,setAllDisturb:T,getAllDisturb:f}}function MessageCacher(){let e=Cache(),t=({conversationType:e,conversationId:t})=>`${e}_${t}`,n=(n,s)=>{let o=utils.isArray(s)?s:[s],i=t(n),r=e.get(i);utils.isEmpty(r)&&(r=[]),r=r.concat(o),r=utils.quickSort(r,(e,t)=>e.sentTime>t.sentTime),10<r.length&&(r.length=10),e.set(i,r)},s=n=>{let s=t(n),o=e.get(s);utils.isEmpty(o)&&(o=[]);let i=utils.filter(o,e=>utils.isEqual(e.sentTime,n.sentTime));return 0<i.length},o=()=>{e.clear()};return{add:n,isInclude:s,clear:o}}function Message$1(e,t,n){let s=MessageCacher();e.on(SIGNAL_NAME.CMD_RECEIVED,(o,i=!0)=>{n.info({tag:LOG_MODULE.MSG_RECEIVE,messageId:o.messageId});let r=utils.isEqual(o.conversationType,CONVERATION_TYPE.CHATROOM);if(r){let e=chatroomCacher$1.get(o.conversationId);return e.isJoined&&t.emit(EVENT.MESSAGE_RECEIVED,[o,!0])}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_LOG_REPORT)){let{content:e,messageId:t}=o;return common.reportLogs({logger:n,params:{...e,messageId:t}})}if(utils.isEqual(o.name,MESSAGE_TYPE.MODIFY)){let{content:{content:e,messageId:t,sentTime:n}}=o,s=utils.decodeBase64(e),i=utils.parse(s);utils.extend(o,{content:i,messageId:t,sentTime:n})}// 收到非聊天室消息一定要更新会话列表
101
+ if(t=t||{},!utils.isEqual(t.messageId,o.messageId))return;utils.extend(o,{name:t.name,isUpdated:!0})}i(o)}}),e.on(SIGNAL_NAME.CLIENT_CLEAR_MEMORY_CACHE,()=>{s.clear()});let o=(t={})=>utils.deferred((n,o)=>{let i=common.check(e,t,[]);if(!utils.isEmpty(i))return o(i);let{count:a=50,time:d=0,conversationType:r,order:p=CONVERSATION_ORDER.FORWARD}=t;p=utils.isEqual(p,CONVERSATION_ORDER.FORWARD)?CONVERSATION_ORDER.FORWARD:CONVERSATION_ORDER.BACKWARD;let c=e.getCurrentUser(),l={topic:COMMAND_TOPICS.CONVERSATIONS,time:0,count:a,order:p,userId:c.id,conversationType:r};utils.extend(l,t),e.sendCommand(SIGNAL_CMD.QUERY,l,e=>{let{code:t,msg:i}=e;if(!utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t))return o({code:t,msg:i});if(!utils.isUndefined(r)){let t=utils.map(e.conversations,e=>{let{unreadCount:t}=e;return e.unreadCount=0>t?0:t,e});return n(utils.clone({conversations:t.reverse(),isFinished:e.isFinished}))}let{conversations:a}=e;s.setSynced(),s.add(a),n({conversations:utils.clone(a),isFinished:e.isFinished})})}),i=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.REMOVECONVERSATION);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),r={topic:COMMAND_TOPICS.REMOVE_CONVERSATION,conversations:t,userId:i.id};e.sendCommand(SIGNAL_CMD.QUERY,r,s=>{let o=utils.isArray(t)?t:[t],i=e.getConfig(),{timestamp:r,code:a}=s;if(o=utils.map(o,e=>(e.time=r,e)),utils.isEqual(ErrorType.COMMAND_SUCCESS.code,a)&&common.updateSyncTime({isSender:!0,sentTime:r,io:e}),!i.isPC){let t={name:MESSAGE_TYPE.COMMAND_REMOVE_CONVERS,content:{conversations:o}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,t)}n()})}),r=t=>utils.deferred((o,i)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.INSERTCONVERSATION);if(!utils.isEmpty(r))return i(r);let a=e.getCurrentUser(),d={topic:COMMAND_TOPICS.INSERT_CONVERSATION,conversation:t,userId:a.id};e.sendCommand(SIGNAL_CMD.QUERY,d,({code:r,msg:a,timestamp:d})=>{if(r)return i({code:r,msg:a});common.updateSyncTime({isSender:!0,sentTime:d,io:e});let p=n({...t,sentTime:Date.now()});s.update(p);let c=s.getPer(p);o({conversation:c})})}),a=t=>utils.deferred((n,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.GET_CONVERSATION);if(!utils.isEmpty(i))return o(i);let r=e.getCurrentUser(),a={topic:COMMAND_TOPICS.GET_CONVERSATION,conversation:t,userId:r.id};e.sendCommand(SIGNAL_CMD.QUERY,a,({code:e,msg:t,conversation:i})=>e?o({code:e,msg:t}):void(!utils.isEmpty(i)&&s.update(i),n({conversation:i})))}),d=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.MUTE_CONVERSATION);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),r={topic:COMMAND_TOPICS.MUTE_CONVERSATION,conversations:t,userId:i.id};e.sendCommand(SIGNAL_CMD.QUERY,r,({code:o,msg:i,timestamp:r})=>{if(!utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o))return s({code:o,msg:i});common.updateSyncTime({isSender:!0,sentTime:r,io:e});let a=e.getConfig();if(!a.isPC){let n=utils.isArray(t)?t:[t],s={name:MESSAGE_TYPE.COMMAND_UNDISTURB,content:{conversations:n}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,s)}n()})}),p=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SET_TOP_CONVERSATION);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser();t=utils.isArray(t)?t:[t];let r={topic:COMMAND_TOPICS.TOP_CONVERSATION,conversations:t,userId:i.id};e.sendCommand(SIGNAL_CMD.QUERY,r,({code:o,msg:i,timestamp:r})=>{if(!utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o))return s({code:o,msg:i});common.updateSyncTime({isSender:!0,sentTime:r,io:e});let a=e.getConfig();if(!a.isPC){let n={name:MESSAGE_TYPE.COMMAND_TOPCONVERS,content:{conversations:t}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,n)}n()})}),c=t=>utils.deferred((n,s)=>{let o=common.check(e,t,[]);if(!utils.isEmpty(o))return s(o);t=t||{};let{count:i=50,time:r=0}=t,a=e.getCurrentUser(),d={topic:COMMAND_TOPICS.QUERY_TOP_CONVERSATIONS,time:0,count:i,userId:a.id};utils.extend(d,t),e.sendCommand(SIGNAL_CMD.QUERY,d,e=>{n({conversations:e.conversations,isFinished:e.isFinished})})}),l=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.CLEARUNREADCOUNT);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),r={topic:COMMAND_TOPICS.CLEAR_UNREAD};utils.extend(r,{conversations:t,userId:i.id}),e.sendCommand(SIGNAL_CMD.QUERY,r,s=>{let{timestamp:o,code:i}=s;utils.isEqual(ErrorType.COMMAND_SUCCESS.code,i)&&common.updateSyncTime({isSender:!0,sentTime:o,io:e});let r=e.getConfig();if(!r.isPC){let n={name:MESSAGE_TYPE.CLEAR_UNREAD,content:{conversations:t}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,n)}n()})}),m=(t={})=>utils.deferred((n,s)=>{let o=common.check(e,{},{});if(!utils.isEmpty(o))return s(o);let{conversationTypes:r=[],ignoreConversations:i}=t;if(r=utils.isArray(r)?r:[r],!utils.isEmpty(i)){let n=common.check(e,t,FUNC_PARAM_CHECKER.GET_TOTAL_UNREADCOUNT);if(!utils.isEmpty(n))return s(n)}let{id:a}=e.getCurrentUser(),d={topic:COMMAND_TOPICS.GET_UNREAD_TOTLAL_CONVERSATION,userId:a,conversationTypes:r,ignoreConversations:i};e.sendCommand(SIGNAL_CMD.QUERY,d,({count:e})=>{n({count:e})})}),u=()=>utils.deferred((t,n)=>{let o=common.check(e,{},{});if(!utils.isEmpty(o))return n(o);let{id:i}=e.getCurrentUser(),r={topic:COMMAND_TOPICS.CLEAR_UNREAD_TOTLAL_CONVERSATION,userId:i};e.sendCommand(SIGNAL_CMD.QUERY,r,()=>{let e=s.get();s.read(e),t()})}),E=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SET_DRAFT);if(!utils.isEmpty(o))return s(o);let i=common.getDraftKey(t),{draft:r}=t;Storage.set(i,r),n()}),g=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_DRAFT);if(!utils.isEmpty(o))return s(o);let i=common.getDraftKey(t),r=Storage.get(i);n(r)}),y=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_DRAFT);if(!utils.isEmpty(o))return s(o);let i=common.getDraftKey(t),r=Storage.remove(i);n(r)}),T=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SET_ALL_DISTURB);if(!utils.isEmpty(o))return s(o);let{code:i}=ErrorType.ILLEGAL_TYPE_PARAMS,r={timezone:"",times:[]},{type:a,timezone:d,times:p}=t,c=utils.isEqual(a,UNDISTURB_TYPE.DISTURB);if(c&&!utils.isString(d)){let e="timezone \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u68C0\u67E5\uFF0C\u683C\u5F0F\u793A\u4F8B\uFF1AAsia/Shanghai";return s({msg:"timezone \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u68C0\u67E5\uFF0C\u683C\u5F0F\u793A\u4F8B\uFF1AAsia/Shanghai",code:i})}if(c&&!utils.isArray(p)){let e="times \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u68C0\u67E5\uFF0C\u683C\u5F0F\u793A\u4F8B\uFF1A[{ start: '12:00', end: '13:00' }]";return s({msg:"times \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u68C0\u67E5\uFF0C\u683C\u5F0F\u793A\u4F8B\uFF1A[{ start: '12:00', end: '13:00' }]",code:i})}let l=!0,m=0;p=p||[];for(let e=0,t;e<p.length;e++){if(t=p[e],!utils.isObject(t)){l=!1,m=e;break}let{start:n,end:s}=t;if(!utils.isValidHMTime(n)||!utils.isValidHMTime(s)){l=!1,m=e;break}}if(!l){let e=`times 下标 ${m} 参数,时间格式不正确`;return s({msg:e,code:i})}r=utils.extend(r,t);let{id:u}=e.getCurrentUser(),E={topic:COMMAND_TOPICS.SET_ALL_DISTURB,userId:u,...r};e.sendCommand(SIGNAL_CMD.QUERY,E,()=>{n()})}),f=()=>utils.deferred((t,n)=>{let s=common.check(e,{},{});if(!utils.isEmpty(s))return n(s);let{id:o}=e.getCurrentUser(),i={topic:COMMAND_TOPICS.GET_ALL_DISTURB,userId:o};e.sendCommand(SIGNAL_CMD.QUERY,i,e=>{let{timezone:s,times:o,type:i,code:r}=e;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,r)?void t({timezone:s,times:o,type:i}):n({code:r,msg:""})})}),C=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.MARK_UNREAD);if(!utils.isEmpty(o))return s(o);t=utils.clone(t);let{id:i}=e.getCurrentUser(),r=utils.isArray(t)?t:[t],a={topic:COMMAND_TOPICS.MARK_CONVERSATION_UNREAD,userId:i,conversations:r};e.sendCommand(SIGNAL_CMD.QUERY,a,t=>{let{timestamp:o,code:i}=t;if(utils.isEqual(ErrorType.COMMAND_SUCCESS.code,i)){common.updateSyncTime({isSender:!0,sentTime:o,io:e});let t=e.getConfig();if(!t.isPC){let t={name:MESSAGE_TYPE.COMMAND_MARK_UNREAD,content:{conversations:r}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,t)}n()}else s({code:i})})});return{getConversations:o,removeConversation:i,insertConversation:r,getConversation:a,markUnread:C,disturbConversation:d,setTopConversation:p,getTopConversations:c,clearUnreadcount:l,getTotalUnreadcount:m,clearTotalUnreadcount:u,setDraft:E,getDraft:g,removeDraft:y,setAllDisturb:T,getAllDisturb:f}}function MessageCacher(){let e=Cache(),t=({conversationType:e,conversationId:t})=>`${e}_${t}`,n=(n,s)=>{let o=utils.isArray(s)?s:[s],i=t(n),r=e.get(i);utils.isEmpty(r)&&(r=[]),r=r.concat(o),r=utils.quickSort(r,(e,t)=>e.sentTime>t.sentTime),10<r.length&&(r.length=10),e.set(i,r)},s=n=>{let s=t(n),o=e.get(s);utils.isEmpty(o)&&(o=[]);let i=utils.filter(o,e=>utils.isEqual(e.sentTime,n.sentTime));return 0<i.length},o=()=>{e.clear()};return{add:n,isInclude:s,clear:o}}function Message$1(e,t,n){let s=MessageCacher();e.on(SIGNAL_NAME.CMD_RECEIVED,(o,i=!0)=>{n.info({tag:LOG_MODULE.MSG_RECEIVE,messageId:o.messageId});let r=utils.isEqual(o.conversationType,CONVERATION_TYPE.CHATROOM);if(r){let e=chatroomCacher$1.get(o.conversationId);return e.isJoined&&t.emit(EVENT.MESSAGE_RECEIVED,[o,!0])}if(utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_LOG_REPORT)){let{content:e,messageId:t}=o;return common.reportLogs({logger:n,params:{...e,messageId:t}})}if(utils.isEqual(o.name,MESSAGE_TYPE.MODIFY)){let{content:{content:e,messageId:t,sentTime:n}}=o,s=utils.decodeBase64(e),i=utils.parse(s);utils.extend(o,{content:i,messageId:t,sentTime:n})}// 收到非聊天室消息一定要更新会话列表
102
102
  if(e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,utils.clone(o)),utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_DELETE_MSGS)){let{content:{conversationId:e,conversationType:n,messages:s}}=o;return t.emit(EVENT.MESSAGE_REMOVED,{conversationId:e,conversationType:n,messages:s})}// 消息监听无需处理标记未读消息
103
103
  if(!utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_MARK_UNREAD)&&!utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_CLEAR_TOTALUNREAD)&&!utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_ADD_CONVER)&&!utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_REMOVE_CONVERS)&&!utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_TOPCONVERS)&&!utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_UNDISTURB)&&!utils.isEqual(o.name,MESSAGE_TYPE.CLEAR_UNREAD))//清理未读同步,只变更会话列表
104
104
  // 消息监听无需处理免打扰
@@ -108,8 +108,8 @@ if(!utils.isEqual(o.name,MESSAGE_TYPE.COMMAND_MARK_UNREAD)&&!utils.isEqual(o.nam
108
108
  // 消息监听无需处理清理总数消息
109
109
  {if(utils.isEqual(o.name,MESSAGE_TYPE.RECALL)){let{conversationId:e,conversationType:n,content:s,sender:i}=o;return t.emit(EVENT.MESSAGE_RECALLED,{conversationId:e,conversationType:n,content:s,sender:i})}if(utils.isEqual(o.name,MESSAGE_TYPE.CLEAR_MSG)){let{content:{conversationType:e,conversationId:n,cleanTime:s,senderId:i}}=o;return utils.isEmpty(i)?t.emit(EVENT.MESSAGE_CLEAN,{conversationType:e,conversationId:n,cleanTime:s}):t.emit(EVENT.MESSAGE_CLEAN_SOMEONE,{conversationType:e,conversationId:n,senderId:i})}if(utils.isEqual(o.name,MESSAGE_TYPE.MODIFY)){let{conversationType:e,conversationId:n,content:s,messageId:i}=o;return t.emit(EVENT.MESSAGE_UPDATED,{conversationType:e,conversationId:n,messageId:i,content:s})}if(utils.isEqual(o.name,MESSAGE_TYPE.READ_MSG)||utils.isEqual(o.name,MESSAGE_TYPE.READ_GROUP_MSG)){let{conversationType:e,conversationId:n,content:{msgs:s}}=o,i={conversationType:e,conversationId:n,messages:s};return t.emit(EVENT.MESSAGE_READ,i)}if(!s.isInclude(o)){t.emit(EVENT.MESSAGE_RECEIVED,[o,i]);let{conversationId:e,conversationType:n}=o;s.add({conversationId:e,conversationType:n},o)}}});let o=[[CONVERATION_TYPE.PRIVATE,"p_msg"],[CONVERATION_TYPE.GROUP,"g_msg"],[CONVERATION_TYPE.CHATROOM,"c_msg"]],i={};utils.forEach(o,e=>{i[e[0]]=e[1]});let r=(t,s={})=>utils.deferred((o,r)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SENDMSG);if(!utils.isEmpty(a))return r(a);let{referMsg:d}=t;if(!utils.isUndefined(d)){let{messageIndex:e,messageId:t}=d;if(utils.isUndefined(e)||utils.isUndefined(t))return r(ErrorType.SEND_REFER_MESSAGE_ERROR)}n.info({tag:LOG_MODULE.MSG_SEND});let p={onbefore:()=>{}};utils.extend(p,s);let c=utils.clone(t),{name:l,conversationType:m,conversationId:u,isMass:E}=c,g=common.getMsgFlag(l,{isMass:E});utils.extend(c,{flag:g});let y=i[m];utils.extend(c,{topic:y});let T=t.tid||utils.getUUID();utils.extend(t,{tid:T,sentState:MESSAGE_SENT_STATE.SENDING}),p.onbefore(t),e.sendCommand(SIGNAL_CMD.PUBLISH,c,({messageId:n,sentTime:s,code:i,msg:a,msgIndex:d,memberCount:p})=>{let c=e.getCurrentUser()||{};if(utils.extend(t,{sender:c,isSender:!0}),i)return utils.extend(t,{error:{code:i,msg:a},sentState:MESSAGE_SENT_STATE.FAILED}),r(t);utils.extend(t,{sentTime:s,messageId:n,messageIndex:d,sentState:MESSAGE_SENT_STATE.SUCCESS});let l=e.getConfig();l.isPC||utils.isEqual(m,CONVERATION_TYPE.CHATROOM)||e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,t);let u=utils.isEqual(t.conversationType,CONVERATION_TYPE.CHATROOM);if(u){let{conversationId:e}=t,{msgs:n=[]}=chatroomCacher$1.get(e);n.push(t.messageId),chatroomCacher$1.set(e,{msgs:n})}let E=utils.isEqual(t.conversationType,CONVERATION_TYPE.GROUP);E&&(t=utils.extend(t,{unreadCount:p,readCount:0})),o(t)})}),a=(t,s={})=>utils.deferred((o,i)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SENDMSG);if(!utils.isEmpty(a))return i(a);n.info({tag:LOG_MODULE.MSG_SEND_MASS});let d={onprogress:()=>{},oncompleted:()=>{}};utils.extend(d,s),t=utils.isArray(t)?t:[t],t=utils.map(t,e=>({isMass:!0,...e}));let p=[],c=t.length;utils.iterator(t,(e,t,n)=>{let i=()=>n?(o(),d.oncompleted({messages:p})):void t(),a=e=>{p.push(e),d.onprogress({message:e,count:p.length,total:c}),i()};r(e,s).then(a,a)})}),d=t=>utils.deferred((n,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.GETMSGS);if(!utils.isEmpty(i))return o(i);let{conversationId:r}=t,{id:a}=e.getCurrentUser(),d={time:0,order:MESSAGE_ORDER.BACKWARD,count:20,userId:a,topic:COMMAND_TOPICS.HISTORY_MESSAGES,targetId:r,names:[]};d=utils.extend(d,t),e.sendCommand(SIGNAL_CMD.QUERY,d,e=>{let{messages:o}=e;s.add(t,o),n(e)})}),p=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GETMSG);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),r={topic:COMMAND_TOPICS.GET_MSG_BY_IDS,userId:i.id};r=utils.extend(r,t),e.sendCommand(SIGNAL_CMD.QUERY,r,({messages:e})=>{n({messages:e})})}),c=t=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.CLEARMSG);if(!utils.isEmpty(i))return o(i);n.info({tag:LOG_MODULE.MSG_CLEAR,...t});let r={topic:COMMAND_TOPICS.CLEAR_MESSAGE,time:0};utils.extend(r,t),e.sendCommand(SIGNAL_CMD.QUERY,r,({code:t,timestamp:n})=>{utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)&&common.updateSyncTime({isSender:!0,sentTime:n,io:e});let o=e.getConfig();if(!o.isPC){let t={name:MESSAGE_TYPE.CLEAR_MSG,content:{...r}};e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,t)}s()})}),l=t=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.REMOVE_MSGS);if(!utils.isEmpty(i))return o(i);t=utils.isArray(t)?t:[t];let r=utils.quickSort(utils.clone(t),(e,t)=>e.sentTime>t.sentTime),a=r[0]||{sentTime:-10};n.info({tag:LOG_MODULE.MSG_DELETE,time:a.sentTime});let d=e.getCurrentUser(),p={topic:COMMAND_TOPICS.REMOVE_MESSAGE,messages:t,userId:d.id};e.sendCommand(SIGNAL_CMD.QUERY,p,({code:n,timestamp:o})=>{utils.isEqual(ErrorType.COMMAND_SUCCESS.code,n)&&common.updateSyncTime({isSender:!0,sentTime:o,io:e});let i=e.getConfig();i.isPC||e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,{name:MESSAGE_TYPE.CLIENT_REMOVE_MSGS,content:{messages:t}}),s()})}),m=t=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.RECALLMSG);if(!utils.isEmpty(i))return o(i);let r={topic:COMMAND_TOPICS.RECALL};utils.extend(r,t),n.info({tag:LOG_MODULE.MSG_RECALL,messageId:t.messageId,sentTime:t.sentTime}),e.sendCommand(SIGNAL_CMD.QUERY,r,n=>{let{code:i,timestamp:r}=n;if(utils.isEqual(i,ErrorType.COMMAND_SUCCESS.code)){common.updateSyncTime({isSender:!0,sentTime:r,io:e});let n=utils.clone(t),{messageId:o,sentTime:i,exts:a}=t,d=e.getCurrentUser();utils.extend(n,{name:MESSAGE_TYPE.RECALL,sender:d,isSender:!0,content:{messageId:o,sentTime:i,exts:a}});let p=e.getConfig();return p.isPC||e.emit(SIGNAL_NAME.CMD_RECEIVED,n),utils.clone(n),delete n.exts,utils.extend(n,{name:MESSAGE_TYPE.RECALL_INFO}),s(n)}let{msg:a}=common.getError(i);o({code:i,msg:a})})}),u=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.READMESSAGE);if(!utils.isEmpty(o))return s(o);let i={topic:COMMAND_TOPICS.READ_MESSAGE,messages:t};e.sendCommand(SIGNAL_CMD.QUERY,i,({code:t,timestamp:s})=>{utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)&&common.updateSyncTime({isSender:!0,sentTime:s,io:e}),n()})}),E=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_MESSAGE_READ_DETAILS);if(!utils.isEmpty(o))return s(o);let i={topic:COMMAND_TOPICS.GET_READ_MESSAGE_DETAIL,message:t};e.sendCommand(SIGNAL_CMD.QUERY,i,e=>{delete e.index,n(e)})}),g=t=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.UPDATEMESSAGE);if(!utils.isEmpty(i))return o(i);n.info({tag:LOG_MODULE.MSG_UPDATE,messageId:t.messageId});let r={...t,name:MESSAGE_TYPE.MODIFY},a=(t={})=>{utils.extend(r,t);let n=e.getConfig();n.isPC||e.emit(SIGNAL_NAME.CMD_CONVERSATION_CHANGED,r)};// 兼容 PC 端修改非 content 属性,保证多端行为一致性,直接返回,PC 端会做本地消息 update
110
110
  if(utils.isUndefined(t.content))return a(),s(r);let d={topic:COMMAND_TOPICS.UPDATE_MESSAGE,...t};e.sendCommand(SIGNAL_CMD.QUERY,d,n=>{let o=e.getCurrentUser();a({sender:o,isSender:!0,isUpdated:!0,content:{messageId:t.messageId,...t.content}}),s(r)})}),y=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_MENTIOIN_MESSAGES);if(!utils.isEmpty(o))return s(o);let i={count:20,order:MENTION_ORDER.BACKWARD,messageIndex:0},r=e.getCurrentUser();utils.extend(i,t);let a={topic:COMMAND_TOPICS.GET_MENTION_MSGS,userId:r.id,...i};e.sendCommand(SIGNAL_CMD.QUERY,a,({isFinished:e,msgs:t})=>{n({isFinished:e,msgs:t})})}),T=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_FILE_TOKEN);if(!utils.isEmpty(o))return s(o);let{id:i}=e.getCurrentUser(),r={topic:COMMAND_TOPICS.GET_FILE_TOKEN,...t,userId:i};e.sendCommand(SIGNAL_CMD.QUERY,r,({cred:{token:e,domain:t,type:s,url:o}})=>{n({token:e,domain:t,type:s,url:o})})}),f=(t,n,s={})=>{function o(e,t){let{content:n}=t,s={onprogress:({percent:e})=>{d.onprogress({percent:e,message:t})},oncompleted:({url:e})=>{let s=n.file.size/1024;utils.extend(t.content,{url:e,size:s.toFixed(2)}),delete t.content.file,d.oncompleted(t)},onerror:e=>{d.onerror(ErrorType.UPLOADING_FILE_ERROR,e)}};l.exec(n,e,s)}let{uploadType:i,upload:r,fileCompressLimit:a}=e.getConfig(),d={onprogress:()=>{},onerror:()=>{}};utils.extend(d,s);let{fileType:p,scale:c}=t,l=Uploder(r,{type:i}),{name:m,content:u}=n,E=u.file,g=E.name.split("."),y=g[g.length-1];T({type:p,ext:y}).then(e=>{let{type:t}=e;if(!utils.isEqual(t,i))return d.onerror(ErrorType.UPLOAD_PLUGIN_NOTMATCH);let s=utils.extend(e,{file:u.file,scale:c,fileCompressLimit:a});if(utils.isEqual(m,MESSAGE_TYPE.IMAGE)){// 业务层设置缩略图,传入优先,不再执行生成缩略图逻辑
111
- let{thumbnail:t}=u;if(t)return o(e,n);common.uploadThumbnail(r,s,(t,s,i)=>{let{height:r,width:a}=i;utils.extend(n.content,{thumbnail:s,height:r,width:a,type:u.file.type}),o(e,n)})}if(utils.isEqual(m,MESSAGE_TYPE.VIDEO)){// 业务层设置封面,传入优先,不再执行生成缩略图逻辑
112
- let{snapshotUrl:t}=u;if(t)return o(e,n);common.uploadFrame(r,s,(t,s,i)=>{let{height:r,width:a,duration:d}=i;utils.extend(n.content,{snapshotUrl:s,height:r,width:a,duration:d}),o(e,n)})}utils.isInclude([MESSAGE_TYPE.FILE,MESSAGE_TYPE.VOICE],m)&&o(e,n)})},C=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.FILE});let o={fileType:FILE_TYPE.FILE};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.FILE});let c=s.onbefore||utils.noop,l=t.tid||utils.getUUID();utils.extend(t,{tid:l,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),f(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},_=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.IMAGE});let o={fileType:FILE_TYPE.IMAGE,scale:t.scale};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.IMAGE});let c=s.onbefore||utils.noop,l=t.tid||utils.getUUID();utils.extend(t,{tid:l,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),f(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},S=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.VOICE});let o={fileType:FILE_TYPE.AUDIO};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.AUDIO});let c=s.onbefore||utils.noop,l=t.tid||utils.getUUID();utils.extend(t,{tid:l,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),f(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},O=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.VIDEO});let o={fileType:FILE_TYPE.VIDEO,scale:t.scale};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.VIDEO});let c=s.onbefore||utils.noop,l=t.tid||utils.getUUID();utils.extend(t,{tid:l,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),f(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},I=(t,s={})=>utils.deferred((o,i)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SEND_MERGE_MESSAGE);if(!utils.isEmpty(a))return i(a);n.info({tag:LOG_MODULE.MSG_SEND_MERGE});let{conversationType:d,conversationId:p,messages:c,previewList:l,title:m}=t;if(20<c.length)return i(ErrorType.TRANSFER_MESSAGE_COUNT_EXCEED);let u={channelType:CONVERATION_TYPE.PRIVATE,targetId:""},E=[];c=utils.map(c,e=>(utils.extend(u,{channelType:e.conversationType,targetId:e.conversationId}),{msgId:e.messageId,msgTime:e.sentTime,msgIndex:e.messageIndex})),utils.forEach(c,({msgId:e})=>{E.push(e)});let g=e.getCurrentUser();utils.extend(u,{userId:g.id,msgs:c});let y={conversationId:p,conversationType:d,name:MESSAGE_TYPE.MERGE,mergeMsg:u,content:{previewList:l,messageIdList:E,title:m}};return r(y,s).then(o,i)}),N=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_MERGE_MESSAGES);if(!utils.isEmpty(o))return s(o);let i={time:0,order:MESSAGE_ORDER.FORWARD,count:20,topic:COMMAND_TOPICS.GET_MERGE_MSGS};utils.extend(i,t),e.sendCommand(SIGNAL_CMD.QUERY,i,({isFinished:e,messages:t})=>{n({isFinished:e,messages:t})})}),A=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_FIRST_UNREAD_MSG);if(!utils.isEmpty(o))return s(o);let i={...t,topic:COMMAND_TOPICS.GET_FIRST_UNREAD_MSG};e.sendCommand(SIGNAL_CMD.QUERY,i,({code:e,msg:t})=>utils.isEqual(ErrorType.COMMAND_SUCCESS.code,e)?void n({message:t}):s({code:e}))}),R=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SEARCH_MESSAGES);return utils.isEmpty(o)?s(ErrorType.SDK_FUNC_NOT_DEFINED):s(o)}),M=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.UPDATE_MESSAGE_ATTR);return utils.isEmpty(o)?s(ErrorType.SDK_FUNC_NOT_DEFINED):s(o)}),h=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SET_MESSAGE_SEARCH_CONTENT);return utils.isEmpty(o)?s(ErrorType.SDK_FUNC_NOT_DEFINED):s(o)}),v=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.INSERT_MESSAGE);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),{sender:r}=t,a=utils.isEqual(i.id,r.id),d=utils.getUUID(),p={tid:d,...t,isSender:a,sender:r};n(p)});/*
111
+ let{thumbnail:t}=u;if(t)return o(e,n);T({type:p,ext:y}).then(t=>{common.uploadThumbnail(r,{...s,...t},(t,s,i)=>{let{height:r,width:a}=i;utils.extend(n.content,{thumbnail:s,height:r,width:a,type:u.file.type}),o(e,n)})})}if(utils.isEqual(m,MESSAGE_TYPE.VIDEO)){// 业务层设置封面,传入优先,不再执行生成缩略图逻辑
112
+ let{snapshotUrl:t}=u;if(t)return o(e,n);T({type:p,ext:y}).then(t=>{common.uploadFrame(r,{...s,...t},(t,s,i)=>{let{height:r,width:a,duration:d}=i;utils.extend(n.content,{snapshotUrl:s,height:r,width:a,duration:d}),o(e,n)})})}utils.isInclude([MESSAGE_TYPE.FILE,MESSAGE_TYPE.VOICE],m)&&o(e,n)})},C=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.FILE});let o={fileType:FILE_TYPE.FILE};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.FILE});let c=s.onbefore||utils.noop,l=t.tid||utils.getUUID();utils.extend(t,{tid:l,sentState:MESSAGE_SENT_STATE.SENDING});let{size:m=0}=t.content;m/=1024;let u=utils.clone(t);u.content={...t.content,size:m},c(u),f(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},_=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.IMAGE});let o={fileType:FILE_TYPE.IMAGE,scale:t.scale};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.IMAGE});let c=s.onbefore||utils.noop,l=t.tid||utils.getUUID();utils.extend(t,{tid:l,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),f(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},S=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.VOICE});let o={fileType:FILE_TYPE.AUDIO};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.AUDIO});let c=s.onbefore||utils.noop,l=t.tid||utils.getUUID();utils.extend(t,{tid:l,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),f(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},O=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.VIDEO});let o={fileType:FILE_TYPE.VIDEO,scale:t.scale};return utils.deferred((i,a)=>{let d=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE),{uploadType:p}=e.getConfig();if(utils.isEqual(p,UPLOAD_TYPE.NONE)&&(d=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(d))return a(d);n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.VIDEO});let c=s.onbefore||utils.noop,l=t.tid||utils.getUUID();utils.extend(t,{tid:l,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),f(o,t,{onprogress:s.onprogress,oncompleted:e=>{r(e).then(i,a)},onerror:s.onerror})})},I=(t,s={})=>utils.deferred((o,i)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SEND_MERGE_MESSAGE);if(!utils.isEmpty(a))return i(a);n.info({tag:LOG_MODULE.MSG_SEND_MERGE});let{conversationType:d,conversationId:p,messages:c,previewList:l,title:m}=t;if(20<c.length)return i(ErrorType.TRANSFER_MESSAGE_COUNT_EXCEED);let u={channelType:CONVERATION_TYPE.PRIVATE,targetId:""},E=[];c=utils.map(c,e=>(utils.extend(u,{channelType:e.conversationType,targetId:e.conversationId}),{msgId:e.messageId,msgTime:e.sentTime,msgIndex:e.messageIndex})),utils.forEach(c,({msgId:e})=>{E.push(e)});let g=e.getCurrentUser();utils.extend(u,{userId:g.id,msgs:c});let y={conversationId:p,conversationType:d,name:MESSAGE_TYPE.MERGE,mergeMsg:u,content:{previewList:l,messageIdList:E,title:m}};return r(y,s).then(o,i)}),N=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_MERGE_MESSAGES);if(!utils.isEmpty(o))return s(o);let i={time:0,order:MESSAGE_ORDER.FORWARD,count:20,topic:COMMAND_TOPICS.GET_MERGE_MSGS};utils.extend(i,t),e.sendCommand(SIGNAL_CMD.QUERY,i,({isFinished:e,messages:t})=>{n({isFinished:e,messages:t})})}),A=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_FIRST_UNREAD_MSG);if(!utils.isEmpty(o))return s(o);let i={...t,topic:COMMAND_TOPICS.GET_FIRST_UNREAD_MSG};e.sendCommand(SIGNAL_CMD.QUERY,i,({code:e,msg:t})=>utils.isEqual(ErrorType.COMMAND_SUCCESS.code,e)?void n({message:t}):s({code:e}))}),R=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SEARCH_MESSAGES);return utils.isEmpty(o)?s(ErrorType.SDK_FUNC_NOT_DEFINED):s(o)}),M=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.UPDATE_MESSAGE_ATTR);return utils.isEmpty(o)?s(ErrorType.SDK_FUNC_NOT_DEFINED):s(o)}),h=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SET_MESSAGE_SEARCH_CONTENT);return utils.isEmpty(o)?s(ErrorType.SDK_FUNC_NOT_DEFINED):s(o)}),v=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.INSERT_MESSAGE);if(!utils.isEmpty(o))return s(o);let i=e.getCurrentUser(),{sender:r}=t,a=utils.isEqual(i.id,r.id),d=utils.getUUID(),p={tid:d,...t,isSender:a,sender:r};n(p)});/*
113
113
  let messages = [ Message, Message, ... ];
114
114
  let callbacks = {
115
115
  onbefore: () => {},
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  {
3
3
  "name": "jugglechat-websdk",
4
- "version": "1.6.8",
4
+ "version": "1.7.0",
5
5
  "description": "JuggleChat SDK, IM, Chat",
6
6
  "main": "index.js",
7
7
  "scripts": { },