jugglechat-websdk 1.8.4 → 1.8.5

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 +14 -11
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * JuggleIM.js v1.8.4
2
+ * JuggleIM.js v1.8.5
3
3
  * (c) 2022-2025 JuggleIM
4
4
  * Released under the MIT License.
5
5
  */const noop=()=>{},isObject=e=>"[object Object]"===Object.prototype.toString.call(e),isArray=e=>"[object Array]"===Object.prototype.toString.call(e),isFunction=e=>"[object Function]"===Object.prototype.toString.call(e),isString=e=>"[object String]"===Object.prototype.toString.call(e),isBoolean=e=>"[object Boolean]"===Object.prototype.toString.call(e),isUndefined=e=>"[object Undefined]"===Object.prototype.toString.call(e),isNull=e=>"[object Null]"===Object.prototype.toString.call(e),isNumber=e=>"[object Number]"===Object.prototype.toString.call(e),_isNaN=e=>isNaN(+e),stringify=e=>JSON.stringify(e),parse=t=>{let n={};try{n=JSON.parse(t)}catch(s){n=t}return n},forEach=(e,t)=>{t=t||noop;isObject(e)&&(()=>{for(var n in e)t(e[n],n,e)})(),isArray(e)&&(()=>{for(var n=0,s=e.length;n<s;n++)t(e[n],n,e)})()},isEmpty=e=>{let t=!0;return isObject(e)&&forEach(e,()=>{t=!1}),(isString(e)||isArray(e))&&(t=0===e.length),isNumber(e)&&(t=-1===e),t},rename=(e,t)=>{var n=isObject(e);n&&(e=[e]),e=parse(stringify(e));var s=function(e,n,s){delete s[n],n=t[n],s[n]=e};return forEach(e,e=>{forEach(e,(e,n,o)=>{var i=(n in t);(i?s:noop)(e,n,o)})}),isObject?e[0]:e},extend=(e,t)=>(t=isArray(t)?t:[t],forEach(t,t=>{for(let n in t){let s=t[n];isUndefined(s)||(e[n]=s)}}),e),Defer=Promise,deferred=e=>new Defer(e),templateFormat=(e,t,n)=>{isArray(t)||(t=[t]);let s=[],o=t=>e.replace(n||/\\?\{([^}]+)\}/g,(e,n)=>"\\"===e.charAt(0)?e.slice(1):void 0===t[n]?"{"+n+"}":t[n]);for(let r=0,i=t.length;r<i;r++)s.push(o(t[r]));return s.join("")},isContain=(e,t)=>-1<e.indexOf(t),isEqual=(e,t)=>e===t,Cache$1=e=>{isObject(e)||(e={});let t=(t,n)=>{e[t]=n},n=t=>e[t],s=t=>{delete e[t]},o=()=>{let t=[];for(let n in e)t.push(n);return t},i=()=>{e={}};return{set:t,get:n,remove:s,getKeys:o,clear:i}},map=(e,t)=>e.map(t),filter=(e,t)=>e.filter(t),uniq=(e,t)=>{let n=[],s={};return e.forEach(e=>{let n=t(e);s[n.key]=n.value}),forEach(s,e=>{n.push(e)}),n},some=(e,t)=>e.some(t),toJSON=e=>JSON.stringify(e),toArray=e=>{let t=[];return forEach(e,(e,n)=>{t.push([n,e])}),t},isInclude=(e,t)=>-1<e.indexOf(t),clone$1=e=>JSON.parse(JSON.stringify(e));// 暂时支持 String
@@ -88,16 +88,19 @@ if(utils.isEqual(r,COMMAND_TOPICS.NTF)){let e=$root.lookup("codec.Notify"),t=e.d
88
88
  utils.isEmpty(m)||Storage.setPrefix(`${d}_${m}`);let l=common.getNaviStorageKey(d,m),E=Storage.get(l);return utils.isEmpty(E)?void utils.forEach(e,t=>{let m=t.replace(/http:\/\/|https:\/\/|file:\/\//g,""),{http:E}=utils.getProtocol(t);m=`${E}//${m}/navigator/general`;let u={headers:{"x-appkey":d,"x-token":p}},g=jrequest.requestNormal(m,u,{success:function(e,t){if(!r){let{responseURL:i}=t,a=i.replace(/(\/navigator\/general)/g,"");r=!0;let{code:p,data:m={}}=e,{servers:E,user_id:u}=m,g={servers:E,userId:u,code:p,url:a};// 默认规则:导航和 CMP 的协议必须一致
89
89
  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
90
90
  if(n)return;n=!0,t=utils.isEqual(e.length,0);let i=e.shift(),r={item:i},a=()=>{n=!1,o(s)};t?n=!1:s(r,a)};return{consume:o,produce:s}}function MessageSyncer(e,t,n,{logger:s}){let o=Consumer(),i=i=>{function r(s,o){let{msg:i}=s,r=common.updateSyncTime({...i,io:n});if(r||utils.isEqual(i.name,MESSAGE_TYPE.STREAM_TEXT)){let{msgIndex:n,ackIndex:s}=i,o={msgIndex:n,ackIndex:s};e(SIGNAL_CMD.PUBLISH_ACK,o),t.emit(SIGNAL_NAME.CMD_RECEIVED,i)}o()}function a(i,r){let{user:a,msg:d,name:p,$message:c}=i,m=Storage.get(STORAGE.SYNC_RECEIVED_MSG_TIME).time||1700927161470,l=Storage.get(STORAGE.SYNC_SENT_MSG_TIME).time||1700927161470;// 如果本地记录时间戳大于 ntf 中的接收时间,认为消息已被当前端接收过,不再执行拉取动作
91
- if(m>=d.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncReceiveTime:m,msg:d}),r();let E={userId:a.id,syncTime:m,containsSendBox:!0,sendBoxSyncTime:l,topic:COMMAND_TOPICS.SYNC_MESSAGES};e(SIGNAL_CMD.QUERY,E,({isFinished:e,messages:a,code:p})=>{if(a=a||[],s.info({tag:LOG_MODULE.MSG_SYNC,data:E,msg:d,code:p,count:a.length}),!utils.isEqual(p,ErrorType.COMMAND_SUCCESS.code))return r();let m=[];utils.forEach(a,(e,t)=>{let{flags:n,sentTime:s,isSender:o}=e,i=common.formatter.toMsg(n);i.isStorage&&m.push(e)}),c.insertBatchMsgs({msgs:utils.clone(m)}).then(()=>{utils.forEach(a,(s,o)=>{let{sentTime:i,isSender:r}=s,d=common.updateSyncTime({sentTime:i,isSender:r,io:n});if(d){let n=e&&utils.isEqual(a.length-1,o);t.emit(SIGNAL_NAME.CMD_RECEIVED,[s,n])}});let s=!e;s&&o.produce(i,s),r()})})}function d(n,i){let{user:r,name:a,time:d,$conversation:p}=n,c=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;if(c>d)return s.info({tag:LOG_MODULE.CONV_SYNC,syncTime:c,time:d}),i();let m={userId:r.id,syncTime:c,topic:COMMAND_TOPICS.SYNC_CONVERSATIONS,count:200};e(SIGNAL_CMD.QUERY,m,e=>{let{isFinished:r,conversations:a,code:d}=e;if(s.info({tag:LOG_MODULE.CONV_SYNC,data:m,code:d,count:a.length}),!utils.isEqual(d,ErrorType.COMMAND_SUCCESS.code))return t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i();let l=a.length,E=a[l-1]||{syncTime:0},{syncTime:u}=E;u>c&&(Storage.set(STORAGE.SYNC_CONVERSATION_TIME,{time:u}),n=utils.extend(n,{time:u})),a=utils.clone(a),p._batchInsertConversations({conversations:a,syncTime:u}).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATIONS_PROGRESS,e);let s=!r;s?o.produce(n,s):t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i()})})}o.produce(i),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.CMD_RECEIVED)&&r(e,t),utils.isEqual(n,SIGNAL_NAME.S_SYNC_CONVERSATION_NTF)&&d(e,t),utils.isEqual(n,SIGNAL_NAME.S_NTF)&&a(e,t)})};return{exec:i}}let chatroomCacher=Cache();var chatroomCacher$1={set:(e,t)=>{let n=chatroomCacher.get(e),{msgs:s=[]}=t;200<=s.length&&(s.shift(0),t=utils.extend(t,{msgs:s})),n=utils.extend(n,t),chatroomCacher.set(e,n)},get:e=>{let t=chatroomCacher.get(e);return t},remove:e=>{chatroomCacher.remove(e)},getAll:()=>chatroomCacher.getAll()};function ChatroomSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;s.info({tag:LOG_MODULE.MSG_SYNC,...e,isJoined:i}),i?(utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM)&&a(e,t),utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_DESTORY)&&r(e,t)):t()}function r(e,n){let{msg:s}=e,o=s.targetId;t.emit(SIGNAL_NAME.CMD_CHATROOM_DESTROY,{id:o}),n()}function a(n,o){let{msg:i}=n,r=i.targetId,a=d(r);if(a>=i.receiveTime&&0<i.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),o();if(i.isNotSync)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),p(i.targetId,i.receiveTime),o();let c=i.count||50,m={syncTime:a,chatroomId:r,count:c,topic:COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES};e(SIGNAL_CMD.QUERY,m,({messages:e,code:n})=>{if(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.8.4";var WebWS=WebSocket;function UniWS(e){let t={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},n={readyState:t.CONNECTING,onopen:()=>{},onclose:()=>{},onerror:()=>{},onmessage:()=>{}},s=uni.connectSocket({url:e,complete:()=>{}});return s.onOpen(()=>{n.readyState=t.OPEN,n.onopen()}),s.onClose(()=>{n.readyState=t.CLOSED,n.onclose()}),s.onError(()=>{n.readyState=t.CLOSED,n.onerror()}),s.onMessage(e=>{n.onmessage(e)}),n.send=e=>{s.send({data:e})},n.close=()=>{s.close()},n}let JWebSocket=WebWS;common.isUni()&&(JWebSocket=UniWS);var JWebSocket$1=JWebSocket;function NetworkWatcher(e){let t=()=>{let t=e.ononline||utils.noop;t()},n=()=>{"object"==typeof window&&window.addEventListener&&(window.removeEventListener("online",t),window.addEventListener("online",t))};return{watch:n}}/*
91
+ if(m>=d.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncReceiveTime:m,msg:d}),r();let E={userId:a.id,syncTime:m,containsSendBox:!0,sendBoxSyncTime:l,topic:COMMAND_TOPICS.SYNC_MESSAGES};e(SIGNAL_CMD.QUERY,E,({isFinished:e,messages:a,code:p})=>{if(a=a||[],s.info({tag:LOG_MODULE.MSG_SYNC,data:E,msg:d,code:p,count:a.length}),!utils.isEqual(p,ErrorType.COMMAND_SUCCESS.code))return r();let m=[];utils.forEach(a,(e,t)=>{let{flags:n,sentTime:s,isSender:o}=e,i=common.formatter.toMsg(n);i.isStorage&&m.push(e)}),c.insertBatchMsgs({msgs:utils.clone(m)}).then(()=>{utils.forEach(a,(s,o)=>{let{sentTime:i,isSender:r}=s,d=common.updateSyncTime({sentTime:i,isSender:r,io:n});if(d){let n=e&&utils.isEqual(a.length-1,o);t.emit(SIGNAL_NAME.CMD_RECEIVED,[s,n])}});let s=!e;s&&o.produce(i,s),r()})})}function d(n,i){let{user:r,name:a,time:d,$conversation:p}=n,c=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;if(c>d)return s.info({tag:LOG_MODULE.CONV_SYNC,syncTime:c,time:d}),i();let m={userId:r.id,syncTime:c,topic:COMMAND_TOPICS.SYNC_CONVERSATIONS,count:200};e(SIGNAL_CMD.QUERY,m,e=>{let{isFinished:r,conversations:a,code:d}=e;if(s.info({tag:LOG_MODULE.CONV_SYNC,data:m,code:d,count:a.length}),!utils.isEqual(d,ErrorType.COMMAND_SUCCESS.code))return t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i();let l=a.length,E=a[l-1]||{syncTime:0},{syncTime:u}=E;u>c&&(Storage.set(STORAGE.SYNC_CONVERSATION_TIME,{time:u}),n=utils.extend(n,{time:u})),a=utils.clone(a),p._batchInsertConversations({conversations:a,syncTime:u}).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATIONS_PROGRESS,e);let s=!r;s?o.produce(n,s):t.emit(SIGNAL_NAME.CMD_SYNC_CONVERSATION_FINISHED,{}),i()})})}o.produce(i),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.CMD_RECEIVED)&&r(e,t),utils.isEqual(n,SIGNAL_NAME.S_SYNC_CONVERSATION_NTF)&&d(e,t),utils.isEqual(n,SIGNAL_NAME.S_NTF)&&a(e,t)})};return{exec:i}}let chatroomCacher=Cache();var chatroomCacher$1={set:(e,t)=>{let n=chatroomCacher.get(e),{msgs:s=[]}=t;200<=s.length&&(s.shift(0),t=utils.extend(t,{msgs:s})),n=utils.extend(n,t),chatroomCacher.set(e,n)},get:e=>{let t=chatroomCacher.get(e);return t},remove:e=>{chatroomCacher.remove(e)},getAll:()=>chatroomCacher.getAll()};function ChatroomSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;s.info({tag:LOG_MODULE.MSG_SYNC,...e,isJoined:i}),i?(utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM)&&a(e,t),utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_DESTORY)&&r(e,t)):t()}function r(e,n){let{msg:s}=e,o=s.targetId;t.emit(SIGNAL_NAME.CMD_CHATROOM_DESTROY,{id:o}),n()}function a(n,o){let{msg:i}=n,r=i.targetId,a=d(r);if(a>=i.receiveTime&&0<i.receiveTime)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),o();if(i.isNotSync)return s.info({tag:LOG_MODULE.MSG_SYNC,syncTime:a,msg:i}),p(i.targetId,i.receiveTime),o();let c=i.count||50,m={syncTime:a,chatroomId:r,count:c,topic:COMMAND_TOPICS.SYNC_CHATROOM_MESSAGES};e(SIGNAL_CMD.QUERY,m,({messages:e,code:n})=>{if(s.info({tag:LOG_MODULE.MSG_SYNC,data:m,msg:i,code:n,count:e.length}),!utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code))return o();let{msgs:a=[]}=chatroomCacher$1.get(r);utils.forEach(e,e=>{p(e.conversationId,e.sentTime);let{messageId:n}=e,s=utils.isInclude(a,n);s||(a.push(n),t.emit(SIGNAL_NAME.CMD_RECEIVED,[e]))}),chatroomCacher$1.set(r,{msgs:a}),o()})}function d(e){let t=chatroomCacher$1.get(e);return t.syncMsgTime||0}function p(e,t){let n=d(e);t>n&&chatroomCacher$1.set(e,{syncMsgTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function ChatroomAttSyncer(e,t,n,{logger:s}){let o=Consumer(),i=n=>{function i(e,t){s.info({tag:LOG_MODULE.MSG_SYNC,...e});let{msg:n}=e,o=chatroomCacher$1.get(n.targetId),{isJoined:i}=o;utils.isEqual(n.type,NOTIFY_TYPE.CHATROOM_ATTR)&&i&&r(e,t)}function r(n,o){let{msg:i}=n,r=i.targetId,p=a(r);if(p>=i.receiveTime&&0<i.receiveTime)return o();let c={syncTime:p,chatroomId:r,targetId:r,topic:COMMAND_TOPICS.SYNC_CHATROOM_ATTRS};e(SIGNAL_CMD.QUERY,c,e=>{let{code:n,attrs:r,chatroomId:a}=e;return r=r||[],s.info({tag:LOG_MODULE.MSG_SYNC,data:c,msg:i,code:n,count:r.length}),utils.isEqual(n,ErrorType.COMMAND_SUCCESS.code)?void(utils.forEach(r,e=>{d(a,e.updateTime)}),t.emit(SIGNAL_NAME.CMD_CHATROOM_ATTR_RECEIVED,{attrs:r,chatroomId:a}),o()):o()})}function a(e){let t=chatroomCacher$1.get(e);return t.syncAttTime||0}function d(e,t){let n=a(e);t>n&&chatroomCacher$1.set(e,{syncAttTime:t})}o.produce(n),o.consume(({item:e},t)=>{let{name:n}=e;utils.isEqual(n,SIGNAL_NAME.S_NTF)&&i(e,t)})};return{exec:i}}function TagSyncer(e,t,n,{logger:s}){let o=({$conversation:e})=>{let{id:s}=n.getCurrentUser(),o={topic:COMMAND_TOPICS.CONVERSATION_TAG_QUERY,userId:s};n.sendCommand(SIGNAL_CMD.QUERY,o,n=>{let{code:s,tags:o}=n;utils.isEqual(ErrorType.COMMAND_SUCCESS.code,s)&&(utils.map(o,e=>{let t=CONVERSATION_TAG[e.id]||{};return utils.extend(e,t),e}),e._batchInsertTags(o).then(e=>{t.emit(SIGNAL_NAME.CMD_SYNC_TAG_FINISHED,e)}))})};return{exec:o}}function Timer(e={}){let t={timeout:60000};utils.extend(t,e);let{timeout:n}=t,s=0,o=utils.noop,i=e=>{o=e,s=setInterval(()=>{o()},n)},r=()=>{clearInterval(s)},a=()=>{r(),i(o)};return{resume:i,pause:r,reset:a}}function Counter(e={}){let t={timeout: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.8.5";var WebWS=WebSocket;function UniWS(e){let t={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},n={readyState:t.CONNECTING,onopen:()=>{},onclose:()=>{},onerror:()=>{},onmessage:()=>{}},s=uni.connectSocket({url:e,complete:()=>{}});return s.onOpen(()=>{n.readyState=t.OPEN,n.onopen()}),s.onClose(()=>{n.readyState=t.CLOSED,n.onclose()}),s.onError(()=>{n.readyState=t.CLOSED,n.onerror()}),s.onMessage(e=>{n.onmessage(e)}),n.send=e=>{s.send({data:e})},n.close=()=>{s.close()},n}let JWebSocket=WebWS;common.isUni()&&(JWebSocket=UniWS);var JWebSocket$1=JWebSocket;function NetworkWatcher(e){let t=()=>{let t=e.ononline||utils.noop;t()},n=()=>{"object"==typeof window&&window.addEventListener&&(window.removeEventListener("online",t),window.addEventListener("online",t))};return{watch:n}}/*
92
92
  fileCompressLimit: 图片缩略图压缩限制,小于设置数值将不执行压缩,单位 KB
93
93
  config = { appkey, nav, isSync, upload, uploadType, fileCompressLimit }
94
- */function IO(e){function t(){let e=s({ignores:[]});return N(),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};V(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),S=Timer({timeout:HEART_TIMEOUT}),O=Timer({timeout:SYNC_MESSAGE_TIME}),f=!0,I=CONNECT_STATE.DISCONNECTED,R=[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],A=e=>{I=e.state,a.emit(SIGNAL_NAME.CONN_CHANGED,{...e})},N=()=>{S.pause(),O.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(R,t)&&!utils.isEqual(I,CONNECT_STATE.DISCONNECTED)){let e=s({ignores:[]});return N(),k(e,({next:e})=>{e=e||utils.noop,e()})}if(!utils.isEqual(I,CONNECT_STATE.DISCONNECTED)){let t=s();A({state:CONNECT_STATE.DISCONNECTED,...e,user:t}),N()}},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 地址
95
- 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.replace(/http:\/\/|https:\/\/|file:\/\/|wss:\/\/|ws:\/\//g,"");let{ws:a}=utils.getProtocol(),p=`${a}//${s}/im`;u=new JWebSocket$1(p),c.info({tag:LOG_MODULE.WS_CONNECT}),u.onopen=function(){let t=PLATFORM.WEB;common.isDesktop()&&(t=PLATFORM.DESKTOP);let s=common.getClientSession();V(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}){// 需要修改在适配层处理
96
- if(common.isUni())Y(e);else{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 A({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),A({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),A({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(),S.pause(),O.pause(),q.length=0},P=()=>{v=!0,I=CONNECT_STATE.DISCONNECTED,L()},V=(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(V,a,g,{logger:c}),H=ChatroomSyncer(V,a,g,{logger:c}),B=ChatroomAttSyncer(V,a,g,{logger:c}),j=TagSyncer(V,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 对应
97
- if(E&&(E.clear(),q.length=0),utils.isEqual(i,SIGNAL_NAME.S_CHATROOM_USER_NTF)){let{chatroomId:e,time:t,type:n,userId:s}=o;a.emit(SIGNAL_NAME.CMD_CHATROOM_EVENT,{chatroomId:e,time:t,type:n,userId:s})}if(utils.isEqual(i,SIGNAL_NAME.S_STREAM_EVENT)){let{conversationType:e,conversationId:t,messageId:n,streams:s}=o,i=[],r=[];if(utils.forEach(s,e=>{let{event:t}=e;utils.isEqual(t,STREAM_EVENT.MESSAGE)&&i.push(e),utils.isEqual(t,STREAM_EVENT.FINISHED)&&r.push(e)}),!utils.isEqual(i.length,0)){let s={conversationType:e,conversationId:t,messageId:n,streams:i};a.emit(SIGNAL_NAME.CMD_STREAM_APPENDED,s)}utils.isEqual(r.length,0)||utils.forEach(r,s=>{let o={conversationType:e,conversationId:t,messageId:n};a.emit(SIGNAL_NAME.CMD_STREAM_COMPLETED,o)})}if(utils.isEqual(i,SIGNAL_NAME.CMD_RECEIVED)&&(F.exec({msg:o,name:i,$message:e.$message,user:{id:D.id}}),O.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))&&H.exec(n),utils.isEqual(t,NOTIFY_TYPE.CHATROOM_ATTR)&&B.exec(n),O.reset()}if(utils.isEqual(s,SIGNAL_CMD.PUBLISH_ACK)){utils.extend(l,o);let{conversationType:e}=l;// 单群聊和聊天室通知和拉取消息时间戳分开计算,只有发送单群聊消息更新发件箱
98
- 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);// 同步会话和同步消息顺序不能调整,保证先同步会话再同步消息,规避会话列表最后一条消息不是最新的
99
- if(U({name:o,portrait:r,exts:a,updatedTime:s.updatedTime}),t({user:D,error:m,next:()=>{A({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(),j.exec({$conversation:e.$conversation})},s=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;// PC 中先连接后打开数据库,优先将本地数据库中的同步时间更新至 LocalStorage 中,避免换 Token 不换用户 Id 重复同步会话
100
- utils.isEqual(s,0)?e.$socket.openDB({appkey:d,userId:i,token:D.token}).then(()=>{t()}):t()}else n();S.resume(()=>{V(SIGNAL_CMD.PING,{}),c.info({tag:LOG_MODULE.HB_START})}),O.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),A({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)&&a.emit(SIGNAL_NAME.CMD_RTC_INVITE_EVENT,o),utils.isEqual(i,SIGNAL_NAME.S_RTC_ROOM_EVENT)){let{roomEventType:e,room:t,members:n,reason:s}=o;a.emit(SIGNAL_NAME.CMD_RTC_ROOM_EVENT,{roomEventType:e,room:t,members:n,reason:s})}y.remove(p)},Q=()=>utils.isEqual(I,CONNECT_STATE.CONNECTED),w=()=>utils.isEqual(I,CONNECT_STATE.DISCONNECTED);return utils.extend(g,{getConfig:o,setConfig:i,connect:x,disconnect:P,sendCommand:V,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)&&H.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:m="{}",senderId:s,conversationType:o,conversationId:i,mentionInfo:l="{}",isRead:r,isStream:a,streams:d,isSender:p,isUpdated:c,referMsg:E="{}",mergeMsg:u="{}",reactions:g="{}",attribute:T=""}=e;m=utils.parse(m),l=utils.parse(l);let y=utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{},_={};return _=isGroup(o)?utils.filter(n,e=>utils.isEqual(e.id,i))[0]||{}:utils.filter(t,e=>utils.isEqual(e.id,i))[0]||{},d||(d="[]"),d=utils.parse(d),e=utils.extend(e,{mergeMsg:utils.parse(u),referMsg:utils.parse(E),reactions:utils.parse(g),conversationTitle:_.name,conversationPortrait:_.portrait,conversationExts:_.exts,content:m,sender:y,mentionInfo:l,streams:d,isStream:!!a,sentTime:+e.sentTime,isRead:!!r,isSender:!!p,isUpdated:!!c,attribute:T}),e},formatMsgs=({messages:e,senders:t,groups:n})=>{let s=utils.map(e,e=>{let s=formatMsg({message:e,senders:t,groups:n});return s});return s},formatConversation=({conversation:e,users:t,groups:n})=>{if(utils.isEmpty(e))return e;let{id:s,type:o,draft:i,unreadCount:r,isTop:a,undisturbType:d,sortTime:p,mentions:c,latestMessageTid:m,latestMessageId:l,latestMessageName:E,latestMessageIsSender:u,latestMessageIsUpdated:g,latestMessageSentTime:T,latestMessageSenderId:y,latestMessageContent:_,latestMessageMessageIndex:C,latestMessageIsRead:S,latestMessageIsMass:O,latestUnreadCount:f,latestReadCount:I,latestReadIndex:R,latestUnreadIndex:A,latestMentionInfo:N,unreadTag:M}=e;c=c||"{}";let v=utils.filter(t,e=>utils.isEqual(e.id,y))[0]||{id:y},h={};h=isGroup(o)?utils.filter(n,e=>utils.isEqual(e.id,s))[0]||{id:s}:utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{id:s},r=0<r?r:0;let D={conversationId:s,conversationType:o,conversationPortrait:h.portrait,conversationTitle:h.name,conversationExts:h.exts,draft:i||"",isTop:!!a,undisturbType:d,latestReadIndex:+R,latestUnreadIndex:+A,latestMessage:{conversationId:s,conversationType:o,conversationPortrait:h.portrait,conversationTitle:h.name,conversationExts:h.exts,content:utils.parse(_),isRead:!!S,isSender:!!u,isUpdated:!!g,isMass:!!O,messageId:l,tid:m,mentionInfo:utils.parse(N),messageIndex:C,name:E,readCount:+(I||0),unreadCount:+(f||0),sentTime:+T,referMsg:{},sender:v},sortTime:+p||0,unreadCount:r||0,mentions:utils.parse(c),unreadTag:M||UNREAD_TAG.READ};return utils.isEmpty(l)&&(D.latestMessage={}),D},formatConversations=({conversations:e,users:t,groups:n})=>{let s=utils.map(e,e=>{let s=formatConversation({conversation:e,users:t,groups:n});return s});return s},createMentions=(e,t,n)=>{let{mentionInfo:s}=t,{senders:o=[],msgs:i=[]}=e;if(utils.isEqual(t.name,MESSAGE_TYPE.RECALL_INFO)){let{content:{messageId:n},sender:e}=t,s=utils.find(i,e=>utils.isEqual(e.messageId,n));-1<s&&i.splice(s,1);// 如果没有消息撤回发送人的消息,移除 senders 中的发送人信息
94
+ */function IO(e){function t(){let e=s({ignores:[]}),t=utils.find(u,e=>e===g),n=u[t]||{};return P(),n.onmessage=utils.noop,n.onclose=utils.noop,n.onerror=utils.noop,_.remove(CONNECT_TOOL.RECONNECT_COUNT),_.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),q(e,({next:e})=>{e=e||utils.noop,e()})}function n(){l&&H.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:U.id}})}function s(e={}){let{ignores:t=["token"]}=e,n=utils.clone(U);return utils.forEach(t,e=>{delete n[e]}),n}function o(){return e}function i(t){utils.extend(e,t)}function r(e,t){let n={topic:COMMAND_TOPICS.GET_USER_INFO,userId:e.id};F(SIGNAL_CMD.QUERY,n,e=>{t(e)})}let a=Emitter(),{appkey:d,navList:p,serverList:m=[],isSync:l=!0,reconnectCount:E=100,logger:c}=e;utils.isArray(p)||(p=["https://nav.fake.com"]);/*
95
+ pool = {
96
+ }
97
+ */let u=[],g={},T={},y=utils.noop,_=Cache(),C=Decoder(_,T),S=Encoder(_),O=Timer({timeout:HEART_TIMEOUT}),f=Timer({timeout:SYNC_MESSAGE_TIME}),I=!0,R=CONNECT_STATE.DISCONNECTED,A=[ErrorType.CONNECT_APPKEY_IS_REQUIRE.code,ErrorType.CONNECT_TOKEN_NOT_EXISTS.code,ErrorType.CONNECT_APPKEY_NOT_EXISTS.code,ErrorType.CONNECT_TOKEN_ILLEGAL.code,ErrorType.CONNECT_TOKEN_UNAUTHORIZED.code,ErrorType.CONNECT_TOKEN_EXPIRE.code,ErrorType.CONNECT_APP_BLOCKED.code,ErrorType.CONNECT_USER_BLOCKED.code,ErrorType.CONNECT_USER_KICKED.code,ErrorType.CONNECT_USER_LOGOUT.code],N=e=>{R=e.state,a.emit(SIGNAL_NAME.CONN_CHANGED,{...e})},M=()=>{O.pause(),f.pause()},v=NetworkWatcher({ononline:()=>{t()}});v.watch();let h=!1,D=(e={})=>{let{code:t}=e,n=_.getAll();if(utils.forEach(n,(e,t)=>{if(!utils.isNaN(t)){let{callback:n}=e;n=n||utils.noop,n(ErrorType.COMMAND_FAILED),_.remove(t)}}),!h&&!utils.isInclude(A,t)&&!utils.isEqual(R,CONNECT_STATE.DISCONNECTED)){let e=s({ignores:[]});return M(),q(e,({next:e})=>{e=e||utils.noop,e()})}if(!utils.isEqual(R,CONNECT_STATE.DISCONNECTED)){let t=s();N({state:CONNECT_STATE.DISCONNECTED,...e,user:t}),M()}},U={},b=e=>{utils.extend(U,e)},x=e=>{let t=common.getNaviStorageKey(d,e);Storage.remove(t)},G=({token:e,deviceId:n,_isReconnect:s=!1},o)=>{function i({servers:s,userId:i}){b({id:i,token:e,deviceId:n}),_.set(SIGNAL_NAME.S_CONNECT_ACK,o),Network.detect(s,(s,r)=>{// 如果嗅探失败,返回连接断开,同时清理已缓存的 CMP 地址
98
+ if(r)return y(e=>{e=utils.isObject(e)?e:{};let{serverUrls:n}=e;n=n||[],0<n.length&&(m=n.concat(n),t())}),x(i),q({token:e,userId:i,deviceId:n},o);s=s.replace(/http:\/\/|https:\/\/|file:\/\/|wss:\/\/|ws:\/\//g,"");let{ws:a}=utils.getProtocol(),p=`${a}//${s}/im`;g=new JWebSocket$1(p),u.push(g),c.info({tag:LOG_MODULE.WS_CONNECT}),g.onopen=function(){let t=PLATFORM.WEB;common.isDesktop()&&(t=PLATFORM.DESKTOP);let s=common.getClientSession();F(SIGNAL_CMD.CONNECT,{appkey:d,token:e,deviceId:n,platform:t,clientSession:s,sdkVerion:VERSION}),u=utils.filter(u,e=>3!=e.readyState)},g.onclose=t=>{D({type:DISCONNECT_TYPE.CLOSE})},g.onerror=()=>{D({type:DISCONNECT_TYPE.ERROR})},g.onmessage=function({data:e}){// 需要修改在适配层处理
99
+ if(common.isUni())Q(e);else{let t=new FileReader;t.onload=function(){Q(this.result)},t.readAsArrayBuffer(e)}}})}_.set(STORAGE.CRYPTO_RANDOM,utils.getRandoms(8));let r=s?CONNECT_STATE.RECONNECTING:CONNECT_STATE.CONNECTING;return N({state:r}),utils.isEmpty(m)?Network.getNavis(p,{appkey:d,token:e,logger:c},e=>{let{code:t,servers:n,userId:s}=e;if(!utils.isEqual(t,ErrorType.COMMAND_SUCCESS.code)){let e=common.getError(t);return x(s),t||(e=ErrorType.IM_SERVER_CONNECT_ERROR),N({state:CONNECT_STATE.DISCONNECTED,code:e.code}),o({error:e})}i({servers:n,userId:s})}):i({servers:m})},k=0,q=({token:e,userId:t,deviceId:n},s)=>{clearTimeout(k),c.info({tag:LOG_MODULE.CON_RECONNECT,userId:t,deviceId:n});let o=_.get(CONNECT_TOOL.RECONNECT_COUNT),i=o.count||1,r=i>E;if(r)return _.remove(CONNECT_TOOL.RECONNECT_COUNT),_.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),N({state:CONNECT_STATE.DISCONNECTED,code:ErrorType.IM_SERVER_CONNECT_ERROR.code});let d=_.get(CONNECT_TOOL.RECONNECT_FREQUENCY),p=d.frequency||1,m=1e3*p;k=setTimeout(()=>{i+=1,_.set(CONNECT_TOOL.RECONNECT_COUNT,{count:i}),p*=2,_.set(CONNECT_TOOL.RECONNECT_FREQUENCY,{frequency:p}),G({token:e,userId:t,deviceId:n,_isReconnect:!0},e=>{let{error:t}=e;utils.isEqual(t.code,ErrorType.COMMAND_SUCCESS.code)&&a.emit(SIGNAL_NAME.CMD_CHATROOM_REJOIN,{}),s(e)})},m)},L=[],P=()=>{g&&g.close&&g.close(),O.pause(),f.pause(),L.length=0},V=()=>{h=!0,R=CONNECT_STATE.DISCONNECTED,P()},F=(e,t,n)=>{n=n||utils.noop;let s=common.getNum();utils.isEqual(e,SIGNAL_CMD.CONNECT)&&(s=CONNECT_ACK_INDEX),utils.isEqual(e,SIGNAL_CMD.PING)&&(s=PONG_INDEX);let o=Counter({cmd:e}),i=S.encode(e,{callback:n,data:t,index:s,counter:o});if(1!=g.readyState)return P(),n(ErrorType.COMMAND_FAILED);g.send(i);let r=utils.clone(t);delete r.messages,r.user&&(r.user={id:r.user.id}),c.info({tag:LOG_MODULE.WS_SEND,cmd:e,...r}),utils.isEqual(SIGNAL_CMD.PUBLISH_ACK,e)||o.start(({cmd:e})=>utils.isEqual(e,SIGNAL_CMD.PING)&&3>L.length?L.push({cmd:e}):void(P(),n(ErrorType.COMMAND_FAILED)))},H=MessageSyncer(F,a,T,{logger:c}),B=ChatroomSyncer(F,a,T,{logger:c}),j=ChatroomAttSyncer(F,a,T,{logger:c}),Y=TagSyncer(F,a,T,{logger:c}),Q=t=>{let{cmd:s,result:o,name:i}=C.decode(t);c.info({tag:LOG_MODULE.WS_RECEIVE,cmd:s,code:o.code});let{index:p}=o,{callback:m,data:l,counter:E}=_.get(p);// 清空计时器,与 counter.start 对应
100
+ if(E&&(E.clear(),L.length=0),utils.isEqual(i,SIGNAL_NAME.S_CHATROOM_USER_NTF)){let{chatroomId:e,time:t,type:n,userId:s}=o;a.emit(SIGNAL_NAME.CMD_CHATROOM_EVENT,{chatroomId:e,time:t,type:n,userId:s})}if(utils.isEqual(i,SIGNAL_NAME.S_STREAM_EVENT)){let{conversationType:e,conversationId:t,messageId:n,streams:s}=o,i=[],r=[];if(utils.forEach(s,e=>{let{event:t}=e;utils.isEqual(t,STREAM_EVENT.MESSAGE)&&i.push(e),utils.isEqual(t,STREAM_EVENT.FINISHED)&&r.push(e)}),!utils.isEqual(i.length,0)){let s={conversationType:e,conversationId:t,messageId:n,streams:i};a.emit(SIGNAL_NAME.CMD_STREAM_APPENDED,s)}utils.isEqual(r.length,0)||utils.forEach(r,s=>{let o={conversationType:e,conversationId:t,messageId:n};a.emit(SIGNAL_NAME.CMD_STREAM_COMPLETED,o)})}if(utils.isEqual(i,SIGNAL_NAME.CMD_RECEIVED)&&(H.exec({msg:o,name:i,$message:e.$message,user:{id:U.id}}),f.reset()),utils.isEqual(i,SIGNAL_NAME.S_NTF)){let{type:t}=o,n={msg:o,name:i,$message:e.$message,user:{id:U.id}};utils.isEqual(t,NOTIFY_TYPE.MSG)&&H.exec(n),(utils.isEqual(t,NOTIFY_TYPE.CHATROOM)||utils.isEqual(t,NOTIFY_TYPE.CHATROOM_DESTORY))&&B.exec(n),utils.isEqual(t,NOTIFY_TYPE.CHATROOM_ATTR)&&j.exec(n),f.reset()}if(utils.isEqual(s,SIGNAL_CMD.PUBLISH_ACK)){utils.extend(l,o);let{conversationType:e}=l;// 单群聊和聊天室通知和拉取消息时间戳分开计算,只有发送单群聊消息更新发件箱
101
+ utils.isEqual(e,CONVERATION_TYPE.CHATROOM)||common.updateSyncTime({...l,io:T}),m(l)}if(utils.isEqual(s,SIGNAL_CMD.QUERY_ACK)&&m&&m(o),utils.isEqual(s,SIGNAL_CMD.CONNECT_ACK)){h=!1;let t=_.get(SIGNAL_NAME.S_CONNECT_ACK)||utils.noop,{ack:{code:s,userId:i,timestamp:a}}=o,p=CONNECT_STATE.CONNECT_FAILED,m=common.getError(s);if(utils.isEqual(s,ErrorType.CONNECT_SUCCESS.code))return I&&!e.isPC&&(common.updateSyncTime({sentTime:a,isSender:!0,io:T}),common.updateSyncTime({sentTime:a,isSender:!1,io:T})),I=!1,p=CONNECT_STATE.CONNECTED,b({id:i}),Storage.setPrefix(`${d}_${i}`),_.remove(CONNECT_TOOL.RECONNECT_FREQUENCY),r({id:i},({user:s})=>{s=s||{};let o=s.nickname,r=s.userPortrait,a=utils.toObject(s.extFields);// 同步会话和同步消息顺序不能调整,保证先同步会话再同步消息,规避会话列表最后一条消息不是最新的
102
+ if(b({name:o,portrait:r,exts:a,updatedTime:s.updatedTime}),t({user:U,error:m,next:()=>{N({state:p,user:U})}}),e.isPC){let t=()=>{H.exec({time:Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0,name:SIGNAL_NAME.S_SYNC_CONVERSATION_NTF,user:{id:U.id},$conversation:e.$conversation}),n(),Y.exec({$conversation:e.$conversation})},s=Storage.get(STORAGE.SYNC_CONVERSATION_TIME).time||0;// PC 中先连接后打开数据库,优先将本地数据库中的同步时间更新至 LocalStorage 中,避免换 Token 不换用户 Id 重复同步会话
103
+ utils.isEqual(s,0)?e.$socket.openDB({appkey:d,userId:i,token:U.token}).then(()=>{t()}):t()}else n();O.resume(()=>{F(SIGNAL_CMD.PING,{}),c.info({tag:LOG_MODULE.HB_START})}),f.resume(()=>{H.exec({msg:{type:NOTIFY_TYPE.MSG},name:SIGNAL_NAME.S_NTF,$message:e.$message,user:{id:U.id}})})});utils.isEqual(s,ErrorType.CONNECT_SECURITY_DOMAIN_ERROR.code)&&(h=!0),N({state:p,user:U,code:s}),t({user:U,error:m})}if(utils.isEqual(s,SIGNAL_CMD.DISCONNECT)){let{code:e,extra:t}=o;D({code:e,extra:t,type:DISCONNECT_TYPE.SERVER})}if(utils.isEqual(i,SIGNAL_NAME.S_PONG)&&c.info({tag:LOG_MODULE.HB_STOP}),utils.isEqual(i,SIGNAL_NAME.S_RTC_INVITE_NTF)&&a.emit(SIGNAL_NAME.CMD_RTC_INVITE_EVENT,o),utils.isEqual(i,SIGNAL_NAME.S_RTC_ROOM_EVENT)){let{roomEventType:e,room:t,members:n,reason:s}=o;a.emit(SIGNAL_NAME.CMD_RTC_ROOM_EVENT,{roomEventType:e,room:t,members:n,reason:s})}_.remove(p)},w=()=>utils.isEqual(R,CONNECT_STATE.CONNECTED),K=()=>utils.isEqual(R,CONNECT_STATE.DISCONNECTED);return utils.extend(T,{getConfig:o,setConfig:i,connect:G,disconnect:V,sendCommand:F,isConnected:w,isNeedConnect:K,getCurrentUser:s,setServerUrlProider:e=>{y=e},getVersion:()=>VERSION,sync:e=>{e=utils.isArray(e)?e:[e];let t=o();utils.forEach(e,e=>{let n={...e,$message:t.$message},{msg:{type:s}}=e;utils.isEqual(s,NOTIFY_TYPE.CHATROOM)&&B.exec(n),utils.isEqual(s,NOTIFY_TYPE.CHATROOM_ATTR)&&j.exec(n)})},...a}),T}let isGroup=e=>utils.isEqual(CONVERATION_TYPE.GROUP,e),formatMsg=({message:e,senders:t,groups:n})=>{let{content:m="{}",senderId:s,conversationType:o,conversationId:i,mentionInfo:l="{}",isRead:r,isStream:a,streams:d,isSender:p,isUpdated:c,referMsg:E="{}",mergeMsg:u="{}",reactions:g="{}",attribute:T=""}=e;m=utils.parse(m),l=utils.parse(l);let y=utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{},_={};return _=isGroup(o)?utils.filter(n,e=>utils.isEqual(e.id,i))[0]||{}:utils.filter(t,e=>utils.isEqual(e.id,i))[0]||{},d||(d="[]"),d=utils.parse(d),e=utils.extend(e,{mergeMsg:utils.parse(u),referMsg:utils.parse(E),reactions:utils.parse(g),conversationTitle:_.name,conversationPortrait:_.portrait,conversationExts:_.exts,content:m,sender:y,mentionInfo:l,streams:d,isStream:!!a,sentTime:+e.sentTime,isRead:!!r,isSender:!!p,isUpdated:!!c,attribute:T}),e},formatMsgs=({messages:e,senders:t,groups:n})=>{let s=utils.map(e,e=>{let s=formatMsg({message:e,senders:t,groups:n});return s});return s},formatConversation=({conversation:e,users:t,groups:n})=>{if(utils.isEmpty(e))return e;let{id:s,type:o,draft:i,unreadCount:r,isTop:a,undisturbType:d,sortTime:p,mentions:c,latestMessageTid:m,latestMessageId:l,latestMessageName:E,latestMessageIsSender:u,latestMessageIsUpdated:g,latestMessageSentTime:T,latestMessageSenderId:y,latestMessageContent:_,latestMessageMessageIndex:C,latestMessageIsRead:S,latestMessageIsMass:O,latestUnreadCount:f,latestReadCount:I,latestReadIndex:R,latestUnreadIndex:A,latestMentionInfo:N,unreadTag:M}=e;c=c||"{}";let v=utils.filter(t,e=>utils.isEqual(e.id,y))[0]||{id:y},h={};h=isGroup(o)?utils.filter(n,e=>utils.isEqual(e.id,s))[0]||{id:s}:utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{id:s},r=0<r?r:0;let D={conversationId:s,conversationType:o,conversationPortrait:h.portrait,conversationTitle:h.name,conversationExts:h.exts,draft:i||"",isTop:!!a,undisturbType:d,latestReadIndex:+R,latestUnreadIndex:+A,latestMessage:{conversationId:s,conversationType:o,conversationPortrait:h.portrait,conversationTitle:h.name,conversationExts:h.exts,content:utils.parse(_),isRead:!!S,isSender:!!u,isUpdated:!!g,isMass:!!O,messageId:l,tid:m,mentionInfo:utils.parse(N),messageIndex:C,name:E,readCount:+(I||0),unreadCount:+(f||0),sentTime:+T,referMsg:{},sender:v},sortTime:+p||0,unreadCount:r||0,mentions:utils.parse(c),unreadTag:M||UNREAD_TAG.READ};return utils.isEmpty(l)&&(D.latestMessage={}),D},formatConversations=({conversations:e,users:t,groups:n})=>{let s=utils.map(e,e=>{let s=formatConversation({conversation:e,users:t,groups:n});return s});return s},createMentions=(e,t,n)=>{let{mentionInfo:s}=t,{senders:o=[],msgs:i=[]}=e;if(utils.isEqual(t.name,MESSAGE_TYPE.RECALL_INFO)){let{content:{messageId:n},sender:e}=t,s=utils.find(i,e=>utils.isEqual(e.messageId,n));-1<s&&i.splice(s,1);// 如果没有消息撤回发送人的消息,移除 senders 中的发送人信息
101
104
  let r=-1<utils.find(i,t=>utils.isEqual(t.senderId,e.id));if(!r){let e=utils.find(o,e=>utils.isEqual(t.sender.id,e.id));utils.isEqual(e,-1)||o.splice(e,1)}let a=i.length;return{isMentioned:0<a,senders:o,msgs:i,count:a}}if(utils.isEqual(t.name,MESSAGE_TYPE.CLIENT_REMOVE_MSGS)){let{content:{messages:n},sender:e}=t,s={};utils.forEach(n,({messageId:e})=>{let t=utils.find(i,t=>{let n=utils.isEqual(t.messageId,e);return n&&(s[t.senderId]=t.senderId),n});-1<t&&i.splice(t,1)}),utils.forEach(s,e=>{let t=-1<utils.find(i,t=>utils.isEqual(t.senderId,e));if(!t){let t=utils.find(o,t=>utils.isEqual(e,t.id));utils.isEqual(t,-1)||o.splice(t,1)}});let r=i.length;return{isMentioned:0<r,senders:o,msgs:i,count:r}}if(utils.isEmpty(s))return e;let{members:r,mentionType:a}=s,d=utils.find(r,e=>utils.isEqual(n.id,e.id));if(-1<d||utils.isEqual(a,MENTION_TYPE.ALL)){i.push({senderId:t.sender.id,messageId:t.messageId,sentTime:t.sentTime,mentionType:a});let e=utils.find(o,e=>utils.isEqual(t.sender.id,e.id));utils.isEqual(e,-1)&&o.push(t.sender)}let p=i.length;return{isMentioned:0<p,senders:o,msgs:i,count:p}};function isNestInclude(e,t,n){let s=!1;for(var o=0;o<e.length;o++)for(var r=0;r<t.length&&(s=n(e[o],t[r]),!s);r++);return s}function hasUncompletedStream(e){let t=!1;for(var n=0;n<e.length;n++){let s=e[n],{isStream:o,streams:i}=s;if(o=!!o,i||(i="[]"),i=utils.parse(i),o&&utils.isEqual(i.length,0)){t=!0;break}}return t}var tools={isGroup,formatMsg,formatMsgs,formatConversations,formatConversation,createMentions,isNestInclude,hasUncompletedStream};function Conversation$1(e,t){function n(t){let{conversationId:n,conversationType:o,conversationTitle:i,conversationPortrait:r,conversationExts:a,mentionInfo:d,messageId:p}=t,c={conversationId:n,conversationType:o,conversationTitle:i,conversationPortrait:r,conversationExts:a,latestMessage:t,unreadCount:0,updatedTime:0,undisturbType:t.undisturbType},m=s.getPer(t),l=m.mentions||{},E=e.getCurrentUser();if(l=tools.createMentions(l,t,E),t.isSender){let e=s.getPer(t);utils.extend(c,{conversationTitle:e.conversationTitle,conversationPortrait:e.conversationPortrait,conversationExts:e.conversationExts})}return utils.extend(c,{mentions:l}),c}/*
102
105
  let params = {
103
106
  type: UNDISTURB_TYPE.DISTURB,
@@ -188,7 +191,7 @@ let{poster:t}=E;if(t)return o(e,n);O({type:p,ext:"png"}).then(t=>utils.isEqual(E
188
191
  conversationType: 1,
189
192
  conversationId: '',
190
193
  }
191
- */return{sendMessage:c,sendMassMessage:m,getMessages:l,removeMessages:g,getMessagesByIds:E,clearMessage:u,recallMessage:T,readMessage:y,getMessageReadDetails:_,updateMessage:C,insertMessage:x,updateMessageAttr:U,setSearchContent:b,getMentionMessages:S,getFileToken:O,sendFileMessage:I,sendImageMessage:R,sendVoiceMessage:A,sendVideoMessage:N,sendMergeMessage:M,getMergeMessages:v,getFirstUnreadMessage:h,searchMessages:D,addMessageReaction:G,removeMessageReaction:k,subscribeMessage:V,unsubscribeMessage:F,translate:q,setTopMessage:H,getTopMessage:B,addFavoriteMessages:j,removeFavoriteMessages:Y,getFavoriteMessages:Q,getContextMessages:s,_uploadFile:f}}function Socket$1(e,t,n){CONNECT_STATE.DISCONNECTED,e.on(SIGNAL_NAME.CONN_CHANGED,e=>{let{state:s,code:o="",user:i={}}=e;n.info({tag:LOG_MODULE.CON_STATUS,state:s,code:o,userId:i.id}),t.emit(EVENT.STATE_CHANGED,e)});let s=t=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.CONNECT,!0);if(!utils.isEmpty(i))return o(i);let{token:r=""}=t;return r=r.trim(),t=utils.extend(t,{token:r}),e.isNeedConnect()?void(n.info({tag:LOG_MODULE.CON_CONNECT}),e.connect(t,({error:t,user:n,next:i})=>{let{code:r,msg:a}=t;if(utils.isEqual(r,ErrorType.CONNECT_SUCCESS.code)){let t=e.getConfig();return t.isPC?(utils.extend(n,{code:r,next:i}),s(n)):(i(),s(n))}o({code:r,msg:a})})):o(ErrorType.REPREAT_CONNECTION)}),o=()=>utils.deferred(t=>{n.info({tag:LOG_MODULE.CON_DISCONNECT}),e.disconnect();let s=e.getConfig();s.isPC||e.emit(SIGNAL_NAME.CLIENT_CLEAR_MEMORY_CACHE,{}),t()}),i=()=>utils.deferred((e,t)=>{let n=Storage.get(STORAGE.APP_DEVICE),s=n.id||"";return utils.isEmpty(s)&&(s=utils.getDeviceID(),Storage.set(STORAGE.APP_DEVICE,{id:s})),e({id:s})}),r=t=>{utils.isFunction(t)||(t=utils.noop),e.setServerUrlProider(t)},a=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.UPLOAD_PUSH_TOKEN);if(!utils.isEmpty(o))return s(o);let{id:i}=e.getCurrentUser(),r={topic:COMMAND_TOPICS.UPLOAD_PUSH_TOKEN,...t,userId:i};e.sendCommand(SIGNAL_CMD.QUERY,r,e=>{let{code:t,msg:o}=e;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)?void n():s({code:t,msg:o})})}),d=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SWITCH_PUSH);if(!utils.isEmpty(o))return s(o);let{id:i}=e.getCurrentUser(),r={topic:COMMAND_TOPICS.SWITCH_PUSH,...t,userId:i};e.sendCommand(SIGNAL_CMD.QUERY,r,e=>{let{code:t,msg:o}=e;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)?void n():s({code:t,msg:o})})});return{connect:s,disconnect:o,setServerUrlProider:r,getDevice:i,isNeedConnect:e.isNeedConnect,isConnected:e.isConnected,getCurrentUser:e.getCurrentUser,uploadPushToken:a,switchPush:d}}let cacher=Cache(),heap=({chatroomId:e,attrs:t})=>{let n=[],s=[],{attrs:o}=cacher.get(e);return o=o||[],utils.forEach(t,e=>{let{key:t,value:i,updateTime:r,userId:a,type:d}=e,p={key:t,value:i,updateTime:r,userId:a},c=utils.find(o,e=>utils.isEqual(e.key,t));utils.isEqual(c,-1)&&utils.isEqual(d,CHATROOM_ATTR_OP_TYPE.ADD)&&o.push(p),!utils.isEqual(c,-1)&&utils.isEqual(d,CHATROOM_ATTR_OP_TYPE.ADD)&&o.splice(c,1,p),utils.isEqual(d,CHATROOM_ATTR_OP_TYPE.DEL)?(o.splice(c,1),delete p.value,n.push(p)):s.push(p)}),cacher.set(e,{attrs:o}),{updates:s,dels:n}},removeAll=e=>{cacher.remove(e)},getAll=e=>{let{id:t}=e,n=cacher.get(t),{attrs:s=[]}=n;return{id:t,attributes:s}},removeAttrs=e=>{let{id:t,attributes:n}=e,s=utils.map(n,e=>({...e,type:CHATROOM_ATTR_OP_TYPE.DEL}));heap({chatroomId:t,attrs:s})},getAttrs=e=>{let{id:t,attributes:n}=e,{attrs:s=[]}=cacher.get(t),o=[];return utils.forEach(s,e=>{utils.forEach(n,t=>{utils.isEqual(t.key,e.key)&&o.push(e)})}),{id:t,attributes:o}};var attrCaher={heap,removeAll,getAll,getAttrs,removeAttrs};function Chatroom$1(e,t,n){function s(e){chatroomCacher$1.remove(e),attrCaher.removeAll(e)}function o(t){return utils.deferred((s,o)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.JOINCHATROOM);if(!utils.isEmpty(r))return o(r);let{id:a}=t,d=chatroomCacher$1.get(a);if(d.isJoined)return s();let p={...utils.clone(t),isAutoCreate:!0};n.info({tag:LOG_MODULE.CHATROOM_USER_JOIN,...p}),i(p,{success:s,fail:o})})}function i(t,s){let{id:o}=t,i={topic:COMMAND_TOPICS.JOIN_CHATROOM,chatroom:t,conversationId:o},r=t.count;utils.isUndefined(r)&&(r=50),e.sendCommand(SIGNAL_CMD.QUERY,i,i=>{let{code:a,timestamp:d}=i;if(n.info({tag:LOG_MODULE.CHATROOM_USER_JOIN,...t,code:a}),utils.isEqual(ErrorType.COMMAND_SUCCESS.code,a)){let n=chatroomCacher$1.get(t.id),i=n.syncMsgTime||0,a=utils.isEqual(0,r),p=i;a&&utils.isEqual(i,0)&&(p=d);let c=[{name:SIGNAL_NAME.S_NTF,msg:{receiveTime:p,isNotSync:a,count:r,type:NOTIFY_TYPE.CHATROOM,targetId:o}},{name:SIGNAL_NAME.S_NTF,msg:{receiveTime:0,type:NOTIFY_TYPE.CHATROOM_ATTR,targetId:o}}];return chatroomCacher$1.set(t.id,{isJoined:!0}),e.sync(c),s.success()}let p=common.getError(a);s.fail(p)})}e.on(SIGNAL_NAME.CMD_CHATROOM_ATTR_RECEIVED,e=>{n.info({tag:LOG_MODULE.CHATROOM_ATTR_RECEIVE,...e});let{dels:s,updates:o}=attrCaher.heap(e),{chatroomId:i}=e;utils.isEmpty(s)||t.emit(EVENT.CHATROOM_ATTRIBUTE_DELETED,{id:i,attributes:s}),utils.isEmpty(o)||t.emit(EVENT.CHATROOM_ATTRIBUTE_UPDATED,{id:i,attributes:o})}),e.on(SIGNAL_NAME.CMD_CHATROOM_DESTROY,e=>{n.info({tag:LOG_MODULE.CHATROOM_DESTORYED,...e}),t.emit(EVENT.CHATROOM_DESTROYED,e)}),e.on(SIGNAL_NAME.CMD_CHATROOM_EVENT,e=>{let{type:o,chatroomId:i}=e;n.info({tag:LOG_MODULE.CHATROOM_SERVER_EVENT,...e}),(utils.isEqual(CHATROOM_EVENT_TYPE.FALLOUT,o)||utils.isEqual(CHATROOM_EVENT_TYPE.QUIT,o))&&(s(i),t.emit(EVENT.CHATROOM_USER_QUIT,e)),utils.isEqual(CHATROOM_EVENT_TYPE.KICK,o)&&(s(i),t.emit(EVENT.CHATROOM_USER_KICKED,e))}),e.on(SIGNAL_NAME.CMD_CHATROOM_REJOIN,()=>{let e=chatroomCacher$1.getAll(),t=[];utils.forEach(e,(e,n)=>{t.push(n)}),n.info({tag:LOG_MODULE.CHATROOM_USER_REJOIN,chatroomIds:t}),utils.iterator(t,(e,t,n)=>{let s={id:e},o=()=>{n||t()};i(s,{success:o,fail:o})})});let r=t=>utils.deferred((s,o)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.JOINCHATROOM);if(!utils.isEmpty(r))return o(r);let{id:a}=t,d=chatroomCacher$1.get(a);if(d.isJoined)return s();let p={...utils.clone(t),isAutoCreate:!1};n.info({tag:LOG_MODULE.CHATROOM_USER_JOIN,...p}),i(p,{success:s,fail:o})}),a=t=>utils.deferred((o,i)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.QUITCHATROOM);if(!utils.isEmpty(r))return i(r);let a=chatroomCacher$1.get(t.id);if(!a.isJoined)return o();n.info({tag:LOG_MODULE.CHATROOM_USER_QUIT,...t});let d={topic:COMMAND_TOPICS.QUIT_CHATROOM,chatroom:t};e.sendCommand(SIGNAL_CMD.QUERY,d,({code:e})=>{if(n.info({tag:LOG_MODULE.CHATROOM_USER_QUIT,...t,code:e}),utils.isEqual(ErrorType.COMMAND_SUCCESS.code,e))return s(t.id),o();let r=common.getError(e);i(r)})}),d=t=>(t=utils.clone(t),utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SET_CHATROOM_ATTRS);if(!utils.isEmpty(o))return s(o);let{options:i}=t;utils.isObject(i)||(i={});let{notify:r}=i;if(!utils.isUndefined(r)&&!utils.isString(r)){let e=ErrorType.ILLEGAL_TYPE_PARAMS;return s({code:e.code,msg:`notify ${e.msg},必须是 String 类型`})}t=utils.extend(t,{options:i});let a={topic:COMMAND_TOPICS.SET_CHATROOM_ATTRIBUTES,chatroom:t};attrCaher.removeAttrs(t),e.sendCommand(SIGNAL_CMD.QUERY,a,e=>{let{code:t,success:o,fail:i}=e;if(utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t))return n({success:o,fail:i});let r=common.getError(t);s(r)})})),p=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.REMOVE_CHATROOM_ATTRS);if(!utils.isEmpty(o))return s(o);let{options:i}=t;utils.isObject(i)||(i={});let{notify:r}=i;if(!utils.isUndefined(r)&&!utils.isString(r)){let e=ErrorType.ILLEGAL_TYPE_PARAMS;return s({code:e.code,msg:`notify ${e.msg},必须是 String 类型`})}t=utils.extend(t,{options:i});let a={topic:COMMAND_TOPICS.REMOVE_CHATROOM_ATTRIBUTES,chatroom:t};e.sendCommand(SIGNAL_CMD.QUERY,a,e=>{let{code:o,success:i,fail:r}=e;if(utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o))return attrCaher.removeAttrs({id:t.id,attributes:i}),n({success:i,fail:r});let a=common.getError(o);s(a)})}),c=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_CHATROOM_ATTRS);if(!utils.isEmpty(o))return s(o);let i=attrCaher.getAttrs(t);n(i)}),m=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_ALL_CHATROOM_ATTRS);if(!utils.isEmpty(o))return s(o);let i=attrCaher.getAll(t);n(i)});/*
194
+ */return{sendMessage:c,sendMassMessage:m,getMessages:l,removeMessages:g,getMessagesByIds:E,clearMessage:u,recallMessage:T,readMessage:y,getMessageReadDetails:_,updateMessage:C,insertMessage:x,updateMessageAttr:U,setSearchContent:b,getMentionMessages:S,getFileToken:O,sendFileMessage:I,sendImageMessage:R,sendVoiceMessage:A,sendVideoMessage:N,sendMergeMessage:M,getMergeMessages:v,getFirstUnreadMessage:h,searchMessages:D,addMessageReaction:G,removeMessageReaction:k,subscribeMessage:V,unsubscribeMessage:F,translate:q,setTopMessage:H,getTopMessage:B,addFavoriteMessages:j,removeFavoriteMessages:Y,getFavoriteMessages:Q,getContextMessages:s,_uploadFile:f}}function Socket$1(e,t,n){CONNECT_STATE.DISCONNECTED,e.on(SIGNAL_NAME.CONN_CHANGED,e=>{let{state:s,code:o="",user:i={}}=e;n.info({tag:LOG_MODULE.CON_STATUS,state:s,code:o,userId:i.id}),t.emit(EVENT.STATE_CHANGED,e)});let s=t=>utils.deferred((s,o)=>{let i=common.check(e,t,FUNC_PARAM_CHECKER.CONNECT,!0);if(!utils.isEmpty(i))return o(i);let{token:r=""}=t;return r=r.trim(),t=utils.extend(t,{token:r}),e.isNeedConnect()?void(n.info({tag:LOG_MODULE.CON_CONNECT}),e.connect(t,({error:t,user:n,next:i})=>{let{code:r,msg:a}=t;if(utils.isEqual(r,ErrorType.CONNECT_SUCCESS.code)){let t=e.getConfig();return t.isPC?(utils.extend(n,{code:r,next:i}),s(n)):(i(),s(n))}o({code:r,msg:a})})):o(ErrorType.REPREAT_CONNECTION)}),o=()=>utils.deferred(t=>{n.info({tag:LOG_MODULE.CON_DISCONNECT}),e.disconnect();let s=e.getConfig();s.isPC||e.emit(SIGNAL_NAME.CLIENT_CLEAR_MEMORY_CACHE,{}),t()}),i=()=>utils.deferred((e,t)=>{let n=Storage.get(STORAGE.APP_DEVICE),s=n.id||"";return utils.isEmpty(s)&&(s=utils.getDeviceID(),Storage.set(STORAGE.APP_DEVICE,{id:s})),e({id:s})}),r=t=>{utils.isFunction(t)||(t=utils.noop),e.setServerUrlProider(t)},a=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.UPLOAD_PUSH_TOKEN);if(!utils.isEmpty(o))return s(o);let{id:i}=e.getCurrentUser(),r={topic:COMMAND_TOPICS.UPLOAD_PUSH_TOKEN,...t,userId:i};e.sendCommand(SIGNAL_CMD.QUERY,r,e=>{let{code:t,msg:o}=e;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)?void n():s({code:t,msg:o})})}),d=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SWITCH_PUSH);if(!utils.isEmpty(o))return s(o);let{id:i}=e.getCurrentUser(),r={topic:COMMAND_TOPICS.SWITCH_PUSH,...t,userId:i};e.sendCommand(SIGNAL_CMD.QUERY,r,e=>{let{code:t,msg:o}=e;return utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t)?void n():s({code:t,msg:o})})});return{connect:s,disconnect:o,setServerUrlProider:r,getDevice:i,isNeedConnect:e.isNeedConnect,isConnected:e.isConnected,getCurrentUser:e.getCurrentUser,uploadPushToken:a,switchPush:d}}let cacher=Cache(),heap=({chatroomId:e,attrs:t})=>{let n=[],s=[],{attrs:o}=cacher.get(e);return o=o||[],utils.forEach(t,e=>{let{key:t,value:i,updateTime:r,userId:a,type:d}=e,p={key:t,value:i,updateTime:r,userId:a},c=utils.find(o,e=>utils.isEqual(e.key,t));utils.isEqual(c,-1)&&utils.isEqual(d,CHATROOM_ATTR_OP_TYPE.ADD)&&o.push(p),!utils.isEqual(c,-1)&&utils.isEqual(d,CHATROOM_ATTR_OP_TYPE.ADD)&&o.splice(c,1,p),utils.isEqual(d,CHATROOM_ATTR_OP_TYPE.DEL)?(o.splice(c,1),delete p.value,n.push(p)):s.push(p)}),cacher.set(e,{attrs:o}),{updates:s,dels:n}},removeAll=e=>{cacher.remove(e)},getAll=e=>{let{id:t}=e,n=cacher.get(t),{attrs:s=[]}=n;return{id:t,attributes:s}},removeAttrs=e=>{let{id:t,attributes:n}=e,s=utils.map(n,e=>({...e,type:CHATROOM_ATTR_OP_TYPE.DEL}));heap({chatroomId:t,attrs:s})},getAttrs=e=>{let{id:t,attributes:n}=e,{attrs:s=[]}=cacher.get(t),o=[];return utils.forEach(s,e=>{utils.forEach(n,t=>{utils.isEqual(t.key,e.key)&&o.push(e)})}),{id:t,attributes:o}};var attrCaher={heap,removeAll,getAll,getAttrs,removeAttrs};function Chatroom$1(e,t,n){function s(e){chatroomCacher$1.remove(e),attrCaher.removeAll(e)}function o(t){return utils.deferred((s,o)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.JOINCHATROOM);if(!utils.isEmpty(r))return o(r);let{id:a}=t,d=chatroomCacher$1.get(a);if(d.isJoined)return s();let p={...utils.clone(t),isAutoCreate:!0};n.info({tag:LOG_MODULE.CHATROOM_USER_JOIN,...p}),i(p,{success:s,fail:o})})}function i(t,s){let{id:o}=t,i={topic:COMMAND_TOPICS.JOIN_CHATROOM,chatroom:t,conversationId:o},r=t.count;utils.isUndefined(r)&&(r=50),e.sendCommand(SIGNAL_CMD.QUERY,i,i=>{let{code:a,timestamp:d}=i;if(n.info({tag:LOG_MODULE.CHATROOM_USER_JOIN,...t,code:a}),utils.isEqual(ErrorType.COMMAND_SUCCESS.code,a)){let n=chatroomCacher$1.get(t.id),i=n.syncMsgTime||0,a=utils.isEqual(0,r),p=i;a&&utils.isEqual(i,0)&&(p=d),0<p&&(p+=1);let c=[{name:SIGNAL_NAME.S_NTF,msg:{receiveTime:p,isNotSync:a,count:r,type:NOTIFY_TYPE.CHATROOM,targetId:o}},{name:SIGNAL_NAME.S_NTF,msg:{receiveTime:0,type:NOTIFY_TYPE.CHATROOM_ATTR,targetId:o}}];return chatroomCacher$1.set(t.id,{isJoined:!0}),e.sync(c),s.success()}let p=common.getError(a);s.fail(p)})}e.on(SIGNAL_NAME.CMD_CHATROOM_ATTR_RECEIVED,e=>{n.info({tag:LOG_MODULE.CHATROOM_ATTR_RECEIVE,...e});let{dels:s,updates:o}=attrCaher.heap(e),{chatroomId:i}=e;utils.isEmpty(s)||t.emit(EVENT.CHATROOM_ATTRIBUTE_DELETED,{id:i,attributes:s}),utils.isEmpty(o)||t.emit(EVENT.CHATROOM_ATTRIBUTE_UPDATED,{id:i,attributes:o})}),e.on(SIGNAL_NAME.CMD_CHATROOM_DESTROY,e=>{n.info({tag:LOG_MODULE.CHATROOM_DESTORYED,...e}),t.emit(EVENT.CHATROOM_DESTROYED,e)}),e.on(SIGNAL_NAME.CMD_CHATROOM_EVENT,e=>{let{type:o,chatroomId:i}=e;n.info({tag:LOG_MODULE.CHATROOM_SERVER_EVENT,...e}),(utils.isEqual(CHATROOM_EVENT_TYPE.FALLOUT,o)||utils.isEqual(CHATROOM_EVENT_TYPE.QUIT,o))&&(s(i),t.emit(EVENT.CHATROOM_USER_QUIT,e)),utils.isEqual(CHATROOM_EVENT_TYPE.KICK,o)&&(s(i),t.emit(EVENT.CHATROOM_USER_KICKED,e))}),e.on(SIGNAL_NAME.CMD_CHATROOM_REJOIN,()=>{let e=chatroomCacher$1.getAll(),t=[];utils.forEach(e,(e,n)=>{t.push(n)}),n.info({tag:LOG_MODULE.CHATROOM_USER_REJOIN,chatroomIds:t}),utils.iterator(t,(e,t,n)=>{let s={id:e},o=()=>{n||t()};i(s,{success:o,fail:o})})});let r=t=>utils.deferred((s,o)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.JOINCHATROOM);if(!utils.isEmpty(r))return o(r);let{id:a}=t,d=chatroomCacher$1.get(a);if(d.isJoined)return s();let p={...utils.clone(t),isAutoCreate:!1};n.info({tag:LOG_MODULE.CHATROOM_USER_JOIN,...p}),i(p,{success:s,fail:o})}),a=t=>utils.deferred((o,i)=>{let r=common.check(e,t,FUNC_PARAM_CHECKER.QUITCHATROOM);if(!utils.isEmpty(r))return i(r);let a=chatroomCacher$1.get(t.id);if(!a.isJoined)return o();n.info({tag:LOG_MODULE.CHATROOM_USER_QUIT,...t});let d={topic:COMMAND_TOPICS.QUIT_CHATROOM,chatroom:t};e.sendCommand(SIGNAL_CMD.QUERY,d,({code:e})=>{if(n.info({tag:LOG_MODULE.CHATROOM_USER_QUIT,...t,code:e}),utils.isEqual(ErrorType.COMMAND_SUCCESS.code,e))return s(t.id),o();let r=common.getError(e);i(r)})}),d=t=>(t=utils.clone(t),utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.SET_CHATROOM_ATTRS);if(!utils.isEmpty(o))return s(o);let{options:i}=t;utils.isObject(i)||(i={});let{notify:r}=i;if(!utils.isUndefined(r)&&!utils.isString(r)){let e=ErrorType.ILLEGAL_TYPE_PARAMS;return s({code:e.code,msg:`notify ${e.msg},必须是 String 类型`})}t=utils.extend(t,{options:i});let a={topic:COMMAND_TOPICS.SET_CHATROOM_ATTRIBUTES,chatroom:t};attrCaher.removeAttrs(t),e.sendCommand(SIGNAL_CMD.QUERY,a,e=>{let{code:t,success:o,fail:i}=e;if(utils.isEqual(ErrorType.COMMAND_SUCCESS.code,t))return n({success:o,fail:i});let r=common.getError(t);s(r)})})),p=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.REMOVE_CHATROOM_ATTRS);if(!utils.isEmpty(o))return s(o);let{options:i}=t;utils.isObject(i)||(i={});let{notify:r}=i;if(!utils.isUndefined(r)&&!utils.isString(r)){let e=ErrorType.ILLEGAL_TYPE_PARAMS;return s({code:e.code,msg:`notify ${e.msg},必须是 String 类型`})}t=utils.extend(t,{options:i});let a={topic:COMMAND_TOPICS.REMOVE_CHATROOM_ATTRIBUTES,chatroom:t};e.sendCommand(SIGNAL_CMD.QUERY,a,e=>{let{code:o,success:i,fail:r}=e;if(utils.isEqual(ErrorType.COMMAND_SUCCESS.code,o))return attrCaher.removeAttrs({id:t.id,attributes:i}),n({success:i,fail:r});let a=common.getError(o);s(a)})}),c=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_CHATROOM_ATTRS);if(!utils.isEmpty(o))return s(o);let i=attrCaher.getAttrs(t);n(i)}),m=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.GET_ALL_CHATROOM_ATTRS);if(!utils.isEmpty(o))return s(o);let i=attrCaher.getAll(t);n(i)});/*
192
195
  let chatroom = {
193
196
  id: 'chatroomId',
194
197
  attributes: [
@@ -261,6 +264,6 @@ c.onerror=t=>{void 0,d=!0},c.onsuccess=n=>{a=c.result,t()},c.onupgradeneeded=t=>
261
264
  values: [[], [], false, false]
262
265
  }
263
266
  };
264
- */return u}function DB$2(e){let t=e=>{},n=(e,t)=>{t({list:[]})},s=e=>{},o={insert:t,search:n,remove:s};return o}let DB=DB$3;common.isUni()&&(DB=DB$2);var DB$1=DB;function Logger(e={}){let t="LOGS",n={TIME:"time",LEVEL:"level",T_L_GROUP:"time_level"},{isConsole:d=!0,appkey:s,sessionId:o,getCurrentUser:i,getVersion:r,serverList:a}=e,p=DB$1({name:`_IMIIM_${s}`,tables:[{name:"LOGS",indexs:[{name:n.TIME,value:"time"},{name:n.LEVEL,value:"level"},{name:n.T_L_GROUP,value:["time","level"]}]}]}),c=()=>{let e=604800000,s=Date.now()-604800000;p.remove({name:t,index:{name:n.TIME,type:"upperBound",values:[s,!1]}})};c();let m=(e,n,s)=>{p.insert({name:t,record:{sessionId:o,level:e,time:n,content:s}})},l=(e,t)=>{let n=Date.now();if(m(e,n,t),d){let e=utils.formatTime(n),s=utils.toJSON(t)}},E=e=>{l(LOG_LEVEL.ERROR,e)},u=e=>{l(LOG_LEVEL.WARN,e)},g=e=>{l(LOG_LEVEL.FATAL,e)},T=e=>{l(LOG_LEVEL.INFO,e)},y=({start:e,end:o,messageId:r})=>{let d={name:t,index:{name:n.TIME,type:"bound",values:[e,o,!1,!1]}},c=common.getNaviStorageKey();Storage.get(c),p.search(d,e=>{let t=i(),{token:n}=t,o=a[0],{http:d}=utils.getProtocol(o);o.replace(/http:\/\/|https:\/\/|file:\/\//g,"");let p=`${d}//${o}/navigator/upload-log-plain`;jrequest.requestNormal(p,{method:"POST",headers:{"Content-Type":"application/json","x-appkey":s,"x-token":n},body:utils.toJSON({msg_id:r,log:utils.toJSON(e.list)})})})};return{log:l,error:E,warn:u,fatal:g,info:T,report:y}}let init=e=>{function t(){return l.getCurrentUser({ignores:[]})}function n(){return l.getVersion()}let s=Emitter(),o={},{upload:i,appkey:r="",log:a={},serverList:d=[]}=e,p=common.checkUploadType(i),c=common.getSessionId(),m=Logger({...a,appkey:r,sessionId:c,getCurrentUser:t,getVersion:n,serverList:d});// 移除 AppKey 前后空格
267
+ */return u}function DB$2(e){let t=e=>{},n=(e,t)=>{t({list:[]})},s=e=>{},o={insert:t,search:n,remove:s};return o}let DB=DB$3;common.isUni()&&(DB=DB$2);var DB$1=DB;function Logger(e={}){let t="LOGS",n={TIME:"time",LEVEL:"level",T_L_GROUP:"time_level"},{isConsole:d=!0,appkey:s,sessionId:o,getCurrentUser:i,getVersion:r,serverList:a}=e,p=DB$1({name:`_IMIIM_${s}`,tables:[{name:"LOGS",indexs:[{name:n.TIME,value:"time"},{name:n.LEVEL,value:"level"},{name:n.T_L_GROUP,value:["time","level"]}]}]}),c=()=>{let e=604800000,s=Date.now()-604800000;p.remove({name:t,index:{name:n.TIME,type:"upperBound",values:[s,!1]}})};c();let m=(e,n,s)=>{p.insert({name:t,record:{sessionId:o,level:e,time:n,content:s}})},l=(e,t)=>{let n=Date.now();if(m(e,n,t),d){let e=utils.formatTime(n),s=utils.toJSON(t)}},E=e=>{l(LOG_LEVEL.ERROR,e)},u=e=>{l(LOG_LEVEL.WARN,e)},g=e=>{l(LOG_LEVEL.FATAL,e)},T=e=>{l(LOG_LEVEL.INFO,e)},y=({start:e,end:o,messageId:r})=>{let d={name:t,index:{name:n.TIME,type:"bound",values:[e,o,!1,!1]}},c=common.getNaviStorageKey();Storage.get(c),p.search(d,e=>{let t=i(),{token:n}=t,o=a[0],{http:d}=utils.getProtocol(o),p=o.replace(/http:\/\/|https:\/\/|file:\/\/|wss:\/\/|ws:\/\//g,""),c=`${d}//${p}/navigator/upload-log-plain`;jrequest.requestNormal(c,{method:"POST",headers:{"Content-Type":"application/json","x-appkey":s,"x-token":n},body:utils.toJSON({msg_id:r,log:utils.toJSON(e.list)})})})};return{log:l,error:E,warn:u,fatal:g,info:T,report:y}}let init=e=>{function t(){return l.getCurrentUser({ignores:[]})}function n(){return l.getVersion()}let s=Emitter(),o={},{upload:i,appkey:r="",log:a={},serverList:d=[]}=e,p=common.checkUploadType(i),c=common.getSessionId(),m=Logger({...a,appkey:r,sessionId:c,getCurrentUser:t,getVersion:n,serverList:d});// 移除 AppKey 前后空格
265
268
  r=r.trim(),utils.extend(e,{uploadType:p,logger:m,appkey:r});let l=IO(e),E=Web.init({io:l,emitter:s,logger:m});o=E,common.isDesktop()&&(s=Emitter(),o=Desktop.init({appkey:r,io:l,emitter:s,web:E,client:JGChatPCClient,logger:m}));let u={call:()=>RTCSignal({io:l,emitter:s,logger:m})};// PC 和 Web 复用的事件在此处透传
266
269
  l.on(SIGNAL_NAME.CMD_STREAM_APPENDED,e=>{s.emit(EVENT.STREAM_APPENDED,{message:e})}),l.on(SIGNAL_NAME.CMD_STREAM_COMPLETED,e=>{let{conversationId:t,conversationType:n,messageId:i}=e;o.message.getMessagesByIds({conversationId:t,conversationType:n,messageIds:[i]}).then(({messages:t})=>{let n=t[0]||{content:""};s.emit(EVENT.STREAM_COMPLETED,{message:{...e,content:n.content}})})});let g={...o.socket,...o.message,...o.conversation,...o.chatroom,...s,registerMessage:common.registerMessage,isDesktop:common.isDesktop,install:e=>{if(!utils.isObject(e))return;let{name:t}=e,n=u[t]||function(){return{}},s=n();return s},Event:EVENT,ConnectionState:CONNECT_STATE,ConversationType:CONVERATION_TYPE,MessageType:MESSAGE_TYPE,ConversationOrder:CONVERSATION_ORDER,ErrorType,MentionType:MENTION_TYPE,MessageOrder:MESSAGE_ORDER,MentionOrder:MENTION_ORDER,FileType:FILE_TYPE,UndisturbType:UNDISTURB_TYPE,SentState:MESSAGE_SENT_STATE,UnreadTag:UNREAD_TAG,ConversationTagType:CONVERATION_TAG_TYPE,MediaType:MEDIA_TYPE,UserType:USER_TYPE,StreamEvent:STREAM_EVENT,ConversationTopType:CONVERSATION_TOP_TYPE,PlatformType:PLATFORM_TYPE,PushChannel:PUSH_CHANNEL};return g};var client={init,Event:EVENT,ConnectionState:CONNECT_STATE,ConversationType:CONVERATION_TYPE,MessageType:MESSAGE_TYPE,ConversationOrder:CONVERSATION_ORDER,ErrorType,MentionType:MENTION_TYPE,MessageOrder:MESSAGE_ORDER,MentionOrder:MENTION_ORDER,FileType:FILE_TYPE,UndisturbType:UNDISTURB_TYPE,SentState:MESSAGE_SENT_STATE,UnreadTag:UNREAD_TAG,ConversationTagType:CONVERATION_TAG_TYPE,MediaType:MEDIA_TYPE,UserType:USER_TYPE,StreamEvent:STREAM_EVENT,ConversationTopType:CONVERSATION_TOP_TYPE,PlatformType:PLATFORM_TYPE,PushChannel:PUSH_CHANNEL},index={...client};export{index as default};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  {
3
3
  "name": "jugglechat-websdk",
4
- "version": "1.8.4",
4
+ "version": "1.8.5",
5
5
  "description": "JuggleChat SDK, IM, Chat",
6
6
  "main": "index.js",
7
7
  "types": "index.d.ts",