jugglechat-websdk 1.1.0 → 1.1.1
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 +5 -5
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* JuggleChat.js v1.1.
|
|
2
|
+
* JuggleChat.js v1.1.1
|
|
3
3
|
* (c) 2022-2024 JuggleChat
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/const noop=()=>{},isObject=e=>"[object Object]"===Object.prototype.toString.call(e),isArray=e=>"[object Array]"===Object.prototype.toString.call(e),isFunction=e=>"[object Function]"===Object.prototype.toString.call(e),isString=e=>"[object String]"===Object.prototype.toString.call(e),isBoolean=e=>"[object Boolean]"===Object.prototype.toString.call(e),isUndefined=e=>"[object Undefined]"===Object.prototype.toString.call(e),isNull=e=>"[object Null]"===Object.prototype.toString.call(e),isNumber=e=>"[object Number]"===Object.prototype.toString.call(e),stringify=e=>JSON.stringify(e),parse=t=>{let n={};try{n=JSON.parse(t)}catch(s){n=t}return n},forEach=(e,t)=>{t=t||noop;isObject(e)&&(()=>{for(var n in e)t(e[n],n,e)})(),isArray(e)&&(()=>{for(var n=0,s=e.length;n<s;n++)t(e[n],n,e)})()},isEmpty=e=>{let t=!0;return isObject(e)&&forEach(e,()=>{t=!1}),(isString(e)||isArray(e))&&(t=0===e.length),isNumber(e)&&(t=0===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
|
|
@@ -116,13 +116,13 @@ let{snapshotUrl:t}=u;if(t)return o(e,n);common.uploadFrame(r,s,(t,s,i)=>{let{hei
|
|
|
116
116
|
// if(utils.isNumber(syncConversationTime)){
|
|
117
117
|
// Storage.set(STORAGE.SYNC_CONVERSATION_TIME, { time: syncConversationTime })
|
|
118
118
|
// }
|
|
119
|
-
n.info({tag:LOG_MODULE.CON_CONNECT}),e.connect(t,({error:e,user:t})=>{let{code:n,msg:i}=e;return utils.isEqual(n,ErrorType.CONNECT_SUCCESS.code)?(utils.extend(t,{code:n}),s(t)):void o({code:n,msg:i})})):o(i)}),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)=>t(ErrorType.SDK_FUNC_NOT_DEFINED));return{connect:s,disconnect:o,getDevice:i,isConnected:e.isConnected,getCurrentUser:e.getCurrentUser}}function Chatroom$1(e){let t=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.JOINCHATROOM);if(!utils.isEmpty(o))return s(o);let{id:i}=t,r={topic:COMMAND_TOPICS.JOIN_CHATROOM,chatroom:t,conversationId:i};e.sendCommand(SIGNAL_CMD.PUBLISH,r,()=>{n()})}),n=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.QUITCHATROOM);if(!utils.isEmpty(o))return s(o);let i={topic:COMMAND_TOPICS.QUIT_CHATROOM,chatroom:t};e.sendCommand(SIGNAL_CMD.PUBLISH,i,()=>{n()})});return{joinChatroom:t,quitChatroom:n}}let init$2=({io:e,emitter:t,logger:n})=>{let s=Socket$1(e,t,n),o=Conversation$1(e,t),i=Message$1(e,t,n),r=Chatroom$1(e);return{socket:s,conversation:o,message:i,chatroom:r}};var Web={init:init$2};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:l="{}",isRead:r,isSender:a,isUpdated:d,referMsg:c="{}",mergeMsg:m="{}",attribute:u=""}=e;p=utils.parse(p),l=utils.parse(l);let y=utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{},g={};return g=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(m),referMsg:utils.parse(c),conversationTitle:g.name,conversationPortrait:g.portrait,conversationExts:g.exts,content:p,sender:y,mentionInfo:l,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:l,latestMessageTid:c,latestMessageId:m,latestMessageName:u,latestMessageIsSender:y,latestMessageIsUpdated:g,latestMessageSentTime:E,latestMessageSenderId:f,latestMessageContent:T,latestMessageMessageIndex:S,latestMessageIsRead:C,latestMessageIsMass:I,latestUnreadCount:_,latestReadCount:N,latestReadIndex:O,latestUnreadIndex:v,latestMentionInfo:h}=e;l=l||"{}";let A=utils.filter(t,e=>utils.isEqual(e.id,f))[0]||{id:f},M={};M=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 R={conversationId:s,conversationType:o,conversationPortrait:M.portrait,conversationTitle:M.name,conversationExts:M.exts,draft:i||"",isTop:!!a,undisturbType:d,latestReadIndex:+O,latestUnreadIndex:+v,latestMessage:{conversationId:s,conversationType:o,conversationPortrait:M.portrait,conversationTitle:M.name,conversationExts:M.exts,content:utils.parse(T),isRead:!!C,isSender:!!y,isUpdated:!!g,isMass:!!I,messageId:m,tid:c,mentionInfo:utils.parse(h),messageIndex:S,name:u,readCount:+(N||0),unreadCount:+(_||0),sentTime:+E,referMsg:{},sender:A},sortTime:+p||0,unreadCount:r||0,mentions:utils.parse(l)};return utils.isEmpty(m)&&(R.latestMessage={}),R},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;if(utils.isEmpty(s))return e;let{members:o,type:i}=s,r=utils.find(o,e=>utils.isEqual(n.id,e.id));if(-1<r||utils.isEqual(i,MENTION_TYPE.ALL)){let{isMentioned:n=!0,senders:s=[],msgs:o=[]}=e;o.push({senderId:t.sender.id,messageId:t.messageId,sentTime:t.sentTime});let i=utils.find(s,e=>utils.isEqual(t.sender.id,e.id));utils.isEqual(i,-1)&&s.push(t.sender),e={isMentioned:n,senders:s,msgs:o,count:o.length}}return e};var tools={isGroup,formatMsg,formatMsgs,formatConversations,formatConversation,createMentions};function Conversation(e,{conversationUtils:t,webAgent:n}){let s=["removeConversation","clearUnreadcount","getTotalUnreadcount","clearTotalUnreadcount","setDraft","getDraft","removeDraft","insertConversation","disturbConversation","setTopConversation","getTopConversations","_batchInsertConversations"],o=common.formatProvider(s,e);return o.getConversations=n=>e.getConversations(n).then(({conversations:e,groups:s,users:o,isFinished:i})=>{let r=tools.formatConversations({conversations:e,users:o,groups:s});// 不指定会话类型时向内存中插入数据
|
|
119
|
+
n.info({tag:LOG_MODULE.CON_CONNECT}),e.connect(t,({error:e,user:t})=>{let{code:n,msg:i}=e;return utils.isEqual(n,ErrorType.CONNECT_SUCCESS.code)?(utils.extend(t,{code:n}),s(t)):void o({code:n,msg:i})})):o(i)}),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)=>t(ErrorType.SDK_FUNC_NOT_DEFINED));return{connect:s,disconnect:o,getDevice:i,isConnected:e.isConnected,getCurrentUser:e.getCurrentUser}}function Chatroom$1(e){let t=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.JOINCHATROOM);if(!utils.isEmpty(o))return s(o);let{id:i}=t,r={topic:COMMAND_TOPICS.JOIN_CHATROOM,chatroom:t,conversationId:i};e.sendCommand(SIGNAL_CMD.PUBLISH,r,()=>{n()})}),n=t=>utils.deferred((n,s)=>{let o=common.check(e,t,FUNC_PARAM_CHECKER.QUITCHATROOM);if(!utils.isEmpty(o))return s(o);let i={topic:COMMAND_TOPICS.QUIT_CHATROOM,chatroom:t};e.sendCommand(SIGNAL_CMD.PUBLISH,i,()=>{n()})});return{joinChatroom:t,quitChatroom:n}}let init$2=({io:e,emitter:t,logger:n})=>{let s=Socket$1(e,t,n),o=Conversation$1(e,t),i=Message$1(e,t,n),r=Chatroom$1(e);return e.setConfig({logger:n}),{socket:s,conversation:o,message:i,chatroom:r}};var Web={init:init$2};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:l="{}",isRead:r,isSender:a,isUpdated:d,referMsg:c="{}",mergeMsg:m="{}",attribute:u=""}=e;p=utils.parse(p),l=utils.parse(l);let y=utils.filter(t,e=>utils.isEqual(e.id,s))[0]||{},g={};return g=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(m),referMsg:utils.parse(c),conversationTitle:g.name,conversationPortrait:g.portrait,conversationExts:g.exts,content:p,sender:y,mentionInfo:l,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:l,latestMessageTid:c,latestMessageId:m,latestMessageName:u,latestMessageIsSender:y,latestMessageIsUpdated:g,latestMessageSentTime:E,latestMessageSenderId:f,latestMessageContent:T,latestMessageMessageIndex:S,latestMessageIsRead:C,latestMessageIsMass:I,latestUnreadCount:_,latestReadCount:N,latestReadIndex:O,latestUnreadIndex:v,latestMentionInfo:h}=e;l=l||"{}";let A=utils.filter(t,e=>utils.isEqual(e.id,f))[0]||{id:f},M={};M=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 R={conversationId:s,conversationType:o,conversationPortrait:M.portrait,conversationTitle:M.name,conversationExts:M.exts,draft:i||"",isTop:!!a,undisturbType:d,latestReadIndex:+O,latestUnreadIndex:+v,latestMessage:{conversationId:s,conversationType:o,conversationPortrait:M.portrait,conversationTitle:M.name,conversationExts:M.exts,content:utils.parse(T),isRead:!!C,isSender:!!y,isUpdated:!!g,isMass:!!I,messageId:m,tid:c,mentionInfo:utils.parse(h),messageIndex:S,name:u,readCount:+(N||0),unreadCount:+(_||0),sentTime:+E,referMsg:{},sender:A},sortTime:+p||0,unreadCount:r||0,mentions:utils.parse(l)};return utils.isEmpty(m)&&(R.latestMessage={}),R},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;if(utils.isEmpty(s))return e;let{members:o,type:i}=s,r=utils.find(o,e=>utils.isEqual(n.id,e.id));if(-1<r||utils.isEqual(i,MENTION_TYPE.ALL)){let{isMentioned:n=!0,senders:s=[],msgs:o=[]}=e;o.push({senderId:t.sender.id,messageId:t.messageId,sentTime:t.sentTime});let i=utils.find(s,e=>utils.isEqual(t.sender.id,e.id));utils.isEqual(i,-1)&&s.push(t.sender),e={isMentioned:n,senders:s,msgs:o,count:o.length}}return e};var tools={isGroup,formatMsg,formatMsgs,formatConversations,formatConversation,createMentions};function Conversation(e,{conversationUtils:t,webAgent:n}){let s=["removeConversation","clearUnreadcount","getTotalUnreadcount","clearTotalUnreadcount","setDraft","getDraft","removeDraft","insertConversation","disturbConversation","setTopConversation","getTopConversations","_batchInsertConversations"],o=common.formatProvider(s,e);return o.getConversations=n=>e.getConversations(n).then(({conversations:e,groups:s,users:o,isFinished:i})=>{let r=tools.formatConversations({conversations:e,users:o,groups:s});// 不指定会话类型时向内存中插入数据
|
|
120
120
|
return utils.isUndefined(n.conversationType)&&t.add(r),{isFinished:i,conversations:utils.clone(r)}}),o.getConversation=t=>e.getConversation(t).then(e=>{let{conversation:t,groups:n,users:s}=e,o={};return t.isNew||(o=tools.formatConversation({conversation:t,users:s,groups:n})),{conversation:o}}),o}function Message(e,{webAgent:t}){let n=["sendMessage","updateMessageAttr","removeMessages","sendMassMessage","getMessagesByIds","clearMessage","recallMessage","readMessage","getMessageReadDetails","updateMessage","insertMessage","getMentionMessages","getFileToken","sendFileMessage","sendImageMessage","sendVoiceMessage","sendVideoMessage","sendMergeMessage","getMergeMessages"],s=common.formatProvider(n,e);return s.getMessages=n=>utils.deferred((s,o)=>{let{order:i=MESSAGE_ORDER.BACKWARD}=n,r={time:n.time||0,order:i,count:n.count||20,names:n.names||[],conversationType:n.conversationType,conversationId:n.conversationId};return e.getMessages(n).then(({messages:p=[],isFinished:i,groups:a,senders:d})=>{let l=utils.filter(p,e=>utils.isEqual(e.sentState,MESSAGE_SENT_STATE.SUCCESS)),c=()=>{// if(utils.isEqual(order, MESSAGE_ORDER.BACKWARD)){
|
|
121
121
|
// messages.reverse();
|
|
122
122
|
// }
|
|
123
|
-
let e=tools.formatMsgs({messages:p,senders:d,groups:a});s({isFinished:i,messages:e})},m=utils.isContinuous(l,"messageIndex"),u=p.length,y=i&&r.count>u;return y||!m?utils.isEmpty(r.names)?t.getMessages(n).then(t=>{let n=[],o=[];utils.forEach(t.messages,e=>{let t=utils.find(p,t=>utils.isEqual(t.messageId,e.messageId));if(utils.isEqual(t,-1))n.push(e);else{let e=p[t];o.push(e)}}),e.insertBatchMsgs({msgs:n});let i=tools.formatMsgs({messages:o,senders:d,groups:a}),r=n.concat(i);r=utils.quickSort(r,(e,t)=>e.sentTime<t.sentTime),s({isFinished:t.isFinished,messages:r})},o):c():void c()})}),s.searchMessages=t=>e.searchMessages(t).then(e=>{let{total:t,list:n,groups:s,senders:o,isFinished:i}=e;return n=utils.map(n,e=>{let{matchedList:t,matchedCount:n,conversationType:i,conversationId:r}=e,a=tools.formatMsgs({messages:t,senders:o,groups:s});return{matchedList:a,matchedCount:n,conversationType:i,conversationId:r}}),{total:t,list:n,isFinished:i}}),s}function Socket(e){let t=["connect","disconnect","getDevice","isConnected","getCurrentUser"],n=common.formatProvider(t,e);return n}function Chatroom(e){let t=t=>e.joinChatroom(t),n=t=>e.quitChatroom(t);return{joinChatroom:t,quitChatroom:n}}let init$1=({appkey:e,io:t,emitter:n,web:s,client:o})=>{let{SIGNAL_NAME:
|
|
124
|
-
t.off(
|
|
125
|
-
return t.setConfig({isPC:!0,$conversation:
|
|
123
|
+
let e=tools.formatMsgs({messages:p,senders:d,groups:a});s({isFinished:i,messages:e})},m=utils.isContinuous(l,"messageIndex"),u=p.length,y=i&&r.count>u;return y||!m?utils.isEmpty(r.names)?t.getMessages(n).then(t=>{let n=[],o=[];utils.forEach(t.messages,e=>{let t=utils.find(p,t=>utils.isEqual(t.messageId,e.messageId));if(utils.isEqual(t,-1))n.push(e);else{let e=p[t];o.push(e)}}),e.insertBatchMsgs({msgs:n});let i=tools.formatMsgs({messages:o,senders:d,groups:a}),r=n.concat(i);r=utils.quickSort(r,(e,t)=>e.sentTime<t.sentTime),s({isFinished:t.isFinished,messages:r})},o):c():void c()})}),s.searchMessages=t=>e.searchMessages(t).then(e=>{let{total:t,list:n,groups:s,senders:o,isFinished:i}=e;return n=utils.map(n,e=>{let{matchedList:t,matchedCount:n,conversationType:i,conversationId:r}=e,a=tools.formatMsgs({messages:t,senders:o,groups:s});return{matchedList:a,matchedCount:n,conversationType:i,conversationId:r}}),{total:t,list:n,isFinished:i}}),s}function Socket(e){let t=["connect","disconnect","getDevice","isConnected","getCurrentUser"],n=common.formatProvider(t,e);return n}function Chatroom(e){let t=t=>e.joinChatroom(t),n=t=>e.quitChatroom(t);return{joinChatroom:t,quitChatroom:n}}let init$1=({appkey:e,io:t,emitter:n,web:s,client:o,logger:i})=>{let{SIGNAL_NAME:r}=ENUM;// 移除 Web 监听
|
|
124
|
+
t.off(r.CMD_CONVERSATION_CHANGED),t.off(r.CONN_CHANGED),t.off(r.CMD_RECEIVED);let a=common.ConversationUtils(),d=JGChatPCClient.init(e,{...s,emitter:n,io:t,ENUM,utils,common,MessageCacher,conversationUtils:a,tools,Storage}),p=Socket(d.socket),l=Conversation(d.conversation,{webAgent:s.conversation,conversationUtils:a}),c=Message(d.message,{webAgent:s.message}),m=Chatroom(s.chatroom);// 告知 IO 模块当前是 PC 端,做特殊处理,例如:同步会话列表
|
|
125
|
+
return t.setConfig({isPC:!0,$conversation:d.conversation,$socket:d.socket,$message:d.message,logger:i}),{socket:p,conversation:l,message:c,chatroom:m}};var Desktop={init:init$1};/*
|
|
126
126
|
let option = {
|
|
127
127
|
name: 'dbname',
|
|
128
128
|
version: 'dbversion',
|