easemob-websdk 5.1.3 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/bundle/im-sdk-web.iife.js +1 -1
  2. package/cache/cache-types.d.ts +2 -2
  3. package/chat-client.d.ts +17 -2
  4. package/chunks/chat-manager-BB7wYWYG.js +2 -0
  5. package/chunks/chat-manager-auF_3s3R.cjs +1 -0
  6. package/chunks/common-Cg-lTASK.cjs +1 -0
  7. package/chunks/common-gbNWJrBc.js +1 -0
  8. package/chunks/{group-user-info-resolver-B-dyr__b.cjs → group-user-info-resolver-BNwtC7dY.cjs} +1 -1
  9. package/chunks/{group-user-info-resolver-D6AQAHEE.js → group-user-info-resolver-rs5Fnr0l.js} +1 -1
  10. package/chunks/index-BUNbI8gf.cjs +1 -0
  11. package/chunks/index-BxMCMoWN.js +1 -0
  12. package/chunks/index-C7fO2X0x.cjs +1 -0
  13. package/chunks/index-C_EMU0-3.js +1 -0
  14. package/chunks/index-CsqE2tfH.js +1 -0
  15. package/chunks/index-DeJuR3uW.cjs +1 -0
  16. package/chunks/index-Dknccp9Q.js +1 -0
  17. package/chunks/index-P1vnLSK2.cjs +1 -0
  18. package/chunks/multibody-content-BHb-Au8Q.js +1 -0
  19. package/chunks/multibody-content-BmdQukoX.cjs +1 -0
  20. package/chunks/{push-manager-CSIKhoPe.js → push-manager-BO3xq-7O.js} +1 -1
  21. package/chunks/{push-manager-D7RDsKuv.cjs → push-manager-DMI0G9v9.cjs} +1 -1
  22. package/chunks/reflection-proto-codec-B1apL0ws.js +1 -0
  23. package/chunks/reflection-proto-codec-CYglS_mx.cjs +1 -0
  24. package/chunks/session-list-query-DMe2GZ4v.cjs +1 -0
  25. package/chunks/session-list-query-Inseic9m.js +1 -0
  26. package/chunks/{user-info-DH3aE1gm.cjs → user-info-B5St7axd.cjs} +1 -1
  27. package/chunks/{user-info-7QzMa7bR.js → user-info-BkqJHgja.js} +1 -1
  28. package/core/index.d.ts +1 -1
  29. package/core/message/attachment-downloader.d.ts +4 -1
  30. package/core/message/message-sender.d.ts +19 -4
  31. package/core/message/prepare-text-translation.d.ts +7 -0
  32. package/index.cjs +1 -1
  33. package/index.d.ts +3 -2
  34. package/index.js +2 -2
  35. package/managers/chat/index.cjs +1 -1
  36. package/managers/chat/index.js +1 -1
  37. package/managers/chat-manager.d.ts +128 -7
  38. package/managers/chat-thread/index.cjs +1 -1
  39. package/managers/chat-thread/index.js +1 -1
  40. package/managers/chatroom/index.cjs +1 -1
  41. package/managers/chatroom/index.js +1 -1
  42. package/managers/contact/index.cjs +1 -1
  43. package/managers/contact/index.js +1 -1
  44. package/managers/group/index.cjs +1 -1
  45. package/managers/group/index.js +1 -1
  46. package/managers/presence/index.cjs +1 -1
  47. package/managers/presence/index.js +1 -1
  48. package/managers/push/index.cjs +1 -1
  49. package/managers/push/index.js +1 -1
  50. package/managers/user-info/index.cjs +1 -1
  51. package/managers/user-info/index.js +1 -1
  52. package/message/combine-payload-codec.d.ts +2 -2
  53. package/message/combine-payload-file.d.ts +11 -0
  54. package/message/create-message.d.ts +16 -4
  55. package/message/create-multibody-message.d.ts +31 -0
  56. package/message/message-snapshot.d.ts +2 -1
  57. package/message/multibody-content.d.ts +35 -0
  58. package/message/translations.d.ts +7 -0
  59. package/package.json +1 -1
  60. package/platform/image/miniapp-image-processor.d.ts +10 -6
  61. package/protocol/msync/codec.d.ts +3 -0
  62. package/protocol/msync/message-payload-decoder.d.ts +5 -1
  63. package/protocol/session-list/payload-decoder.d.ts +2 -2
  64. package/types/chat-manager.d.ts +2 -2
  65. package/types/conversation.d.ts +2 -2
  66. package/types/index.d.ts +33 -9
  67. package/types/message-create.d.ts +130 -2
  68. package/upload/attachment-uploader.d.ts +8 -0
  69. package/validators/message-create.d.ts +25 -2
  70. package/chunks/chat-manager-BI-6bEor.cjs +0 -1
  71. package/chunks/chat-manager-nXOTpJ01.js +0 -2
  72. package/chunks/common-DHQukb7J.js +0 -1
  73. package/chunks/common-tHGz9VBk.cjs +0 -1
  74. package/chunks/index-CneY58NJ.js +0 -1
  75. package/chunks/index-DJPAjXAp.cjs +0 -1
  76. package/chunks/index-DtWkVcfb.cjs +0 -1
  77. package/chunks/index-DxjmfFL7.js +0 -1
  78. package/chunks/reflection-proto-codec-7r8Sei3y.js +0 -1
  79. package/chunks/reflection-proto-codec-CwrIKT1L.cjs +0 -1
  80. package/chunks/session-list-query-C3iQvQxK.cjs +0 -1
  81. package/chunks/session-list-query-Cdpiw_IZ.js +0 -1
@@ -22,8 +22,8 @@ export interface MessageSnippet extends Readonly<Partial<Omit<Message, 'type' |
22
22
  readonly msgId: string;
23
23
  /** [zh-CN] 消息类型。 [en-US] Message type. */
24
24
  readonly type: string;
25
- /** [zh-CN] 消息体摘要。 [en-US] Message body snippet. */
26
- readonly body: Record<string, unknown>;
25
+ /** [zh-CN] 消息体摘要。复合消息时这里直接是分段数组。 [en-US] Message body snippet. For a multi_body message, this is the segment array. */
26
+ readonly body: Record<string, unknown> | ReadonlyArray<Record<string, unknown>>;
27
27
  /** [zh-CN] 消息扩展字段,与 onMessage 的 ext 一致;旧缓存可能缺失。 [en-US] Message extension fields, matching onMessage ext; may be absent in legacy caches. */
28
28
  readonly ext?: Record<string, unknown>;
29
29
  /** [zh-CN] 消息时间戳,单位毫秒。 [en-US] Message timestamp in milliseconds. */
package/chat-client.d.ts CHANGED
@@ -132,6 +132,17 @@ export declare class ChatClient {
132
132
  * @returns {ConnectionState} [zh-CN] 返回当前连接状态枚举值。 [en-US] Returns the enum value of the current connection state.
133
133
  */
134
134
  getConnectionState(): ConnectionState;
135
+ /**
136
+ * [zh-CN] 获取 SDK 版本号。
137
+ * [en-US] Returns the SDK version.
138
+ *
139
+ * @example
140
+ * ```ts
141
+ * const version = client.getVersion();
142
+ * ```
143
+ * @returns {string} [zh-CN] SDK 版本号。 [en-US] The SDK version.
144
+ */
145
+ getVersion(): string;
135
146
  /**
136
147
  * [zh-CN] 获取当前登录用户 ID。
137
148
  * [en-US] Gets the current logged-in user ID.
@@ -423,8 +434,11 @@ export declare class ChatClient {
423
434
  /**
424
435
  * @internal
425
436
  * [zh-CN] 执行底层消息发送流程,供 `ChatManager.sendMessage` 内部调用。
437
+ * 文本消息的 `body.targetLanguages` 非空时,先翻译再发送;译文位于返回消息的 `body.translations`,原文保留,传入对象不被修改。翻译失败时不发送并返回翻译错误。
426
438
  * [en-US] Runs the low-level message sending flow for internal use by `ChatManager.sendMessage`.
427
439
  *
440
+ * Text messages with non-empty `body.targetLanguages` are translated before sending. Translations appear in the returned message's `body.translations`; the original text is preserved and the input is not mutated. Translation failure prevents sending and returns the translation error.
441
+ *
428
442
  * @example [zh-CN] 发送消息 [en-US] Send a message.
429
443
  * ```ts
430
444
  * const sent = await client.sendMessage(message);
@@ -434,6 +448,7 @@ export declare class ChatClient {
434
448
  * @returns {Promise<Message>} [zh-CN] 返回经过发送流程处理后的消息对象。 [en-US] Returns the message object after the sending pipeline completes.
435
449
  */
436
450
  sendMessage(message: Message, options?: SendMessageOptions): Promise<Message>;
451
+ private sendTranslatedMessage;
437
452
  private waitForSendConnectionRecovery;
438
453
  /**
439
454
  * @internal
@@ -510,9 +525,9 @@ export declare class ChatClient {
510
525
  * const file = await client.downloadAttachment(message);
511
526
  * ```
512
527
  * @param message - [zh-CN] 包含附件信息的消息对象。该参数必传。 [en-US] The message object containing attachment metadata. This parameter is required.
513
- * @returns {Promise<MessageAttachmentDownloadResult>} [zh-CN] 返回附件下载结果。 [en-US] Returns the attachment download result.
528
+ * @returns {Promise<MessageAttachmentDownloadResult | ReadonlyArray<MessageAttachmentDownloadResult>>} [zh-CN] 普通附件消息返回单个下载结果。复合消息按分段顺序返回全部图片、语音、视频和文件附件。 [en-US] Returns one download result for a regular attachment message. A multi_body message returns every image, voice, video, and file attachment in segment order.
514
529
  */
515
- downloadAttachment(message: Message): Promise<MessageAttachmentDownloadResult>;
530
+ downloadAttachment(message: Message): Promise<MessageAttachmentDownloadResult | ReadonlyArray<MessageAttachmentDownloadResult>>;
516
531
  /**
517
532
  * @internal
518
533
  * [zh-CN] 解析服务端消息元数据载荷为标准消息对象。
@@ -0,0 +1,2 @@
1
+ import{g as e,V as t,E as r,h as a,i,p as n,j as s,S as o,k as d,l,n as c,o as g,q as m,A as u,U as p,r as h,R as y,s as v,t as f,m as I,C as b}from"./common-gbNWJrBc.js";import{i as T,s as _}from"./cache-utils-B99glc0H.js";import{i as C,c as E,a as L,t as w,b as O,h as N}from"./multibody-content-BHb-Au8Q.js";import{h as R,t as M}from"./session-list-query-Inseic9m.js";import{m as A,r as U}from"./group-user-info-resolver-rs5Fnr0l.js";import{ZodError as S,z as x}from"zod";import{l as D}from"./light-DImBnNes.js";import{c as $}from"./query-params-Bu3Xq4b6.js";const k={DISCONNECTED:"disconnected",CONNECTING:"connecting",CONNECTED:"connected",RECONNECTING:"reconnecting",RECONNECT_FAILED:"reconnectFailed"},V={CONNECTING:"onConnecting",CONNECTED:"onConnected",DISCONNECTED:"onDisconnected",RECONNECT_FAILED:"onReconnectFailed",TOKEN_WILL_EXPIRE:"onTokenWillExpire",TOKEN_EXPIRED:"onTokenExpired",OFFLINE_MESSAGE_SYNC_START:"onOfflineMessageSyncStart",OFFLINE_MESSAGE_SYNC_FINISH:"onOfflineMessageSyncFinish"},P={SEND_TIMEOUT:"onSendTimeout",GROUP_NOTIFY:"onGroupNotify",CHATROOM_NOTIFY:"onChatRoomNotify",CHAT_THREAD_NOTIFY:"onChatThreadNotify",USER_INFO_NOTIFY:"onUserInfoNotify",MESSAGE_SENT:"__internal:onMessageSent"},q={LOGIN:"login",RECONNECT:"reconnect",ONLINE:"online",OFFLINE_RECOVER:"offline-recover",HEARTBEAT_FAILED:"heartbeat-failed",SEND_TIMEOUT:"send-timeout",CLOSE:"close",ERROR:"error",TIMEOUT:"timeout",LIMIT:"limit",OFFLINE:"offline",TOKEN_EXPIRED:"token-expired"},F=/* @__PURE__ */new WeakMap,B=e=>F.get(e),G=(e,t)=>{const r=F.get(e);r&&F.set(t,r)};const z=new class{constructor(){this.store=/* @__PURE__ */new Map}set(e,t){e&&this.store.set(e,t)}get(e){if(e)return this.store.get(e)}consume(e){const t=this.get(e);return t&&this.store.delete(e),t}delete(e){e&&this.store.delete(e)}clear(){this.store.clear()}},j=e=>{if((e=>"undefined"!=typeof File&&e instanceof File)(e)){if("undefined"==typeof URL||"function"!=typeof URL.createObjectURL)return;return URL.createObjectURL(e)}return(e=>"object"==typeof e&&null!==e&&"path"in e&&"string"==typeof e.path)(e)?e.path:(e=>"object"==typeof e&&null!==e&&"uri"in e&&"string"==typeof e.uri)(e)?e.uri:void 0},H=()=>{const t=e().crypto;return t&&"function"==typeof t.randomUUID?t.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`},X=300,K=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),Q=(e,r,a)=>{throw new t(e,{code:a,details:{fields:[{path:r,message:e,rule:"invalid_format"}]}})},W=e=>{if("combine"!==e.type)return 0;const t=e.combineLevel;return"number"==typeof t?t:K(e.body)&&"number"==typeof e.body.combineLevel?e.body.combineLevel:0},Y=(e,t)=>{if(e.sender.userId||Q(`messageList[${t}] sender.userId is required`,`messageList[${t}].sender.userId`,r.COMBINE_INVALID_INPUT),e.conversationId&&["singleChat","groupChat","chatRoom"].includes(e.conversationType)||Q(`messageList[${t}] conversation is invalid`,`messageList[${t}].conversationId`,r.COMBINE_INVALID_INPUT),(!Number.isInteger(e.timestamp)||e.timestamp<=0)&&Q(`messageList[${t}] timestamp must be positive integer`,`messageList[${t}].timestamp`,r.COMBINE_INVALID_INPUT),"multi_body"===e.type){const i=e.body;a=i,!Array.isArray(a)||i.length<2?Q(`messageList[${t}] body must contain at least 2 segments`,`messageList[${t}].body`,r.COMBINE_INVALID_INPUT):i.forEach((e,a)=>{K(e)&&"string"==typeof e.type&&C(e.type)||Q(`messageList[${t}].body[${a}] is not allowed in a multi_body message`,`messageList[${t}].body[${a}]`,r.COMBINE_INVALID_INPUT)})}else K(e.body)||Q(`messageList[${t}] body must be object`,`messageList[${t}].body`,r.COMBINE_INVALID_INPUT);var a;if("combine"===e.type){const a=W(e);(!Number.isInteger(a)||a<0)&&Q(`messageList[${t}] combineLevel is invalid`,`messageList[${t}].combineLevel`,r.COMBINE_INVALID_INPUT),a>10&&Q(`messageList[${t}] combineLevel exceeds limit`,`messageList[${t}].combineLevel`,r.COMBINE_LEVEL_EXCEEDED)}},Z=(e,t=300)=>{(!Number.isInteger(e)||e<=0)&&Q("messageList must not be empty","messageList",r.COMBINE_INVALID_INPUT),(!Number.isInteger(t)||t<=0||t>300)&&Q("max items is invalid","maxItems",r.COMBINE_INVALID_INPUT),e>t&&Q(`messageList max length is ${t}`,"messageList",r.COMBINE_ITEM_LIMIT_EXCEEDED)},J=e=>{Z(e.length);for(let t=0;t<e.length;t+=1){const a=e[t];void 0!==a?Y(a,t):Q(`messageList[${t}] is required`,`messageList[${t}]`,r.COMBINE_INVALID_INPUT)}},ee=e=>{let t=0;for(const r of e){if("combine"!==r.type)continue;const e=W(r);e>t&&(t=e)}return t+1},te=e=>{(!Number.isInteger(e)||e<=0)&&Q("combineLevel must be positive integer","combineLevel",r.COMBINE_INVALID_INPUT),e>10&&Q("combineLevel must be <= 10","combineLevel",r.COMBINE_LEVEL_EXCEEDED)};class re{static validate(e,a){try{return{success:!0,data:e.parse(a)}}catch(i){if(i instanceof S){const e=i.errors.map(e=>({path:e.path.length>0?e.path.join("."):"root",message:e.message,rule:e.code})),a=`Validation failed: ${e.map(e=>`${e.path}: ${e.message}`).join("; ")}`,n=i.errors.some(e=>"invalid_type"===e.code&&"undefined"===e.received)?r.VALIDATION_REQUIRED:r.VALIDATION_INVALID_FORMAT;return{success:!1,error:new t(a,{code:n,details:{fields:e}})}}return{success:!1,error:new t("Unknown validation error",{code:r.VALIDATION_UNKNOWN,details:{fields:[]}})}}}static validateOrThrow(e,a){const i=this.validate(e,a);if(i.success&&void 0!==i.data)return i.data;if(i.error)throw i.error;throw new t("Unknown validation error",{code:r.VALIDATION_UNKNOWN,details:{fields:[]}})}static safeParse(e,t){return this.validate(e,t)}}const ae=e=>{const{orgName:t,appName:r}=n(e.appKey);return`/${t}/${r}`},ie=e=>{const t=new Uint8Array(D.util.base64.length(e));return D.util.base64.decode(e,t,0),t},ne=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),se=async e=>{try{return await e()}catch(t){if(!(t instanceof i))throw t;const e=(e=>{const t="string"==typeof e.details?.serverMessage?e.details.serverMessage:void 0;switch(e.code){case r.SERVICE_NOT_ENABLED:case r.TRANSLATE_SERVICE_NOT_ENABLED:return"Translation service is not enabled";case r.TRANSLATE_PARAM_INVALID:return t?.includes("too long")?"Translation text is too long":t?.includes("target language")?"Invalid target language":"Invalid translation request";case r.TRANSLATE_USAGE_LIMIT:return"Translation quota has been reached";case r.TRANSLATE_FAILED:return"Translation service error";default:return}})(t);if(!e)throw t;throw new i(`REST business error: ${e}`,{code:t.code,details:t.details})}},oe=e=>"string"==typeof e?e:"number"==typeof e||"boolean"==typeof e||"bigint"==typeof e?String(e):"",de=e=>{if("string"!=typeof e)return"";const t=e.trim();return t&&"undefined"!==t&&"null"!==t?t:""},le=e=>({userId:e}),ce=(e,t)=>{if(!ne(e)||!ne(e.data))throw a({apiName:t,message:`${t} response data is invalid`,mapped:!1});return e.data},ge=(e,t)=>{if(!ne(e)||!Array.isArray(e.data))throw a({apiName:t,message:`${t} response data is invalid`,mapped:!1});return e.data},me=(e,t)=>Array.isArray(e)?e:ge(e,t),ue=async(e,t,r)=>{const i=await se(()=>e.post(`${ae(t)}/users/${t.userId}/translate`,{text:r.text,to:[...r.targetLanguages]},{operation:"translateMessage"})),n=me(i,"translateMessage"),s=ne(n[0])?n[0]:null;if(!s)throw a({apiName:"translateMessage",message:"translateMessage response data is invalid",mapped:!1});const o=Array.isArray(s.translations)?s.translations:[],d=ne(s.detectedLanguage)?s.detectedLanguage:void 0;return{detectedLanguage:d&&"string"==typeof d.language?{language:d.language,score:"number"==typeof d.score?d.score:Number(d.score??0)}:void 0,translations:o.map(e=>ne(e)&&"string"==typeof e.text&&"string"==typeof e.to?{text:e.text,to:e.to}:null).filter(e=>null!==e)}},pe={txt:"text",img:"image",video:"video",file:"file",loc:"location",custom:"custom",combine:"combine"},he={text:"txt",image:"img",video:"video",file:"file",location:"loc",custom:"custom",combine:"combine"},ye={chat:"singleChat",chatroom:"chatRoom",groupchat:"groupChat",singleChat:"singleChat",chatRoom:"chatRoom",groupChat:"groupChat"},ve=(e,t,r)=>{if(!t)return"";if(t.includes("em-redirect"))return t;const{orgName:a,appName:i}=n(e.appKey),o=t.indexOf("/chatfiles/"),d=o>=0?t.slice(o):t,l=`${e.restBaseUrl}/${a}/${i}${d}`;return s(l,r)},fe=e=>{if(!e||"object"!=typeof e)return;if(Array.isArray(e))return e;const t=Object.values(e),r=[];for(const a of t)Array.isArray(a)&&r.push(...a);return r.length>0?r:void 0},Ie=(e,t,r)=>{const a=oe(r.contentType??r.type),i=he[a];if(!i)return null;const n=ne(r.content)?r.content:{},s=((e,t)=>{const r=oe(t.conversationType);if("groupchat"===r||"chatroom"===r)return oe(t.receiverId);const a=oe(t.senderId);return a===e?oe(t.receiverId):a})(t,r),o=ye[oe(r.conversationType)]??"singleChat",d={msgServerId:oe(r.messageId),msgLocalId:oe(r.messageId),from:oe(r.senderId),to:oe(r.receiverId),conversationId:s,conversationType:o,type:i,ext:ne(r.ext)?r.ext:{},timestamp:"number"==typeof r.sentTime?r.sentTime:new Date(oe(r.sentTime)).getTime(),sender:{userId:oe(r.senderId)},highlight:fe(r.highlight),text:"string"==typeof r.text?r.text:void 0};let l;const c=oe(n.remotePath??n.url),g=oe(n.secret??n.secretKey);switch(i){case"txt":l={type:"txt",content:oe(n.message??r.text)};break;case"img":{const t=ve(e,c,g);l={type:"img",url:t,thumb:n.thumb?ve(e,oe(n.thumb),oe(n.thumb_secret??n.thumbnailSecretKey)):`${t}&thumbnail=true`,secret:g,width:Number(n.width??(ne(n.size)?n.size.width:0))||0,height:Number(n.height??(ne(n.size)?n.size.height:0))||0,fileLength:Number(n.file_length??n.fileLength??0)};break}case"video":l={type:"video",url:ve(e,c,g),thumb:n.thumb||n.thumbnailRemotePath?ve(e,oe(n.thumb??n.thumbnailRemotePath),oe(n.thumb_secret??n.thumbnailSecretKey)):"",secret:g,filename:oe(n.filename??n.displayName),duration:Number(n.length??n.duration??0),fileLength:Number(n.file_length??n.fileLength??0)};break;case"file":l={type:"file",url:ve(e,c,g),secret:g,filename:oe(n.filename??n.displayName),fileLength:Number(n.file_length??n.fileLength??0)};break;case"loc":l={type:"loc",latitude:Number(n.lat??n.latitude??0),longitude:Number(n.lng??n.longitude??0),address:oe(n.addr??n.address),buildingName:oe(n.buildingName)};break;case"custom":l={type:"custom",customEvent:oe(n.customEvent),customExts:ne(n.customExts)?n.customExts:{}};break;default:return null}return{...d,body:l}},be=async(e,t,r)=>{const a=`${ae(t)}/users/${t.userId}/messages/search/get`,i=((e,t)=>{const{option:r,pageNum:a=1,pageSize:i=20}=e,n=r.keywordList.map(e=>e.trim()).filter(e=>e.length>0),s={searchMode:"default",highlightEnable:!0,page:a,size:i};return 1===n.length?s.keyword=n[0]:(s.keywords=n,s.keywordMatch="and"===r.keywordListMatchType?"all":"any"),r.conversationId&&("singleChat"===r.conversationType?s.participantPairs=[{userId1:t,userId2:r.conversationId}]:"groupChat"===r.conversationType?s.groupIds=[r.conversationId]:"chatRoom"===r.conversationType&&(s.chatroomIds=[r.conversationId])),r.msgTypes&&r.msgTypes.length>0&&(s.contentType=r.msgTypes.map(e=>pe[e]??e).join(",")),void 0!==r.startTime&&(s.startTime=r.startTime),void 0!==r.endTime&&(s.endTime=r.endTime),r.searchScope&&(s.searchExt=r.searchScope),r.direction&&(s.sort="up"===r.direction?"sentTime:asc":"sentTime:desc"),{data:s}})(r,t.userId),n=await e.post(a,i,{operation:"searchMessages"}),s=ne(n)?n:{},o=ne(s.data)?s.data:s,d=ne(o.data)?o.data:o,l=Array.isArray(d.items)?d.items:Array.isArray(d.list)?d.list:[],c=ne(d.pagination)?d.pagination:d,g=Number(c.pageNum??c.page??r.pageNum??1),m=Number(c.pageSize??c.size??r.pageSize??20),u=Number(c.totalPages??0),p=1===c.isFinished||g>=u,h=[];for(const y of l){if(!ne(y))continue;const e=Ie(t,t.userId,y);e&&h.push(e)}return{messages:h,pageNum:g,pageSize:m,totalPages:u,isLast:p}},Te={common:{},apis:{sendMessage:{range:"1,4,100,108,110,202,210,213-215,219-222,300-301,303,305,402,405-406,500-501,505-510,602-603,606-607,1200,1299",localErrors:{sendMessage:{operation_cancelled:{code:1,retryable:!1},upload_invalid_appkey:{code:100,retryable:!1},validation_invalid:{code:110,retryable:!1},not_connected:{code:300,retryable:!0},request_timeout:{code:301,retryable:!0},send_failed:{code:303,retryable:!1},upload_failed:{code:402,retryable:!0},file_too_large:{code:405,retryable:!1},file_content_improper:{code:406,retryable:!1},encode_failed:{code:500,retryable:!1}}},errors:{SERVICE_LIMIT_EXCEEDED:{code:4,retryable:!1},TOKEN_EXPIRED:{code:108,retryable:!1},AUTH_FAILED:{code:202,retryable:!1},PERMISSION_DENIED:{code:210,retryable:!1},BIND_ANOTHER_DEVICE:{code:213,retryable:!1},TOO_MANY_DEVICES:{code:214,retryable:!1},USER_MUTED:{code:215,retryable:!1},USER_MUTED_BY_ADMIN:{code:219,retryable:!1},USER_DEVICE_CHANGED:{code:220,retryable:!1},USER_NOT_ON_ROSTER:{code:221,retryable:!1},BLOCKED_BY_RECIPIENT:{code:222,retryable:!1,aliases:["blocked"]},SERVER_SERVING_DISABLED:{code:305,retryable:!1},MESSAGE_INCLUDE_ILLEGAL_CONTENT:{code:501,retryable:!1},SERVICE_NOT_ENABLED:{code:505,retryable:!1},MESSAGE_EXPIRED:{code:506,retryable:!1},MESSAGE_ILLEGAL_WHITELIST:{code:507,retryable:!1},MESSAGE_EXTERNAL_LOGIC_BLOCKED:{code:508,retryable:!1},MESSAGE_CURRENT_LIMITING:{code:509,retryable:!0},MESSAGE_SIZE_LIMIT:{code:510,retryable:!1},GROUP_NOT_JOINED:{code:602,retryable:!1},GROUP_PERMISSION_DENIED:{code:603,retryable:!1},GROUP_NOT_EXIST:{code:606,retryable:!1},GROUP_DISABLED:{code:607,retryable:!1},MESSAGE_BLOCKED:{code:1200,retryable:!1},THIRD_DEFAULT_FAILED:{code:1299,retryable:!1}}},getHistoryMessages:{range:"4,110,202,505",localErrors:{getHistoryMessages:{validation_invalid:{code:110,retryable:!1}}},errors:{service_not_enabled:{code:505,retryable:!1},page_size_exceeded:{code:110,aliases:["pull number cannot be greater","limit is to large"],retryable:!1}}},removeHistoryMessages:{range:"110,112,202,505",localErrors:{removeHistoryMessages:{validation_invalid:{code:110,retryable:!1}}},errors:{service_not_enabled:{code:505,retryable:!1},query_param_reaches_limit:{code:112,aliases:["delete msg list limit"],retryable:!1}}},getGroupMessageReadUsers:{range:"4,110,500",localErrors:{getGroupMessageReadUsers:{validation_invalid:{code:110,retryable:!1}}},errors:{message_not_found:{code:500,retryable:!1}}},recallMessage:{range:"110,201,300,504,505",localErrors:{recallMessage:{validation_invalid:{code:110,retryable:!1}}},errors:{message_invalid:{code:110,retryable:!1},not_login:{code:201,retryable:!0},not_connected:{code:300,retryable:!0},recall_time_limit:{code:504,retryable:!1},recall_disabled:{code:505,retryable:!1}}},updateMessage:{range:"110,111,201,210,300,511",localErrors:{modifyMessage:{validation_invalid:{code:110,retryable:!1},unsupported_type:{code:111,retryable:!1}}},errors:{message_invalid:{code:110,retryable:!1},unsupported_type:{code:111,retryable:!1},not_login:{code:201,retryable:!0},permission_denied:{code:210,retryable:!1},not_connected:{code:300,retryable:!0},edit_failed:{code:511,retryable:!0}}},downloadMessageAttachment:{range:"400,401,403,407",localErrors:{downloadAttachment:{validation_invalid:{code:401,retryable:!1}}},errors:{not_found:{code:400,httpStatus:404,retryable:!1},invalid:{code:401,retryable:!1},download_failed:{code:403,retryable:!0},expired:{code:407,httpStatus:404,retryable:!1}}},downloadAndParseCombineMessage:{range:"110,401,403,500",localErrors:{downloadAndParseCombineMessage:{validation_invalid:{code:110,retryable:!1}}},errors:{invalid_param:{code:110,retryable:!1},invalid_type:{code:500,retryable:!1},parse_failed:{code:401,retryable:!0},download_failed:{code:403,retryable:!0}}},addReaction:{range:"110,302,505,600,602,1300-1302",localErrors:{addReaction:{validation_invalid:{code:110,retryable:!1}}},errors:{reaction_already_operated:{code:1301,retryable:!1},reaction_reach_limit:{code:1300,retryable:!1},group_not_joined:{code:602,retryable:!1},reaction_operation_illegal:{code:1302,retryable:!1},service_not_enabled:{code:505,retryable:!1},server_busy:{code:302,retryable:!0}}},removeReaction:{range:"110,505,1301,1302",localErrors:{removeReaction:{validation_invalid:{code:110,retryable:!1}}},errors:{service_not_enabled:{code:505,retryable:!1},reaction_operation_illegal:{code:1302,retryable:!1}}},getReactionList:{range:"110,505,600",localErrors:{getReactionList:{validation_invalid:{code:110,retryable:!1}}},errors:{service_not_enabled:{code:505,retryable:!1},group_invalid_id:{code:600,retryable:!1}}},getReactionDetail:{range:"110,505,1302",localErrors:{getReactionDetail:{validation_invalid:{code:110,retryable:!1}}},errors:{service_not_enabled:{code:505,retryable:!1},reaction_operation_illegal:{code:1302,retryable:!1}}},pinMessage:{range:"4,110",errors:{pin_msg_id_illegal:{code:110,retryable:!1},pin_message_limit:{code:4,aliases:["91101"],retryable:!1},pin_message_not_found:{code:110,aliases:["91102"],retryable:!1}}},unpinMessage:{range:"110",errors:{pin_msg_id_illegal:{code:110,retryable:!1},pin_message_not_found:{code:110,aliases:["91102","user session pin message not exist"],retryable:!1}}},getPinnedMessageList:{range:"110,111",errors:{operation_unsupported:{code:111,aliases:["15002"],retryable:!1},pin_message_not_found:{code:110,aliases:["91102","user session pin message not exist"],retryable:!1}}},getSupportedTranslationLanguages:{range:"505",errors:{service_not_enabled:{code:505,aliases:["service not open!"],retryable:!1}}},translateMessage:{range:"505,1110-1113",localErrors:{translateMessage:{validation_invalid:{code:1110,retryable:!1}}},errors:{translate_text_too_long:{code:1110,runtimeMessage:"Translation text is too long",retryable:!1},translate_param_invalid:{code:1110,runtimeMessage:"Invalid target language",retryable:!1},service_not_enabled:{code:1111,runtimeMessage:"Translation service is not enabled",aliases:["service not open!"],retryable:!1},translate_usage_limit:{code:1112,runtimeMessage:"Translation quota has been reached",aliases:["The request has reached the maximum limit"],retryable:!1},translate_failed:{code:1113,runtimeMessage:"Translation service error",aliases:["The request failed, please try again later."],retryable:!1}}},voiceMessageToText:{range:"4,110,202,407-411,505",localErrors:{voiceMessageToText:{validation_invalid:{code:407,retryable:!1},file_not_found:{code:410,retryable:!1}}},errors:{unauthorized:{code:202,retryable:!0},file_not_found:{code:410,retryable:!1,aliases:["4041001"]},file_invalid:{code:407,retryable:!1,aliases:["4001002"]},duration_too_long:{code:408,retryable:!1,aliases:["4001003"]},file_too_large:{code:411,retryable:!1,aliases:["4001001"]},service_not_enabled:{code:505,retryable:!1,aliases:["4031001"]},service_limit_exceeded:{code:4,retryable:!0,aliases:["4031002"]},voice_to_text_failed:{code:409,retryable:!0,aliases:["5021003","5001003"]}}},voiceFileToText:{range:"4,110,202,402,407-411,505",localErrors:{voiceFileToText:{validation_invalid:{code:407,retryable:!1},upload_required:{code:110,retryable:!1}}},errors:{unauthorized:{code:202,retryable:!0},upload_failed:{code:402,retryable:!0,aliases:["5021001"]},file_invalid:{code:407,retryable:!1,aliases:["4001002"]},duration_too_long:{code:408,retryable:!1,aliases:["4001003"]},file_too_large:{code:411,retryable:!1,aliases:["4001001"]},service_not_enabled:{code:505,retryable:!1,aliases:["4031001"]},service_limit_exceeded:{code:4,retryable:!0,aliases:["4031002"]},voice_to_text_failed:{code:409,retryable:!0,aliases:["5021003","5001003"]}}},getConversationList:{range:"110",localErrors:{getConversationList:{validation_invalid:{code:110,retryable:!1}}},errors:{}},getPinnedConversationList:{range:"110",localErrors:{getPinnedConversationList:{validation_invalid:{code:110,retryable:!1}}},errors:{}},getConversationListByMark:{range:"110",localErrors:{getConversationListByMark:{validation_invalid:{code:110,retryable:!1}}},errors:{}},deleteConversation:{range:"110",localErrors:{deleteConversation:{validation_invalid:{code:110,retryable:!1}}},errors:{}},clearConversationUnreadMessageCount:{range:"110,201,300,500",localErrors:{clearConversationUnreadMessageCount:{validation_invalid:{code:110,retryable:!1}}},errors:{not_login:{code:201,retryable:!0},not_connected:{code:300,retryable:!0},message_invalid:{code:500,retryable:!1}}},clearAllConversationUnreadMessageCount:{range:"201,300,500",errors:{not_login:{code:201,retryable:!0},not_connected:{code:300,retryable:!0},message_invalid:{code:500,retryable:!1}}},sendMessageReadReceipts:{range:"110,300",localErrors:{sendMessageReadReceipts:{validation_invalid:{code:110,retryable:!1}}},errors:{invalid_direction:{code:110,retryable:!1},not_connected:{code:300,retryable:!0}}},getGroupMessageReadReceipts:{range:"110,202,210,303",localErrors:{getGroupMessageReadReceipts:{validation_invalid:{code:110,retryable:!1}}},errors:{illegal_argument:{code:110,httpStatus:400,retryable:!1},auth_bad_access_token:{code:202,httpStatus:401,retryable:!1},forbidden_op:{code:210,httpStatus:403,retryable:!1},unknown_exception_error:{code:303,httpStatus:500,retryable:!0}}},setConversationPinned:{range:"110",localErrors:{setConversationPinned:{validation_invalid:{code:110,retryable:!1}}},errors:{}},addConversationMark:{range:"110",localErrors:{addConversationMark:{validation_invalid:{code:110,retryable:!1}}},errors:{}},removeConversationMark:{range:"110",localErrors:{removeConversationMark:{validation_invalid:{code:110,retryable:!1}}},errors:{}},clearAllMessagesAndConversations:{range:"",errors:{}},searchMessages:{range:"110,202,303,505",localErrors:{searchMessages:{validation_invalid:{code:110,retryable:!1}}},errors:{parameter_error:{code:110,httpStatus:400,retryable:!1,aliases:["4000005","4000006"]},token_invalid:{code:202,httpStatus:401,retryable:!1,aliases:["4010101"]},service_not_enabled:{code:505,httpStatus:403,retryable:!1,aliases:["4030204"]},app_not_found:{code:110,httpStatus:404,retryable:!1,aliases:["4040302"]},server_error:{code:303,httpStatus:500,retryable:!0,aliases:["5000701","5020801"]}}}}},_e=async(e,a)=>{if("text"!==e.type)return e;const i=e.body;if(void 0===i.targetLanguages)return e;if(!Array.isArray(i.targetLanguages)||i.targetLanguages.some(e=>"string"!=typeof e||!e.trim())||"string"!=typeof i.content||!i.content.trim())throw new t("invalid text translation parameters",{code:r.TRANSLATE_PARAM_INVALID});if(0===i.targetLanguages.length)return e;const n=[...new Set(i.targetLanguages)],s={...e,sender:{...e.sender},body:{...i,targetLanguages:n,translations:i.translations?{...i.translations}:void 0}},d=s.body,l=await a({text:d.content.trim(),targetLanguages:n}),c=Object.fromEntries(l.translations.map(e=>[e.to,e.text]));if(n.some(e=>"string"!=typeof c[e]||!c[e]))throw new o("Translation response is missing requested languages",r.TRANSLATE_FAILED);return d.translations={...d.translations,...c},s},Ce=(e,a)=>new t(a,{code:r.VALIDATION_INVALID_FORMAT,details:{fields:[{path:e,message:a,rule:"invalid_format"}]}}),Ee=(e,a)=>{if("string"!=typeof e||0===e.trim().length)throw(e=>new t(`${e} is required`,{code:r.VALIDATION_REQUIRED,details:{fields:[{path:e,message:`${e} is required`,rule:"required"}]}}))(a);return e.trim()},Le=e=>`mark_${String(e)}`,we=(e,t)=>{if("singleChat"===e||"groupChat"===e||"chatRoom"===e)return e;throw Ce(t,`${t} must be one of singleChat, groupChat, chatRoom`)},Oe=e=>"singleChat"===e?"chat":"groupChat"===e?"groupchat":"chatroom",Ne=e=>"string"==typeof e&&e.length>0?e:void 0,Re=e=>{if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e&&e.length>0){const t=Number(e);return Number.isFinite(t)?t:void 0}},Me=e=>T(e)?e:void 0,Ae=e=>{const t=Me(e);if(!t)return;const r=Ne(t.operatorId)??Ne(t.operator),a=Re(t.operationCount)??Re(t.count),i=Re(t.operationTime)??Re(t.edit_time);return r&&void 0!==a&&void 0!==i?{operatorId:r,operationCount:a,operationTime:i}:void 0},Ue=e=>"txt"===e||"text"===e?"text":"custom"===e?"custom":"cmd"===e?"cmd":"img"===e?"image":"audio"===e?"voice":"loc"===e?"location":"image"===e||"file"===e||"voice"===e||"video"===e||"location"===e||"combine"===e?e:null,Se=(e,t)=>{if("text"===e)return{content:Ne(t.msg)??Ne(t.content)??""};if("custom"===e){const e=Me(t.customExts)??Me(t.params)??{},r={};for(const[t,a]of Object.entries(e))"string"==typeof a&&(r[t]=a);return{event:Ne(t.customEvent)??Ne(t.event)??"",params:r}}if("cmd"===e)return{action:Ne(t.action)??""};if("image"===e){const e=Ne(t.url)??Ne(t.remotePath)??"";return{localUrl:"",filename:Ne(t.filename)??Ne(t.displayName),filetype:Ne(t.filetype)??"application/octet-stream",width:Re(t.width),height:Re(t.height),isGif:!0===t.isGif||1===t.subType,isOriginalImage:!0===t.isOriginalImage,originalImageUrl:e,bigImageUrl:Ne(t.bigImageUrl),thumbnailUrl:Ne(t.thumbnailUrl)??Ne(t.thumbnailRemotePath),secret:Ne(t.secret)??Ne(t.secretKey),fileLength:Re(t.fileLength)}}return"file"===e?{url:Ne(t.url)??Ne(t.remotePath),filename:Ne(t.filename)??Ne(t.displayName),filetype:Ne(t.filetype)??"application/octet-stream",fileSize:Re(t.fileSize),fileLength:Re(t.fileLength),secret:Ne(t.secret)??Ne(t.secretKey)}:"voice"===e?{url:Ne(t.url)??Ne(t.remotePath),filename:Ne(t.filename)??Ne(t.displayName),filetype:Ne(t.filetype)??"application/octet-stream",duration:Re(t.duration)??0,fileLength:Re(t.fileLength),secret:Ne(t.secret)??Ne(t.secretKey)}:"video"===e?{url:Ne(t.url)??Ne(t.remotePath),filename:Ne(t.filename)??Ne(t.displayName),filetype:Ne(t.filetype)??"application/octet-stream",duration:Re(t.duration)??0,width:Re(t.width),height:Re(t.height),fileLength:Re(t.fileLength),secret:Ne(t.secret)??Ne(t.secretKey),thumbnailUrl:Ne(t.thumbnailUrl)??Ne(t.thumbnailRemotePath)}:"location"===e?{latitude:Re(t.latitude)??0,longitude:Re(t.longitude)??0,address:Ne(t.address),buildingName:Ne(t.buildingName)}:null},xe=(e,t)=>{const r=Me(e);if(!r)return;const a=(e=>"string"==typeof e?_(e,{}):Me(e)??{})(r.payload),i=Array.isArray(a.bodies)?a.bodies:[],n=i.length>=2?E(i.map(e=>{const t=Me(e);if(!t)return null;if(L(t))return{type:"combine",body:{title:Ne(t.title)??"",summary:Ne(t.summary)??"",filename:Ne(t.filename)??Ne(t.displayName)??"combine",filetype:"application/octet-stream",url:Ne(t.url)??Ne(t.remotePath),secret:Ne(t.secret)??Ne(t.secretKey),fileLength:Re(t.fileLength)??Re(t.file_length),combineLevel:Re(t.combineLevel)??0}};const r=Ue(t.type);if(!r)return null;const a=Se(r,t);return a?{type:r,body:a}:null})):null,s=Me(i[0])??Me(a.body),o=n?.type??Ue(s?.type??a.type);if("multi_body"===n?.type&&Array.isArray(n.body)){const e=Ne(a.from)??Ne(r.from)??"",i=Ne(a.to)??t.conversationId,s=Me(a.sender),o={userId:Ne(s?.userId)??e,nickname:Ne(s?.nickname),avatarUrl:Ne(s?.avatarUrl)},d=Me(a.ext)??{},l=Ae(a.modifiedInfo??Me(a.meta)?.edit_msg);return{msgServerId:Ne(r.id)??t.messageId,msgLocalId:Ne(r.msgLocalId)??"",from:e,to:i,sender:o,conversationId:t.conversationId,conversationType:t.conversationType,type:"multi_body",sendStatus:"sent",ext:d,timestamp:Re(r.timestamp)??t.timestamp,body:n.body,direct:e===t.currentUserId?"SEND":"RECEIVE",...l?{modifiedInfo:l}:{}}}const d="multi_body"===n?.type?null:n?.body??(o&&s?Se(o,s):null);if(!o||!d)return;const l=Ne(a.from)??Ne(r.from)??"",c=Ne(a.to)??t.conversationId,g=Me(a.sender),m={userId:Ne(g?.userId)??l,nickname:Ne(g?.nickname),avatarUrl:Ne(g?.avatarUrl)},u=Me(a.ext)??{},p=Ae(a.modifiedInfo??Me(a.meta)?.edit_msg);return{msgServerId:Ne(r.id)??t.messageId,msgLocalId:Ne(r.msgLocalId)??"",from:l,to:c,sender:m,conversationId:t.conversationId,conversationType:t.conversationType,type:o,sendStatus:"sent",ext:u,timestamp:Re(r.timestamp)??t.timestamp,body:d,direct:l===t.currentUserId?"SEND":"RECEIVE",...p?{modifiedInfo:p}:{}}},De=e=>`${e.conversationType}:${e.conversationId}`,$e=e=>{const{orgName:t,appName:r}=n(e.appKey);return{orgName:t,appName:r,encodedUserId:encodeURIComponent(e.userId),encodedResource:encodeURIComponent(e.clientResource)}},ke=async(e,t,r,a)=>{const i=$e(t),n=(e=>{const t=e,r=t.conversations;if(void 0!==r){if(!Array.isArray(r)||0===r.length)throw Ce("params.conversations","params.conversations must be a non-empty array");return r.map((e,t)=>{if(!T(e))throw Ce(`params.conversations.${String(t)}`,`params.conversations.${String(t)} must be an object`);return{conversationId:Ee(e.conversationId,`params.conversations.${String(t)}.conversationId`),conversationType:we(e.conversationType,`params.conversations.${String(t)}.conversationType`)}})}return[{conversationId:Ee(t.conversationId,"params.conversationId"),conversationType:we(t.conversationType,"params.conversationType")}]})(r),s=((e,t)=>{if("number"!=typeof e||!Number.isInteger(e)||e<0||e>19)throw Ce(t,`${t} must be an integer between 0 and 19`);return e})(r.mark,"params.mark"),o=await e.request(`/${i.orgName}/${i.appName}/sdk/user/${i.encodedUserId}/user_channels/mark?resource=${i.encodedResource}`,{method:a?"POST":"DELETE",body:{mark:Le(s),targets:n.map(e=>({to:e.conversationId,type:Oe(e.conversationType)}))},operation:a?"addConversationMark":"removeConversationMark"}),d=(e=>{if(!Array.isArray(e))/* @__PURE__ */
2
+ return new Set;const t=/* @__PURE__ */new Set;return e.forEach(e=>{if(!T(e))return;const r="string"==typeof e.to?e.to.trim():"",a=(e=>"chat"===e||"singleChat"===e?"singleChat":"groupchat"===e||"groupChat"===e?"groupChat":"chatroom"===e||"chatRoom"===e?"chatRoom":null)(e.type);r&&a&&t.add(De({conversationId:r,conversationType:a}))}),t})((T(o)&&T(o.data)?o.data:{}).ignore),l=[],c=[];for(const g of n){const e={conversationId:g.conversationId,conversationType:g.conversationType};d.has(De(g))?c.push({...e,reason:"ignored_by_server"}):l.push(e)}return{succeeded:l,failed:c,mark:s,operation:a?"addMark":"removeMark"}},Ve=async(e,t,r,a)=>{const i=$e(t),n=Ee(r.conversationId,"params.conversationId"),s=we(r.conversationType,"params.conversationType"),o=Ee(r.messageId,"params.messageId");return await e.request(`/${i.orgName}/${i.appName}/sdk/user/${i.encodedUserId}/user_channel/pin?resource=${i.encodedResource}`,{method:a?"POST":"DELETE",body:{to:n,type:Oe(s),pin_msg_id:o},operation:a?"pinMessage":"unpinMessage"}),{conversationId:n,conversationType:s,messageId:o,operation:a?"pin":"unpin"}},Pe=x.enum(["singleChat","groupChat","chatRoom"]),qe=x.record(x.unknown()).refine(e=>(e=>"object"==typeof e&&null!==e&&!Array.isArray(e))(e),"ext must be an object").refine(e=>(e=>{try{return JSON.stringify(e),!0}catch{return!1}})(e),"ext must be JSON serializable"),Fe=x.object({path:x.string().min(1,"data.path is required"),size:x.number().optional(),name:x.string().optional(),type:x.string().optional()}),Be=x.object({uri:x.string().min(1,"data.uri is required"),size:x.number().optional(),name:x.string().optional(),type:x.string().optional()}),Ge="undefined"!=typeof File?x.instanceof(File):x.never(),ze=x.union([Ge,Fe,Be]),je=x.object({conversationId:x.string().min(1,"conversationId is required"),conversationType:Pe,ext:qe.optional(),timestamp:x.number().int().positive("timestamp must be a positive integer").optional(),receiverList:x.array(x.string().min(1,"receiverList item is required")).nonempty("receiverList must not be empty").optional(),deliverOnlineOnly:x.boolean().optional(),webhookEnv:x.string().optional(),priority:x.enum(["high","normal","low"]).optional(),needReadReceipt:x.boolean().optional(),isChatThread:x.boolean().optional()}),He=x.object({type:x.string().min(1,"messageList.type is required"),sender:x.object({userId:x.string().min(1,"messageList.sender.userId is required"),nickname:x.string().optional(),avatarUrl:x.string().optional()}),conversationId:x.string().min(1,"messageList.conversationId is required"),conversationType:Pe,timestamp:x.number().int().positive("messageList.timestamp must be positive"),body:x.union([x.record(x.unknown()),x.array(x.record(x.unknown())).min(2)]),combineLevel:x.number().int().min(0).max(10).optional()}).passthrough(),Xe=e=>e.superRefine((e,t)=>{e.receiverList&&"singleChat"===e.conversationType&&t.addIssue({code:x.ZodIssueCode.custom,message:"receiverList is only allowed for group or chat room conversation",path:["receiverList"]}),e.isChatThread&&"groupChat"!==e.conversationType&&t.addIssue({code:x.ZodIssueCode.custom,message:"isChatThread is only allowed for group conversation",path:["isChatThread"]}),e.needReadReceipt&&"chatRoom"===e.conversationType&&t.addIssue({code:x.ZodIssueCode.custom,message:"needReadReceipt is not allowed for chatRoom conversation",path:["needReadReceipt"]})}),Ke=Xe(je.extend({content:x.string().min(1,"content is required"),targetLanguages:x.array(x.string().min(1)).optional()})),Qe=Xe(je.extend({originalUrl:x.string().min(1,"originalUrl is required").optional(),filename:x.string().min(1,"filename is required").optional(),filetype:x.string().min(1,"filetype is required").optional(),width:x.number().positive("width must be positive").optional(),height:x.number().positive("height must be positive").optional(),isGif:x.boolean().optional(),isOriginalImage:x.boolean().optional(),fileLength:x.number().positive("fileLength must be positive").optional(),data:ze.optional(),thumbnailUrl:x.string().min(1).optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),We=Xe(je.extend({originalUrl:x.string().min(1,"originalUrl is required").optional(),filename:x.string().min(1,"filename is required").optional(),filetype:x.string().min(1,"filetype is required").optional(),fileSize:x.number().positive("fileSize must be positive").optional(),fileLength:x.number().positive("fileLength must be positive").optional(),data:ze.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),Ye=Xe(je.extend({originalUrl:x.string().min(1,"originalUrl is required").optional(),filename:x.string().min(1,"filename is required").optional(),filetype:x.string().min(1,"filetype is required").optional(),duration:x.number().positive("duration must be positive"),fileLength:x.number().positive("fileLength must be positive").optional(),data:ze.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),Ze=Xe(je.extend({originalUrl:x.string().min(1,"originalUrl is required").optional(),filename:x.string().min(1,"filename is required").optional(),filetype:x.string().min(1,"filetype is required").optional(),duration:x.number().positive("duration must be positive"),width:x.number().positive("width must be positive").optional(),height:x.number().positive("height must be positive").optional(),fileLength:x.number().positive("fileLength must be positive").optional(),thumbnailUrl:x.string().min(1).optional(),data:ze.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),Je=Xe(je.extend({latitude:x.number(),longitude:x.number(),address:x.string().min(1).optional(),buildingName:x.string().min(1).optional()})),et=Xe(je.extend({action:x.string().min(1,"action is required")})),tt=Xe(je.extend({event:x.string().min(1,"event is required"),params:x.record(x.string()).optional()})),rt=Xe(je),at=Xe(je.extend({title:x.string().min(1,"title is required"),summary:x.string().min(1,"summary is required"),compatibleText:x.string().min(1).optional(),messageList:x.array(He).min(1,"messageList must not be empty").max(300,"messageList max length is 300")})),it=e=>{const a=e?.userId?.trim();if(!a)throw new t("sender.userId is required",{code:r.VALIDATION_REQUIRED,details:{fields:[{path:"sender.userId",message:"sender.userId is required",rule:"required"}]}});return{userId:a,nickname:e?.nickname,avatarUrl:e?.avatarUrl}},nt=()=>H(),st=(e,a)=>{if(e)return e;if(!a)throw new t("url or data is required",{code:r.VALIDATION_REQUIRED,details:{fields:[{path:"url",message:"url or data is required",rule:"required"}]}});const i=j(a);if(!i)throw new t("Failed to resolve local url",{code:r.VALIDATION_INVALID_FORMAT,details:{fields:[{path:"url",message:"Failed to resolve local url",rule:"invalid_format"}]}});return i},ot=e=>!!e.isGif||(e.isOriginalImage??!1),dt=(e,t,r,a,i)=>({msgServerId:"",msgLocalId:i??H(),from:t.userId,to:e.conversationId,sender:t,conversationId:e.conversationId,conversationType:e.conversationType,type:r,sendStatus:"sending",ext:e.ext??{},timestamp:e.timestamp??Date.now(),body:a,direct:"SEND",isOnline:!0,receiverList:e.receiverList,deliverOnlineOnly:e.deliverOnlineOnly,webhookEnv:e.webhookEnv,priority:e.priority,needReadReceipt:e.needReadReceipt,isPeerRead:"singleChat"!==e.conversationType&&void 0,isChatThread:e.isChatThread}),lt=(e,t)=>{const r=re.validateOrThrow(at,e),a=r.messageList,i=it(t);J(a);const n=ee(a);te(n);const s={title:r.title,summary:r.summary,messageList:a,filename:"combine",filetype:"application/octet-stream",combineLevel:n},o=dt(r,i,"combine",s);return((e,t)=>{t&&F.set(e,t)})(o,r.compatibleText),o},ct=x.custom(e=>{if("undefined"!=typeof File&&e instanceof File)return!0;if(!e||"object"!=typeof e)return!1;const t=e;return"string"==typeof t.path&&t.path.length>0||"string"==typeof t.uri&&t.uri.length>0},{message:"data is invalid"}),gt=x.object({content:x.string().min(1,"content is required"),targetLanguages:x.array(x.string().min(1)).optional()}),mt=x.object({originalUrl:x.string().min(1).optional(),filename:x.string().min(1).optional(),filetype:x.string().min(1).optional(),width:x.number().positive().optional(),height:x.number().positive().optional(),isGif:x.boolean().optional(),isOriginalImage:x.boolean().optional(),fileLength:x.number().positive().optional(),data:ct.optional(),thumbnailUrl:x.string().min(1).optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]}),ut=x.object({originalUrl:x.string().min(1).optional(),filename:x.string().min(1).optional(),filetype:x.string().min(1).optional(),fileSize:x.number().positive().optional(),fileLength:x.number().positive().optional(),data:ct.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]}),pt=x.object({originalUrl:x.string().min(1).optional(),filename:x.string().min(1).optional(),filetype:x.string().min(1).optional(),duration:x.number().positive("duration must be positive"),fileLength:x.number().positive().optional(),data:ct.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]}),ht=x.object({originalUrl:x.string().min(1).optional(),filename:x.string().min(1).optional(),filetype:x.string().min(1).optional(),duration:x.number().positive("duration must be positive"),width:x.number().positive().optional(),height:x.number().positive().optional(),fileLength:x.number().positive().optional(),data:ct.optional(),thumbnailUrl:x.string().min(1).optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]}),yt=x.object({latitude:x.number(),longitude:x.number(),address:x.string().optional(),buildingName:x.string().optional()}),vt=x.object({event:x.string().min(1,"event is required"),params:x.record(x.string()).optional()}),ft=(e,a)=>new t(a,{code:r.VALIDATION_UNKNOWN,details:{fields:[{path:e,message:a,rule:"invalid"}]}}),It=e=>"string"==typeof e&&e.length>0,bt=(e,t)=>{const r=`bodies.${t}`;if("object"!=typeof(a=e)||null===a||Array.isArray(a)||"string"!=typeof e.type)throw ft(r,"segment is not allowed in a multi_body message");var a;if("stream"in e||"cmd"===e.type||"combine"===e.type||"multi_body"===e.type)throw ft(r,"segment cannot be command, combine, multi_body, or stream");if("text"===e.type&&!It(e.content))throw ft(`${r}.content`,"content is required");if("image"===e.type){const t=It(e.originalImageUrl)||It(e.localUrl);if("boolean"!=typeof e.isGif||"boolean"!=typeof e.isOriginalImage||!t)throw ft(r,"image segment is invalid")}if(("file"===e.type||"voice"===e.type||"video"===e.type)&&!It(e.url))throw ft(`${r}.url`,"url is required");if(("voice"===e.type||"video"===e.type)&&"number"!=typeof e.duration)throw ft(`${r}.duration`,"duration is required");if("location"===e.type&&("number"!=typeof e.latitude||"number"!=typeof e.longitude))throw ft(r,"location segment is invalid");if("custom"===e.type&&!It(e.event))throw ft(`${r}.event`,"event is required");if("text"!==e.type&&"image"!==e.type&&"file"!==e.type&&"voice"!==e.type&&"video"!==e.type&&"location"!==e.type&&"custom"!==e.type)throw ft(r,"segment is not allowed in a multi_body message")};const Tt=(e,t)=>{t&&N(e,t)},_t=(e,t)=>{const{bodies:r,...a}=e,i=re.validateOrThrow(rt,a);!function(e){if(!Array.isArray(e)||e.length<2)throw ft("bodies","bodies must contain at least 2 segments");if(e.length>20)throw ft("bodies","bodies must contain at most 20 segments");e.forEach((e,t)=>{bt(e,t)})}(r);const n=it(t),s=H(),o=[];r.forEach((e,t)=>{const r=w(e);r&&(o.push(t),z.set(O(s,t),r))});const d=((e,t,r,a)=>({msgServerId:"",msgLocalId:a??H(),from:t.userId,to:e.conversationId,sender:t,conversationId:e.conversationId,conversationType:e.conversationType,type:"multi_body",sendStatus:"sending",ext:e.ext??{},timestamp:e.timestamp??Date.now(),body:r,direct:"SEND",isOnline:!0,receiverList:e.receiverList,deliverOnlineOnly:e.deliverOnlineOnly,webhookEnv:e.webhookEnv,priority:e.priority,needReadReceipt:e.needReadReceipt,isPeerRead:"singleChat"!==e.conversationType&&void 0,isChatThread:e.isChatThread}))(i,n,r,s);return l.debug("MultiBody message created",{operation:"message.multibody.create",msgLocalId:d.msgLocalId,segmentCount:r.length,segmentTypes:r.map(e=>e.type),fileIndexes:o}),d},Ct=e=>{const{orgName:t,appName:r}=n(e.appKey);return`/api/sdk/v1/${t}/${r}`},Et=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),Lt=e=>Et(e)&&"string"==typeof e.path&&e.path.trim().length>0,wt=e=>(e=>"undefined"!=typeof File&&e instanceof File)(e)||Lt(e),Ot=e=>{if(!Et(e))return;return{data:Et(e.data)?e.data:void 0,error:Et(e.error)?e.error:void 0}},Nt=(e,t)=>{const a=Ot(e),i=a?.data?.text;if("string"!=typeof i)throw new o(`${t} response data is invalid`,r.REST_BUSINESS_UNKNOWN,{details:{api:t,response:e}});return i},Rt=(e,r,a,i="sdk")=>"auth"===i?new u(e,{code:r,details:a}):"validation"===i?new t(e,{code:r,details:a}):new o(e,r,{details:a}),Mt=e=>!(void 0===e||Et(e)&&!Array.isArray(e))||(void 0!==e?.format&&"string"!=typeof e.format||(void 0!==e?.sampleRate&&"number"!=typeof e.sampleRate||(void 0!==e?.bitsPerSample&&"number"!=typeof e.bitsPerSample||void 0!==e?.channels&&"number"!=typeof e.channels))),At=e=>{if(!e)return;const t=(e.split("#")[0]?.split("?")[0]??"").split("/").filter(Boolean);return t.length>0?t[t.length-1]:void 0},Ut=e=>{const{serviceCode:t,serviceMessage:a}=(e=>{const t=e instanceof o&&Et(e.details)?e.details:void 0,r=Ot(t?.rawResponse??t?.response??e),a=t?.serverCode??r?.error?.code,i=t?.serverMessage??r?.error?.message;return{serviceCode:"string"==typeof a||"number"==typeof a?String(a):void 0,serviceMessage:"string"==typeof i?i:void 0}})(e);if(e instanceof p)return Rt("File upload failed",r.UPLOAD_REQUEST_FAILED,{cause:e.details});if(e instanceof o&&!t)return e;if(t)switch(t){case"4041001":return Rt("File not found",r.VOICE_TO_TEXT_FILE_NOT_FOUND,{serviceCode:t,serviceMessage:a});case"4001002":return Rt("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{serviceCode:t,serviceMessage:a},"validation");case"5021001":return Rt("File upload failed",r.UPLOAD_REQUEST_FAILED,{serviceCode:t,serviceMessage:a});case"4001003":return Rt("Voice duration exceeds 60 seconds",r.VOICE_TO_TEXT_FILE_DURATION_TOO_LONG,{serviceCode:t,serviceMessage:a},"validation");case"4031001":return Rt("Voice-to-text service is not enabled",r.SERVICE_NOT_ENABLED,{serviceCode:t,serviceMessage:a});case"4031002":return Rt("Beta service usage limit exceeded",r.SERVICE_LIMIT_EXCEEDED,{serviceCode:t,serviceMessage:a});case"4001001":return"string"==typeof(i=a)&&i.toLowerCase().includes("uploaded file exceeds")?Rt("File too large",r.VOICE_TO_TEXT_FILE_TOO_LARGE,{serviceCode:t,serviceMessage:a}):Rt(a||"Missing or invalid request parameter",r.VALIDATION_REQUIRED,{serviceCode:t,serviceMessage:a},"validation");case"5021003":case"5001003":return Rt("Voice-to-text failed",r.VOICE_TO_TEXT_FAILED,{serviceCode:t,serviceMessage:a});case"4011001":return Rt(a||"Unauthorized or invalid token",r.AUTH_UNAUTHORIZED,{serviceCode:t,serviceMessage:a},"auth");default:return Rt(a||(e instanceof Error?e.message:"Voice-to-text failed"),r.VOICE_TO_TEXT_FAILED,{serviceCode:t,serviceMessage:a})}var i;return e instanceof o?Rt(e.message,e.code,e.details):Rt(e instanceof Error?e.message:"Voice-to-text failed",r.VOICE_TO_TEXT_FAILED)},St=(e,t)=>{if(!Et(a=e)||"string"!=typeof a.filename||"string"!=typeof a.filetype||"number"!=typeof a.duration||"type"in a&&void 0!==a.type&&"voice"!==a.type)throw Rt("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceMessageBody"},"validation");var a;if(Mt(t))throw Rt("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceParams"},"validation");if(!e.url)throw Rt("File not found",r.VOICE_TO_TEXT_FILE_NOT_FOUND,{path:"voiceMessageBody.url"});if(!At(e.url))throw Rt("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceMessageBody.url"},"validation");return e},xt=(e,t)=>{if(Mt(t))throw Rt("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceParams"},"validation");if(!wt(e))throw Rt("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{path:"file"},"validation");return e},Dt=async(e,a,i,n)=>{const s=St(i,n),o=At(s.url);if(!o)throw((e,r,a,i="invalid")=>new t(e,{code:r,details:{fields:[{path:a,message:e,rule:i}]}}))("File not found",r.VOICE_TO_TEXT_FILE_NOT_FOUND,"voiceMessageBody.url");try{const t=await e.post(`${Ct(a)}/speech/transcriptions`,{data:{fileId:o,username:a.userId,...n?{audio:n}:{}}},{operation:"voiceMessageToText"});return{text:Nt(t,"voiceMessageToText")}}catch(d){throw Ut(d)}},$t=x.object({keywordList:x.array(x.string()).min(1,"keywordList must not be empty").max(5,"keywordList must have at most 5 keywords").refine(e=>e.map(e=>e.trim()).filter(e=>e.length>0).length>0,"keywordList must contain at least one non-empty keyword"),keywordListMatchType:x.enum(["or","and"]).optional(),conversationId:x.string().min(1).optional(),conversationType:x.enum(["singleChat","groupChat","chatRoom"]).optional(),msgTypes:x.array(x.enum(["txt","img","video","file","loc","custom","combine"])).optional(),startTime:x.number().optional(),endTime:x.number().optional(),searchScope:x.enum(["none","with","only"]).optional(),direction:x.enum(["up","down"]).optional()}).refine(e=>void 0!==e.conversationId===(void 0!==e.conversationType),{message:"conversationId and conversationType must be provided together"}).refine(e=>void 0!==e.startTime===(void 0!==e.endTime),{message:"startTime and endTime must be provided together"}).refine(e=>void 0===e.startTime||void 0===e.endTime||e.endTime>=e.startTime,{message:"endTime must be >= startTime"}),kt=x.object({option:$t,pageNum:x.number().int().min(1).default(1),pageSize:x.number().int().min(1).max(100).default(20)}),Vt=I(b,Te),Pt=/* @__PURE__ */new Set(["image","voice","video","file","location","combine"]),qt=class{constructor(){this.client=null,this.eventContext=null,this.restClient=null,this.restBaseUrl=null,this.restToken=null}bind(e,t){this.client=e,this.eventContext=t??null,this.restClient=null,this.restBaseUrl=null,this.restToken=null}async sendMessage(e,t){return this.getClientOrThrow().sendMessage(e,t)}createTextMessage(e){return((e,t)=>{const r=re.validateOrThrow(Ke,e),a=it(t),i=nt(),n={content:r.content};return r.targetLanguages&&(n.targetLanguages=r.targetLanguages),dt(r,a,"text",n,i)})(e,this.buildMessageSenderOrThrow())}createImageMessage(e){return((e,t,r)=>{const a=re.validateOrThrow(Qe,e),i=it(t),n=nt(),s=a.data?st(void 0,a.data):"",o=a.originalUrl?d(a.originalUrl,{deriveVariants:!r?.useCustomAttachmentUpload}):void 0;a.data&&z.set(n,a.data);const l=a.isGif??!1,c={localUrl:s,filename:a.filename,filetype:a.filetype,width:a.width,height:a.height,isGif:l,isOriginalImage:ot({isGif:l,isOriginalImage:a.isOriginalImage})};return o?.originalImageUrl&&(c.originalImageUrl=o.originalImageUrl,c.bigImageUrl=o.bigImageUrl,c.thumbnailUrl=o.thumbnailUrl),void 0!==a.fileLength&&(c.fileLength=a.fileLength),a.thumbnailUrl&&(c.thumbnailUrl=a.thumbnailUrl),dt(a,i,"image",c,n)})(e,this.buildMessageSenderOrThrow(),this.getClientOrThrow().getMessageCreationOptions())}createFileMessage(e){return((e,t)=>{const r=re.validateOrThrow(We,e),a=it(t),i=nt(),n=st(r.originalUrl,r.data);r.data&&z.set(i,r.data);const s={url:n,filename:r.filename,filetype:r.filetype};return void 0!==r.fileSize&&(s.fileSize=r.fileSize),void 0!==r.fileLength&&(s.fileLength=r.fileLength),dt(r,a,"file",s,i)})(e,this.buildMessageSenderOrThrow())}createVoiceMessage(e){return((e,t)=>{const r=re.validateOrThrow(Ye,e),a=it(t),i=nt(),n=st(r.originalUrl,r.data);r.data&&z.set(i,r.data);const s={url:n,filename:r.filename,filetype:r.filetype,duration:r.duration};return void 0!==r.fileLength&&(s.fileLength=r.fileLength),dt(r,a,"voice",s,i)})(e,this.buildMessageSenderOrThrow())}createVideoMessage(e){return((e,t)=>{const r=re.validateOrThrow(Ze,e),a=it(t),i=nt(),n=st(r.originalUrl,r.data);r.data&&z.set(i,r.data);const s={url:n,filename:r.filename,filetype:r.filetype,duration:r.duration};return void 0!==r.width&&(s.width=r.width),void 0!==r.height&&(s.height=r.height),void 0!==r.fileLength&&(s.fileLength=r.fileLength),r.thumbnailUrl&&(s.thumbnailUrl=r.thumbnailUrl),dt(r,a,"video",s,i)})(e,this.buildMessageSenderOrThrow())}createLocationMessage(e){return((e,t)=>{const r=re.validateOrThrow(Je,e),a=it(t),i={latitude:r.latitude,longitude:r.longitude};return r.address&&(i.address=r.address),r.buildingName&&(i.buildingName=r.buildingName),dt(r,a,"location",i)})(e,this.buildMessageSenderOrThrow())}createCmdMessage(e){return((e,t)=>{const r=re.validateOrThrow(et,e),a=it(t),i={action:r.action};return void 0!==r.deliverOnlineOnly&&(i.deliverOnlineOnly=r.deliverOnlineOnly),dt(r,a,"cmd",i)})(e,this.buildMessageSenderOrThrow())}createCustomMessage(e){return((e,t)=>{const r=re.validateOrThrow(tt,e),a=it(t),i={event:r.event};return r.params&&(i.params=r.params),dt(r,a,"custom",i)})(e,this.buildMessageSenderOrThrow())}createCombineMessage(e){return lt(e,this.buildMessageSenderOrThrow())}createTextMessageBody(e){return(e=>{const t=re.validateOrThrow(gt,e);return{type:"text",content:t.content,...t.targetLanguages?{targetLanguages:t.targetLanguages}:{}}})(e)}createImageMessageBody(e){return((e,t)=>{const r=re.validateOrThrow(mt,e),a=r.isGif??!1,i=r.originalUrl?d(r.originalUrl,{deriveVariants:!t?.useCustomAttachmentUpload}):void 0,n={type:"image",localUrl:r.data?st(void 0,r.data):"",filename:r.filename,filetype:r.filetype,width:r.width,height:r.height,isGif:a,isOriginalImage:!!a||(r.isOriginalImage??!1)};return i?.originalImageUrl&&(n.originalImageUrl=i.originalImageUrl,n.bigImageUrl=i.bigImageUrl,n.thumbnailUrl=i.thumbnailUrl),r.thumbnailUrl&&(n.thumbnailUrl=r.thumbnailUrl),void 0!==r.fileLength&&(n.fileLength=r.fileLength),Tt(n,r.data),n})(e,this.getClientOrThrow().getMessageCreationOptions())}createFileMessageBody(e){return(e=>{const t=re.validateOrThrow(ut,e),r={type:"file",url:st(t.originalUrl,t.data),filename:t.filename,filetype:t.filetype,...void 0!==t.fileSize?{fileSize:t.fileSize}:{},...void 0!==t.fileLength?{fileLength:t.fileLength}:{}};return Tt(r,t.data),r})(e)}createVoiceMessageBody(e){return(e=>{const t=re.validateOrThrow(pt,e),r={type:"voice",url:st(t.originalUrl,t.data),filename:t.filename,filetype:t.filetype,duration:t.duration,...void 0!==t.fileLength?{fileLength:t.fileLength}:{}};return Tt(r,t.data),r})(e)}createVideoMessageBody(e){return(e=>{const t=re.validateOrThrow(ht,e),r={type:"video",url:st(t.originalUrl,t.data),filename:t.filename,filetype:t.filetype,duration:t.duration,...void 0!==t.width?{width:t.width}:{},...void 0!==t.height?{height:t.height}:{},...void 0!==t.fileLength?{fileLength:t.fileLength}:{},...t.thumbnailUrl?{thumbnailUrl:t.thumbnailUrl}:{}};return Tt(r,t.data),r})(e)}createLocationMessageBody(e){return(e=>{const t=re.validateOrThrow(yt,e);return{type:"location",latitude:t.latitude,longitude:t.longitude,...void 0!==t.address?{address:t.address}:{},...void 0!==t.buildingName?{buildingName:t.buildingName}:{}}})(e)}createCustomMessageBody(e){return(e=>{const t=re.validateOrThrow(vt,e);return{type:"custom",event:t.event,...t.params?{params:t.params}:{}}})(e)}createMultiBodyMessage(e){return _t(e,this.buildMessageSenderOrThrow())}getConversationList(e){if(void 0!==e?.mark&&(!Number.isInteger(e.mark)||e.mark<0||e.mark>19))throw new t("filter.mark must be an integer between 0 and 19",{code:r.VALIDATION_INVALID_FORMAT,details:{fields:[{path:"filter.mark",message:"filter.mark must be an integer between 0 and 19",rule:"invalid_format"}]}});const a=(this.getClientOrThrow().getCacheManager()?.loadSessionList()??[]).filter(t=>null!==t.lastMessage&&((void 0===e?.isPinned||t.isPinned===e.isPinned)&&!(void 0!==e?.mark&&!R(t,e.mark)))).map(M);return this.getClientOrThrow().markConversationAccess(a.map(e=>({conversationId:e.conversationId,type:e.conversationType}))),a}setCurrentConversation(e){this.validateConversationLocator(e),this.getClientOrThrow().getCacheManager()?.setCurrentConversation({conversationId:e.conversationId,type:e.conversationType})}resetCurrentConversation(){this.getClientOrThrow().getCacheManager()?.resetCurrentConversation()}getCurrentConversation(){const e=this.getClientOrThrow().getCacheManager()?.getCurrentConversation()??null;return e?{conversationId:e.conversationId,conversationType:e.type}:null}refreshSessionList(e){return this.getClientOrThrow().refreshSessionList(e)}async deleteConversation(e){const t=this.getRestContextOrThrow(),r=await(async(e,t,r)=>{const a=$e(t),i=Ee(r.conversationId,"params.conversationId"),n=we(r.conversationType,"params.conversationType"),s=r.deleteRoamingMessages??!1;if("boolean"!=typeof s)throw Ce("params.deleteRoamingMessages","params.deleteRoamingMessages must be a boolean");return await e.request(`/${a.orgName}/${a.appName}/user/${a.encodedUserId}/user_channel?resource=${a.encodedResource}`,{method:"DELETE",body:{channel:i,type:"groupChat"===n?"groupChat":Oe(n),delete_roam:s},operation:"deleteConversation"}),{conversationId:i,conversationType:n,operation:"delete"}})(this.getRestClient(t),t,e),a=this.getClientOrThrow(),i=a.getCacheManager()?.deleteConversation({conversationId:r.conversationId,type:r.conversationType});return i?.changed&&a.emitConversationListUpdate("local"),r}async setConversationPinned(e){const t=this.getRestContextOrThrow(),r=await(async(e,t,r)=>{const a=$e(t),i=Ee(r.conversationId,"params.conversationId"),n=we(r.conversationType,"params.conversationType");if("boolean"!=typeof r.pinned)throw Ce("params.pinned","params.pinned must be a boolean");const s="groupChat"===n?"groupChat":Oe(n),o=r.pinned?await e.post(`/${a.orgName}/${a.appName}/sdk/user/${a.encodedUserId}/user_channel/top?resource=${a.encodedResource}`,{type:s,to:i},{operation:"setConversationPinned"}):await e.delete(`/${a.orgName}/${a.appName}/sdk/user/${a.encodedUserId}/user_channel/top?type=${encodeURIComponent(s)}&to=${encodeURIComponent(i)}&resource=${a.encodedResource}`,{operation:"setConversationPinned"}),d=T(o)&&T(o.data)?o.data:{};return{conversationId:i,conversationType:n,operation:"setPinned",isPinned:"boolean"==typeof d.is_top?d.is_top:r.pinned,pinnedTime:"number"==typeof d.update_top_status_time?d.update_top_status_time:r.pinned?Date.now():0}})(this.getRestClient(t),t,e),a=this.getClientOrThrow().getCacheManager(),i=a?.applyConversationPinnedMutation({conversationId:r.conversationId,type:r.conversationType,isPinned:r.isPinned??e.pinned,pinnedTime:r.pinnedTime});return i?.changed&&this.getClientOrThrow().emitConversationListUpdate("local"),r}async addConversationMark(e){const t=this.getRestContextOrThrow(),r=await(async(e,t,r)=>ke(e,t,r,!0))(this.getRestClient(t),t,e),a=this.getClientOrThrow().getCacheManager(),i=a?.applyConversationMarkMutation({conversations:[...r.succeeded.map(e=>({...e,applied:!0})),...r.failed.map(e=>({...e,applied:!1}))],mark:r.mark,operation:r.operation});return i?.changed&&this.getClientOrThrow().emitConversationListUpdate("local"),r}async removeConversationMark(e){const t=this.getRestContextOrThrow(),r=await(async(e,t,r)=>ke(e,t,r,!1))(this.getRestClient(t),t,e),a=this.getClientOrThrow().getCacheManager(),i=a?.applyConversationMarkMutation({conversations:[...r.succeeded.map(e=>({...e,applied:!0})),...r.failed.map(e=>({...e,applied:!1}))],mark:r.mark,operation:r.operation});return i?.changed&&this.getClientOrThrow().emitConversationListUpdate("local"),r}async clearAllMessagesAndConversations(){const e=this.getRestContextOrThrow();await(async(e,t)=>{const r=$e(t);await e.post(`/${r.orgName}/${r.appName}/sdk/message/roaming/user/${r.encodedUserId}/delete/all?resource=${r.encodedResource}`,void 0,{operation:"clearAllMessagesAndConversations"})})(this.getRestClient(e),e);const t=this.getClientOrThrow(),r=t.getCacheManager()?.clearConversations();r?.changed&&t.emitConversationListUpdate("local")}async pinMessage(e){const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>Ve(e,t,r,!0))(this.getRestClient(t),t,e))}async unpinMessage(e){const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>Ve(e,t,r,!1))(this.getRestClient(t),t,e))}async getPinnedMessageList(e){const t=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t,r)=>{const a=$e(t),i=Ee(r.conversationId,"params.conversationId"),n=we(r.conversationType,"params.conversationType"),s=await e.get(`/${a.orgName}/${a.appName}/sdk/user/${a.encodedUserId}/user_channel/pin?to=${encodeURIComponent(i)}&type=${encodeURIComponent(Oe(n))}&limit=${String(20)}`,{operation:"getPinnedMessageList"}),o=T(s)&&T(s.data)?s.data:{};return{items:(Array.isArray(o.msg_infos)?o.msg_infos:[]).reduce((e,r)=>{if(!T(r))return e;const a="string"==typeof r.pin_msg_id?r.pin_msg_id:T(r.message)&&"string"==typeof r.message.id?r.message.id:"";if(!a)return e;const s="number"==typeof r.pin_opt_at?r.pin_opt_at:0,o=xe(r.message,{messageId:a,conversationId:i,conversationType:n,currentUserId:t.userId,timestamp:s});return o?(e.push({messageId:a,conversationId:i,conversationType:n,operatorId:"string"==typeof r.pin_operator?r.pin_operator:void 0,pinnedAt:s,message:o}),e):e},[])}})(this.getRestClient(t),t,e))}addEventHandler(e,t){this.getEventContextOrThrow().addEventHandler(e,t)}removeEventHandler(e){this.getEventContextOrThrow().removeEventHandler(e)}async clearConversationUnreadMessageCount(e){this.validateUnreadConversationLocator(e);const t=this.getClientOrThrow(),r=t.getCacheManager()?.clearConversationUnreadMessageCount({conversationId:e.conversationId,type:e.conversationType});r?.changed&&t.emitConversationListUpdate("local");try{await this.requireConnectedClient().sendMessageAction({kind:"clearConversationUnreadMessageCount",conversationId:e.conversationId,conversationType:e.conversationType,sendToPeer:!1},(e,t)=>this.buildActionError(e,t))}catch(a){if(!r?.matched)throw a;l.warn("Conversation unread remote sync failed after local clear",{conversationId:e.conversationId,conversationType:e.conversationType,error:a})}}async sendMessageReadReceipts(e){this.validateSendMessageReadReceiptsParams(e),await this.requireConnectedClient().sendMessageAction({kind:"sendMessageReadReceipts",conversationId:e.conversationId,conversationType:e.conversationType,messageIds:e.messageIds},(e,t)=>this.buildActionError(e,t))}async clearAllConversationUnreadMessageCount(){await this.requireConnectedClient().sendMessageAction({kind:"clearAllConversationUnreadMessageCount",conversationId:this.getCurrentUserIdOrThrow(),conversationType:"singleChat",sendToPeer:!1,clearAllUnreadMessageCount:!0},(e,t)=>this.buildActionError(e,t));const e=this.getClientOrThrow(),t=e.getCacheManager()?.clearAllConversationUnreadMessageCount();t?.changed&&e.emitConversationListUpdate("local")}async recallMessage(e){this.validateConversationLocator(e),this.requireNonEmptyString(e.messageId,"messageId"),await this.requireConnectedClient().sendMessageAction({kind:"recall",conversationId:e.conversationId,conversationType:e.conversationType,messageId:e.messageId,ext:e.ext},(e,t)=>this.buildActionError(e,t));return{messageId:e.messageId,conversationId:e.conversationId,conversationType:e.conversationType,timestamp:Date.now()}}async modifyMessage(e){this.validateConversationLocator(e),this.requireNonEmptyString(e.messageId,"messageId");const a=(e=>{if("cmd"===e.type||"multi_body"===e.type)throw new t("command and multi_body messages are not editable",{code:r.OPERATION_UNSUPPORTED});if("text"===e.type){const t=e.body;return{messageType:"text",body:{content:t.content,...void 0!==t.targetLanguages?{targetLanguages:t.targetLanguages}:{},...void 0!==t.translations?{translations:{...t.translations}}:{}},ext:e.ext,updatesLocalBody:!0}}if("custom"===e.type){const t=e.body;return{messageType:"custom",body:{event:t.event,...void 0!==t.params?{params:t.params}:{}},ext:e.ext,updatesLocalBody:!0}}if(Pt.has(e.type))return{messageType:e.type,body:e.body,ext:e.ext,updatesLocalBody:!1};throw new t("command and multi_body messages are not editable",{code:r.OPERATION_UNSUPPORTED})})(e.message),i=this.requireConnectedClient(),n=this.getCurrentUserIdOrThrow();if("text"===a.messageType){const t=a.body;void 0!==t.targetLanguages&&(a.body=await this.prepareEditedTextBody(t,n,e))}await i.sendMessageAction({kind:"update",conversationId:e.conversationId,conversationType:e.conversationType,messageId:e.messageId,body:a.body,messageType:a.messageType,ext:a.ext},(e,t)=>this.buildActionError(e,t));const s=Date.now(),o=i.getCurrentUserId()===n?i.getCacheManager():null,d=o?.loadSessionList().find(t=>t.conversationId===e.conversationId&&t.conversationType===e.conversationType&&t.lastMessage?.msgServerId===e.messageId)?.lastMessage,l=d?.modifiedInfo??o?.loadConversationSummaries().find(t=>t.conversationId===e.conversationId&&t.type===e.conversationType&&t.lastMessage?.msgId===e.messageId)?.lastMessage?.modifiedInfo,c={operatorId:n,operationCount:(l?.operationCount??0)+1,operationTime:s},g={msgServerId:e.messageId,msgLocalId:"",from:n,to:e.conversationId,sender:{userId:n},conversationId:e.conversationId,conversationType:e.conversationType,type:a.messageType,sendStatus:"sent",ext:a.ext??{},timestamp:s,body:a.body,direct:"SEND",modifiedInfo:c};return i.getCurrentUserId()===n&&i.patchConversationLastMessage(e,{type:g.type,...a.updatesLocalBody?{body:{...a.body}}:{},ext:g.ext,modifiedInfo:c}),g}async getHistoryMessages(e){if(this.validateConversationLocator(e),void 0!==e.pageSize&&(!Number.isInteger(e.pageSize)||e.pageSize<=0))throw this.buildValidationError("pageSize must be a positive integer","pageSize");const t=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t,r,a)=>{const i=`${ae(t)}/users/${t.userId}/messageroaming`,n=await e.post(i,{queue:"singleChat"===r.conversationType?`${r.conversationId}@easemob.com`:`${r.conversationId}@conference.easemob.com`,start:r.cursor&&r.cursor.length>0?r.cursor:-1,pull_number:r.pageSize??20,is_positive:"down"===r.searchDirection,msgType:(r.messageTypes??[]).join(","),end:-1,startTime:r.startTime??null,endTime:r.endTime??null,userIds:"singleChat"===r.conversationType?null:r.senderIds&&r.senderIds.length>0?r.senderIds:null},{operation:"getHistoryMessages"}),s=ce(n,"getHistoryMessages"),o=Array.isArray(s.msgs)?s.msgs:[],d=[];for(const l of o){if(!ne(l)||"string"!=typeof l.msg||0===l.msg.length)continue;const e=a(ie(l.msg));e&&d.push(e)}return{items:d,cursor:de(s.next_key),hasMore:!0!==s.is_last&&d.length>0}})(this.getRestClient(t),t,e,e=>this.getClientOrThrow().decodeServerMessageMeta(e)))}async searchMessages(e){const t=re.validateOrThrow(kt,e),r=this.getRestContextOrThrow();return this.executeRestOperation(()=>be(this.getRestClient(r),r,t))}async downloadAttachment(e){return this.getClientOrThrow().downloadAttachment(e.message)}async downloadAndParseCombineMessage(e){return this.getClientOrThrow().downloadAndParseCombinePayload(this.resolveDownloadCombineMessageParams(e))}async removeHistoryMessages(e){if(this.validateConversationLocator(e),!e.messageIds&&!e.beforeTimestamp)throw this.buildValidationError("messageIds or beforeTimestamp is required","removeHistoryMessages");if(e.messageIds&&0===e.messageIds.length)throw this.buildValidationError("messageIds cannot be empty","messageIds");if(void 0!==e.beforeTimestamp&&(!Number.isInteger(e.beforeTimestamp)||e.beforeTimestamp<=0))throw this.buildValidationError("beforeTimestamp must be a positive integer","beforeTimestamp");const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>{const a="singleChat"===r.conversationType?"userId":"groupId",i="singleChat"===r.conversationType?"chat":"group",n=encodeURIComponent(t.clientResource),s=r.messageIds?`${ae(t)}/sdk/message/roaming/${i}/user/${t.userId}?${a}=${encodeURIComponent(r.conversationId)}&msgIdList=${encodeURIComponent(r.messageIds.join(","))}&resource=${n}`:`${ae(t)}/sdk/message/roaming/${i}/user/${t.userId}/time?${a}=${encodeURIComponent(r.conversationId)}&delTime=${r.beforeTimestamp}&resource=${n}`;await e.delete(s,{operation:"removeHistoryMessages"})})(this.getRestClient(t),t,e))}async getGroupMessageReadUsers(e){if(this.requireNonEmptyString(e.groupId,"groupId"),this.requireNonEmptyString(e.messageId,"messageId"),void 0!==e.pageSize&&(!Number.isInteger(e.pageSize)||e.pageSize<=0))throw this.buildValidationError("pageSize must be a positive integer","pageSize");const t=this.getRestContextOrThrow(),r=await this.executeRestOperation(()=>(async(e,t,r)=>{const a=$();a.set("limit",String(r.pageSize??10)),r.cursor&&a.set("key",r.cursor);const i=`${ae(t)}/chatgroups/${encodeURIComponent(r.groupId)}/acks/${encodeURIComponent(r.messageId)}?${a.toString()}`,n=await e.get(i,{operation:"getGroupMessageReadUsers"}),s=ce(n,"getGroupMessageReadUsers"),o=ne(s.group_ack)?s.group_ack:s,d=(Array.isArray(o.userlist)?o.userlist:[]).map(e=>ne(e)&&"string"==typeof e.username?{userId:e.username,user:le(e.username),ackId:"string"==typeof e.meta_id?e.meta_id:void 0,timestamp:"number"==typeof e.timestamp?e.timestamp:void 0,ackContent:"string"==typeof e.ack_content?e.ack_content:void 0}:null).filter(e=>null!==e);return{groupId:r.groupId,messageId:"string"==typeof s.ackmid?s.ackmid:r.messageId,users:d,count:"number"==typeof o.total?o.total:d.length,cursor:de(o.next_key),hasMore:!0!==o.is_last&&d.length>0}})(this.getRestClient(t),t,e));return await this.hydrateGroupMessageReadUsers(e.groupId,r)}async getGroupMessageReadReceipts(e){this.requireNonEmptyString(e.groupId,"groupId");const t=this.validateMessageIdList(e.messageIds,"messageIds"),r=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t,r)=>{const a=`${ae(t)}/chatgroups/${encodeURIComponent(r.groupId)}/acks/batch`,i=await e.post(a,{messageIds:r.messageIds},{operation:"getGroupMessageReadReceipts"});return ge(i,"getGroupMessageReadReceipts").map(e=>ne(e)&&"string"==typeof e.ackmid&&"number"==typeof e.total?{messageId:e.ackmid,count:e.total}:null).filter(e=>null!==e)})(this.getRestClient(r),r,{groupId:e.groupId.trim(),messageIds:t}))}async addReaction(e){this.validateReactionParams(e);const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>{await e.post(`${ae(t)}/reaction/user/${t.userId}`,{msgId:r.messageId,message:r.reaction},{operation:"addReaction"})})(this.getRestClient(t),t,e))}async removeReaction(e){this.validateReactionParams(e);const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>{const a=`${ae(t)}/reaction/user/${t.userId}?msgId=${encodeURIComponent(r.messageId)}&message=${encodeURIComponent(r.reaction)}`;await e.delete(a,{operation:"removeReaction"})})(this.getRestClient(t),t,e))}async getReactionList(e){if(!e.messageId||Array.isArray(e.messageId)&&0===e.messageId.length)throw this.buildValidationError("messageId is required","messageId");"groupChat"===e.conversationType&&this.requireNonEmptyString(e.groupId??"","groupId");const t=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t,r)=>{const a=$(),i="string"==typeof r.messageId?r.messageId:[...r.messageId].join(",");a.set("msgIdList",i),a.set("msgType","groupChat"===r.conversationType?"group":"chat"),r.groupId&&a.set("groupId",r.groupId);const n=await e.get(`${ae(t)}/reaction/user/${t.userId}?${a.toString()}`,{operation:"getReactionList"});return ge(n,"getReactionList").map(e=>{if(!ne(e)||"string"!=typeof e.msgId)return null;const t=Array.isArray(e.reactionList)?e.reactionList:[];return{messageId:e.msgId,reactions:t.map(e=>ne(e)&&"string"==typeof e.reaction?{reaction:e.reaction,count:"number"==typeof e.count?e.count:0,isAddedBySelf:!0===e.state,userIds:Array.isArray(e.userList)?e.userList.filter(e=>"string"==typeof e):[]}:null).filter(e=>null!==e)}}).filter(e=>null!==e)})(this.getRestClient(t),t,e))}async getReactionDetail(e){if(this.validateReactionParams(e),void 0!==e.pageSize&&(!Number.isInteger(e.pageSize)||e.pageSize<=0))throw this.buildValidationError("pageSize must be a positive integer","pageSize");const t=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t,r)=>{const a=$();a.set("msgId",r.messageId),a.set("message",r.reaction),a.set("cursor",r.cursor??""),a.set("limit",String(r.pageSize??20));const i=await e.get(`${ae(t)}/reaction/user/${t.userId}/detail?${a.toString()}`,{operation:"getReactionDetail"}),n=ce(i,"getReactionDetail"),s=Array.isArray(n.reactionUserList)?n.reactionUserList.map(e=>ne(e)&&"string"==typeof e.userId?{userId:e.userId,user:le(e.userId),createdAt:"string"==typeof e.createdAt?e.createdAt:void 0}:null).filter(e=>null!==e):[],o=Array.isArray(n.userList)?n.userList.filter(e=>"string"==typeof e).map(e=>({userId:e,user:le(e)})):[],d=s.length>0?s:o;return{reaction:"string"==typeof n.reaction?n.reaction:r.reaction,count:"number"==typeof n.count?n.count:d.length,isAddedBySelf:!0===n.state,reactionUsers:d,cursor:de(n.cursor),hasMore:de(n.cursor).length>0,createdAt:"string"==typeof n.createdAt?n.createdAt:void 0}})(this.getRestClient(t),t,e))}async getSupportedTranslationLanguages(){const e=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t)=>{const r=await se(()=>e.get(`${ae(t)}/users/${t.userId}/translate/support/language`,{operation:"getSupportedTranslationLanguages"}));return me(r,"getSupportedTranslationLanguages").map(e=>ne(e)&&"string"==typeof e.code?{code:e.code,name:"string"==typeof e.name?e.name:e.code,nativeName:"string"==typeof e.nativeName?e.nativeName:e.code}:null).filter(e=>null!==e)})(this.getRestClient(e),e))}async translateMessage(e){if("text"!==e.message.type)throw new t("only text messages can be translated",{code:r.TRANSLATE_PARAM_INVALID,details:{fields:[{path:"message.type",message:"must be text",rule:"message_type"}]}});const a=e.message.body.content.trim();if(0===a.length)throw new t("message text is required",{code:r.TRANSLATE_PARAM_INVALID,details:{fields:[{path:"message.body.content",message:"is required",rule:"required"}]}});if(!Array.isArray(e.targetLanguages)||0===e.targetLanguages.length)throw new t("targetLanguages is required",{code:r.TRANSLATE_PARAM_INVALID,details:{fields:[{path:"targetLanguages",message:"is required",rule:"required"}]}});if(e.targetLanguages.some(e=>"string"!=typeof e||0===e.trim().length))throw new t("targetLanguages contains invalid language code",{code:r.TRANSLATE_PARAM_INVALID,details:{fields:[{path:"targetLanguages",message:"contains invalid language code",rule:"language_code"}]}});const i=this.getRestContextOrThrow();return this.executeRestOperation(()=>ue(this.getRestClient(i),i,{text:a,targetLanguages:e.targetLanguages}))}async voiceMessageToText(e,t){St(e,t);const r=this.getRestContextOrThrow();return this.executeRestOperation(()=>Dt(this.getRestClient(r),r,e,t))}async voiceFileToText(e,t){xt(e,t);const a=this.getRestContextOrThrow(),i=this.getClientOrThrow().getUploadAdapter();if(!i)throw new o("Upload capability is missing for current platform",r.UPLOAD_REQUIRED_FIELD_MISSING);return this.executeRestOperation(()=>(async(e,t,a,i)=>{const n=xt(a,i),s=c({file:n,fallbackName:Lt(n)?"voice.amr":void 0,fallbackMimeType:"audio/amr"});try{const a=await e.upload({url:`${t.restBaseUrl}${Ct(t)}/speech/recognitions`,headers:{Authorization:`Bearer ${t.token}`,Accept:"application/json",[g]:m()},source:s.source,fields:{username:t.userId,...i?.format?{format:i.format}:{},...void 0!==i?.sampleRate?{sampleRate:String(i.sampleRate)}:{},...void 0!==i?.bitsPerSample?{bitsPerSample:String(i.bitsPerSample)}:{},...void 0!==i?.channels?{channels:String(i.channels)}:{}}});let n=a.body;try{n=JSON.parse(a.body)}catch{n=a.body}if(a.status<200||a.status>=300)throw new o("Voice-to-text failed",r.VOICE_TO_TEXT_FAILED,{details:{httpStatus:a.status,rawResponse:n}});return{text:Nt(n,"voiceFileToText")}}catch(d){if(d instanceof o)throw Ut(d);throw Ut(A(d))}})(i,a,e,t))}validateConversationLocator(e){if(this.requireNonEmptyString(e.conversationId,"conversationId"),"singleChat"!==e.conversationType&&"groupChat"!==e.conversationType&&"chatRoom"!==e.conversationType)throw this.buildValidationError("conversationType is invalid","conversationType")}validateUnreadConversationLocator(e){if(this.requireNonEmptyString(e.conversationId,"conversationId"),"singleChat"!==e.conversationType&&"groupChat"!==e.conversationType)throw this.buildValidationError("conversationType must be singleChat or groupChat","conversationType")}validateSendMessageReadReceiptsParams(e){if(this.requireNonEmptyString(e.conversationId,"conversationId"),"singleChat"!==e.conversationType&&"groupChat"!==e.conversationType)throw this.buildValidationError("conversationType is invalid","conversationType");if(e.messageIds.length>50)throw this.buildValidationError("messageIds cannot contain more than 50 items","messageIds");return this.validateMessageIdList(e.messageIds,"messageIds")}validateMessageIdList(e,t){if(!Array.isArray(e)||0===e.length)throw this.buildValidationError(`${t} cannot be empty`,t);return e.map((e,r)=>{if("string"!=typeof e||0===e.trim().length)throw this.buildValidationError(`${t}.${r} is invalid`,`${t}.${r}`);return e.trim()})}resolveDownloadCombineMessageParams(e){if("message"in e){if("combine"!==e.message.type)throw new t("message must be a combine message",{code:r.VALIDATION_INVALID_FORMAT});const a=e.message.body;return{url:a.url??"",secret:a.secret,timeoutMs:e.timeoutMs,maxItems:e.maxItems}}return{url:e.url,secret:e.secret,timeoutMs:e.timeoutMs,maxItems:e.maxItems}}validateReactionParams(e){this.requireNonEmptyString(e.messageId,"messageId"),this.requireNonEmptyString(e.reaction,"reaction")}buildActionError(e,a){return e===r.AUTH_NOT_LOGIN||e===r.AUTH_UNAUTHORIZED?new u(a??"authentication failed",{code:e}):e===r.CONNECTION_WEBSOCKET_ERROR||e===r.CONNECTION_TIMEOUT?new h(a??"connection unavailable",{code:e}):107===e||110===e||205===e||500===e||e===r.VALIDATION_REQUIRED||e===r.VALIDATION_INVALID_FORMAT?new t(a??"invalid parameter",{code:e}):e===r.MESSAGE_RECALL_TIME_LIMIT?new o(a??"message recall time limit reached",e):e===r.MESSAGE_EDIT_FAILED?new o(a??"message update failed",e):e===r.OPERATION_UNSUPPORTED?new t(a??"operation unsupported",{code:e}):new o(a??"message action failed",e)}requireNonEmptyString(e,t){if("string"!=typeof e||0===e.trim().length)throw this.buildValidationError(`${t} is required`,t)}buildValidationError(e,a){return new t(e,{code:r.VALIDATION_INVALID_FORMAT,details:{fields:[{path:a,message:e,rule:"required"}]}})}getEventContextOrThrow(){if(!this.eventContext)throw new t("ChatManager is not bound to event context",{code:r.VALIDATION_REQUIRED});return this.eventContext}getClientOrThrow(){if(!this.client)throw new t("ChatManager is not bound to client",{code:r.VALIDATION_REQUIRED});return this.client}async prepareEditedTextBody(e,t,r){return(await _e({msgServerId:"",msgLocalId:"",from:t,to:r.conversationId,sender:{userId:t},conversationId:r.conversationId,conversationType:r.conversationType,type:"text",sendStatus:"sending",ext:{},timestamp:0,body:e},e=>{const t=this.getRestContextOrThrow();return this.executeRestOperation(()=>ue(this.getRestClient(t),t,e))})).body}getRestContextOrThrow(){return this.getClientOrThrow().getRestContext()}getRestClient(e){return this.restClient&&this.restBaseUrl===e.restBaseUrl&&this.restToken===e.token||(this.restClient=new y(e.restBaseUrl,{errorMap:Vt,requestAdapter:this.getClientOrThrow().getRequestAdapter?.(),includeRequestId:!0}),this.restClient.setAuthToken(e.token),this.restBaseUrl=e.restBaseUrl,this.restToken=e.token),this.restClient}requireConnectedClient(){const e=this.getClientOrThrow();if(e.getConnectionState()!==k.CONNECTED)throw new h("client is not connected",{code:r.CONNECTION_WEBSOCKET_ERROR});return e}getCurrentUserIdOrThrow(){const e=this.getClientOrThrow().getCurrentUserId();if(!e)throw new u("user is not logged in",{code:r.AUTH_NOT_LOGIN});return e}buildMessageSenderOrThrow(){const e=this.getClientOrThrow(),t=this.getCurrentUserIdOrThrow(),r=e.getCacheManager()?.getUserInfoSummaries([t],!1)[0];return{userId:t,nickname:r?.nickname,avatarUrl:r?.avatarUrl}}async hydrateGroupMessageReadUsers(e,t){const r=this.getClientOrThrow();if(!r.isUserInfoSyncEnabled()||0===t.users.length)return t;const a=r.getCacheManager(),i=await U({groupId:e,users:t.users.map(e=>e.user),includeNameCard:!0,cacheManager:a,fetchUserInfos:async({userIds:e})=>{const t=this.getUserInfoReadCapability(r);return t?await t.getUserInfoByUserId({userIds:e}):[]},hydrateGroupNamecards:async(e,t)=>{const a=this.getGroupNamecardHydrationCapability(r);a&&await a.hydrateMessageProfileGroupNamecards(e,t.map(e=>({userId:e})))}});return this.dispatchFetchedUserInfoUpdates(r,i.fetchedUserInfos),{...t,users:t.users.map(e=>{const t=i.usersById.get(e.userId)??e.user;return{...e,user:t}})}}getUserInfoReadCapability(e){const t=e.getManagerByCapability("userInfo:read");return t&&"function"==typeof t.getUserInfoByUserId?t:null}getGroupNamecardHydrationCapability(e){const t=e.getManagerByCapability("group:namecard");return t&&"function"==typeof t.hydrateMessageProfileGroupNamecards?t:null}dispatchFetchedUserInfoUpdates(e,t){if(0===t.length)return;const r=e.getCurrentUserId(),a=t.find(e=>e.userId===r),i=t.filter(e=>e.userId!==r);a&&e.dispatchOwnInfoUpdated(a),e.dispatchUserInfoUpdated(i),t.length>0&&e.refreshConversationDisplayFromUserInfos(t.map(e=>({userId:e.userId})),"profile")}async executeRestOperation(e){try{return await e()}catch(t){throw this.mapRestError(t)}}mapRestError(e){return e instanceof t||e instanceof u||e instanceof h||e instanceof v?e:e instanceof f?new v(e.message,{code:e.code,details:e.details}):e instanceof i||e instanceof o?e:new o(String(e),r.UNKNOWN)}};qt.key="chatManager";let Ft=qt;export{Ft as C,P as I,X as M,re as V,k as a,V as b,q as c,z as d,ee as e,te as f,B as g,j as h,G as i,Z as j,H as k,Te as l,_e as p,ue as r,J as v};
@@ -0,0 +1 @@
1
+ "use strict";const e=require("./common-Cg-lTASK.cjs"),t=require("./cache-utils-gowrxNr8.cjs"),r=require("./multibody-content-BmdQukoX.cjs"),a=require("./session-list-query-DMe2GZ4v.cjs"),i=require("./group-user-info-resolver-BNwtC7dY.cjs"),n=require("zod"),o=require("./light-BcQg8h2W.cjs"),s=require("./query-params-BHyPuD2k.cjs"),d={DISCONNECTED:"disconnected",CONNECTING:"connecting",CONNECTED:"connected",RECONNECTING:"reconnecting",RECONNECT_FAILED:"reconnectFailed"},l=new WeakMap;const c=new class{constructor(){this.store=new Map}set(e,t){e&&this.store.set(e,t)}get(e){if(e)return this.store.get(e)}consume(e){const t=this.get(e);return t&&this.store.delete(e),t}delete(e){e&&this.store.delete(e)}clear(){this.store.clear()}},g=e=>{if((e=>"undefined"!=typeof File&&e instanceof File)(e)){if("undefined"==typeof URL||"function"!=typeof URL.createObjectURL)return;return URL.createObjectURL(e)}return(e=>"object"==typeof e&&null!==e&&"path"in e&&"string"==typeof e.path)(e)?e.path:(e=>"object"==typeof e&&null!==e&&"uri"in e&&"string"==typeof e.uri)(e)?e.uri:void 0},m=()=>{const t=e.getRuntimeGlobal().crypto;return t&&"function"==typeof t.randomUUID?t.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`},u=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),p=(t,r,a)=>{throw new e.ValidationError(t,{code:a,details:{fields:[{path:r,message:t,rule:"invalid_format"}]}})},h=e=>{if("combine"!==e.type)return 0;const t=e.combineLevel;return"number"==typeof t?t:u(e.body)&&"number"==typeof e.body.combineLevel?e.body.combineLevel:0},y=(t,a)=>{if(t.sender.userId||p(`messageList[${a}] sender.userId is required`,`messageList[${a}].sender.userId`,e.ERROR_CODES.COMBINE_INVALID_INPUT),t.conversationId&&["singleChat","groupChat","chatRoom"].includes(t.conversationType)||p(`messageList[${a}] conversation is invalid`,`messageList[${a}].conversationId`,e.ERROR_CODES.COMBINE_INVALID_INPUT),(!Number.isInteger(t.timestamp)||t.timestamp<=0)&&p(`messageList[${a}] timestamp must be positive integer`,`messageList[${a}].timestamp`,e.ERROR_CODES.COMBINE_INVALID_INPUT),"multi_body"===t.type){const n=t.body;i=n,!Array.isArray(i)||n.length<2?p(`messageList[${a}] body must contain at least 2 segments`,`messageList[${a}].body`,e.ERROR_CODES.COMBINE_INVALID_INPUT):n.forEach((t,i)=>{u(t)&&"string"==typeof t.type&&r.isMultiBodySegmentType(t.type)||p(`messageList[${a}].body[${i}] is not allowed in a multi_body message`,`messageList[${a}].body[${i}]`,e.ERROR_CODES.COMBINE_INVALID_INPUT)})}else u(t.body)||p(`messageList[${a}] body must be object`,`messageList[${a}].body`,e.ERROR_CODES.COMBINE_INVALID_INPUT);var i;if("combine"===t.type){const r=h(t);(!Number.isInteger(r)||r<0)&&p(`messageList[${a}] combineLevel is invalid`,`messageList[${a}].combineLevel`,e.ERROR_CODES.COMBINE_INVALID_INPUT),r>10&&p(`messageList[${a}] combineLevel exceeds limit`,`messageList[${a}].combineLevel`,e.ERROR_CODES.COMBINE_LEVEL_EXCEEDED)}},v=(t,r=300)=>{(!Number.isInteger(t)||t<=0)&&p("messageList must not be empty","messageList",e.ERROR_CODES.COMBINE_INVALID_INPUT),(!Number.isInteger(r)||r<=0||r>300)&&p("max items is invalid","maxItems",e.ERROR_CODES.COMBINE_INVALID_INPUT),t>r&&p(`messageList max length is ${r}`,"messageList",e.ERROR_CODES.COMBINE_ITEM_LIMIT_EXCEEDED)},I=t=>{v(t.length);for(let r=0;r<t.length;r+=1){const a=t[r];void 0!==a?y(a,r):p(`messageList[${r}] is required`,`messageList[${r}]`,e.ERROR_CODES.COMBINE_INVALID_INPUT)}},f=e=>{let t=0;for(const r of e){if("combine"!==r.type)continue;const e=h(r);e>t&&(t=e)}return t+1},E=t=>{(!Number.isInteger(t)||t<=0)&&p("combineLevel must be positive integer","combineLevel",e.ERROR_CODES.COMBINE_INVALID_INPUT),t>10&&p("combineLevel must be <= 10","combineLevel",e.ERROR_CODES.COMBINE_LEVEL_EXCEEDED)};class b{static validate(t,r){try{return{success:!0,data:t.parse(r)}}catch(a){if(a instanceof n.ZodError){const t=a.errors.map(e=>({path:e.path.length>0?e.path.join("."):"root",message:e.message,rule:e.code})),r=`Validation failed: ${t.map(e=>`${e.path}: ${e.message}`).join("; ")}`,i=a.errors.some(e=>"invalid_type"===e.code&&"undefined"===e.received)?e.ERROR_CODES.VALIDATION_REQUIRED:e.ERROR_CODES.VALIDATION_INVALID_FORMAT;return{success:!1,error:new e.ValidationError(r,{code:i,details:{fields:t}})}}return{success:!1,error:new e.ValidationError("Unknown validation error",{code:e.ERROR_CODES.VALIDATION_UNKNOWN,details:{fields:[]}})}}}static validateOrThrow(t,r){const a=this.validate(t,r);if(a.success&&void 0!==a.data)return a.data;if(a.error)throw a.error;throw new e.ValidationError("Unknown validation error",{code:e.ERROR_CODES.VALIDATION_UNKNOWN,details:{fields:[]}})}static safeParse(e,t){return this.validate(e,t)}}const _=t=>{const{orgName:r,appName:a}=e.parseAppKey(t.appKey);return`/${r}/${a}`},R=e=>{const t=new Uint8Array(o.lightExports.util.base64.length(e));return o.lightExports.util.base64.decode(e,t,0),t},T=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),C=async t=>{try{return await t()}catch(r){if(!(r instanceof e.RestBusinessError))throw r;const t=(t=>{const r="string"==typeof t.details?.serverMessage?t.details.serverMessage:void 0;switch(t.code){case e.ERROR_CODES.SERVICE_NOT_ENABLED:case e.ERROR_CODES.TRANSLATE_SERVICE_NOT_ENABLED:return"Translation service is not enabled";case e.ERROR_CODES.TRANSLATE_PARAM_INVALID:return r?.includes("too long")?"Translation text is too long":r?.includes("target language")?"Invalid target language":"Invalid translation request";case e.ERROR_CODES.TRANSLATE_USAGE_LIMIT:return"Translation quota has been reached";case e.ERROR_CODES.TRANSLATE_FAILED:return"Translation service error";default:return}})(r);if(!t)throw r;throw new e.RestBusinessError(`REST business error: ${t}`,{code:r.code,details:r.details})}},O=e=>"string"==typeof e?e:"number"==typeof e||"boolean"==typeof e||"bigint"==typeof e?String(e):"",L=e=>{if("string"!=typeof e)return"";const t=e.trim();return t&&"undefined"!==t&&"null"!==t?t:""},w=e=>({userId:e}),S=(t,r)=>{if(!T(t)||!T(t.data))throw e.createRestBusinessError({apiName:r,message:`${r} response data is invalid`,mapped:!1});return t.data},N=(t,r)=>{if(!T(t)||!Array.isArray(t.data))throw e.createRestBusinessError({apiName:r,message:`${r} response data is invalid`,mapped:!1});return t.data},A=(e,t)=>Array.isArray(e)?e:N(e,t),M=async(t,r,a)=>{const i=await C(()=>t.post(`${_(r)}/users/${r.userId}/translate`,{text:a.text,to:[...a.targetLanguages]},{operation:"translateMessage"})),n=A(i,"translateMessage"),o=T(n[0])?n[0]:null;if(!o)throw e.createRestBusinessError({apiName:"translateMessage",message:"translateMessage response data is invalid",mapped:!1});const s=Array.isArray(o.translations)?o.translations:[],d=T(o.detectedLanguage)?o.detectedLanguage:void 0;return{detectedLanguage:d&&"string"==typeof d.language?{language:d.language,score:"number"==typeof d.score?d.score:Number(d.score??0)}:void 0,translations:s.map(e=>T(e)&&"string"==typeof e.text&&"string"==typeof e.to?{text:e.text,to:e.to}:null).filter(e=>null!==e)}},U={txt:"text",img:"image",video:"video",file:"file",loc:"location",custom:"custom",combine:"combine"},D={text:"txt",image:"img",video:"video",file:"file",location:"loc",custom:"custom",combine:"combine"},x={chat:"singleChat",chatroom:"chatRoom",groupchat:"groupChat",singleChat:"singleChat",chatRoom:"chatRoom",groupChat:"groupChat"},z=(t,r,a)=>{if(!r)return"";if(r.includes("em-redirect"))return r;const{orgName:i,appName:n}=e.parseAppKey(t.appKey),o=r.indexOf("/chatfiles/"),s=o>=0?r.slice(o):r,d=`${t.restBaseUrl}/${i}/${n}${s}`;return e.appendAttachUrlParams(d,a)},$=e=>{if(!e||"object"!=typeof e)return;if(Array.isArray(e))return e;const t=Object.values(e),r=[];for(const a of t)Array.isArray(a)&&r.push(...a);return r.length>0?r:void 0},V=(e,t,r)=>{const a=O(r.contentType??r.type),i=D[a];if(!i)return null;const n=T(r.content)?r.content:{},o=((e,t)=>{const r=O(t.conversationType);if("groupchat"===r||"chatroom"===r)return O(t.receiverId);const a=O(t.senderId);return a===e?O(t.receiverId):a})(t,r),s=x[O(r.conversationType)]??"singleChat",d={msgServerId:O(r.messageId),msgLocalId:O(r.messageId),from:O(r.senderId),to:O(r.receiverId),conversationId:o,conversationType:s,type:i,ext:T(r.ext)?r.ext:{},timestamp:"number"==typeof r.sentTime?r.sentTime:new Date(O(r.sentTime)).getTime(),sender:{userId:O(r.senderId)},highlight:$(r.highlight),text:"string"==typeof r.text?r.text:void 0};let l;const c=O(n.remotePath??n.url),g=O(n.secret??n.secretKey);switch(i){case"txt":l={type:"txt",content:O(n.message??r.text)};break;case"img":{const t=z(e,c,g);l={type:"img",url:t,thumb:n.thumb?z(e,O(n.thumb),O(n.thumb_secret??n.thumbnailSecretKey)):`${t}&thumbnail=true`,secret:g,width:Number(n.width??(T(n.size)?n.size.width:0))||0,height:Number(n.height??(T(n.size)?n.size.height:0))||0,fileLength:Number(n.file_length??n.fileLength??0)};break}case"video":l={type:"video",url:z(e,c,g),thumb:n.thumb||n.thumbnailRemotePath?z(e,O(n.thumb??n.thumbnailRemotePath),O(n.thumb_secret??n.thumbnailSecretKey)):"",secret:g,filename:O(n.filename??n.displayName),duration:Number(n.length??n.duration??0),fileLength:Number(n.file_length??n.fileLength??0)};break;case"file":l={type:"file",url:z(e,c,g),secret:g,filename:O(n.filename??n.displayName),fileLength:Number(n.file_length??n.fileLength??0)};break;case"loc":l={type:"loc",latitude:Number(n.lat??n.latitude??0),longitude:Number(n.lng??n.longitude??0),address:O(n.addr??n.address),buildingName:O(n.buildingName)};break;case"custom":l={type:"custom",customEvent:O(n.customEvent),customExts:T(n.customExts)?n.customExts:{}};break;default:return null}return{...d,body:l}},k=async(e,t,r)=>{const a=`${_(t)}/users/${t.userId}/messages/search/get`,i=((e,t)=>{const{option:r,pageNum:a=1,pageSize:i=20}=e,n=r.keywordList.map(e=>e.trim()).filter(e=>e.length>0),o={searchMode:"default",highlightEnable:!0,page:a,size:i};return 1===n.length?o.keyword=n[0]:(o.keywords=n,o.keywordMatch="and"===r.keywordListMatchType?"all":"any"),r.conversationId&&("singleChat"===r.conversationType?o.participantPairs=[{userId1:t,userId2:r.conversationId}]:"groupChat"===r.conversationType?o.groupIds=[r.conversationId]:"chatRoom"===r.conversationType&&(o.chatroomIds=[r.conversationId])),r.msgTypes&&r.msgTypes.length>0&&(o.contentType=r.msgTypes.map(e=>U[e]??e).join(",")),void 0!==r.startTime&&(o.startTime=r.startTime),void 0!==r.endTime&&(o.endTime=r.endTime),r.searchScope&&(o.searchExt=r.searchScope),r.direction&&(o.sort="up"===r.direction?"sentTime:asc":"sentTime:desc"),{data:o}})(r,t.userId),n=await e.post(a,i,{operation:"searchMessages"}),o=T(n)?n:{},s=T(o.data)?o.data:o,d=T(s.data)?s.data:s,l=Array.isArray(d.items)?d.items:Array.isArray(d.list)?d.list:[],c=T(d.pagination)?d.pagination:d,g=Number(c.pageNum??c.page??r.pageNum??1),m=Number(c.pageSize??c.size??r.pageSize??20),u=Number(c.totalPages??0),p=1===c.isFinished||g>=u,h=[];for(const y of l){if(!T(y))continue;const e=V(t,t.userId,y);e&&h.push(e)}return{messages:h,pageNum:g,pageSize:m,totalPages:u,isLast:p}},P={common:{},apis:{sendMessage:{range:"1,4,100,108,110,202,210,213-215,219-222,300-301,303,305,402,405-406,500-501,505-510,602-603,606-607,1200,1299",localErrors:{sendMessage:{operation_cancelled:{code:1,retryable:!1},upload_invalid_appkey:{code:100,retryable:!1},validation_invalid:{code:110,retryable:!1},not_connected:{code:300,retryable:!0},request_timeout:{code:301,retryable:!0},send_failed:{code:303,retryable:!1},upload_failed:{code:402,retryable:!0},file_too_large:{code:405,retryable:!1},file_content_improper:{code:406,retryable:!1},encode_failed:{code:500,retryable:!1}}},errors:{SERVICE_LIMIT_EXCEEDED:{code:4,retryable:!1},TOKEN_EXPIRED:{code:108,retryable:!1},AUTH_FAILED:{code:202,retryable:!1},PERMISSION_DENIED:{code:210,retryable:!1},BIND_ANOTHER_DEVICE:{code:213,retryable:!1},TOO_MANY_DEVICES:{code:214,retryable:!1},USER_MUTED:{code:215,retryable:!1},USER_MUTED_BY_ADMIN:{code:219,retryable:!1},USER_DEVICE_CHANGED:{code:220,retryable:!1},USER_NOT_ON_ROSTER:{code:221,retryable:!1},BLOCKED_BY_RECIPIENT:{code:222,retryable:!1,aliases:["blocked"]},SERVER_SERVING_DISABLED:{code:305,retryable:!1},MESSAGE_INCLUDE_ILLEGAL_CONTENT:{code:501,retryable:!1},SERVICE_NOT_ENABLED:{code:505,retryable:!1},MESSAGE_EXPIRED:{code:506,retryable:!1},MESSAGE_ILLEGAL_WHITELIST:{code:507,retryable:!1},MESSAGE_EXTERNAL_LOGIC_BLOCKED:{code:508,retryable:!1},MESSAGE_CURRENT_LIMITING:{code:509,retryable:!0},MESSAGE_SIZE_LIMIT:{code:510,retryable:!1},GROUP_NOT_JOINED:{code:602,retryable:!1},GROUP_PERMISSION_DENIED:{code:603,retryable:!1},GROUP_NOT_EXIST:{code:606,retryable:!1},GROUP_DISABLED:{code:607,retryable:!1},MESSAGE_BLOCKED:{code:1200,retryable:!1},THIRD_DEFAULT_FAILED:{code:1299,retryable:!1}}},getHistoryMessages:{range:"4,110,202,505",localErrors:{getHistoryMessages:{validation_invalid:{code:110,retryable:!1}}},errors:{service_not_enabled:{code:505,retryable:!1},page_size_exceeded:{code:110,aliases:["pull number cannot be greater","limit is to large"],retryable:!1}}},removeHistoryMessages:{range:"110,112,202,505",localErrors:{removeHistoryMessages:{validation_invalid:{code:110,retryable:!1}}},errors:{service_not_enabled:{code:505,retryable:!1},query_param_reaches_limit:{code:112,aliases:["delete msg list limit"],retryable:!1}}},getGroupMessageReadUsers:{range:"4,110,500",localErrors:{getGroupMessageReadUsers:{validation_invalid:{code:110,retryable:!1}}},errors:{message_not_found:{code:500,retryable:!1}}},recallMessage:{range:"110,201,300,504,505",localErrors:{recallMessage:{validation_invalid:{code:110,retryable:!1}}},errors:{message_invalid:{code:110,retryable:!1},not_login:{code:201,retryable:!0},not_connected:{code:300,retryable:!0},recall_time_limit:{code:504,retryable:!1},recall_disabled:{code:505,retryable:!1}}},updateMessage:{range:"110,111,201,210,300,511",localErrors:{modifyMessage:{validation_invalid:{code:110,retryable:!1},unsupported_type:{code:111,retryable:!1}}},errors:{message_invalid:{code:110,retryable:!1},unsupported_type:{code:111,retryable:!1},not_login:{code:201,retryable:!0},permission_denied:{code:210,retryable:!1},not_connected:{code:300,retryable:!0},edit_failed:{code:511,retryable:!0}}},downloadMessageAttachment:{range:"400,401,403,407",localErrors:{downloadAttachment:{validation_invalid:{code:401,retryable:!1}}},errors:{not_found:{code:400,httpStatus:404,retryable:!1},invalid:{code:401,retryable:!1},download_failed:{code:403,retryable:!0},expired:{code:407,httpStatus:404,retryable:!1}}},downloadAndParseCombineMessage:{range:"110,401,403,500",localErrors:{downloadAndParseCombineMessage:{validation_invalid:{code:110,retryable:!1}}},errors:{invalid_param:{code:110,retryable:!1},invalid_type:{code:500,retryable:!1},parse_failed:{code:401,retryable:!0},download_failed:{code:403,retryable:!0}}},addReaction:{range:"110,302,505,600,602,1300-1302",localErrors:{addReaction:{validation_invalid:{code:110,retryable:!1}}},errors:{reaction_already_operated:{code:1301,retryable:!1},reaction_reach_limit:{code:1300,retryable:!1},group_not_joined:{code:602,retryable:!1},reaction_operation_illegal:{code:1302,retryable:!1},service_not_enabled:{code:505,retryable:!1},server_busy:{code:302,retryable:!0}}},removeReaction:{range:"110,505,1301,1302",localErrors:{removeReaction:{validation_invalid:{code:110,retryable:!1}}},errors:{service_not_enabled:{code:505,retryable:!1},reaction_operation_illegal:{code:1302,retryable:!1}}},getReactionList:{range:"110,505,600",localErrors:{getReactionList:{validation_invalid:{code:110,retryable:!1}}},errors:{service_not_enabled:{code:505,retryable:!1},group_invalid_id:{code:600,retryable:!1}}},getReactionDetail:{range:"110,505,1302",localErrors:{getReactionDetail:{validation_invalid:{code:110,retryable:!1}}},errors:{service_not_enabled:{code:505,retryable:!1},reaction_operation_illegal:{code:1302,retryable:!1}}},pinMessage:{range:"4,110",errors:{pin_msg_id_illegal:{code:110,retryable:!1},pin_message_limit:{code:4,aliases:["91101"],retryable:!1},pin_message_not_found:{code:110,aliases:["91102"],retryable:!1}}},unpinMessage:{range:"110",errors:{pin_msg_id_illegal:{code:110,retryable:!1},pin_message_not_found:{code:110,aliases:["91102","user session pin message not exist"],retryable:!1}}},getPinnedMessageList:{range:"110,111",errors:{operation_unsupported:{code:111,aliases:["15002"],retryable:!1},pin_message_not_found:{code:110,aliases:["91102","user session pin message not exist"],retryable:!1}}},getSupportedTranslationLanguages:{range:"505",errors:{service_not_enabled:{code:505,aliases:["service not open!"],retryable:!1}}},translateMessage:{range:"505,1110-1113",localErrors:{translateMessage:{validation_invalid:{code:1110,retryable:!1}}},errors:{translate_text_too_long:{code:1110,runtimeMessage:"Translation text is too long",retryable:!1},translate_param_invalid:{code:1110,runtimeMessage:"Invalid target language",retryable:!1},service_not_enabled:{code:1111,runtimeMessage:"Translation service is not enabled",aliases:["service not open!"],retryable:!1},translate_usage_limit:{code:1112,runtimeMessage:"Translation quota has been reached",aliases:["The request has reached the maximum limit"],retryable:!1},translate_failed:{code:1113,runtimeMessage:"Translation service error",aliases:["The request failed, please try again later."],retryable:!1}}},voiceMessageToText:{range:"4,110,202,407-411,505",localErrors:{voiceMessageToText:{validation_invalid:{code:407,retryable:!1},file_not_found:{code:410,retryable:!1}}},errors:{unauthorized:{code:202,retryable:!0},file_not_found:{code:410,retryable:!1,aliases:["4041001"]},file_invalid:{code:407,retryable:!1,aliases:["4001002"]},duration_too_long:{code:408,retryable:!1,aliases:["4001003"]},file_too_large:{code:411,retryable:!1,aliases:["4001001"]},service_not_enabled:{code:505,retryable:!1,aliases:["4031001"]},service_limit_exceeded:{code:4,retryable:!0,aliases:["4031002"]},voice_to_text_failed:{code:409,retryable:!0,aliases:["5021003","5001003"]}}},voiceFileToText:{range:"4,110,202,402,407-411,505",localErrors:{voiceFileToText:{validation_invalid:{code:407,retryable:!1},upload_required:{code:110,retryable:!1}}},errors:{unauthorized:{code:202,retryable:!0},upload_failed:{code:402,retryable:!0,aliases:["5021001"]},file_invalid:{code:407,retryable:!1,aliases:["4001002"]},duration_too_long:{code:408,retryable:!1,aliases:["4001003"]},file_too_large:{code:411,retryable:!1,aliases:["4001001"]},service_not_enabled:{code:505,retryable:!1,aliases:["4031001"]},service_limit_exceeded:{code:4,retryable:!0,aliases:["4031002"]},voice_to_text_failed:{code:409,retryable:!0,aliases:["5021003","5001003"]}}},getConversationList:{range:"110",localErrors:{getConversationList:{validation_invalid:{code:110,retryable:!1}}},errors:{}},getPinnedConversationList:{range:"110",localErrors:{getPinnedConversationList:{validation_invalid:{code:110,retryable:!1}}},errors:{}},getConversationListByMark:{range:"110",localErrors:{getConversationListByMark:{validation_invalid:{code:110,retryable:!1}}},errors:{}},deleteConversation:{range:"110",localErrors:{deleteConversation:{validation_invalid:{code:110,retryable:!1}}},errors:{}},clearConversationUnreadMessageCount:{range:"110,201,300,500",localErrors:{clearConversationUnreadMessageCount:{validation_invalid:{code:110,retryable:!1}}},errors:{not_login:{code:201,retryable:!0},not_connected:{code:300,retryable:!0},message_invalid:{code:500,retryable:!1}}},clearAllConversationUnreadMessageCount:{range:"201,300,500",errors:{not_login:{code:201,retryable:!0},not_connected:{code:300,retryable:!0},message_invalid:{code:500,retryable:!1}}},sendMessageReadReceipts:{range:"110,300",localErrors:{sendMessageReadReceipts:{validation_invalid:{code:110,retryable:!1}}},errors:{invalid_direction:{code:110,retryable:!1},not_connected:{code:300,retryable:!0}}},getGroupMessageReadReceipts:{range:"110,202,210,303",localErrors:{getGroupMessageReadReceipts:{validation_invalid:{code:110,retryable:!1}}},errors:{illegal_argument:{code:110,httpStatus:400,retryable:!1},auth_bad_access_token:{code:202,httpStatus:401,retryable:!1},forbidden_op:{code:210,httpStatus:403,retryable:!1},unknown_exception_error:{code:303,httpStatus:500,retryable:!0}}},setConversationPinned:{range:"110",localErrors:{setConversationPinned:{validation_invalid:{code:110,retryable:!1}}},errors:{}},addConversationMark:{range:"110",localErrors:{addConversationMark:{validation_invalid:{code:110,retryable:!1}}},errors:{}},removeConversationMark:{range:"110",localErrors:{removeConversationMark:{validation_invalid:{code:110,retryable:!1}}},errors:{}},clearAllMessagesAndConversations:{range:"",errors:{}},searchMessages:{range:"110,202,303,505",localErrors:{searchMessages:{validation_invalid:{code:110,retryable:!1}}},errors:{parameter_error:{code:110,httpStatus:400,retryable:!1,aliases:["4000005","4000006"]},token_invalid:{code:202,httpStatus:401,retryable:!1,aliases:["4010101"]},service_not_enabled:{code:505,httpStatus:403,retryable:!1,aliases:["4030204"]},app_not_found:{code:110,httpStatus:404,retryable:!1,aliases:["4040302"]},server_error:{code:303,httpStatus:500,retryable:!0,aliases:["5000701","5020801"]}}}}},q=async(t,r)=>{if("text"!==t.type)return t;const a=t.body;if(void 0===a.targetLanguages)return t;if(!Array.isArray(a.targetLanguages)||a.targetLanguages.some(e=>"string"!=typeof e||!e.trim())||"string"!=typeof a.content||!a.content.trim())throw new e.ValidationError("invalid text translation parameters",{code:e.ERROR_CODES.TRANSLATE_PARAM_INVALID});if(0===a.targetLanguages.length)return t;const i=[...new Set(a.targetLanguages)],n={...t,sender:{...t.sender},body:{...a,targetLanguages:i,translations:a.translations?{...a.translations}:void 0}},o=n.body,s=await r({text:o.content.trim(),targetLanguages:i}),d=Object.fromEntries(s.translations.map(e=>[e.to,e.text]));if(i.some(e=>"string"!=typeof d[e]||!d[e]))throw new e.SDKError("Translation response is missing requested languages",e.ERROR_CODES.TRANSLATE_FAILED);return o.translations={...o.translations,...d},n},B=(t,r)=>new e.ValidationError(r,{code:e.ERROR_CODES.VALIDATION_INVALID_FORMAT,details:{fields:[{path:t,message:r,rule:"invalid_format"}]}}),F=(t,r)=>{if("string"!=typeof t||0===t.trim().length)throw(t=>new e.ValidationError(`${t} is required`,{code:e.ERROR_CODES.VALIDATION_REQUIRED,details:{fields:[{path:t,message:`${t} is required`,rule:"required"}]}}))(r);return t.trim()},G=e=>`mark_${String(e)}`,j=(e,t)=>{if("singleChat"===e||"groupChat"===e||"chatRoom"===e)return e;throw B(t,`${t} must be one of singleChat, groupChat, chatRoom`)},K=e=>"singleChat"===e?"chat":"groupChat"===e?"groupchat":"chatroom",H=e=>"string"==typeof e&&e.length>0?e:void 0,X=e=>{if("number"==typeof e&&Number.isFinite(e))return e;if("string"==typeof e&&e.length>0){const t=Number(e);return Number.isFinite(t)?t:void 0}},Q=e=>t.isRecord(e)?e:void 0,W=e=>{const t=Q(e);if(!t)return;const r=H(t.operatorId)??H(t.operator),a=X(t.operationCount)??X(t.count),i=X(t.operationTime)??X(t.edit_time);return r&&void 0!==a&&void 0!==i?{operatorId:r,operationCount:a,operationTime:i}:void 0},Y=e=>"txt"===e||"text"===e?"text":"custom"===e?"custom":"cmd"===e?"cmd":"img"===e?"image":"audio"===e?"voice":"loc"===e?"location":"image"===e||"file"===e||"voice"===e||"video"===e||"location"===e||"combine"===e?e:null,Z=(e,t)=>{if("text"===e)return{content:H(t.msg)??H(t.content)??""};if("custom"===e){const e=Q(t.customExts)??Q(t.params)??{},r={};for(const[t,a]of Object.entries(e))"string"==typeof a&&(r[t]=a);return{event:H(t.customEvent)??H(t.event)??"",params:r}}if("cmd"===e)return{action:H(t.action)??""};if("image"===e){const e=H(t.url)??H(t.remotePath)??"";return{localUrl:"",filename:H(t.filename)??H(t.displayName),filetype:H(t.filetype)??"application/octet-stream",width:X(t.width),height:X(t.height),isGif:!0===t.isGif||1===t.subType,isOriginalImage:!0===t.isOriginalImage,originalImageUrl:e,bigImageUrl:H(t.bigImageUrl),thumbnailUrl:H(t.thumbnailUrl)??H(t.thumbnailRemotePath),secret:H(t.secret)??H(t.secretKey),fileLength:X(t.fileLength)}}return"file"===e?{url:H(t.url)??H(t.remotePath),filename:H(t.filename)??H(t.displayName),filetype:H(t.filetype)??"application/octet-stream",fileSize:X(t.fileSize),fileLength:X(t.fileLength),secret:H(t.secret)??H(t.secretKey)}:"voice"===e?{url:H(t.url)??H(t.remotePath),filename:H(t.filename)??H(t.displayName),filetype:H(t.filetype)??"application/octet-stream",duration:X(t.duration)??0,fileLength:X(t.fileLength),secret:H(t.secret)??H(t.secretKey)}:"video"===e?{url:H(t.url)??H(t.remotePath),filename:H(t.filename)??H(t.displayName),filetype:H(t.filetype)??"application/octet-stream",duration:X(t.duration)??0,width:X(t.width),height:X(t.height),fileLength:X(t.fileLength),secret:H(t.secret)??H(t.secretKey),thumbnailUrl:H(t.thumbnailUrl)??H(t.thumbnailRemotePath)}:"location"===e?{latitude:X(t.latitude)??0,longitude:X(t.longitude)??0,address:H(t.address),buildingName:H(t.buildingName)}:null},J=(e,a)=>{const i=Q(e);if(!i)return;const n=(e=>"string"==typeof e?t.safeJsonParse(e,{}):Q(e)??{})(i.payload),o=Array.isArray(n.bodies)?n.bodies:[],s=o.length>=2?r.composeSegments(o.map(e=>{const t=Q(e);if(!t)return null;if(r.isCombineRestSegment(t))return{type:"combine",body:{title:H(t.title)??"",summary:H(t.summary)??"",filename:H(t.filename)??H(t.displayName)??"combine",filetype:"application/octet-stream",url:H(t.url)??H(t.remotePath),secret:H(t.secret)??H(t.secretKey),fileLength:X(t.fileLength)??X(t.file_length),combineLevel:X(t.combineLevel)??0}};const a=Y(t.type);if(!a)return null;const i=Z(a,t);return i?{type:a,body:i}:null})):null,d=Q(o[0])??Q(n.body),l=s?.type??Y(d?.type??n.type);if("multi_body"===s?.type&&Array.isArray(s.body)){const e=H(n.from)??H(i.from)??"",t=H(n.to)??a.conversationId,r=Q(n.sender),o={userId:H(r?.userId)??e,nickname:H(r?.nickname),avatarUrl:H(r?.avatarUrl)},d=Q(n.ext)??{},l=W(n.modifiedInfo??Q(n.meta)?.edit_msg);return{msgServerId:H(i.id)??a.messageId,msgLocalId:H(i.msgLocalId)??"",from:e,to:t,sender:o,conversationId:a.conversationId,conversationType:a.conversationType,type:"multi_body",sendStatus:"sent",ext:d,timestamp:X(i.timestamp)??a.timestamp,body:s.body,direct:e===a.currentUserId?"SEND":"RECEIVE",...l?{modifiedInfo:l}:{}}}const c="multi_body"===s?.type?null:s?.body??(l&&d?Z(l,d):null);if(!l||!c)return;const g=H(n.from)??H(i.from)??"",m=H(n.to)??a.conversationId,u=Q(n.sender),p={userId:H(u?.userId)??g,nickname:H(u?.nickname),avatarUrl:H(u?.avatarUrl)},h=Q(n.ext)??{},y=W(n.modifiedInfo??Q(n.meta)?.edit_msg);return{msgServerId:H(i.id)??a.messageId,msgLocalId:H(i.msgLocalId)??"",from:g,to:m,sender:p,conversationId:a.conversationId,conversationType:a.conversationType,type:l,sendStatus:"sent",ext:h,timestamp:X(i.timestamp)??a.timestamp,body:c,direct:g===a.currentUserId?"SEND":"RECEIVE",...y?{modifiedInfo:y}:{}}},ee=e=>`${e.conversationType}:${e.conversationId}`,te=t=>{const{orgName:r,appName:a}=e.parseAppKey(t.appKey);return{orgName:r,appName:a,encodedUserId:encodeURIComponent(t.userId),encodedResource:encodeURIComponent(t.clientResource)}},re=async(e,r,a,i)=>{const n=te(r),o=(e=>{const r=e,a=r.conversations;if(void 0!==a){if(!Array.isArray(a)||0===a.length)throw B("params.conversations","params.conversations must be a non-empty array");return a.map((e,r)=>{if(!t.isRecord(e))throw B(`params.conversations.${String(r)}`,`params.conversations.${String(r)} must be an object`);return{conversationId:F(e.conversationId,`params.conversations.${String(r)}.conversationId`),conversationType:j(e.conversationType,`params.conversations.${String(r)}.conversationType`)}})}return[{conversationId:F(r.conversationId,"params.conversationId"),conversationType:j(r.conversationType,"params.conversationType")}]})(a),s=((e,t)=>{if("number"!=typeof e||!Number.isInteger(e)||e<0||e>19)throw B(t,`${t} must be an integer between 0 and 19`);return e})(a.mark,"params.mark"),d=await e.request(`/${n.orgName}/${n.appName}/sdk/user/${n.encodedUserId}/user_channels/mark?resource=${n.encodedResource}`,{method:i?"POST":"DELETE",body:{mark:G(s),targets:o.map(e=>({to:e.conversationId,type:K(e.conversationType)}))},operation:i?"addConversationMark":"removeConversationMark"}),l=(e=>{if(!Array.isArray(e))return new Set;const r=new Set;return e.forEach(e=>{if(!t.isRecord(e))return;const a="string"==typeof e.to?e.to.trim():"",i=(e=>"chat"===e||"singleChat"===e?"singleChat":"groupchat"===e||"groupChat"===e?"groupChat":"chatroom"===e||"chatRoom"===e?"chatRoom":null)(e.type);a&&i&&r.add(ee({conversationId:a,conversationType:i}))}),r})((t.isRecord(d)&&t.isRecord(d.data)?d.data:{}).ignore),c=[],g=[];for(const t of o){const e={conversationId:t.conversationId,conversationType:t.conversationType};l.has(ee(t))?g.push({...e,reason:"ignored_by_server"}):c.push(e)}return{succeeded:c,failed:g,mark:s,operation:i?"addMark":"removeMark"}},ae=async(e,t,r,a)=>{const i=te(t),n=F(r.conversationId,"params.conversationId"),o=j(r.conversationType,"params.conversationType"),s=F(r.messageId,"params.messageId");return await e.request(`/${i.orgName}/${i.appName}/sdk/user/${i.encodedUserId}/user_channel/pin?resource=${i.encodedResource}`,{method:a?"POST":"DELETE",body:{to:n,type:K(o),pin_msg_id:s},operation:a?"pinMessage":"unpinMessage"}),{conversationId:n,conversationType:o,messageId:s,operation:a?"pin":"unpin"}},ie=n.z.enum(["singleChat","groupChat","chatRoom"]),ne=n.z.record(n.z.unknown()).refine(e=>(e=>"object"==typeof e&&null!==e&&!Array.isArray(e))(e),"ext must be an object").refine(e=>(e=>{try{return JSON.stringify(e),!0}catch{return!1}})(e),"ext must be JSON serializable"),oe=n.z.object({path:n.z.string().min(1,"data.path is required"),size:n.z.number().optional(),name:n.z.string().optional(),type:n.z.string().optional()}),se=n.z.object({uri:n.z.string().min(1,"data.uri is required"),size:n.z.number().optional(),name:n.z.string().optional(),type:n.z.string().optional()}),de="undefined"!=typeof File?n.z.instanceof(File):n.z.never(),le=n.z.union([de,oe,se]),ce=n.z.object({conversationId:n.z.string().min(1,"conversationId is required"),conversationType:ie,ext:ne.optional(),timestamp:n.z.number().int().positive("timestamp must be a positive integer").optional(),receiverList:n.z.array(n.z.string().min(1,"receiverList item is required")).nonempty("receiverList must not be empty").optional(),deliverOnlineOnly:n.z.boolean().optional(),webhookEnv:n.z.string().optional(),priority:n.z.enum(["high","normal","low"]).optional(),needReadReceipt:n.z.boolean().optional(),isChatThread:n.z.boolean().optional()}),ge=n.z.object({type:n.z.string().min(1,"messageList.type is required"),sender:n.z.object({userId:n.z.string().min(1,"messageList.sender.userId is required"),nickname:n.z.string().optional(),avatarUrl:n.z.string().optional()}),conversationId:n.z.string().min(1,"messageList.conversationId is required"),conversationType:ie,timestamp:n.z.number().int().positive("messageList.timestamp must be positive"),body:n.z.union([n.z.record(n.z.unknown()),n.z.array(n.z.record(n.z.unknown())).min(2)]),combineLevel:n.z.number().int().min(0).max(10).optional()}).passthrough(),me=e=>e.superRefine((e,t)=>{e.receiverList&&"singleChat"===e.conversationType&&t.addIssue({code:n.z.ZodIssueCode.custom,message:"receiverList is only allowed for group or chat room conversation",path:["receiverList"]}),e.isChatThread&&"groupChat"!==e.conversationType&&t.addIssue({code:n.z.ZodIssueCode.custom,message:"isChatThread is only allowed for group conversation",path:["isChatThread"]}),e.needReadReceipt&&"chatRoom"===e.conversationType&&t.addIssue({code:n.z.ZodIssueCode.custom,message:"needReadReceipt is not allowed for chatRoom conversation",path:["needReadReceipt"]})}),ue=me(ce.extend({content:n.z.string().min(1,"content is required"),targetLanguages:n.z.array(n.z.string().min(1)).optional()})),pe=me(ce.extend({originalUrl:n.z.string().min(1,"originalUrl is required").optional(),filename:n.z.string().min(1,"filename is required").optional(),filetype:n.z.string().min(1,"filetype is required").optional(),width:n.z.number().positive("width must be positive").optional(),height:n.z.number().positive("height must be positive").optional(),isGif:n.z.boolean().optional(),isOriginalImage:n.z.boolean().optional(),fileLength:n.z.number().positive("fileLength must be positive").optional(),data:le.optional(),thumbnailUrl:n.z.string().min(1).optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),he=me(ce.extend({originalUrl:n.z.string().min(1,"originalUrl is required").optional(),filename:n.z.string().min(1,"filename is required").optional(),filetype:n.z.string().min(1,"filetype is required").optional(),fileSize:n.z.number().positive("fileSize must be positive").optional(),fileLength:n.z.number().positive("fileLength must be positive").optional(),data:le.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),ye=me(ce.extend({originalUrl:n.z.string().min(1,"originalUrl is required").optional(),filename:n.z.string().min(1,"filename is required").optional(),filetype:n.z.string().min(1,"filetype is required").optional(),duration:n.z.number().positive("duration must be positive"),fileLength:n.z.number().positive("fileLength must be positive").optional(),data:le.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),ve=me(ce.extend({originalUrl:n.z.string().min(1,"originalUrl is required").optional(),filename:n.z.string().min(1,"filename is required").optional(),filetype:n.z.string().min(1,"filetype is required").optional(),duration:n.z.number().positive("duration must be positive"),width:n.z.number().positive("width must be positive").optional(),height:n.z.number().positive("height must be positive").optional(),fileLength:n.z.number().positive("fileLength must be positive").optional(),thumbnailUrl:n.z.string().min(1).optional(),data:le.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),Ie=me(ce.extend({latitude:n.z.number(),longitude:n.z.number(),address:n.z.string().min(1).optional(),buildingName:n.z.string().min(1).optional()})),fe=me(ce.extend({action:n.z.string().min(1,"action is required")})),Ee=me(ce.extend({event:n.z.string().min(1,"event is required"),params:n.z.record(n.z.string()).optional()})),be=me(ce),_e=me(ce.extend({title:n.z.string().min(1,"title is required"),summary:n.z.string().min(1,"summary is required"),compatibleText:n.z.string().min(1).optional(),messageList:n.z.array(ge).min(1,"messageList must not be empty").max(300,"messageList max length is 300")})),Re=t=>{const r=t?.userId?.trim();if(!r)throw new e.ValidationError("sender.userId is required",{code:e.ERROR_CODES.VALIDATION_REQUIRED,details:{fields:[{path:"sender.userId",message:"sender.userId is required",rule:"required"}]}});return{userId:r,nickname:t?.nickname,avatarUrl:t?.avatarUrl}},Te=()=>m(),Ce=(t,r)=>{if(t)return t;if(!r)throw new e.ValidationError("url or data is required",{code:e.ERROR_CODES.VALIDATION_REQUIRED,details:{fields:[{path:"url",message:"url or data is required",rule:"required"}]}});const a=g(r);if(!a)throw new e.ValidationError("Failed to resolve local url",{code:e.ERROR_CODES.VALIDATION_INVALID_FORMAT,details:{fields:[{path:"url",message:"Failed to resolve local url",rule:"invalid_format"}]}});return a},Oe=e=>!!e.isGif||(e.isOriginalImage??!1),Le=(e,t,r,a,i)=>({msgServerId:"",msgLocalId:i??m(),from:t.userId,to:e.conversationId,sender:t,conversationId:e.conversationId,conversationType:e.conversationType,type:r,sendStatus:"sending",ext:e.ext??{},timestamp:e.timestamp??Date.now(),body:a,direct:"SEND",isOnline:!0,receiverList:e.receiverList,deliverOnlineOnly:e.deliverOnlineOnly,webhookEnv:e.webhookEnv,priority:e.priority,needReadReceipt:e.needReadReceipt,isPeerRead:"singleChat"!==e.conversationType&&void 0,isChatThread:e.isChatThread}),we=(e,t)=>{const r=b.validateOrThrow(_e,e),a=r.messageList,i=Re(t);I(a);const n=f(a);E(n);const o={title:r.title,summary:r.summary,messageList:a,filename:"combine",filetype:"application/octet-stream",combineLevel:n},s=Le(r,i,"combine",o);return((e,t)=>{t&&l.set(e,t)})(s,r.compatibleText),s},Se=n.z.custom(e=>{if("undefined"!=typeof File&&e instanceof File)return!0;if(!e||"object"!=typeof e)return!1;const t=e;return"string"==typeof t.path&&t.path.length>0||"string"==typeof t.uri&&t.uri.length>0},{message:"data is invalid"}),Ne=n.z.object({content:n.z.string().min(1,"content is required"),targetLanguages:n.z.array(n.z.string().min(1)).optional()}),Ae=n.z.object({originalUrl:n.z.string().min(1).optional(),filename:n.z.string().min(1).optional(),filetype:n.z.string().min(1).optional(),width:n.z.number().positive().optional(),height:n.z.number().positive().optional(),isGif:n.z.boolean().optional(),isOriginalImage:n.z.boolean().optional(),fileLength:n.z.number().positive().optional(),data:Se.optional(),thumbnailUrl:n.z.string().min(1).optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]}),Me=n.z.object({originalUrl:n.z.string().min(1).optional(),filename:n.z.string().min(1).optional(),filetype:n.z.string().min(1).optional(),fileSize:n.z.number().positive().optional(),fileLength:n.z.number().positive().optional(),data:Se.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]}),Ue=n.z.object({originalUrl:n.z.string().min(1).optional(),filename:n.z.string().min(1).optional(),filetype:n.z.string().min(1).optional(),duration:n.z.number().positive("duration must be positive"),fileLength:n.z.number().positive().optional(),data:Se.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]}),De=n.z.object({originalUrl:n.z.string().min(1).optional(),filename:n.z.string().min(1).optional(),filetype:n.z.string().min(1).optional(),duration:n.z.number().positive("duration must be positive"),width:n.z.number().positive().optional(),height:n.z.number().positive().optional(),fileLength:n.z.number().positive().optional(),data:Se.optional(),thumbnailUrl:n.z.string().min(1).optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]}),xe=n.z.object({latitude:n.z.number(),longitude:n.z.number(),address:n.z.string().optional(),buildingName:n.z.string().optional()}),ze=n.z.object({event:n.z.string().min(1,"event is required"),params:n.z.record(n.z.string()).optional()}),$e=(t,r)=>new e.ValidationError(r,{code:e.ERROR_CODES.VALIDATION_UNKNOWN,details:{fields:[{path:t,message:r,rule:"invalid"}]}}),Ve=e=>"string"==typeof e&&e.length>0,ke=(e,t)=>{const r=`bodies.${t}`;if("object"!=typeof(a=e)||null===a||Array.isArray(a)||"string"!=typeof e.type)throw $e(r,"segment is not allowed in a multi_body message");var a;if("stream"in e||"cmd"===e.type||"combine"===e.type||"multi_body"===e.type)throw $e(r,"segment cannot be command, combine, multi_body, or stream");if("text"===e.type&&!Ve(e.content))throw $e(`${r}.content`,"content is required");if("image"===e.type){const t=Ve(e.originalImageUrl)||Ve(e.localUrl);if("boolean"!=typeof e.isGif||"boolean"!=typeof e.isOriginalImage||!t)throw $e(r,"image segment is invalid")}if(("file"===e.type||"voice"===e.type||"video"===e.type)&&!Ve(e.url))throw $e(`${r}.url`,"url is required");if(("voice"===e.type||"video"===e.type)&&"number"!=typeof e.duration)throw $e(`${r}.duration`,"duration is required");if("location"===e.type&&("number"!=typeof e.latitude||"number"!=typeof e.longitude))throw $e(r,"location segment is invalid");if("custom"===e.type&&!Ve(e.event))throw $e(`${r}.event`,"event is required");if("text"!==e.type&&"image"!==e.type&&"file"!==e.type&&"voice"!==e.type&&"video"!==e.type&&"location"!==e.type&&"custom"!==e.type)throw $e(r,"segment is not allowed in a multi_body message")};const Pe=(e,t)=>{t&&r.holdAttachmentFile(e,t)},qe=(t,a)=>{const{bodies:i,...n}=t,o=b.validateOrThrow(be,n);!function(e){if(!Array.isArray(e)||e.length<2)throw $e("bodies","bodies must contain at least 2 segments");if(e.length>20)throw $e("bodies","bodies must contain at most 20 segments");e.forEach((e,t)=>{ke(e,t)})}(i);const s=Re(a),d=m(),l=[];i.forEach((e,t)=>{const a=r.takeAttachmentFile(e);a&&(l.push(t),c.set(r.attachmentStoreKey(d,t),a))});const g=((e,t,r,a)=>({msgServerId:"",msgLocalId:a??m(),from:t.userId,to:e.conversationId,sender:t,conversationId:e.conversationId,conversationType:e.conversationType,type:"multi_body",sendStatus:"sending",ext:e.ext??{},timestamp:e.timestamp??Date.now(),body:r,direct:"SEND",isOnline:!0,receiverList:e.receiverList,deliverOnlineOnly:e.deliverOnlineOnly,webhookEnv:e.webhookEnv,priority:e.priority,needReadReceipt:e.needReadReceipt,isPeerRead:"singleChat"!==e.conversationType&&void 0,isChatThread:e.isChatThread}))(o,s,i,d);return e.logger.debug("MultiBody message created",{operation:"message.multibody.create",msgLocalId:g.msgLocalId,segmentCount:i.length,segmentTypes:i.map(e=>e.type),fileIndexes:l}),g},Be=t=>{const{orgName:r,appName:a}=e.parseAppKey(t.appKey);return`/api/sdk/v1/${r}/${a}`},Fe=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),Ge=e=>Fe(e)&&"string"==typeof e.path&&e.path.trim().length>0,je=e=>(e=>"undefined"!=typeof File&&e instanceof File)(e)||Ge(e),Ke=e=>{if(!Fe(e))return;return{data:Fe(e.data)?e.data:void 0,error:Fe(e.error)?e.error:void 0}},He=(t,r)=>{const a=Ke(t),i=a?.data?.text;if("string"!=typeof i)throw new e.SDKError(`${r} response data is invalid`,e.ERROR_CODES.REST_BUSINESS_UNKNOWN,{details:{api:r,response:t}});return i},Xe=(t,r,a,i="sdk")=>"auth"===i?new e.AuthenticationError(t,{code:r,details:a}):"validation"===i?new e.ValidationError(t,{code:r,details:a}):new e.SDKError(t,r,{details:a}),Qe=e=>!(void 0===e||Fe(e)&&!Array.isArray(e))||(void 0!==e?.format&&"string"!=typeof e.format||(void 0!==e?.sampleRate&&"number"!=typeof e.sampleRate||(void 0!==e?.bitsPerSample&&"number"!=typeof e.bitsPerSample||void 0!==e?.channels&&"number"!=typeof e.channels))),We=e=>{if(!e)return;const t=(e.split("#")[0]?.split("?")[0]??"").split("/").filter(Boolean);return t.length>0?t[t.length-1]:void 0},Ye=t=>{const{serviceCode:r,serviceMessage:a}=(t=>{const r=t instanceof e.SDKError&&Fe(t.details)?t.details:void 0,a=Ke(r?.rawResponse??r?.response??t),i=r?.serverCode??a?.error?.code,n=r?.serverMessage??a?.error?.message;return{serviceCode:"string"==typeof i||"number"==typeof i?String(i):void 0,serviceMessage:"string"==typeof n?n:void 0}})(t);if(t instanceof e.UploadError)return Xe("File upload failed",e.ERROR_CODES.UPLOAD_REQUEST_FAILED,{cause:t.details});if(t instanceof e.SDKError&&!r)return t;if(r)switch(r){case"4041001":return Xe("File not found",e.ERROR_CODES.VOICE_TO_TEXT_FILE_NOT_FOUND,{serviceCode:r,serviceMessage:a});case"4001002":return Xe("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{serviceCode:r,serviceMessage:a},"validation");case"5021001":return Xe("File upload failed",e.ERROR_CODES.UPLOAD_REQUEST_FAILED,{serviceCode:r,serviceMessage:a});case"4001003":return Xe("Voice duration exceeds 60 seconds",e.ERROR_CODES.VOICE_TO_TEXT_FILE_DURATION_TOO_LONG,{serviceCode:r,serviceMessage:a},"validation");case"4031001":return Xe("Voice-to-text service is not enabled",e.ERROR_CODES.SERVICE_NOT_ENABLED,{serviceCode:r,serviceMessage:a});case"4031002":return Xe("Beta service usage limit exceeded",e.ERROR_CODES.SERVICE_LIMIT_EXCEEDED,{serviceCode:r,serviceMessage:a});case"4001001":return"string"==typeof(i=a)&&i.toLowerCase().includes("uploaded file exceeds")?Xe("File too large",e.ERROR_CODES.VOICE_TO_TEXT_FILE_TOO_LARGE,{serviceCode:r,serviceMessage:a}):Xe(a||"Missing or invalid request parameter",e.ERROR_CODES.VALIDATION_REQUIRED,{serviceCode:r,serviceMessage:a},"validation");case"5021003":case"5001003":return Xe("Voice-to-text failed",e.ERROR_CODES.VOICE_TO_TEXT_FAILED,{serviceCode:r,serviceMessage:a});case"4011001":return Xe(a||"Unauthorized or invalid token",e.ERROR_CODES.AUTH_UNAUTHORIZED,{serviceCode:r,serviceMessage:a},"auth");default:return Xe(a||(t instanceof Error?t.message:"Voice-to-text failed"),e.ERROR_CODES.VOICE_TO_TEXT_FAILED,{serviceCode:r,serviceMessage:a})}var i;return t instanceof e.SDKError?Xe(t.message,t.code,t.details):Xe(t instanceof Error?t.message:"Voice-to-text failed",e.ERROR_CODES.VOICE_TO_TEXT_FAILED)},Ze=(t,r)=>{if(!Fe(a=t)||"string"!=typeof a.filename||"string"!=typeof a.filetype||"number"!=typeof a.duration||"type"in a&&void 0!==a.type&&"voice"!==a.type)throw Xe("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceMessageBody"},"validation");var a;if(Qe(r))throw Xe("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceParams"},"validation");if(!t.url)throw Xe("File not found",e.ERROR_CODES.VOICE_TO_TEXT_FILE_NOT_FOUND,{path:"voiceMessageBody.url"});if(!We(t.url))throw Xe("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceMessageBody.url"},"validation");return t},Je=(t,r)=>{if(Qe(r))throw Xe("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceParams"},"validation");if(!je(t))throw Xe("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{path:"file"},"validation");return t},et=async(t,r,a,i)=>{const n=Ze(a,i),o=We(n.url);if(!o)throw((t,r,a,i="invalid")=>new e.ValidationError(t,{code:r,details:{fields:[{path:a,message:t,rule:i}]}}))("File not found",e.ERROR_CODES.VOICE_TO_TEXT_FILE_NOT_FOUND,"voiceMessageBody.url");try{const e=await t.post(`${Be(r)}/speech/transcriptions`,{data:{fileId:o,username:r.userId,...i?{audio:i}:{}}},{operation:"voiceMessageToText"});return{text:He(e,"voiceMessageToText")}}catch(s){throw Ye(s)}},tt=n.z.object({keywordList:n.z.array(n.z.string()).min(1,"keywordList must not be empty").max(5,"keywordList must have at most 5 keywords").refine(e=>e.map(e=>e.trim()).filter(e=>e.length>0).length>0,"keywordList must contain at least one non-empty keyword"),keywordListMatchType:n.z.enum(["or","and"]).optional(),conversationId:n.z.string().min(1).optional(),conversationType:n.z.enum(["singleChat","groupChat","chatRoom"]).optional(),msgTypes:n.z.array(n.z.enum(["txt","img","video","file","loc","custom","combine"])).optional(),startTime:n.z.number().optional(),endTime:n.z.number().optional(),searchScope:n.z.enum(["none","with","only"]).optional(),direction:n.z.enum(["up","down"]).optional()}).refine(e=>void 0!==e.conversationId===(void 0!==e.conversationType),{message:"conversationId and conversationType must be provided together"}).refine(e=>void 0!==e.startTime===(void 0!==e.endTime),{message:"startTime and endTime must be provided together"}).refine(e=>void 0===e.startTime||void 0===e.endTime||e.endTime>=e.startTime,{message:"endTime must be >= startTime"}),rt=n.z.object({option:tt,pageNum:n.z.number().int().min(1).default(1),pageSize:n.z.number().int().min(1).max(100).default(20)}),at=e.mergeRuntimeErrorMaps(e.COMMON_ERROR_MAP,P),it=new Set(["image","voice","video","file","location","combine"]),nt=class{constructor(){this.client=null,this.eventContext=null,this.restClient=null,this.restBaseUrl=null,this.restToken=null}bind(e,t){this.client=e,this.eventContext=t??null,this.restClient=null,this.restBaseUrl=null,this.restToken=null}async sendMessage(e,t){return this.getClientOrThrow().sendMessage(e,t)}createTextMessage(e){return((e,t)=>{const r=b.validateOrThrow(ue,e),a=Re(t),i=Te(),n={content:r.content};return r.targetLanguages&&(n.targetLanguages=r.targetLanguages),Le(r,a,"text",n,i)})(e,this.buildMessageSenderOrThrow())}createImageMessage(t){return((t,r,a)=>{const i=b.validateOrThrow(pe,t),n=Re(r),o=Te(),s=i.data?Ce(void 0,i.data):"",d=i.originalUrl?e.deriveImageUrls(i.originalUrl,{deriveVariants:!a?.useCustomAttachmentUpload}):void 0;i.data&&c.set(o,i.data);const l=i.isGif??!1,g={localUrl:s,filename:i.filename,filetype:i.filetype,width:i.width,height:i.height,isGif:l,isOriginalImage:Oe({isGif:l,isOriginalImage:i.isOriginalImage})};return d?.originalImageUrl&&(g.originalImageUrl=d.originalImageUrl,g.bigImageUrl=d.bigImageUrl,g.thumbnailUrl=d.thumbnailUrl),void 0!==i.fileLength&&(g.fileLength=i.fileLength),i.thumbnailUrl&&(g.thumbnailUrl=i.thumbnailUrl),Le(i,n,"image",g,o)})(t,this.buildMessageSenderOrThrow(),this.getClientOrThrow().getMessageCreationOptions())}createFileMessage(e){return((e,t)=>{const r=b.validateOrThrow(he,e),a=Re(t),i=Te(),n=Ce(r.originalUrl,r.data);r.data&&c.set(i,r.data);const o={url:n,filename:r.filename,filetype:r.filetype};return void 0!==r.fileSize&&(o.fileSize=r.fileSize),void 0!==r.fileLength&&(o.fileLength=r.fileLength),Le(r,a,"file",o,i)})(e,this.buildMessageSenderOrThrow())}createVoiceMessage(e){return((e,t)=>{const r=b.validateOrThrow(ye,e),a=Re(t),i=Te(),n=Ce(r.originalUrl,r.data);r.data&&c.set(i,r.data);const o={url:n,filename:r.filename,filetype:r.filetype,duration:r.duration};return void 0!==r.fileLength&&(o.fileLength=r.fileLength),Le(r,a,"voice",o,i)})(e,this.buildMessageSenderOrThrow())}createVideoMessage(e){return((e,t)=>{const r=b.validateOrThrow(ve,e),a=Re(t),i=Te(),n=Ce(r.originalUrl,r.data);r.data&&c.set(i,r.data);const o={url:n,filename:r.filename,filetype:r.filetype,duration:r.duration};return void 0!==r.width&&(o.width=r.width),void 0!==r.height&&(o.height=r.height),void 0!==r.fileLength&&(o.fileLength=r.fileLength),r.thumbnailUrl&&(o.thumbnailUrl=r.thumbnailUrl),Le(r,a,"video",o,i)})(e,this.buildMessageSenderOrThrow())}createLocationMessage(e){return((e,t)=>{const r=b.validateOrThrow(Ie,e),a=Re(t),i={latitude:r.latitude,longitude:r.longitude};return r.address&&(i.address=r.address),r.buildingName&&(i.buildingName=r.buildingName),Le(r,a,"location",i)})(e,this.buildMessageSenderOrThrow())}createCmdMessage(e){return((e,t)=>{const r=b.validateOrThrow(fe,e),a=Re(t),i={action:r.action};return void 0!==r.deliverOnlineOnly&&(i.deliverOnlineOnly=r.deliverOnlineOnly),Le(r,a,"cmd",i)})(e,this.buildMessageSenderOrThrow())}createCustomMessage(e){return((e,t)=>{const r=b.validateOrThrow(Ee,e),a=Re(t),i={event:r.event};return r.params&&(i.params=r.params),Le(r,a,"custom",i)})(e,this.buildMessageSenderOrThrow())}createCombineMessage(e){return we(e,this.buildMessageSenderOrThrow())}createTextMessageBody(e){return(e=>{const t=b.validateOrThrow(Ne,e);return{type:"text",content:t.content,...t.targetLanguages?{targetLanguages:t.targetLanguages}:{}}})(e)}createImageMessageBody(t){return((t,r)=>{const a=b.validateOrThrow(Ae,t),i=a.isGif??!1,n=a.originalUrl?e.deriveImageUrls(a.originalUrl,{deriveVariants:!r?.useCustomAttachmentUpload}):void 0,o={type:"image",localUrl:a.data?Ce(void 0,a.data):"",filename:a.filename,filetype:a.filetype,width:a.width,height:a.height,isGif:i,isOriginalImage:!!i||(a.isOriginalImage??!1)};return n?.originalImageUrl&&(o.originalImageUrl=n.originalImageUrl,o.bigImageUrl=n.bigImageUrl,o.thumbnailUrl=n.thumbnailUrl),a.thumbnailUrl&&(o.thumbnailUrl=a.thumbnailUrl),void 0!==a.fileLength&&(o.fileLength=a.fileLength),Pe(o,a.data),o})(t,this.getClientOrThrow().getMessageCreationOptions())}createFileMessageBody(e){return(e=>{const t=b.validateOrThrow(Me,e),r={type:"file",url:Ce(t.originalUrl,t.data),filename:t.filename,filetype:t.filetype,...void 0!==t.fileSize?{fileSize:t.fileSize}:{},...void 0!==t.fileLength?{fileLength:t.fileLength}:{}};return Pe(r,t.data),r})(e)}createVoiceMessageBody(e){return(e=>{const t=b.validateOrThrow(Ue,e),r={type:"voice",url:Ce(t.originalUrl,t.data),filename:t.filename,filetype:t.filetype,duration:t.duration,...void 0!==t.fileLength?{fileLength:t.fileLength}:{}};return Pe(r,t.data),r})(e)}createVideoMessageBody(e){return(e=>{const t=b.validateOrThrow(De,e),r={type:"video",url:Ce(t.originalUrl,t.data),filename:t.filename,filetype:t.filetype,duration:t.duration,...void 0!==t.width?{width:t.width}:{},...void 0!==t.height?{height:t.height}:{},...void 0!==t.fileLength?{fileLength:t.fileLength}:{},...t.thumbnailUrl?{thumbnailUrl:t.thumbnailUrl}:{}};return Pe(r,t.data),r})(e)}createLocationMessageBody(e){return(e=>{const t=b.validateOrThrow(xe,e);return{type:"location",latitude:t.latitude,longitude:t.longitude,...void 0!==t.address?{address:t.address}:{},...void 0!==t.buildingName?{buildingName:t.buildingName}:{}}})(e)}createCustomMessageBody(e){return(e=>{const t=b.validateOrThrow(ze,e);return{type:"custom",event:t.event,...t.params?{params:t.params}:{}}})(e)}createMultiBodyMessage(e){return qe(e,this.buildMessageSenderOrThrow())}getConversationList(t){if(void 0!==t?.mark&&(!Number.isInteger(t.mark)||t.mark<0||t.mark>19))throw new e.ValidationError("filter.mark must be an integer between 0 and 19",{code:e.ERROR_CODES.VALIDATION_INVALID_FORMAT,details:{fields:[{path:"filter.mark",message:"filter.mark must be an integer between 0 and 19",rule:"invalid_format"}]}});const r=(this.getClientOrThrow().getCacheManager()?.loadSessionList()??[]).filter(e=>null!==e.lastMessage&&((void 0===t?.isPinned||e.isPinned===t.isPinned)&&!(void 0!==t?.mark&&!a.hasSessionMark(e,t.mark)))).map(a.toConversationItem);return this.getClientOrThrow().markConversationAccess(r.map(e=>({conversationId:e.conversationId,type:e.conversationType}))),r}setCurrentConversation(e){this.validateConversationLocator(e),this.getClientOrThrow().getCacheManager()?.setCurrentConversation({conversationId:e.conversationId,type:e.conversationType})}resetCurrentConversation(){this.getClientOrThrow().getCacheManager()?.resetCurrentConversation()}getCurrentConversation(){const e=this.getClientOrThrow().getCacheManager()?.getCurrentConversation()??null;return e?{conversationId:e.conversationId,conversationType:e.type}:null}refreshSessionList(e){return this.getClientOrThrow().refreshSessionList(e)}async deleteConversation(e){const t=this.getRestContextOrThrow(),r=await(async(e,t,r)=>{const a=te(t),i=F(r.conversationId,"params.conversationId"),n=j(r.conversationType,"params.conversationType"),o=r.deleteRoamingMessages??!1;if("boolean"!=typeof o)throw B("params.deleteRoamingMessages","params.deleteRoamingMessages must be a boolean");return await e.request(`/${a.orgName}/${a.appName}/user/${a.encodedUserId}/user_channel?resource=${a.encodedResource}`,{method:"DELETE",body:{channel:i,type:"groupChat"===n?"groupChat":K(n),delete_roam:o},operation:"deleteConversation"}),{conversationId:i,conversationType:n,operation:"delete"}})(this.getRestClient(t),t,e),a=this.getClientOrThrow(),i=a.getCacheManager()?.deleteConversation({conversationId:r.conversationId,type:r.conversationType});return i?.changed&&a.emitConversationListUpdate("local"),r}async setConversationPinned(e){const r=this.getRestContextOrThrow(),a=await(async(e,r,a)=>{const i=te(r),n=F(a.conversationId,"params.conversationId"),o=j(a.conversationType,"params.conversationType");if("boolean"!=typeof a.pinned)throw B("params.pinned","params.pinned must be a boolean");const s="groupChat"===o?"groupChat":K(o),d=a.pinned?await e.post(`/${i.orgName}/${i.appName}/sdk/user/${i.encodedUserId}/user_channel/top?resource=${i.encodedResource}`,{type:s,to:n},{operation:"setConversationPinned"}):await e.delete(`/${i.orgName}/${i.appName}/sdk/user/${i.encodedUserId}/user_channel/top?type=${encodeURIComponent(s)}&to=${encodeURIComponent(n)}&resource=${i.encodedResource}`,{operation:"setConversationPinned"}),l=t.isRecord(d)&&t.isRecord(d.data)?d.data:{};return{conversationId:n,conversationType:o,operation:"setPinned",isPinned:"boolean"==typeof l.is_top?l.is_top:a.pinned,pinnedTime:"number"==typeof l.update_top_status_time?l.update_top_status_time:a.pinned?Date.now():0}})(this.getRestClient(r),r,e),i=this.getClientOrThrow().getCacheManager(),n=i?.applyConversationPinnedMutation({conversationId:a.conversationId,type:a.conversationType,isPinned:a.isPinned??e.pinned,pinnedTime:a.pinnedTime});return n?.changed&&this.getClientOrThrow().emitConversationListUpdate("local"),a}async addConversationMark(e){const t=this.getRestContextOrThrow(),r=await(async(e,t,r)=>re(e,t,r,!0))(this.getRestClient(t),t,e),a=this.getClientOrThrow().getCacheManager(),i=a?.applyConversationMarkMutation({conversations:[...r.succeeded.map(e=>({...e,applied:!0})),...r.failed.map(e=>({...e,applied:!1}))],mark:r.mark,operation:r.operation});return i?.changed&&this.getClientOrThrow().emitConversationListUpdate("local"),r}async removeConversationMark(e){const t=this.getRestContextOrThrow(),r=await(async(e,t,r)=>re(e,t,r,!1))(this.getRestClient(t),t,e),a=this.getClientOrThrow().getCacheManager(),i=a?.applyConversationMarkMutation({conversations:[...r.succeeded.map(e=>({...e,applied:!0})),...r.failed.map(e=>({...e,applied:!1}))],mark:r.mark,operation:r.operation});return i?.changed&&this.getClientOrThrow().emitConversationListUpdate("local"),r}async clearAllMessagesAndConversations(){const e=this.getRestContextOrThrow();await(async(e,t)=>{const r=te(t);await e.post(`/${r.orgName}/${r.appName}/sdk/message/roaming/user/${r.encodedUserId}/delete/all?resource=${r.encodedResource}`,void 0,{operation:"clearAllMessagesAndConversations"})})(this.getRestClient(e),e);const t=this.getClientOrThrow(),r=t.getCacheManager()?.clearConversations();r?.changed&&t.emitConversationListUpdate("local")}async pinMessage(e){const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>ae(e,t,r,!0))(this.getRestClient(t),t,e))}async unpinMessage(e){const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>ae(e,t,r,!1))(this.getRestClient(t),t,e))}async getPinnedMessageList(e){const r=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,r,a)=>{const i=te(r),n=F(a.conversationId,"params.conversationId"),o=j(a.conversationType,"params.conversationType"),s=await e.get(`/${i.orgName}/${i.appName}/sdk/user/${i.encodedUserId}/user_channel/pin?to=${encodeURIComponent(n)}&type=${encodeURIComponent(K(o))}&limit=${String(20)}`,{operation:"getPinnedMessageList"}),d=t.isRecord(s)&&t.isRecord(s.data)?s.data:{};return{items:(Array.isArray(d.msg_infos)?d.msg_infos:[]).reduce((e,a)=>{if(!t.isRecord(a))return e;const i="string"==typeof a.pin_msg_id?a.pin_msg_id:t.isRecord(a.message)&&"string"==typeof a.message.id?a.message.id:"";if(!i)return e;const s="number"==typeof a.pin_opt_at?a.pin_opt_at:0,d=J(a.message,{messageId:i,conversationId:n,conversationType:o,currentUserId:r.userId,timestamp:s});return d?(e.push({messageId:i,conversationId:n,conversationType:o,operatorId:"string"==typeof a.pin_operator?a.pin_operator:void 0,pinnedAt:s,message:d}),e):e},[])}})(this.getRestClient(r),r,e))}addEventHandler(e,t){this.getEventContextOrThrow().addEventHandler(e,t)}removeEventHandler(e){this.getEventContextOrThrow().removeEventHandler(e)}async clearConversationUnreadMessageCount(t){this.validateUnreadConversationLocator(t);const r=this.getClientOrThrow(),a=r.getCacheManager()?.clearConversationUnreadMessageCount({conversationId:t.conversationId,type:t.conversationType});a?.changed&&r.emitConversationListUpdate("local");try{await this.requireConnectedClient().sendMessageAction({kind:"clearConversationUnreadMessageCount",conversationId:t.conversationId,conversationType:t.conversationType,sendToPeer:!1},(e,t)=>this.buildActionError(e,t))}catch(i){if(!a?.matched)throw i;e.logger.warn("Conversation unread remote sync failed after local clear",{conversationId:t.conversationId,conversationType:t.conversationType,error:i})}}async sendMessageReadReceipts(e){this.validateSendMessageReadReceiptsParams(e),await this.requireConnectedClient().sendMessageAction({kind:"sendMessageReadReceipts",conversationId:e.conversationId,conversationType:e.conversationType,messageIds:e.messageIds},(e,t)=>this.buildActionError(e,t))}async clearAllConversationUnreadMessageCount(){await this.requireConnectedClient().sendMessageAction({kind:"clearAllConversationUnreadMessageCount",conversationId:this.getCurrentUserIdOrThrow(),conversationType:"singleChat",sendToPeer:!1,clearAllUnreadMessageCount:!0},(e,t)=>this.buildActionError(e,t));const e=this.getClientOrThrow(),t=e.getCacheManager()?.clearAllConversationUnreadMessageCount();t?.changed&&e.emitConversationListUpdate("local")}async recallMessage(e){this.validateConversationLocator(e),this.requireNonEmptyString(e.messageId,"messageId"),await this.requireConnectedClient().sendMessageAction({kind:"recall",conversationId:e.conversationId,conversationType:e.conversationType,messageId:e.messageId,ext:e.ext},(e,t)=>this.buildActionError(e,t));return{messageId:e.messageId,conversationId:e.conversationId,conversationType:e.conversationType,timestamp:Date.now()}}async modifyMessage(t){this.validateConversationLocator(t),this.requireNonEmptyString(t.messageId,"messageId");const r=(t=>{if("cmd"===t.type||"multi_body"===t.type)throw new e.ValidationError("command and multi_body messages are not editable",{code:e.ERROR_CODES.OPERATION_UNSUPPORTED});if("text"===t.type){const e=t.body;return{messageType:"text",body:{content:e.content,...void 0!==e.targetLanguages?{targetLanguages:e.targetLanguages}:{},...void 0!==e.translations?{translations:{...e.translations}}:{}},ext:t.ext,updatesLocalBody:!0}}if("custom"===t.type){const e=t.body;return{messageType:"custom",body:{event:e.event,...void 0!==e.params?{params:e.params}:{}},ext:t.ext,updatesLocalBody:!0}}if(it.has(t.type))return{messageType:t.type,body:t.body,ext:t.ext,updatesLocalBody:!1};throw new e.ValidationError("command and multi_body messages are not editable",{code:e.ERROR_CODES.OPERATION_UNSUPPORTED})})(t.message),a=this.requireConnectedClient(),i=this.getCurrentUserIdOrThrow();if("text"===r.messageType){const e=r.body;void 0!==e.targetLanguages&&(r.body=await this.prepareEditedTextBody(e,i,t))}await a.sendMessageAction({kind:"update",conversationId:t.conversationId,conversationType:t.conversationType,messageId:t.messageId,body:r.body,messageType:r.messageType,ext:r.ext},(e,t)=>this.buildActionError(e,t));const n=Date.now(),o=a.getCurrentUserId()===i?a.getCacheManager():null,s=o?.loadSessionList().find(e=>e.conversationId===t.conversationId&&e.conversationType===t.conversationType&&e.lastMessage?.msgServerId===t.messageId)?.lastMessage,d=s?.modifiedInfo??o?.loadConversationSummaries().find(e=>e.conversationId===t.conversationId&&e.type===t.conversationType&&e.lastMessage?.msgId===t.messageId)?.lastMessage?.modifiedInfo,l={operatorId:i,operationCount:(d?.operationCount??0)+1,operationTime:n},c={msgServerId:t.messageId,msgLocalId:"",from:i,to:t.conversationId,sender:{userId:i},conversationId:t.conversationId,conversationType:t.conversationType,type:r.messageType,sendStatus:"sent",ext:r.ext??{},timestamp:n,body:r.body,direct:"SEND",modifiedInfo:l};return a.getCurrentUserId()===i&&a.patchConversationLastMessage(t,{type:c.type,...r.updatesLocalBody?{body:{...r.body}}:{},ext:c.ext,modifiedInfo:l}),c}async getHistoryMessages(e){if(this.validateConversationLocator(e),void 0!==e.pageSize&&(!Number.isInteger(e.pageSize)||e.pageSize<=0))throw this.buildValidationError("pageSize must be a positive integer","pageSize");const t=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t,r,a)=>{const i=`${_(t)}/users/${t.userId}/messageroaming`,n=await e.post(i,{queue:"singleChat"===r.conversationType?`${r.conversationId}@easemob.com`:`${r.conversationId}@conference.easemob.com`,start:r.cursor&&r.cursor.length>0?r.cursor:-1,pull_number:r.pageSize??20,is_positive:"down"===r.searchDirection,msgType:(r.messageTypes??[]).join(","),end:-1,startTime:r.startTime??null,endTime:r.endTime??null,userIds:"singleChat"===r.conversationType?null:r.senderIds&&r.senderIds.length>0?r.senderIds:null},{operation:"getHistoryMessages"}),o=S(n,"getHistoryMessages"),s=Array.isArray(o.msgs)?o.msgs:[],d=[];for(const l of s){if(!T(l)||"string"!=typeof l.msg||0===l.msg.length)continue;const e=a(R(l.msg));e&&d.push(e)}return{items:d,cursor:L(o.next_key),hasMore:!0!==o.is_last&&d.length>0}})(this.getRestClient(t),t,e,e=>this.getClientOrThrow().decodeServerMessageMeta(e)))}async searchMessages(e){const t=b.validateOrThrow(rt,e),r=this.getRestContextOrThrow();return this.executeRestOperation(()=>k(this.getRestClient(r),r,t))}async downloadAttachment(e){return this.getClientOrThrow().downloadAttachment(e.message)}async downloadAndParseCombineMessage(e){return this.getClientOrThrow().downloadAndParseCombinePayload(this.resolveDownloadCombineMessageParams(e))}async removeHistoryMessages(e){if(this.validateConversationLocator(e),!e.messageIds&&!e.beforeTimestamp)throw this.buildValidationError("messageIds or beforeTimestamp is required","removeHistoryMessages");if(e.messageIds&&0===e.messageIds.length)throw this.buildValidationError("messageIds cannot be empty","messageIds");if(void 0!==e.beforeTimestamp&&(!Number.isInteger(e.beforeTimestamp)||e.beforeTimestamp<=0))throw this.buildValidationError("beforeTimestamp must be a positive integer","beforeTimestamp");const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>{const a="singleChat"===r.conversationType?"userId":"groupId",i="singleChat"===r.conversationType?"chat":"group",n=encodeURIComponent(t.clientResource),o=r.messageIds?`${_(t)}/sdk/message/roaming/${i}/user/${t.userId}?${a}=${encodeURIComponent(r.conversationId)}&msgIdList=${encodeURIComponent(r.messageIds.join(","))}&resource=${n}`:`${_(t)}/sdk/message/roaming/${i}/user/${t.userId}/time?${a}=${encodeURIComponent(r.conversationId)}&delTime=${r.beforeTimestamp}&resource=${n}`;await e.delete(o,{operation:"removeHistoryMessages"})})(this.getRestClient(t),t,e))}async getGroupMessageReadUsers(e){if(this.requireNonEmptyString(e.groupId,"groupId"),this.requireNonEmptyString(e.messageId,"messageId"),void 0!==e.pageSize&&(!Number.isInteger(e.pageSize)||e.pageSize<=0))throw this.buildValidationError("pageSize must be a positive integer","pageSize");const t=this.getRestContextOrThrow(),r=await this.executeRestOperation(()=>(async(e,t,r)=>{const a=s.createQueryParams();a.set("limit",String(r.pageSize??10)),r.cursor&&a.set("key",r.cursor);const i=`${_(t)}/chatgroups/${encodeURIComponent(r.groupId)}/acks/${encodeURIComponent(r.messageId)}?${a.toString()}`,n=await e.get(i,{operation:"getGroupMessageReadUsers"}),o=S(n,"getGroupMessageReadUsers"),d=T(o.group_ack)?o.group_ack:o,l=(Array.isArray(d.userlist)?d.userlist:[]).map(e=>T(e)&&"string"==typeof e.username?{userId:e.username,user:w(e.username),ackId:"string"==typeof e.meta_id?e.meta_id:void 0,timestamp:"number"==typeof e.timestamp?e.timestamp:void 0,ackContent:"string"==typeof e.ack_content?e.ack_content:void 0}:null).filter(e=>null!==e);return{groupId:r.groupId,messageId:"string"==typeof o.ackmid?o.ackmid:r.messageId,users:l,count:"number"==typeof d.total?d.total:l.length,cursor:L(d.next_key),hasMore:!0!==d.is_last&&l.length>0}})(this.getRestClient(t),t,e));return await this.hydrateGroupMessageReadUsers(e.groupId,r)}async getGroupMessageReadReceipts(e){this.requireNonEmptyString(e.groupId,"groupId");const t=this.validateMessageIdList(e.messageIds,"messageIds"),r=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t,r)=>{const a=`${_(t)}/chatgroups/${encodeURIComponent(r.groupId)}/acks/batch`,i=await e.post(a,{messageIds:r.messageIds},{operation:"getGroupMessageReadReceipts"});return N(i,"getGroupMessageReadReceipts").map(e=>T(e)&&"string"==typeof e.ackmid&&"number"==typeof e.total?{messageId:e.ackmid,count:e.total}:null).filter(e=>null!==e)})(this.getRestClient(r),r,{groupId:e.groupId.trim(),messageIds:t}))}async addReaction(e){this.validateReactionParams(e);const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>{await e.post(`${_(t)}/reaction/user/${t.userId}`,{msgId:r.messageId,message:r.reaction},{operation:"addReaction"})})(this.getRestClient(t),t,e))}async removeReaction(e){this.validateReactionParams(e);const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>{const a=`${_(t)}/reaction/user/${t.userId}?msgId=${encodeURIComponent(r.messageId)}&message=${encodeURIComponent(r.reaction)}`;await e.delete(a,{operation:"removeReaction"})})(this.getRestClient(t),t,e))}async getReactionList(e){if(!e.messageId||Array.isArray(e.messageId)&&0===e.messageId.length)throw this.buildValidationError("messageId is required","messageId");"groupChat"===e.conversationType&&this.requireNonEmptyString(e.groupId??"","groupId");const t=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t,r)=>{const a=s.createQueryParams(),i="string"==typeof r.messageId?r.messageId:[...r.messageId].join(",");a.set("msgIdList",i),a.set("msgType","groupChat"===r.conversationType?"group":"chat"),r.groupId&&a.set("groupId",r.groupId);const n=await e.get(`${_(t)}/reaction/user/${t.userId}?${a.toString()}`,{operation:"getReactionList"});return N(n,"getReactionList").map(e=>{if(!T(e)||"string"!=typeof e.msgId)return null;const t=Array.isArray(e.reactionList)?e.reactionList:[];return{messageId:e.msgId,reactions:t.map(e=>T(e)&&"string"==typeof e.reaction?{reaction:e.reaction,count:"number"==typeof e.count?e.count:0,isAddedBySelf:!0===e.state,userIds:Array.isArray(e.userList)?e.userList.filter(e=>"string"==typeof e):[]}:null).filter(e=>null!==e)}}).filter(e=>null!==e)})(this.getRestClient(t),t,e))}async getReactionDetail(e){if(this.validateReactionParams(e),void 0!==e.pageSize&&(!Number.isInteger(e.pageSize)||e.pageSize<=0))throw this.buildValidationError("pageSize must be a positive integer","pageSize");const t=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t,r)=>{const a=s.createQueryParams();a.set("msgId",r.messageId),a.set("message",r.reaction),a.set("cursor",r.cursor??""),a.set("limit",String(r.pageSize??20));const i=await e.get(`${_(t)}/reaction/user/${t.userId}/detail?${a.toString()}`,{operation:"getReactionDetail"}),n=S(i,"getReactionDetail"),o=Array.isArray(n.reactionUserList)?n.reactionUserList.map(e=>T(e)&&"string"==typeof e.userId?{userId:e.userId,user:w(e.userId),createdAt:"string"==typeof e.createdAt?e.createdAt:void 0}:null).filter(e=>null!==e):[],d=Array.isArray(n.userList)?n.userList.filter(e=>"string"==typeof e).map(e=>({userId:e,user:w(e)})):[],l=o.length>0?o:d;return{reaction:"string"==typeof n.reaction?n.reaction:r.reaction,count:"number"==typeof n.count?n.count:l.length,isAddedBySelf:!0===n.state,reactionUsers:l,cursor:L(n.cursor),hasMore:L(n.cursor).length>0,createdAt:"string"==typeof n.createdAt?n.createdAt:void 0}})(this.getRestClient(t),t,e))}async getSupportedTranslationLanguages(){const e=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t)=>{const r=await C(()=>e.get(`${_(t)}/users/${t.userId}/translate/support/language`,{operation:"getSupportedTranslationLanguages"}));return A(r,"getSupportedTranslationLanguages").map(e=>T(e)&&"string"==typeof e.code?{code:e.code,name:"string"==typeof e.name?e.name:e.code,nativeName:"string"==typeof e.nativeName?e.nativeName:e.code}:null).filter(e=>null!==e)})(this.getRestClient(e),e))}async translateMessage(t){if("text"!==t.message.type)throw new e.ValidationError("only text messages can be translated",{code:e.ERROR_CODES.TRANSLATE_PARAM_INVALID,details:{fields:[{path:"message.type",message:"must be text",rule:"message_type"}]}});const r=t.message.body.content.trim();if(0===r.length)throw new e.ValidationError("message text is required",{code:e.ERROR_CODES.TRANSLATE_PARAM_INVALID,details:{fields:[{path:"message.body.content",message:"is required",rule:"required"}]}});if(!Array.isArray(t.targetLanguages)||0===t.targetLanguages.length)throw new e.ValidationError("targetLanguages is required",{code:e.ERROR_CODES.TRANSLATE_PARAM_INVALID,details:{fields:[{path:"targetLanguages",message:"is required",rule:"required"}]}});if(t.targetLanguages.some(e=>"string"!=typeof e||0===e.trim().length))throw new e.ValidationError("targetLanguages contains invalid language code",{code:e.ERROR_CODES.TRANSLATE_PARAM_INVALID,details:{fields:[{path:"targetLanguages",message:"contains invalid language code",rule:"language_code"}]}});const a=this.getRestContextOrThrow();return this.executeRestOperation(()=>M(this.getRestClient(a),a,{text:r,targetLanguages:t.targetLanguages}))}async voiceMessageToText(e,t){Ze(e,t);const r=this.getRestContextOrThrow();return this.executeRestOperation(()=>et(this.getRestClient(r),r,e,t))}async voiceFileToText(t,r){Je(t,r);const a=this.getRestContextOrThrow(),n=this.getClientOrThrow().getUploadAdapter();if(!n)throw new e.SDKError("Upload capability is missing for current platform",e.ERROR_CODES.UPLOAD_REQUIRED_FIELD_MISSING);return this.executeRestOperation(()=>(async(t,r,a,n)=>{const o=Je(a,n),s=e.normalizeUploadSource({file:o,fallbackName:Ge(o)?"voice.amr":void 0,fallbackMimeType:"audio/amr"});try{const a=await t.upload({url:`${r.restBaseUrl}${Be(r)}/speech/recognitions`,headers:{Authorization:`Bearer ${r.token}`,Accept:"application/json",[e.REQUEST_ID_HEADER]:e.createTraceId()},source:s.source,fields:{username:r.userId,...n?.format?{format:n.format}:{},...void 0!==n?.sampleRate?{sampleRate:String(n.sampleRate)}:{},...void 0!==n?.bitsPerSample?{bitsPerSample:String(n.bitsPerSample)}:{},...void 0!==n?.channels?{channels:String(n.channels)}:{}}});let i=a.body;try{i=JSON.parse(a.body)}catch{i=a.body}if(a.status<200||a.status>=300)throw new e.SDKError("Voice-to-text failed",e.ERROR_CODES.VOICE_TO_TEXT_FAILED,{details:{httpStatus:a.status,rawResponse:i}});return{text:He(i,"voiceFileToText")}}catch(d){if(d instanceof e.SDKError)throw Ye(d);throw Ye(i.mapUploadAdapterError(d))}})(n,a,t,r))}validateConversationLocator(e){if(this.requireNonEmptyString(e.conversationId,"conversationId"),"singleChat"!==e.conversationType&&"groupChat"!==e.conversationType&&"chatRoom"!==e.conversationType)throw this.buildValidationError("conversationType is invalid","conversationType")}validateUnreadConversationLocator(e){if(this.requireNonEmptyString(e.conversationId,"conversationId"),"singleChat"!==e.conversationType&&"groupChat"!==e.conversationType)throw this.buildValidationError("conversationType must be singleChat or groupChat","conversationType")}validateSendMessageReadReceiptsParams(e){if(this.requireNonEmptyString(e.conversationId,"conversationId"),"singleChat"!==e.conversationType&&"groupChat"!==e.conversationType)throw this.buildValidationError("conversationType is invalid","conversationType");if(e.messageIds.length>50)throw this.buildValidationError("messageIds cannot contain more than 50 items","messageIds");return this.validateMessageIdList(e.messageIds,"messageIds")}validateMessageIdList(e,t){if(!Array.isArray(e)||0===e.length)throw this.buildValidationError(`${t} cannot be empty`,t);return e.map((e,r)=>{if("string"!=typeof e||0===e.trim().length)throw this.buildValidationError(`${t}.${r} is invalid`,`${t}.${r}`);return e.trim()})}resolveDownloadCombineMessageParams(t){if("message"in t){if("combine"!==t.message.type)throw new e.ValidationError("message must be a combine message",{code:e.ERROR_CODES.VALIDATION_INVALID_FORMAT});const r=t.message.body;return{url:r.url??"",secret:r.secret,timeoutMs:t.timeoutMs,maxItems:t.maxItems}}return{url:t.url,secret:t.secret,timeoutMs:t.timeoutMs,maxItems:t.maxItems}}validateReactionParams(e){this.requireNonEmptyString(e.messageId,"messageId"),this.requireNonEmptyString(e.reaction,"reaction")}buildActionError(t,r){return t===e.ERROR_CODES.AUTH_NOT_LOGIN||t===e.ERROR_CODES.AUTH_UNAUTHORIZED?new e.AuthenticationError(r??"authentication failed",{code:t}):t===e.ERROR_CODES.CONNECTION_WEBSOCKET_ERROR||t===e.ERROR_CODES.CONNECTION_TIMEOUT?new e.ConnectionError(r??"connection unavailable",{code:t}):107===t||110===t||205===t||500===t||t===e.ERROR_CODES.VALIDATION_REQUIRED||t===e.ERROR_CODES.VALIDATION_INVALID_FORMAT?new e.ValidationError(r??"invalid parameter",{code:t}):t===e.ERROR_CODES.MESSAGE_RECALL_TIME_LIMIT?new e.SDKError(r??"message recall time limit reached",t):t===e.ERROR_CODES.MESSAGE_EDIT_FAILED?new e.SDKError(r??"message update failed",t):t===e.ERROR_CODES.OPERATION_UNSUPPORTED?new e.ValidationError(r??"operation unsupported",{code:t}):new e.SDKError(r??"message action failed",t)}requireNonEmptyString(e,t){if("string"!=typeof e||0===e.trim().length)throw this.buildValidationError(`${t} is required`,t)}buildValidationError(t,r){return new e.ValidationError(t,{code:e.ERROR_CODES.VALIDATION_INVALID_FORMAT,details:{fields:[{path:r,message:t,rule:"required"}]}})}getEventContextOrThrow(){if(!this.eventContext)throw new e.ValidationError("ChatManager is not bound to event context",{code:e.ERROR_CODES.VALIDATION_REQUIRED});return this.eventContext}getClientOrThrow(){if(!this.client)throw new e.ValidationError("ChatManager is not bound to client",{code:e.ERROR_CODES.VALIDATION_REQUIRED});return this.client}async prepareEditedTextBody(e,t,r){return(await q({msgServerId:"",msgLocalId:"",from:t,to:r.conversationId,sender:{userId:t},conversationId:r.conversationId,conversationType:r.conversationType,type:"text",sendStatus:"sending",ext:{},timestamp:0,body:e},e=>{const t=this.getRestContextOrThrow();return this.executeRestOperation(()=>M(this.getRestClient(t),t,e))})).body}getRestContextOrThrow(){return this.getClientOrThrow().getRestContext()}getRestClient(t){return this.restClient&&this.restBaseUrl===t.restBaseUrl&&this.restToken===t.token||(this.restClient=new e.RestClient(t.restBaseUrl,{errorMap:at,requestAdapter:this.getClientOrThrow().getRequestAdapter?.(),includeRequestId:!0}),this.restClient.setAuthToken(t.token),this.restBaseUrl=t.restBaseUrl,this.restToken=t.token),this.restClient}requireConnectedClient(){const t=this.getClientOrThrow();if(t.getConnectionState()!==d.CONNECTED)throw new e.ConnectionError("client is not connected",{code:e.ERROR_CODES.CONNECTION_WEBSOCKET_ERROR});return t}getCurrentUserIdOrThrow(){const t=this.getClientOrThrow().getCurrentUserId();if(!t)throw new e.AuthenticationError("user is not logged in",{code:e.ERROR_CODES.AUTH_NOT_LOGIN});return t}buildMessageSenderOrThrow(){const e=this.getClientOrThrow(),t=this.getCurrentUserIdOrThrow(),r=e.getCacheManager()?.getUserInfoSummaries([t],!1)[0];return{userId:t,nickname:r?.nickname,avatarUrl:r?.avatarUrl}}async hydrateGroupMessageReadUsers(e,t){const r=this.getClientOrThrow();if(!r.isUserInfoSyncEnabled()||0===t.users.length)return t;const a=r.getCacheManager(),n=await i.resolveGroupUserInfoMap({groupId:e,users:t.users.map(e=>e.user),includeNameCard:!0,cacheManager:a,fetchUserInfos:async({userIds:e})=>{const t=this.getUserInfoReadCapability(r);return t?await t.getUserInfoByUserId({userIds:e}):[]},hydrateGroupNamecards:async(e,t)=>{const a=this.getGroupNamecardHydrationCapability(r);a&&await a.hydrateMessageProfileGroupNamecards(e,t.map(e=>({userId:e})))}});return this.dispatchFetchedUserInfoUpdates(r,n.fetchedUserInfos),{...t,users:t.users.map(e=>{const t=n.usersById.get(e.userId)??e.user;return{...e,user:t}})}}getUserInfoReadCapability(e){const t=e.getManagerByCapability("userInfo:read");return t&&"function"==typeof t.getUserInfoByUserId?t:null}getGroupNamecardHydrationCapability(e){const t=e.getManagerByCapability("group:namecard");return t&&"function"==typeof t.hydrateMessageProfileGroupNamecards?t:null}dispatchFetchedUserInfoUpdates(e,t){if(0===t.length)return;const r=e.getCurrentUserId(),a=t.find(e=>e.userId===r),i=t.filter(e=>e.userId!==r);a&&e.dispatchOwnInfoUpdated(a),e.dispatchUserInfoUpdated(i),t.length>0&&e.refreshConversationDisplayFromUserInfos(t.map(e=>({userId:e.userId})),"profile")}async executeRestOperation(e){try{return await e()}catch(t){throw this.mapRestError(t)}}mapRestError(t){return t instanceof e.ValidationError||t instanceof e.AuthenticationError||t instanceof e.ConnectionError||t instanceof e.NetworkError?t:t instanceof e.RestTransportError?new e.NetworkError(t.message,{code:t.code,details:t.details}):t instanceof e.RestBusinessError||t instanceof e.SDKError?t:new e.SDKError(String(t),e.ERROR_CODES.UNKNOWN)}};nt.key="chatManager";let ot=nt;exports.CHAT_ERROR_MAP=P,exports.ChatManager=ot,exports.ConnectionEventName={CONNECTING:"onConnecting",CONNECTED:"onConnected",DISCONNECTED:"onDisconnected",RECONNECT_FAILED:"onReconnectFailed",TOKEN_WILL_EXPIRE:"onTokenWillExpire",TOKEN_EXPIRED:"onTokenExpired",OFFLINE_MESSAGE_SYNC_START:"onOfflineMessageSyncStart",OFFLINE_MESSAGE_SYNC_FINISH:"onOfflineMessageSyncFinish"},exports.ConnectionEventReason={LOGIN:"login",RECONNECT:"reconnect",ONLINE:"online",OFFLINE_RECOVER:"offline-recover",HEARTBEAT_FAILED:"heartbeat-failed",SEND_TIMEOUT:"send-timeout",CLOSE:"close",ERROR:"error",TIMEOUT:"timeout",LIMIT:"limit",OFFLINE:"offline",TOKEN_EXPIRED:"token-expired"},exports.ConnectionStatus=d,exports.InternalEventName={SEND_TIMEOUT:"onSendTimeout",GROUP_NOTIFY:"onGroupNotify",CHATROOM_NOTIFY:"onChatRoomNotify",CHAT_THREAD_NOTIFY:"onChatThreadNotify",USER_INFO_NOTIFY:"onUserInfoNotify",MESSAGE_SENT:"__internal:onMessageSent"},exports.MAX_COMBINE_MESSAGE_COUNT=300,exports.Validator=b,exports.attachmentFileStore=c,exports.calculateCombineLevel=f,exports.copyCombineCompatibleTextSidecar=(e,t)=>{const r=l.get(e);r&&l.set(t,r)},exports.createLocalFileUrl=g,exports.ensureCombineItemLimit=v,exports.ensureCombineLevel=E,exports.generateMsgLocalId=m,exports.getCombineCompatibleTextSidecar=e=>l.get(e),exports.prepareTextTranslation=q,exports.requestTranslateMessage=M,exports.validateCombineMessageList=I;