jugglechat-websdk 1.7.19 → 1.7.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +4 -4
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* JuggleIM.js v1.7.
|
|
2
|
+
* JuggleIM.js v1.7.20
|
|
3
3
|
* (c) 2022-2024 JuggleIM
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/const noop=()=>{},isObject=e=>"[object Object]"===Object.prototype.toString.call(e),isArray=e=>"[object Array]"===Object.prototype.toString.call(e),isFunction=e=>"[object Function]"===Object.prototype.toString.call(e),isString=e=>"[object String]"===Object.prototype.toString.call(e),isBoolean=e=>"[object Boolean]"===Object.prototype.toString.call(e),isUndefined=e=>"[object Undefined]"===Object.prototype.toString.call(e),isNull=e=>"[object Null]"===Object.prototype.toString.call(e),isNumber=e=>"[object Number]"===Object.prototype.toString.call(e),_isNaN=e=>isNaN(+e),stringify=e=>JSON.stringify(e),parse=t=>{let n={};try{n=JSON.parse(t)}catch(s){n=t}return n},forEach=(e,t)=>{t=t||noop;isObject(e)&&(()=>{for(var n in e)t(e[n],n,e)})(),isArray(e)&&(()=>{for(var n=0,s=e.length;n<s;n++)t(e[n],n,e)})()},isEmpty=e=>{let t=!0;return isObject(e)&&forEach(e,()=>{t=!1}),(isString(e)||isArray(e))&&(t=0===e.length),isNumber(e)&&(t=-1===e),t},rename=(e,t)=>{var n=isObject(e);n&&(e=[e]),e=parse(stringify(e));var s=function(e,n,s){delete s[n],n=t[n],s[n]=e};return forEach(e,e=>{forEach(e,(e,n,o)=>{var i=(n in t);(i?s:noop)(e,n,o)})}),isObject?e[0]:e},extend=(e,t)=>(t=isArray(t)?t:[t],forEach(t,t=>{for(let n in t){let s=t[n];isUndefined(s)||(e[n]=s)}}),e),Defer=Promise,deferred=e=>new Defer(e),templateFormat=(e,t,n)=>{isArray(t)||(t=[t]);let s=[],o=t=>e.replace(n||/\\?\{([^}]+)\}/g,(e,n)=>"\\"===e.charAt(0)?e.slice(1):void 0===t[n]?"{"+n+"}":t[n]);for(let r=0,i=t.length;r<i;r++)s.push(o(t[r]));return s.join("")},isContain=(e,t)=>-1<e.indexOf(t),isEqual=(e,t)=>e===t,Cache$1=e=>{isObject(e)||(e={});let t=(t,n)=>{e[t]=n},n=t=>e[t],s=t=>{delete e[t]},o=()=>{let t=[];for(let n in e)t.push(n);return t},i=()=>{e={}};return{set:t,get:n,remove:s,getKeys:o,clear:i}},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
|
|
@@ -76,13 +76,13 @@ if(utils.isEqual(r,COMMAND_TOPICS.NTF)){let e=$root.lookup("codec.Notify"),t=e.d
|
|
|
76
76
|
utils.isEmpty(m)||Storage.setPrefix(`${d}_${m}`);let l=common.getNaviStorageKey(d,m),E=Storage.get(l);return utils.isEmpty(E)?void utils.forEach(e,t=>{let m=t.replaceAll(/http:\/\/|https:\/\/|file:\/\//g,""),{http:E}=utils.getProtocol(t);m=`${E}//${m}/navigator/general`;let u={headers:{"x-appkey":d,"x-token":p}},g=utils.requestNormal(m,u,{success:function(e,t){if(!r){let{responseURL:i}=t,a=i.replace(/(\/navigator\/general)/g,"");r=!0;let{code:p,data:m={}}=e,{servers:E,user_id:u}=m,g={servers:E,userId:u,code:p,url:a};// 默认规则:导航和 CMP 的协议必须一致
|
|
77
77
|
utils.isEmpty(E)||(Storage.set(c,u),Storage.setPrefix(`${d}_${u}`),l=common.getNaviStorageKey(),Storage.set(l,g),o.info({tag:LOG_MODULE.NAV_REQEST,remote:g})),n(g),s()}},fail:function(t){a.push(t),utils.isEqual(a.length,e.length)&&n(t.result)}});i.push(g)}):(o.info({tag:LOG_MODULE.NAV_REQEST,local:E}),n(E))};var Network={detect,getNavis};function Consumer(){let e=[],t=!1,n=!1,s=(t,n)=>n?e.unshift(t):void e.push(t),o=s=>{// 如果正在执行,终止本次任务,执行任务结束后自动消费队列 ntf, 1 是首次,所以判断大于 1
|
|
78
78
|
if(n)return;n=!0,t=utils.isEqual(e.length,0);let i=e.shift(),r={item:i},a=()=>{n=!1,o(s)};t?n=!1:s(r,a)};return{consume:o,produce:s}}function MessageSyncer(e,t,n,{logger:s}){let o=Consumer(),i=i=>{function r(s,o){let{msg:i}=s,r=common.updateSyncTime({...i,io:n});if(r){let{msgIndex:n,ackIndex:s}=i,o={msgIndex:n,ackIndex:s};e(SIGNAL_CMD.PUBLISH_ACK,o),t.emit(SIGNAL_NAME.CMD_RECEIVED,i)}o()}function a(i,r){let{user:a,msg:d,name:p,$message:c}=i,m=Storage.get(STORAGE.SYNC_RECEIVED_MSG_TIME).time||1700927161470,l=Storage.get(STORAGE.SYNC_SENT_MSG_TIME).time||1700927161470;// 如果本地记录时间戳大于 ntf 中的接收时间,认为消息已被当前端接收过,不再执行拉取动作
|
|
79
|
-
if(m>=d.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncReceiveTime:m,msg:d}),r();let E={userId:a.id,syncTime:m,containsSendBox:!0,sendBoxSyncTime:l,topic:COMMAND_TOPICS.SYNC_MESSAGES};e(SIGNAL_CMD.QUERY,E,({isFinished:e,messages:a,code:p})=>{if(a=a||[],s.info({tag:LOG_MODULE.MSG_SYNC,data:E,msg:d,code:p,count:a.length}),!utils.isEqual(p,ErrorType.COMMAND_SUCCESS.code))return r();let m=[];utils.forEach(a,(e,t)=>{let{flags:n,sentTime:s,isSender:o}=e,i=common.formatter.toMsg(n);i.isStorage&&m.push(e)}),c.insertBatchMsgs({msgs:utils.clone(m)}).then(()=>{utils.forEach(a,(s,o)=>{let{sentTime:i,isSender:r}=s,d=common.updateSyncTime({sentTime:i,isSender:r,io:n});if(d){let n=e&&utils.isEqual(a.length-1,o);t.emit(SIGNAL_NAME.CMD_RECEIVED,[s,n])}});let s=!e;s&&o.produce(i,s),r()})})}function d(n,i){let{user:r,name:a,time:d,$conversation:p}=n,c=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;if(c>d)return s.info({tag:LOG_MODULE.CONV_SYNC,syncTime:c,time:d}),i();let m={userId:r.id,syncTime:c,topic:COMMAND_TOPICS.SYNC_CONVERSATIONS,count:200};e(SIGNAL_CMD.QUERY,m,e=>{let{isFinished:r,conversations:a,code:d}=e;if(s.info({tag:LOG_MODULE.CONV_SYNC,data:m,code:d,count:a.length}),!utils.isEqual(d,ErrorType.COMMAND_SUCCESS.code))return t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i();let l=a.length,E=a[l-1]||{syncTime:0},{syncTime:u}=E;u>c&&(Storage.set(STORAGE.SYNC_CONVERSATION_TIME,{time:u}),n=utils.extend(n,{time:u})),a=utils.clone(a),p._batchInsertConversations({conversations:a,syncTime:u}).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATIONS_PROGRESS,e);let s=!r;s?o.produce(n,s):t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i()})})}o.produce(i),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.CMD_RECEIVED)&&r(e,t),utils.isEqual(n,SIGNAL_NAME.S_SYNC_CONVERSATION_NTF)&&d(e,t),utils.isEqual(n,SIGNAL_NAME.S_NTF)&&a(e,t)})};return{exec:i}}let chatroomCacher=Cache();var chatroomCacher$1={set:(e,t)=>{let n=chatroomCacher.get(e),{msgs:s=[]}=t;200<=s.length&&(s.shift(0),t=utils.extend(t,{msgs:s})),n=utils.extend(n,t),chatroomCacher.set(e,n)},get:e=>{let t=chatroomCacher.get(e);return t},remove:e=>{chatroomCacher.remove(e)},getAll:()=>chatroomCacher.getAll()};function ChatroomSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){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();if(i.isNotSync)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),p(i.targetId,i.receiveTime),o();let c=i.count||50,m={syncTime:a,chatroomId:r,count:c,topic:COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES};e(SIGNAL_CMD.QUERY,m,({messages:e,code:n})=>{if(s.info({tag:LOG_MODULE.MSG_SYNC,data:m,msg:i,code:n,count:e.length}),!utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code))return o();let{msgs:a=[]}=chatroomCacher$1.get(r);utils.forEach(e,e=>{p(e.conversationId,e.sentTime);let{messageId:n}=e,s=utils.isInclude(a,n);s||(a.push(n),t.emit(SIGNAL_NAME.CMD_RECEIVED,[e]))}),chatroomCacher$1.set(r,{msgs:a}),o()})}function d(e){let t=chatroomCacher$1.get(e);return t.syncMsgTime||0}function p(e,t){let n=d(e);t>n&&chatroomCacher$1.set(e,{syncMsgTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function ChatroomAttSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){s.info({tag:LOG_MODULE.MSG_SYNC,...e});let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_ATTR)&&i&&r(e,t)}function r(n,o){let{msg:i}=n,r=i.targetId,p=a(r);if(p>=i.receiveTime&&0<i.receiveTime)return o();let c={syncTime:p,chatroomId:r,targetId:r,topic:COMMAND_TOPICS.SYNC_CHATROOM_ATTRS};e(SIGNAL_CMD.QUERY,c,e=>{let{code:n,attrs:r,chatroomId:a}=e;return s.info({tag:LOG_MODULE.MSG_SYNC,data:c,msg:i,code:n,count:r.length}),utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code)?void(utils.forEach(r,e=>{d(a,e.updateTime)}),t.emit(SIGNAL_NAME.CMD_CHATROOM_ATTR_RECEIVED,{attrs:r,chatroomId:a}),o()):o()})}function a(e){let t=chatroomCacher$1.get(e);return t.syncAttTime||0}function d(e,t){let n=a(e);t>n&&chatroomCacher$1.set(e,{syncAttTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function TagSyncer(e,t,n,{logger:s}){let o=({$conversation:e})=>{let{id:s}=n.getCurrentUser(),o={topic:COMMAND_TOPICS.CONVERSATION_TAG_QUERY,userId:s};n.sendCommand(SIGNAL_CMD.QUERY,o,n=>{let{code:s,tags:o}=n;utils.isEqual(ErrorType.COMMAND_SUCCESS.code,s)&&(utils.map(o,e=>{let t=CONVERSATION_TAG[e.id]||{};return utils.extend(e,t),e}),e._batchInsertTags(o).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_TAG_FINISHED,e)}))})};return{exec:o}}function Timer(e={}){let t={timeout:60000};utils.extend(t,e);let{timeout:n}=t,s=0,o=utils.noop,i=e=>{o=e,s=setInterval(()=>{o()},n)},r=()=>{clearInterval(s)},a=()=>{r(),i(o)};return{resume:i,pause:r,reset:a}}function Counter(e={}){let t={timeout:10000};utils.extend(t,e);let{timeout:n}=t,s=0,o=e=>{s=setTimeout(()=>{e(t)},n)},i=()=>{clearTimeout(s)};return{start:o,clear:i}}let VERSION="1.7.
|
|
79
|
+
if(m>=d.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncReceiveTime:m,msg:d}),r();let E={userId:a.id,syncTime:m,containsSendBox:!0,sendBoxSyncTime:l,topic:COMMAND_TOPICS.SYNC_MESSAGES};e(SIGNAL_CMD.QUERY,E,({isFinished:e,messages:a,code:p})=>{if(a=a||[],s.info({tag:LOG_MODULE.MSG_SYNC,data:E,msg:d,code:p,count:a.length}),!utils.isEqual(p,ErrorType.COMMAND_SUCCESS.code))return r();let m=[];utils.forEach(a,(e,t)=>{let{flags:n,sentTime:s,isSender:o}=e,i=common.formatter.toMsg(n);i.isStorage&&m.push(e)}),c.insertBatchMsgs({msgs:utils.clone(m)}).then(()=>{utils.forEach(a,(s,o)=>{let{sentTime:i,isSender:r}=s,d=common.updateSyncTime({sentTime:i,isSender:r,io:n});if(d){let n=e&&utils.isEqual(a.length-1,o);t.emit(SIGNAL_NAME.CMD_RECEIVED,[s,n])}});let s=!e;s&&o.produce(i,s),r()})})}function d(n,i){let{user:r,name:a,time:d,$conversation:p}=n,c=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;if(c>d)return s.info({tag:LOG_MODULE.CONV_SYNC,syncTime:c,time:d}),i();let m={userId:r.id,syncTime:c,topic:COMMAND_TOPICS.SYNC_CONVERSATIONS,count:200};e(SIGNAL_CMD.QUERY,m,e=>{let{isFinished:r,conversations:a,code:d}=e;if(s.info({tag:LOG_MODULE.CONV_SYNC,data:m,code:d,count:a.length}),!utils.isEqual(d,ErrorType.COMMAND_SUCCESS.code))return t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i();let l=a.length,E=a[l-1]||{syncTime:0},{syncTime:u}=E;u>c&&(Storage.set(STORAGE.SYNC_CONVERSATION_TIME,{time:u}),n=utils.extend(n,{time:u})),a=utils.clone(a),p._batchInsertConversations({conversations:a,syncTime:u}).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATIONS_PROGRESS,e);let s=!r;s?o.produce(n,s):t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i()})})}o.produce(i),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.CMD_RECEIVED)&&r(e,t),utils.isEqual(n,SIGNAL_NAME.S_SYNC_CONVERSATION_NTF)&&d(e,t),utils.isEqual(n,SIGNAL_NAME.S_NTF)&&a(e,t)})};return{exec:i}}let chatroomCacher=Cache();var chatroomCacher$1={set:(e,t)=>{let n=chatroomCacher.get(e),{msgs:s=[]}=t;200<=s.length&&(s.shift(0),t=utils.extend(t,{msgs:s})),n=utils.extend(n,t),chatroomCacher.set(e,n)},get:e=>{let t=chatroomCacher.get(e);return t},remove:e=>{chatroomCacher.remove(e)},getAll:()=>chatroomCacher.getAll()};function ChatroomSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){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();if(i.isNotSync)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),p(i.targetId,i.receiveTime),o();let c=i.count||50,m={syncTime:a,chatroomId:r,count:c,topic:COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES};e(SIGNAL_CMD.QUERY,m,({messages:e,code:n})=>{if(s.info({tag:LOG_MODULE.MSG_SYNC,data:m,msg:i,code:n,count:e.length}),!utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code))return o();let{msgs:a=[]}=chatroomCacher$1.get(r);utils.forEach(e,e=>{p(e.conversationId,e.sentTime);let{messageId:n}=e,s=utils.isInclude(a,n);s||(a.push(n),t.emit(SIGNAL_NAME.CMD_RECEIVED,[e]))}),chatroomCacher$1.set(r,{msgs:a}),o()})}function d(e){let t=chatroomCacher$1.get(e);return t.syncMsgTime||0}function p(e,t){let n=d(e);t>n&&chatroomCacher$1.set(e,{syncMsgTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function ChatroomAttSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){s.info({tag:LOG_MODULE.MSG_SYNC,...e});let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_ATTR)&&i&&r(e,t)}function r(n,o){let{msg:i}=n,r=i.targetId,p=a(r);if(p>=i.receiveTime&&0<i.receiveTime)return o();let c={syncTime:p,chatroomId:r,targetId:r,topic:COMMAND_TOPICS.SYNC_CHATROOM_ATTRS};e(SIGNAL_CMD.QUERY,c,e=>{let{code:n,attrs:r,chatroomId:a}=e;return s.info({tag:LOG_MODULE.MSG_SYNC,data:c,msg:i,code:n,count:r.length}),utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code)?void(utils.forEach(r,e=>{d(a,e.updateTime)}),t.emit(SIGNAL_NAME.CMD_CHATROOM_ATTR_RECEIVED,{attrs:r,chatroomId:a}),o()):o()})}function a(e){let t=chatroomCacher$1.get(e);return t.syncAttTime||0}function d(e,t){let n=a(e);t>n&&chatroomCacher$1.set(e,{syncAttTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function TagSyncer(e,t,n,{logger:s}){let o=({$conversation:e})=>{let{id:s}=n.getCurrentUser(),o={topic:COMMAND_TOPICS.CONVERSATION_TAG_QUERY,userId:s};n.sendCommand(SIGNAL_CMD.QUERY,o,n=>{let{code:s,tags:o}=n;utils.isEqual(ErrorType.COMMAND_SUCCESS.code,s)&&(utils.map(o,e=>{let t=CONVERSATION_TAG[e.id]||{};return utils.extend(e,t),e}),e._batchInsertTags(o).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_TAG_FINISHED,e)}))})};return{exec:o}}function Timer(e={}){let t={timeout:60000};utils.extend(t,e);let{timeout:n}=t,s=0,o=utils.noop,i=e=>{o=e,s=setInterval(()=>{o()},n)},r=()=>{clearInterval(s)},a=()=>{r(),i(o)};return{resume:i,pause:r,reset:a}}function Counter(e={}){let t={timeout:10000};utils.extend(t,e);let{timeout:n}=t,s=0,o=e=>{s=setTimeout(()=>{e(t)},n)},i=()=>{clearTimeout(s)};return{start:o,clear:i}}let VERSION="1.7.20";function NetworkWatcher(e){let t=()=>{let t=e.ononline||utils.noop;t()},n=()=>{"object"==typeof window&&window.addEventListener&&(window.removeEventListener("online",t),window.addEventListener("online",t))};return{watch:n}}/*
|
|
80
80
|
fileCompressLimit: 图片缩略图压缩限制,小于设置数值将不执行压缩,单位 KB
|
|
81
81
|
config = { appkey, nav, isSync, upload, uploadType, fileCompressLimit }
|
|
82
82
|
*/function IO(e){function t(){let e=s({ignores:[]});return A(),y.remove(CONNECT_TOOL.RECONNECT_COUNT),y.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),k(e,({next:e})=>{e=e||utils.noop,e()})}function n(){l&&F.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:D.id}})}function s(e={}){let{ignores:t=["token"]}=e,n=utils.clone(D);return utils.forEach(t,e=>{delete n[e]}),n}function o(){return e}function i(t){utils.extend(e,t)}function r(e,t){let n={topic:COMMAND_TOPICS.GET_USER_INFO,userId:e.id};P(SIGNAL_CMD.QUERY,n,e=>{t(e)})}let a=Emitter(),{appkey:d,navList:p,serverList:m=[],isSync:l=!0,reconnectCount:E=100,logger:c}=e;utils.isArray(p)||(p=["https://nav.fake.com"]);let u={},g={},T=utils.noop,y=Cache(),_=Decoder(y,g),C=Encoder(y),O=Timer({timeout:HEART_TIMEOUT}),S=Timer({timeout:SYNC_MESSAGE_TIME}),f=!0,R=CONNECT_STATE.DISCONNECTED,I=[ErrorType.CONNECT_APPKEY_IS_REQUIRE.code,ErrorType.CONNECT_TOKEN_NOT_EXISTS.code,ErrorType.CONNECT_APPKEY_NOT_EXISTS.code,ErrorType.CONNECT_TOKEN_ILLEGAL.code,ErrorType.CONNECT_TOKEN_UNAUTHORIZED.code,ErrorType.CONNECT_TOKEN_EXPIRE.code,ErrorType.CONNECT_APP_BLOCKED.code,ErrorType.CONNECT_USER_BLOCKED.code,ErrorType.CONNECT_USER_KICKED.code,ErrorType.CONNECT_USER_LOGOUT.code],N=e=>{R=e.state,a.emit(SIGNAL_NAME.CONN_CHANGED,{...e})},A=()=>{O.pause(),S.pause()},M=NetworkWatcher({ononline:()=>{3==u.readyState&&t()}});M.watch();let v=!1,h=(e={})=>{let{code:t}=e,n=y.getAll();if(utils.forEach(n,(e,t)=>{if(!utils.isNaN(t)){let{callback:n}=e;n=n||utils.noop,n(ErrorType.COMMAND_FAILED),y.remove(t)}}),!v&&!utils.isInclude(I,t)&&!utils.isEqual(R,CONNECT_STATE.DISCONNECTED)){let e=s({ignores:[]});return A(),k(e,({next:e})=>{e=e||utils.noop,e()})}if(!utils.isEqual(R,CONNECT_STATE.DISCONNECTED)){let t=s();N({state:CONNECT_STATE.DISCONNECTED,...e,user:t}),A()}},D={},U=e=>{utils.extend(D,e)},b=e=>{let t=common.getNaviStorageKey(d,e);Storage.remove(t)},x=({token:e,deviceId:n,_isReconnect:s=!1},o)=>{function i({servers:s,userId:i}){U({id:i,token:e,deviceId:n}),y.set(SIGNAL_NAME.S_CONNECT_ACK,o),Network.detect(s,(s,r)=>{// 如果嗅探失败,返回连接断开,同时清理已缓存的 CMP 地址
|
|
83
83
|
if(r)return T(e=>{e=utils.isObject(e)?e:{};let{serverUrls:n}=e;n=n||[],0<n.length&&(m=n.concat(n),t())}),b(i),k({token:e,userId:i,deviceId:n},o);s=s.replaceAll(/http:\/\/|https:\/\/|file:\/\/|wss:\/\/|ws:\/\//g,"");let{ws:a}=utils.getProtocol(),p=`${a}//${s}/im`;u=new WebSocket(p),c.info({tag:LOG_MODULE.WS_CONNECT}),u.onopen=function(){let t=PLATFORM.WEB;common.isDesktop()&&(t=PLATFORM.DESKTOP);let s=common.getClientSession();P(SIGNAL_CMD.CONNECT,{appkey:d,token:e,deviceId:n,platform:t,clientSession:s,sdkVerion:VERSION})},u.onclose=t=>{h({type:DISCONNECT_TYPE.CLOSE})},u.onerror=()=>{h({type:DISCONNECT_TYPE.ERROR})},u.onmessage=function({data:e}){let t=new FileReader;t.onload=function(){Y(this.result)},t.readAsArrayBuffer(e)}})}y.set(STORAGE.CRYPTO_RANDOM,utils.getRandoms(8));let r=s?CONNECT_STATE.RECONNECTING:CONNECT_STATE.CONNECTING;return N({state:r}),utils.isEmpty(m)?Network.getNavis(p,{appkey:d,token:e,logger:c},e=>{let{code:t,servers:n,userId:s}=e;if(!utils.isEqual(t,ErrorType.COMMAND_SUCCESS.code)){let e=common.getError(t);return b(s),t||(e=ErrorType.IM_SERVER_CONNECT_ERROR),N({state:CONNECT_STATE.DISCONNECTED,code:e.code}),o({error:e})}i({servers:n,userId:s})}):i({servers:m})},G=0,k=({token:e,userId:t,deviceId:n},s)=>{clearTimeout(G),c.info({tag:LOG_MODULE.CON_RECONNECT,userId:t,deviceId:n});let o=y.get(CONNECT_TOOL.RECONNECT_COUNT),i=o.count||1,r=i>E;if(r)return y.remove(CONNECT_TOOL.RECONNECT_COUNT),y.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),N({state:CONNECT_STATE.DISCONNECTED,code:ErrorType.IM_SERVER_CONNECT_ERROR.code});let d=y.get(CONNECT_TOOL.RECONNECT_FREQUENCY),p=d.frequency||1,m=1e3*p;G=setTimeout(()=>{i+=1,y.set(CONNECT_TOOL.RECONNECT_COUNT,{count:i}),p*=2,y.set(CONNECT_TOOL.RECONNECT_FREQUENCY,{frequency:p}),x({token:e,userId:t,deviceId:n,_isReconnect:!0},e=>{let{error:t}=e;utils.isEqual(t.code,ErrorType.COMMAND_SUCCESS.code)&&a.emit(SIGNAL_NAME.CMD_CHATROOM_REJOIN,{}),s(e)})},m)},q=[],L=()=>{u&&u.close&&u.close(),O.pause(),S.pause(),q.length=0},V=()=>{v=!0,R=CONNECT_STATE.DISCONNECTED,L()},P=(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=C.encode(e,{callback:n,data:t,index:s,counter:o});if(1!=u.readyState)return L(),n(ErrorType.COMMAND_FAILED);u.send(i);let r=utils.clone(t);delete r.messages,r.user&&(r.user={id:r.user.id}),c.info({tag:LOG_MODULE.WS_SEND,cmd:e,...r}),utils.isEqual(SIGNAL_CMD.PUBLISH_ACK,e)||o.start(({cmd:e})=>utils.isEqual(e,SIGNAL_CMD.PING)&&3>q.length?q.push({cmd:e}):void(L(),n(ErrorType.COMMAND_FAILED)))},F=MessageSyncer(P,a,g,{logger:c}),j=ChatroomSyncer(P,a,g,{logger:c}),B=ChatroomAttSyncer(P,a,g,{logger:c}),H=TagSyncer(P,a,g,{logger:c}),Y=t=>{let{cmd:s,result:o,name:i}=_.decode(t);c.info({tag:LOG_MODULE.WS_RECEIVE,cmd:s,code:o.code});let{index:p}=o,{callback:m,data:l,counter:E}=y.get(p);// 清空计时器,与 counter.start 对应
|
|
84
84
|
if(E&&(E.clear(),q.length=0),utils.isEqual(i,SIGNAL_NAME.S_CHATROOM_USER_NTF)){let{chatroomId:e,time:t,type:n}=o;a.emit(SIGNAL_NAME.CMD_CHATROOM_EVENT,{chatroomId:e,time:t,type:n})}if(utils.isEqual(i,SIGNAL_NAME.CMD_RECEIVED)&&(F.exec({msg:o,name:i,$message:e.$message,user:{id:D.id}}),S.reset()),utils.isEqual(i,SIGNAL_NAME.S_NTF)){let{type:t}=o,n={msg:o,name:i,$message:e.$message,user:{id:D.id}};utils.isEqual(t,NOTIFY_TYPE.MSG)&&F.exec(n),(utils.isEqual(t,NOTIFY_TYPE.CHATROOM)||utils.isEqual(t,NOTIFY_TYPE.CHATROOM_DESTORY))&&j.exec(n),utils.isEqual(t,NOTIFY_TYPE.CHATROOM_ATTR)&&B.exec(n),S.reset()}if(utils.isEqual(s,SIGNAL_CMD.PUBLISH_ACK)){utils.extend(l,o);let{conversationType:e}=l;// 单群聊和聊天室通知和拉取消息时间戳分开计算,只有发送单群聊消息更新发件箱
|
|
85
|
-
utils.isEqual(e,CONVERATION_TYPE.CHATROOM)||common.updateSyncTime({...l,io:g}),m(l)}if(utils.isEqual(s,SIGNAL_CMD.QUERY_ACK)&&m(o),utils.isEqual(s,SIGNAL_CMD.CONNECT_ACK)){v=!1;let t=y.get(SIGNAL_NAME.S_CONNECT_ACK)||utils.noop,{ack:{code:s,userId:i,timestamp:a}}=o,p=CONNECT_STATE.CONNECT_FAILED,m=common.getError(s);if(utils.isEqual(s,ErrorType.CONNECT_SUCCESS.code))return f&&!e.isPC&&(common.updateSyncTime({sentTime:a,isSender:!0,io:g}),common.updateSyncTime({sentTime:a,isSender:!1,io:g})),f=!1,p=CONNECT_STATE.CONNECTED,U({id:i}),Storage.setPrefix(`${d}_${i}`),y.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),r({id:i},({user:s})=>{s=s||{};let o=s.nickname,r=s.userPortrait,a=utils.toObject(s.extFields);// 同步会话和同步消息顺序不能调整,保证先同步会话再同步消息,规避会话列表最后一条消息不是最新的
|
|
85
|
+
utils.isEqual(e,CONVERATION_TYPE.CHATROOM)||common.updateSyncTime({...l,io:g}),m(l)}if(utils.isEqual(s,SIGNAL_CMD.QUERY_ACK)&&m&&m(o),utils.isEqual(s,SIGNAL_CMD.CONNECT_ACK)){v=!1;let t=y.get(SIGNAL_NAME.S_CONNECT_ACK)||utils.noop,{ack:{code:s,userId:i,timestamp:a}}=o,p=CONNECT_STATE.CONNECT_FAILED,m=common.getError(s);if(utils.isEqual(s,ErrorType.CONNECT_SUCCESS.code))return f&&!e.isPC&&(common.updateSyncTime({sentTime:a,isSender:!0,io:g}),common.updateSyncTime({sentTime:a,isSender:!1,io:g})),f=!1,p=CONNECT_STATE.CONNECTED,U({id:i}),Storage.setPrefix(`${d}_${i}`),y.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),r({id:i},({user:s})=>{s=s||{};let o=s.nickname,r=s.userPortrait,a=utils.toObject(s.extFields);// 同步会话和同步消息顺序不能调整,保证先同步会话再同步消息,规避会话列表最后一条消息不是最新的
|
|
86
86
|
if(U({name:o,portrait:r,exts:a,updatedTime:s.updatedTime}),t({user:D,error:m,next:()=>{N({state:p,user:D})}}),e.isPC){let t=()=>{F.exec({time:Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0,name:SIGNAL_NAME.S_SYNC_CONVERSATION_NTF,user:{id:D.id},$conversation:e.$conversation}),n(),H.exec({$conversation:e.$conversation})},s=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;// PC 中先连接后打开数据库,优先将本地数据库中的同步时间更新至 LocalStorage 中,避免换 Token 不换用户 Id 重复同步会话
|
|
87
87
|
utils.isEqual(s,0)?e.$socket.openDB({appkey:d,userId:i,token:D.token}).then(()=>{t()}):t()}else n();O.resume(()=>{P(SIGNAL_CMD.PING,{}),c.info({tag:LOG_MODULE.HB_START})}),S.resume(()=>{F.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:D.id}})})});utils.isEqual(s,ErrorType.CONNECT_SECURITY_DOMAIN_ERROR.code)&&(v=!0),N({state:p,user:D,code:s}),t({user:D,error:m})}if(utils.isEqual(s,SIGNAL_CMD.DISCONNECT)){let{code:e,extra:t}=o;h({code:e,extra:t,type:DISCONNECT_TYPE.SERVER})}if(utils.isEqual(i,SIGNAL_NAME.S_PONG)&&c.info({tag:LOG_MODULE.HB_STOP}),utils.isEqual(i,SIGNAL_NAME.S_RTC_INVITE_NTF)){let{roomId:e,roomType:t,eventType:n,user:s,members:i}=o;a.emit(SIGNAL_NAME.CMD_RTC_INVITE_EVENT,{eventType:n,user:s,roomId:e,roomType:t,members:i})}if(utils.isEqual(i,SIGNAL_NAME.S_RTC_ROOM_EVENT)){let{roomEventType:e,room:t,member:n}=o;a.emit(SIGNAL_NAME.CMD_RTC_ROOM_EVENT,{roomEventType:e,room:t,member:n})}y.remove(p)},Q=()=>utils.isEqual(R,CONNECT_STATE.CONNECTED),w=()=>utils.isEqual(R,CONNECT_STATE.DISCONNECTED);return utils.extend(g,{getConfig:o,setConfig:i,connect:x,disconnect:V,sendCommand:P,isConnected:Q,isNeedConnect:w,getCurrentUser:s,setServerUrlProider:e=>{T=e},getVersion:()=>VERSION,sync:e=>{e=utils.isArray(e)?e:[e];let t=o();utils.forEach(e,e=>{let n={...e,$message:t.$message},{msg:{type:s}}=e;utils.isEqual(s,NOTIFY_TYPE.CHATROOM)&&j.exec(n),utils.isEqual(s,NOTIFY_TYPE.CHATROOM_ATTR)&&B.exec(n)})},...a}),g}let isGroup=e=>utils.isEqual(CONVERATION_TYPE.GROUP,e),formatMsg=({message:e,senders:t,groups:n})=>{let{content:p="{}",senderId:s,conversationType:o,conversationId:i,mentionInfo:c="{}",isRead:r,isSender:a,isUpdated:d,referMsg:m="{}",mergeMsg:l="{}",reactions:E="{}",attribute:u=""}=e;p=utils.parse(p),c=utils.parse(c);let g=utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{},T={};return T=isGroup(o)?utils.filter(n,e=>utils.isEqual(e.id,i))[0]||{}:utils.filter(t,e=>utils.isEqual(e.id,i))[0]||{},e=utils.extend(e,{mergeMsg:utils.parse(l),referMsg:utils.parse(m),reactions:utils.parse(E),conversationTitle:T.name,conversationPortrait:T.portrait,conversationExts:T.exts,content:p,sender:g,mentionInfo:c,sentTime:+e.sentTime,isRead:!!r,isSender:!!a,isUpdated:!!d,attribute:u}),e},formatMsgs=({messages:e,senders:t,groups:n})=>{let s=utils.map(e,e=>{let s=formatMsg({message:e,senders:t,groups:n});return s});return s},formatConversation=({conversation:e,users:t,groups:n})=>{if(utils.isEmpty(e))return e;let{id:s,type:o,draft:i,unreadCount:r,isTop:a,undisturbType:d,sortTime:p,mentions:c,latestMessageTid:m,latestMessageId:l,latestMessageName:E,latestMessageIsSender:u,latestMessageIsUpdated:g,latestMessageSentTime:T,latestMessageSenderId:y,latestMessageContent:_,latestMessageMessageIndex:C,latestMessageIsRead:O,latestMessageIsMass:S,latestUnreadCount:f,latestReadCount:R,latestReadIndex:I,latestUnreadIndex:N,latestMentionInfo:A,unreadTag:M}=e;c=c||"{}";let v=utils.filter(t,e=>utils.isEqual(e.id,y))[0]||{id:y},h={};h=isGroup(o)?utils.filter(n,e=>utils.isEqual(e.id,s))[0]||{id:s}:utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{id:s},r=0<r?r:0;let D={conversationId:s,conversationType:o,conversationPortrait:h.portrait,conversationTitle:h.name,conversationExts:h.exts,draft:i||"",isTop:!!a,undisturbType:d,latestReadIndex:+I,latestUnreadIndex:+N,latestMessage:{conversationId:s,conversationType:o,conversationPortrait:h.portrait,conversationTitle:h.name,conversationExts:h.exts,content:utils.parse(_),isRead:!!O,isSender:!!u,isUpdated:!!g,isMass:!!S,messageId:l,tid:m,mentionInfo:utils.parse(A),messageIndex:C,name:E,readCount:+(R||0),unreadCount:+(f||0),sentTime:+T,referMsg:{},sender:v},sortTime:+p||0,unreadCount:r||0,mentions:utils.parse(c),unreadTag:M||UNREAD_TAG.READ};return utils.isEmpty(l)&&(D.latestMessage={}),D},formatConversations=({conversations:e,users:t,groups:n})=>{let s=utils.map(e,e=>{let s=formatConversation({conversation:e,users:t,groups:n});return s});return s},createMentions=(e,t,n)=>{let{mentionInfo:s}=t,{senders:o=[],msgs:i=[]}=e;if(utils.isEqual(t.name,MESSAGE_TYPE.RECALL_INFO)){let{content:{messageId:n},sender:e}=t,s=utils.find(i,e=>utils.isEqual(e.messageId,n));-1<s&&i.splice(s,1);// 如果没有消息撤回发送人的消息,移除 senders 中的发送人信息
|
|
88
88
|
let r=-1<utils.find(i,t=>utils.isEqual(t.senderId,e.id));if(!r){let e=utils.find(o,e=>utils.isEqual(t.sender.id,e.id));utils.isEqual(e,-1)||o.splice(e,1)}let a=i.length;return{isMentioned:0<a,senders:o,msgs:i,count:a}}if(utils.isEqual(t.name,MESSAGE_TYPE.CLIENT_REMOVE_MSGS)){let{content:{messages:n},sender:e}=t,s={};utils.forEach(n,({messageId:e})=>{let t=utils.find(i,t=>{let n=utils.isEqual(t.messageId,e);return n&&(s[t.senderId]=t.senderId),n});-1<t&&i.splice(t,1)}),utils.forEach(s,e=>{let t=-1<utils.find(i,t=>utils.isEqual(t.senderId,e));if(!t){let t=utils.find(o,t=>utils.isEqual(e,t.id));utils.isEqual(t,-1)||o.splice(t,1)}});let r=i.length;return{isMentioned:0<r,senders:o,msgs:i,count:r}}if(utils.isEmpty(s))return e;let{members:r,mentionType:a}=s,d=utils.find(r,e=>utils.isEqual(n.id,e.id));if(-1<d||utils.isEqual(a,MENTION_TYPE.ALL)){i.push({senderId:t.sender.id,messageId:t.messageId,sentTime:t.sentTime});let e=utils.find(o,e=>utils.isEqual(t.sender.id,e.id));utils.isEqual(e,-1)&&o.push(t.sender)}let p=i.length;return{isMentioned:0<p,senders:o,msgs:i,count:p}};function isNestInclude(e,t,n){let s=!1;for(var o=0;o<e.length;o++)for(var r=0;r<t.length&&(s=n(e[o],t[r]),!s);r++);return s}var tools={isGroup,formatMsg,formatMsgs,formatConversations,formatConversation,createMentions,isNestInclude};function Conversation$1(e,t){function n(t){let{conversationId:n,conversationType:o,conversationTitle:i,conversationPortrait:r,conversationExts:a,mentionInfo:d,messageId:p}=t,c={conversationId:n,conversationType:o,conversationTitle:i,conversationPortrait:r,conversationExts:a,latestMessage:t,unreadCount:0,updatedTime:0,undisturbType:t.undisturbType},m=s.getPer(t),l=m.mentions||{},E=e.getCurrentUser();if(l=tools.createMentions(l,t,E),t.isSender){let e=s.getPer(t);utils.extend(c,{conversationTitle:e.conversationTitle,conversationPortrait:e.conversationPortrait,conversationExts:e.conversationExts})}return utils.extend(c,{mentions:l}),c}/*
|
|
@@ -118,7 +118,7 @@ delete d[u],utils.extend(t,{sentTime:s,messageId:n,messageIndex:c,sentState:MESS
|
|
|
118
118
|
n(e):s({code:o,msg:i})})}),l=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,e=>{let{messages:t,code:o,msg:i}=e;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o)?void n({messages:t}):s({code:o,msg:i})})}),E=t=>utils.deferred((s,i)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.CLEARMSG);if(!utils.isEmpty(r))return i(r);n.info({tag:LOG_MODULE.MSG_CLEAR,...t});let a={topic:COMMAND_TOPICS.CLEAR_MESSAGE,time:0};utils.extend(a,t),e.sendCommand(SIGNAL_CMD.QUERY,a,({code:n,timestamp:r})=>{if(utils.isEqual(ErrorType.COMMAND_SUCCESS.code,n)){common.updateSyncTime({isSender:!0,sentTime:r,io:e});let n={conversationType:t.conversationType,conversationId:t.conversationId,cleanTime:t.time||0},{senderId:i}=t;utils.isUndefined(i)||utils.extend(n,{senderId:i});let a={name:MESSAGE_TYPE.CLEAR_MSG,content:n};o(a),s()}else{let e=common.getError(n);i(e)}})}),u=t=>utils.deferred((s,i)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.REMOVE_MSGS);if(!utils.isEmpty(r))return i(r);t=utils.isArray(t)?t:[t];let a=utils.quickSort(utils.clone(t),(e,t)=>e.sentTime>t.sentTime),d=a[0]||{sentTime:-10};n.info({tag:LOG_MODULE.MSG_DELETE,time:d.sentTime});let p=e.getCurrentUser(),c={topic:COMMAND_TOPICS.REMOVE_MESSAGE,messages:t,userId:p.id};e.sendCommand(SIGNAL_CMD.QUERY,c,({code:n,timestamp:r})=>{if(utils.isEqual(ErrorType.COMMAND_SUCCESS.code,n)){common.updateSyncTime({isSender:!0,sentTime:r,io:e});let n=utils.map(t,e=>{let{messageId:t,tid:n,conversationType:s,conversationId:o}=e;return{messageId:t,tid:n,conversationType:s,conversationId:o}}),i={name:MESSAGE_TYPE.COMMAND_DELETE_MSGS,content:{conversationType:d.conversationType,conversationId:d.conversationId,messages:n}};o(i),s()}else{let e=common.getError(n);i(e)}})}),g=t=>utils.deferred((s,i)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.RECALLMSG);if(!utils.isEmpty(r))return i(r);let a={topic:COMMAND_TOPICS.RECALL};utils.extend(a,t),n.info({tag:LOG_MODULE.MSG_RECALL,messageId:t.messageId,sentTime:t.sentTime}),e.sendCommand(SIGNAL_CMD.QUERY,a,n=>{let{code:r,timestamp:a}=n;if(utils.isEqual(r,ErrorType.COMMAND_SUCCESS.code)){common.updateSyncTime({isSender:!0,sentTime:a,io:e});let n=utils.clone(t),{messageId:i,sentTime:r,exts:d}=t,p=e.getCurrentUser();return utils.extend(n,{name:MESSAGE_TYPE.RECALL,sender:p,isSender:!0,content:{messageId:i,sentTime:r,exts:d}}),o(n),utils.clone(n),delete n.exts,utils.extend(n,{name:MESSAGE_TYPE.RECALL_INFO}),s(n)}let{msg:d}=common.getError(r);i({code:r,msg:d})})}),T=t=>utils.deferred((n,s)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.READMESSAGE);if(!utils.isEmpty(i))return s(i);t=utils.isArray(t)?t:[t],t=utils.map(t,e=>{let{conversationType:t,conversationId:n,messageId:s,sentTime:o}=e;return{conversationType:t,conversationId:n,messageId:s,sentTime:o}});let r={topic:COMMAND_TOPICS.READ_MESSAGE,messages:t};e.sendCommand(SIGNAL_CMD.QUERY,r,({code:s,timestamp:i})=>{if(utils.isEqual(ErrorType.COMMAND_SUCCESS.code,s)){common.updateSyncTime({isSender:!0,sentTime:i,io:e});let n=t[0],s={name:MESSAGE_TYPE.READ_MSG,conversationType:n.conversationType,conversationId:n.conversationId,content:{msgs:t}};o(s)}n()})}),y=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;let{code:t,msg:o}=e;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)?void n(e):s({code:t,msg:o})})}),_=t=>utils.deferred((s,i)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.UPDATEMESSAGE);if(!utils.isEmpty(r))return i(r);n.info({tag:LOG_MODULE.MSG_UPDATE,messageId:t.messageId});let a={...utils.clone(t),name:MESSAGE_TYPE.MODIFY},d=(e={})=>{utils.extend(a,e),o(a)};// 兼容 PC 端修改非 content 属性,保证多端行为一致性,直接返回,PC 端会做本地消息 update
|
|
119
119
|
if(utils.isUndefined(t.content))return d(),s(a);let p={topic:COMMAND_TOPICS.UPDATE_MESSAGE,...t};e.sendCommand(SIGNAL_CMD.QUERY,p,n=>{let{code:o,msg:r}=n;if(!utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o))return i({code:o,msg:r});let a=e.getCurrentUser();d({sender:a,isSender:!0,isUpdated:!0,content:{messageId:t.messageId,content:t.content}}),s()})}),C=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,e=>{let{code:t,msg:o,isFinished:i,msgs:r}=e;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)?void n({isFinished:i,msgs:r}):s({code:t,msg:o})})}),O=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:e,code:t})=>{e=e||{};let{token:s,domain:o,type:i,url:r}=e;n({token:s,domain:o,type:i,url:r,code:t})})}),S=(t,n,s={})=>{function o(e,t){let{content:n}=t,s={onprogress:({percent:e})=>{d.onprogress({percent:e,message:t})},oncompleted:({url:e})=>{let s=n.file.size/1024;utils.extend(t.content,{url:e,size:s.toFixed(2)}),delete t.content.file,d.oncompleted(t)},onerror:e=>{d.onerror(ErrorType.UPLOADING_FILE_ERROR,e)}};m.exec(n,e,s)}let{uploadType:i,upload:r,fileCompressLimit:a}=e.getConfig(),d={onprogress:()=>{},onerror:()=>{}};utils.extend(d,s);let{fileType:p,scale:c}=t,m=Uploder(r,{type:i}),{name:l,content:E}=n,u=E.file,g=u.name.split("."),T=g[g.length-1];O({type:p,ext:T}).then(e=>{let{type:t}=e;if(utils.isEqual(ErrorType.COMMAND_FAILED.code,e.code))return d.onerror(ErrorType.COMMAND_FAILED);if(!utils.isEqual(t,i))return d.onerror(ErrorType.UPLOAD_PLUGIN_NOTMATCH);let s=utils.extend(e,{file:E.file,scale:c,fileCompressLimit:a});if(utils.isEqual(l,MESSAGE_TYPE.IMAGE)){// 业务层设置缩略图,传入优先,不再执行生成缩略图逻辑
|
|
120
120
|
let{thumbnail:t}=E;if(t)return o(e,n);O({type:p,ext:T}).then(t=>utils.isEqual(ErrorType.COMMAND_FAILED.code,t.code)?d.onerror(ErrorType.COMMAND_FAILED):void common.uploadThumbnail(r,{...s,...t},(t,s,i)=>{let{height:r,width:a}=i;utils.extend(n.content,{thumbnail:s,height:r,width:a,type:E.file.type}),o(e,n)}))}if(utils.isEqual(l,MESSAGE_TYPE.VIDEO)){// 业务层设置封面,传入优先,不再执行生成缩略图逻辑
|
|
121
|
-
let{poster:t}=E;if(t)return o(e,n);O({type:p,ext:"png"}).then(t=>utils.isEqual(ErrorType.COMMAND_FAILED.code,t.code)?d.onerror(ErrorType.COMMAND_FAILED):void common.uploadFrame(r,{...s,...t},(t,s,i)=>{let{height:r,width:a,duration:d}=i;utils.extend(n.content,{poster:s,height:r,width:a,duration:d}),o(e,n)}))}utils.isInclude([MESSAGE_TYPE.FILE,MESSAGE_TYPE.VOICE],l)&&o(e,n)})},f=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.FILE});let o={fileType:FILE_TYPE.FILE};return utils.deferred((i,r)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE,!0),{uploadType:d}=e.getConfig();if(utils.isEqual(d,UPLOAD_TYPE.NONE)&&(a=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(a))return r({error:a});n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.FILE});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING});let{size:l=0}=t.content;l/=1024;let E=utils.clone(t);return E.content={...t.content,size:l},c(E),e.isConnected()?void S(o,t,{onprogress:s.onprogress,oncompleted:e=>{p(e).then(i,r)},onerror:e=>utils.isEqual(e.code,ErrorType.COMMAND_FAILED.code)?r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.COMMAND_FAILED}):void s.onerror(e,t)}):r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.CONNECTION_NOT_READY})})},R=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.IMAGE});let o={fileType:FILE_TYPE.IMAGE,scale:t.scale};return utils.deferred((i,r)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE,!0),{uploadType:d}=e.getConfig();if(utils.isEqual(d,UPLOAD_TYPE.NONE)&&(a=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(a))return r({error:a});n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.IMAGE});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();return utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),e.isConnected()?void S(o,t,{onprogress:s.onprogress,oncompleted:e=>{p(e).then(i,r)},onerror:e=>utils.isEqual(e.code,ErrorType.COMMAND_FAILED.code)?r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.COMMAND_FAILED}):void s.onerror(e,t)}):r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.CONNECTION_NOT_READY})})},I=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.VOICE});let o={fileType:FILE_TYPE.AUDIO};return utils.deferred((i,r)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE,!0),{uploadType:d}=e.getConfig();if(utils.isEqual(d,UPLOAD_TYPE.NONE)&&(a=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(a))return r({error:a});n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.AUDIO});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();return utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),e.isConnected()?void S(o,t,{onprogress:s.onprogress,oncompleted:e=>{p(e).then(i,r)},onerror:e=>utils.isEqual(e.code,ErrorType.COMMAND_FAILED.code)?r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.COMMAND_FAILED}):void s.onerror(e,t)}):r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.CONNECTION_NOT_READY})})},N=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.VIDEO});let o={fileType:FILE_TYPE.VIDEO,scale:t.scale};return utils.deferred((i,r)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE,!0),{uploadType:d}=e.getConfig();if(utils.isEqual(d,UPLOAD_TYPE.NONE)&&(a=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(a))return r({error:a});n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.VIDEO});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();return utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),e.isConnected()?void S(o,t,{onprogress:s.onprogress,oncompleted:e=>{p(e).then(i,r)},onerror:e=>utils.isEqual(e.code,ErrorType.COMMAND_FAILED.code)?r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.COMMAND_FAILED}):void s.onerror(e,t)}):r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.CONNECTION_NOT_READY})})},A=(t,s={})=>utils.deferred((o,i)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.SEND_MERGE_MESSAGE);if(!utils.isEmpty(r))return i({error:r});n.info({tag:LOG_MODULE.MSG_SEND_MERGE});let{conversationType:a,conversationId:d,messages:c,previewList:m,title:l}=t;if(20<c.length)return i({error:ErrorType.TRANSFER_MESSAGE_COUNT_EXCEED});let E={channelType:CONVERATION_TYPE.PRIVATE,targetId:""},u=[];c=utils.map(c,e=>(utils.extend(E,{channelType:e.conversationType,targetId:e.conversationId}),{msgId:e.messageId,msgTime:e.sentTime,msgIndex:e.messageIndex})),utils.forEach(c,({msgId:e})=>{u.push(e)});let g=e.getCurrentUser();utils.extend(E,{userId:g.id,msgs:c});let T={conversationId:d,conversationType:a,name:MESSAGE_TYPE.MERGE,mergeMsg:E,content:{previewList:m,messageIdList:u,title:l}};return p(T,s).then(o,i)}),M=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,e=>{let{code:t,msg:o,isFinished:i,messages:r}=e;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)?void n({isFinished:i,messages:r}):s({code:t,msg:o})})}),v=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})=>{if(!utils.isEqual(ErrorType.COMMAND_SUCCESS.code,e)){let t=common.getError(e);return s(t)}n({message:t})})}),h=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)}),D=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)}),U=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)}),b=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)}),x=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.ADD_MSG_REACTION);if(!utils.isEmpty(o))return s(o);let{reactionId:i}=t;i=escape(i);let{id:r}=e.getCurrentUser(),a={topic:COMMAND_TOPICS.ADD_MSG_REACTION,...t,reactionId:i,userId:r};e.sendCommand(SIGNAL_CMD.QUERY,a,t=>{let{code:o,msg:i,timestamp:r}=t;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o)?void(common.updateSyncTime({isSender:!0,sentTime:r,io:e}),n()):s({code:o,msg:i})})}),G=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.REMOVE_MSG_REACTION);if(!utils.isEmpty(o))return s(o);let{id:i}=e.getCurrentUser(),{reactionId:r}=t;r=escape(r);let a={topic:COMMAND_TOPICS.REMOVE_MSG_REACTION,...t,reactionId:r,userId:i};e.sendCommand(SIGNAL_CMD.QUERY,a,t=>{let{code:o,msg:i,timestamp:r}=t;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o)?void(common.updateSyncTime({isSender:!0,sentTime:r,io:e}),n()):s({code:o,msg:i})})}),k={},q=e=>{let{conversationId:t,conversationType:n}=e;return`${n}_${t}`},L=(t,n)=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.SUBSCRIBE_MESSAGE
|
|
121
|
+
let{poster:t}=E;if(t)return o(e,n);O({type:p,ext:"png"}).then(t=>utils.isEqual(ErrorType.COMMAND_FAILED.code,t.code)?d.onerror(ErrorType.COMMAND_FAILED):void common.uploadFrame(r,{...s,...t},(t,s,i)=>{let{height:r,width:a,duration:d}=i;utils.extend(n.content,{poster:s,height:r,width:a,duration:d}),o(e,n)}))}utils.isInclude([MESSAGE_TYPE.FILE,MESSAGE_TYPE.VOICE],l)&&o(e,n)})},f=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.FILE});let o={fileType:FILE_TYPE.FILE};return utils.deferred((i,r)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE,!0),{uploadType:d}=e.getConfig();if(utils.isEqual(d,UPLOAD_TYPE.NONE)&&(a=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(a))return r({error:a});n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.FILE});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING});let{size:l=0}=t.content;l/=1024;let E=utils.clone(t);return E.content={...t.content,size:l},c(E),e.isConnected()?void S(o,t,{onprogress:s.onprogress,oncompleted:e=>{p(e).then(i,r)},onerror:e=>utils.isEqual(e.code,ErrorType.COMMAND_FAILED.code)?r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.COMMAND_FAILED}):void s.onerror(e,t)}):r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.CONNECTION_NOT_READY})})},R=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.IMAGE});let o={fileType:FILE_TYPE.IMAGE,scale:t.scale};return utils.deferred((i,r)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE,!0),{uploadType:d}=e.getConfig();if(utils.isEqual(d,UPLOAD_TYPE.NONE)&&(a=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(a))return r({error:a});n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.IMAGE});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();return utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),e.isConnected()?void S(o,t,{onprogress:s.onprogress,oncompleted:e=>{p(e).then(i,r)},onerror:e=>utils.isEqual(e.code,ErrorType.COMMAND_FAILED.code)?r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.COMMAND_FAILED}):void s.onerror(e,t)}):r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.CONNECTION_NOT_READY})})},I=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.VOICE});let o={fileType:FILE_TYPE.AUDIO};return utils.deferred((i,r)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE,!0),{uploadType:d}=e.getConfig();if(utils.isEqual(d,UPLOAD_TYPE.NONE)&&(a=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(a))return r({error:a});n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.AUDIO});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();return utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),e.isConnected()?void S(o,t,{onprogress:s.onprogress,oncompleted:e=>{p(e).then(i,r)},onerror:e=>utils.isEqual(e.code,ErrorType.COMMAND_FAILED.code)?r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.COMMAND_FAILED}):void s.onerror(e,t)}):r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.CONNECTION_NOT_READY})})},N=(t,s={})=>{t=utils.extend(t,{name:MESSAGE_TYPE.VIDEO});let o={fileType:FILE_TYPE.VIDEO,scale:t.scale};return utils.deferred((i,r)=>{let a=common.check(e,t,FUNC_PARAM_CHECKER.SEND_FILE_MESSAGE,!0),{uploadType:d}=e.getConfig();if(utils.isEqual(d,UPLOAD_TYPE.NONE)&&(a=ErrorType.UPLOAD_PLUGIN_ERROR),!utils.isEmpty(a))return r({error:a});n.info({tag:LOG_MODULE.MSG_SEND_FILE,type:FILE_TYPE.VIDEO});let c=s.onbefore||utils.noop,m=t.tid||utils.getUUID();return utils.extend(t,{tid:m,sentState:MESSAGE_SENT_STATE.SENDING}),c(t),e.isConnected()?void S(o,t,{onprogress:s.onprogress,oncompleted:e=>{p(e).then(i,r)},onerror:e=>utils.isEqual(e.code,ErrorType.COMMAND_FAILED.code)?r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.COMMAND_FAILED}):void s.onerror(e,t)}):r({tid:m,sentState:MESSAGE_SENT_STATE.FAILED,error:ErrorType.CONNECTION_NOT_READY})})},A=(t,s={})=>utils.deferred((o,i)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.SEND_MERGE_MESSAGE);if(!utils.isEmpty(r))return i({error:r});n.info({tag:LOG_MODULE.MSG_SEND_MERGE});let{conversationType:a,conversationId:d,messages:c,previewList:m,title:l}=t;if(20<c.length)return i({error:ErrorType.TRANSFER_MESSAGE_COUNT_EXCEED});let E={channelType:CONVERATION_TYPE.PRIVATE,targetId:""},u=[];c=utils.map(c,e=>(utils.extend(E,{channelType:e.conversationType,targetId:e.conversationId}),{msgId:e.messageId,msgTime:e.sentTime,msgIndex:e.messageIndex})),utils.forEach(c,({msgId:e})=>{u.push(e)});let g=e.getCurrentUser();utils.extend(E,{userId:g.id,msgs:c});let T={conversationId:d,conversationType:a,name:MESSAGE_TYPE.MERGE,mergeMsg:E,content:{previewList:m,messageIdList:u,title:l}};return p(T,s).then(o,i)}),M=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,e=>{let{code:t,msg:o,isFinished:i,messages:r}=e;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)?void n({isFinished:i,messages:r}):s({code:t,msg:o})})}),v=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})=>{if(!utils.isEqual(ErrorType.COMMAND_SUCCESS.code,e)){let t=common.getError(e);return s(t)}n({message:t})})}),h=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)}),D=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)}),U=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)}),b=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)}),x=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.ADD_MSG_REACTION);if(!utils.isEmpty(o))return s(o);let{reactionId:i}=t;i=escape(i);let{id:r}=e.getCurrentUser(),a={topic:COMMAND_TOPICS.ADD_MSG_REACTION,...t,reactionId:i,userId:r};e.sendCommand(SIGNAL_CMD.QUERY,a,t=>{let{code:o,msg:i,timestamp:r}=t;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o)?void(common.updateSyncTime({isSender:!0,sentTime:r,io:e}),n()):s({code:o,msg:i})})}),G=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.REMOVE_MSG_REACTION);if(!utils.isEmpty(o))return s(o);let{id:i}=e.getCurrentUser(),{reactionId:r}=t;r=escape(r);let a={topic:COMMAND_TOPICS.REMOVE_MSG_REACTION,...t,reactionId:r,userId:i};e.sendCommand(SIGNAL_CMD.QUERY,a,t=>{let{code:o,msg:i,timestamp:r}=t;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o)?void(common.updateSyncTime({isSender:!0,sentTime:r,io:e}),n()):s({code:o,msg:i})})}),k={},q=e=>{let{conversationId:t,conversationType:n}=e;return`${n}_${t}`},L=(t,n)=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.SUBSCRIBE_MESSAGE);if(!utils.isEmpty(i))return o(i);let r=q(t),a=k[r];if(a)return s();a={timer:0,time:0},k[r]=a;let d={ms:3000};utils.isObject(n)&&utils.isNumber(n.ms)||(n=d);let p=t=>{m(t).then(t=>{let{messages:n}=t;n=n||[];let s=n[n.length-1];s&&(a.time=s.sentTime),utils.forEach(n,t=>{e.emit(SIGNAL_NAME.CMD_RECEIVED,t)})}).catch(utils.noop)},c={...t,time:0};p(c),a.timer=setInterval(()=>{let e={...t,time:a.time,count:200,order:MESSAGE_ORDER.FORWARD};p(e)},n.ms)}),V=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SUBSCRIBE_MESSAGE,!0);if(!utils.isEmpty(o))return s(o);let i=q(t),r=k[i];r&&(clearInterval(r.timer),delete k[i]),n()});/*
|
|
122
122
|
缓存发送失败的 clientMsgId,防止未收到 ACK,重发导致接收端消息重复
|
|
123
123
|
sendMsgMap[tid] = uuid;
|
|
124
124
|
*/ /*
|