easemob-websdk 5.0.0 → 5.1.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 (67) hide show
  1. package/bundle/im-sdk-web.iife.js +1 -1
  2. package/cache/cache-manager.d.ts +3 -0
  3. package/cache/cache-store.d.ts +6 -4
  4. package/cache/cache-utils.d.ts +1 -1
  5. package/chat-client.d.ts +25 -12
  6. package/chunks/cache-utils-B99glc0H.js +1 -0
  7. package/chunks/cache-utils-gowrxNr8.cjs +1 -0
  8. package/chunks/chat-manager-DCqgMxLm.js +2 -0
  9. package/chunks/chat-manager-D_KF5qM1.cjs +1 -0
  10. package/chunks/common-BIpcR2uQ.cjs +1 -0
  11. package/chunks/common-D_DfwSd3.js +1 -0
  12. package/chunks/{group-user-info-resolver-C5pdiqox.cjs → group-user-info-resolver-Ds35Z1Uf.cjs} +1 -1
  13. package/chunks/{group-user-info-resolver-FNRqDg18.js → group-user-info-resolver-lEtRdWli.js} +1 -1
  14. package/chunks/index-BmwQgZ3E.js +1 -0
  15. package/chunks/index-BsIqq7LU.cjs +1 -0
  16. package/chunks/index-CFMcR5a_.js +1 -0
  17. package/chunks/index-Dvvh1nf6.cjs +1 -0
  18. package/chunks/light-Dg9A1Xmd.js +1 -0
  19. package/chunks/light-dJjIln5b.cjs +1 -0
  20. package/chunks/query-params-BHyPuD2k.cjs +1 -0
  21. package/chunks/query-params-Bu3Xq4b6.js +1 -0
  22. package/chunks/reflection-proto-codec-BerStgkC.cjs +1 -0
  23. package/chunks/reflection-proto-codec-CjRraw85.js +1 -0
  24. package/chunks/{session-list-query-B6dh-b4Y.cjs → session-list-query-C4OQMvPf.cjs} +1 -1
  25. package/chunks/{session-list-query-Dnp2HbpW.js → session-list-query-rynxSxtv.js} +1 -1
  26. package/chunks/{user-info-BfRwS4ZA.js → user-info-DfbCp80h.js} +1 -1
  27. package/chunks/{user-info-icpL0Eaw.cjs → user-info-DsDDTJrw.cjs} +1 -1
  28. package/index.cjs +1 -1
  29. package/index.js +2 -2
  30. package/managers/chat/index.cjs +1 -1
  31. package/managers/chat/index.js +1 -1
  32. package/managers/chat-manager.d.ts +3 -2
  33. package/managers/chat-thread/index.cjs +1 -1
  34. package/managers/chat-thread/index.js +1 -1
  35. package/managers/chat-thread-manager.d.ts +3 -2
  36. package/managers/chatroom/index.cjs +1 -1
  37. package/managers/chatroom/index.js +1 -1
  38. package/managers/contact/index.cjs +1 -1
  39. package/managers/contact/index.js +1 -1
  40. package/managers/group/index.cjs +1 -1
  41. package/managers/group/index.js +1 -1
  42. package/managers/presence/index.cjs +1 -1
  43. package/managers/presence/index.js +1 -1
  44. package/managers/push/index.cjs +1 -1
  45. package/managers/push/index.js +1 -1
  46. package/managers/user-info/index.cjs +1 -1
  47. package/managers/user-info/index.js +1 -1
  48. package/package.json +1 -1
  49. package/platform/env.d.ts +1 -0
  50. package/rest/dns-config.d.ts +10 -2
  51. package/types/chat-client.d.ts +28 -3
  52. package/utils/query-params.d.ts +16 -0
  53. package/utils/runtime-global.d.ts +13 -0
  54. package/utils/storage-error.d.ts +8 -0
  55. package/validators/chat-client.d.ts +13 -5
  56. package/chunks/cache-utils-BwRPIZ7n.js +0 -1
  57. package/chunks/cache-utils-CKbcYPlM.cjs +0 -1
  58. package/chunks/chat-manager-ChdK26ck.cjs +0 -1
  59. package/chunks/chat-manager-DH8a6Qj9.js +0 -2
  60. package/chunks/common-CfAlncj9.cjs +0 -1
  61. package/chunks/common-DN_g4O3n.js +0 -1
  62. package/chunks/index-BKg4EGcI.cjs +0 -1
  63. package/chunks/index-CK3GHdGU.cjs +0 -1
  64. package/chunks/index-CjofwvEQ.js +0 -1
  65. package/chunks/index-uKWbjx-u.js +0 -1
  66. package/chunks/reflection-proto-codec-64ocOTHU.js +0 -1
  67. package/chunks/reflection-proto-codec-BnQFQdZC.cjs +0 -1
@@ -4,6 +4,7 @@
4
4
  import type { ContactSnapshot } from '../types/contact';
5
5
  import type { UserInfo, UserInfoNotifyPatch } from '../types/user-info';
6
6
  import type { JoinedGroupSnapshot } from '../types/group';
7
+ import type { StorageAdapter } from '../platform';
7
8
  import type { CacheConfig, ContactCacheMeta, ContactRelationRecord, ContactVersionState, ConversationSummary, GroupNamecardCacheRecord, SessionListCheckpoint, UserInfoSummary } from './cache-types';
8
9
  import type { ConversationMark, ConversationType, ConversationItem, SessionListRemindType } from '../types/conversation';
9
10
  import type { Message } from '../types';
@@ -12,6 +13,8 @@ export interface CacheManagerOptions {
12
13
  readonly appKey: string;
13
14
  readonly userId: string;
14
15
  readonly cacheEncryptionMode?: 'auto' | 'off';
16
+ /** [zh-CN] 跨平台存储适配器;缺失或不可用时允许降级。 [en-US] Cross-platform storage adapter; persistence may gracefully degrade when unavailable. */
17
+ readonly storageAdapter?: StorageAdapter;
15
18
  readonly config?: Partial<CacheConfig>;
16
19
  }
17
20
  export interface ConversationMergeResult {
@@ -1,11 +1,13 @@
1
1
  /**
2
- * localStorage 访问封装
2
+ * 跨平台键值存储访问封装
3
3
  */
4
+ import type { StorageAdapter } from '../platform';
4
5
  import type { CacheCryptoAdapter } from './cache-crypto';
5
6
  export declare class CacheStore {
6
- private readonly available;
7
+ private readonly storage;
7
8
  private readonly cryptoAdapter;
8
- constructor(cryptoAdapter?: CacheCryptoAdapter);
9
+ constructor(cryptoAdapter?: CacheCryptoAdapter, storageAdapter?: StorageAdapter);
10
+ private static createLocalStorageAdapter;
9
11
  static checkAvailable(): boolean;
10
12
  readAsync<T>(key: string, fallback: T): Promise<T>;
11
13
  writeAsync(key: string, value: unknown): Promise<void>;
@@ -15,5 +17,5 @@ export declare class CacheStore {
15
17
  */
16
18
  writeStrictAsync(key: string, value: unknown): Promise<void>;
17
19
  private writeInternal;
18
- remove(key: string): void;
20
+ remove(key: string): Promise<void>;
19
21
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * 缓存工具方法
3
3
  */
4
+ export { isStorageQuotaExceededError as isQuotaExceededError } from '../utils/storage-error';
4
5
  export declare const isRecord: (value: unknown) => value is Record<string, unknown>;
5
6
  export declare const safeJsonParse: <T>(raw: string | null, fallback: T) => T;
6
7
  export declare const safeJsonStringify: (value: unknown) => string | null;
7
- export declare const isQuotaExceededError: (error: unknown) => boolean;
package/chat-client.d.ts CHANGED
@@ -34,6 +34,7 @@ export declare class ChatClient {
34
34
  private loginAttempt;
35
35
  private eventHub;
36
36
  private currentUserId;
37
+ private activeAppKey;
37
38
  private logReportEnabled;
38
39
  private readonly managerRegistry;
39
40
  private readonly managerCapabilities;
@@ -66,10 +67,15 @@ export declare class ChatClient {
66
67
  * managers: [ChatManager, GroupManager],
67
68
  * });
68
69
  * ```
69
- * @param config - [zh-CN] 初始化配置,包含 App Key、服务接入参数以及可选的管理器列表。 [en-US] Initialization configuration, including App Key, service access parameters, and an optional list of managers.
70
+ * @example [zh-CN] 使用 App ID 初始化;登录时 SDK 会通过 DNSConfig 解析对应的 App Key。 [en-US] Initialize with an App ID; the SDK resolves its App Key through DNSConfig during login.
71
+ * ```ts
72
+ * const client = ChatClient.init({ appId: 'application-id' });
73
+ * await client.login({ userId: 'user-id', token: 'token' });
74
+ * ```
75
+ * @param config - [zh-CN] 初始化配置,必须且只能包含 App Key 或 App ID 之一,并可包含服务接入参数与管理器列表。 [en-US] Initialization options containing exactly one of App Key or App ID, plus optional service access parameters and managers.
70
76
  * @returns {WithManagers<ChatClient, Managers>} [zh-CN] 返回带已注册管理器类型增强的 ChatClient 实例。 [en-US] Returns the ChatClient instance enhanced with with the types of the registered managers.
71
77
  */
72
- static init<Managers extends ReadonlyArray<ManagerRegistration<ChatClient>> = []>(config: Omit<InitConfig, 'managers'> & {
78
+ static init<Managers extends ReadonlyArray<ManagerRegistration<ChatClient>> = []>(config: InitConfig & {
73
79
  managers?: Managers;
74
80
  }): WithManagers<ChatClient, Managers>;
75
81
  /**
@@ -141,8 +147,9 @@ export declare class ChatClient {
141
147
  readonly useCustomAttachmentUpload: boolean;
142
148
  };
143
149
  /**
144
- * [zh-CN] 获取当前登录会话的 REST 访问上下文,供 SDK 公开模块或扩展能力复用统一鉴权与地址信息。
145
- * [en-US] Gets the REST access context for the current login session, allowing public modules or extension capabilities of the SDK to reuse unified authentication and routing information.
150
+ * @internal
151
+ * [zh-CN] 获取当前登录会话的 REST 访问上下文,供 SDK Manager 内部复用统一鉴权与地址信息。
152
+ * [en-US] Gets the REST access context for the current login session so SDK managers can internally reuse authentication and routing information.
146
153
  *
147
154
  * @example [zh-CN] 读取 REST 上下文。 [en-US] Read the REST context.
148
155
  * ```ts
@@ -199,8 +206,9 @@ export declare class ChatClient {
199
206
  */
200
207
  getSelfIdsOnOtherPlatform(): Promise<SelfIdsOnOtherPlatform>;
201
208
  /**
202
- * [zh-CN] 获取当前登录会话绑定的缓存管理器实例。
203
- * [en-US] Gets the cache manager instance bound to the current login session.
209
+ * @internal
210
+ * [zh-CN] 获取当前登录会话绑定的缓存管理器实例,供 SDK 内部缓存与同步链路使用。
211
+ * [en-US] Gets the cache manager bound to the current login session for internal cache and synchronization flows.
204
212
  *
205
213
  * @example [zh-CN] 读取缓存管理器 [en-US] Read cache manager.
206
214
  * ```ts
@@ -216,8 +224,9 @@ export declare class ChatClient {
216
224
  */
217
225
  getManagerByCapability(capability: ManagerCapability): ManagerBase<ChatClient> | undefined;
218
226
  /**
219
- * [zh-CN] 获取当前平台适配层暴露的上传适配器。
220
- * [en-US] Gets the upload adapter exposed by the current platform adapter.
227
+ * @internal
228
+ * [zh-CN] 获取当前平台适配层暴露的上传适配器,供 SDK 内部附件与共享文件上传链路使用。
229
+ * [en-US] Gets the upload adapter exposed by the current platform adapter for internal attachment and shared-file upload flows.
221
230
  *
222
231
  * @example [zh-CN] 读取上传适配器 [en-US] Read the upload adapter.
223
232
  * ```ts
@@ -306,8 +315,9 @@ export declare class ChatClient {
306
315
  handleGroupDestroyedConversation(groupId: string): Promise<void>;
307
316
  private handleMultiDeviceContactEvent;
308
317
  /**
309
- * [zh-CN] 获取当前好友快照缓存。
310
- * [en-US] Gets the cached friend snapshot.
318
+ * @internal
319
+ * [zh-CN] 获取当前好友快照缓存,供 SDK 内部联系人和资料同步链路使用。
320
+ * [en-US] Gets the cached friend snapshot for internal contact and profile synchronization flows.
311
321
  *
312
322
  * @example [zh-CN] 读取好友快照 [en-US] Read the friend snapshot.
313
323
  * ```ts
@@ -382,8 +392,9 @@ export declare class ChatClient {
382
392
  */
383
393
  use<Manager extends ManagerBase<ChatClient>, Key extends string>(ManagerCtor: ManagerConstructor<ChatClient, Manager, Key>): WithManager<this, Key, Manager>;
384
394
  /**
385
- * [zh-CN] 发送消息。消息通常应通过 `ChatManager` 或 `create*Message` 系列方法先构造,再交给此方法发送。
386
- * [en-US] Sends a message. The message is typically be constructed first via `ChatManager` or the `create*Message` family of methods before being passed to this method for transmission.
395
+ * @internal
396
+ * [zh-CN] 执行底层消息发送流程,供 `ChatManager.sendMessage` 内部调用。
397
+ * [en-US] Runs the low-level message sending flow for internal use by `ChatManager.sendMessage`.
387
398
  *
388
399
  * @example [zh-CN] 发送消息 [en-US] Send a message.
389
400
  * ```ts
@@ -547,6 +558,8 @@ export declare class ChatClient {
547
558
  private shuffleContactSyncUrls;
548
559
  private buildContactRosterRequest;
549
560
  private resetCore;
561
+ private requireConfiguredAppKey;
562
+ private requireActiveAppKey;
550
563
  private resetManagerSessionRuntimes;
551
564
  private getContactSyncRestContext;
552
565
  private static isSameConfig;
@@ -0,0 +1 @@
1
+ const r=r=>"object"==typeof r&&null!==r&&!Array.isArray(r),t=(r,t)=>{if(!r)return t;try{return JSON.parse(r)}catch{return t}},a=r=>{try{return JSON.stringify(r)}catch{return null}};export{a,r as i,t as s};
@@ -0,0 +1 @@
1
+ "use strict";exports.isRecord=r=>"object"==typeof r&&null!==r&&!Array.isArray(r),exports.safeJsonParse=(r,t)=>{if(!r)return t;try{return JSON.parse(r)}catch{return t}},exports.safeJsonStringify=r=>{try{return JSON.stringify(r)}catch{return null}};
@@ -0,0 +1,2 @@
1
+ import{g as e,V as t,E as r,p as a,d as s,c as i,R as n,a as o,n as d,b as l,e as c,S as g,A as u,U as m,l as p,C as h,f as y,N as v,h as I,m as f,i as b}from"./common-D_DfwSd3.js";import{i as T,s as _}from"./cache-utils-B99glc0H.js";import{h as C,t as E}from"./session-list-query-rynxSxtv.js";import{m as L,r as w}from"./group-user-info-resolver-lEtRdWli.js";import{ZodError as O,z as R}from"zod";import{l as N}from"./light-Dg9A1Xmd.js";import{c as M}from"./query-params-Bu3Xq4b6.js";const A={DISCONNECTED:"disconnected",CONNECTING:"connecting",CONNECTED:"connected",RECONNECTING:"reconnecting",RECONNECT_FAILED:"reconnectFailed"},U={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"},S={SEND_TIMEOUT:"onSendTimeout",GROUP_NOTIFY:"onGroupNotify",CHATROOM_NOTIFY:"onChatRoomNotify",CHAT_THREAD_NOTIFY:"onChatThreadNotify",USER_INFO_NOTIFY:"onUserInfoNotify",MESSAGE_SENT:"__internal:onMessageSent"},x={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"},D=/* @__PURE__ */new WeakMap,$=e=>D.get(e),k=(e,t)=>{const r=D.get(e);r&&D.set(t,r)};const V=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()}},P=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},q=()=>{const t=e().crypto;return t&&"function"==typeof t.randomUUID?t.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`},F=300,G=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),B=(e,r,a)=>{throw new t(e,{code:a,details:{fields:[{path:r,message:e,rule:"invalid_format"}]}})},z=e=>{if("combine"!==e.type)return 0;const t=e.combineLevel;return"number"==typeof t?t:G(e.body)&&"number"==typeof e.body.combineLevel?e.body.combineLevel:0},j=(e,t)=>{if(e.sender.userId||B(`messageList[${t}] sender.userId is required`,`messageList[${t}].sender.userId`,r.COMBINE_INVALID_INPUT),e.conversationId&&["singleChat","groupChat","chatRoom"].includes(e.conversationType)||B(`messageList[${t}] conversation is invalid`,`messageList[${t}].conversationId`,r.COMBINE_INVALID_INPUT),(!Number.isInteger(e.timestamp)||e.timestamp<=0)&&B(`messageList[${t}] timestamp must be positive integer`,`messageList[${t}].timestamp`,r.COMBINE_INVALID_INPUT),G(e.body)||B(`messageList[${t}] body must be object`,`messageList[${t}].body`,r.COMBINE_INVALID_INPUT),"combine"===e.type){const a=z(e);(!Number.isInteger(a)||a<0)&&B(`messageList[${t}] combineLevel is invalid`,`messageList[${t}].combineLevel`,r.COMBINE_INVALID_INPUT),a>10&&B(`messageList[${t}] combineLevel exceeds limit`,`messageList[${t}].combineLevel`,r.COMBINE_LEVEL_EXCEEDED)}},H=(e,t=300)=>{(!Number.isInteger(e)||e<=0)&&B("messageList must not be empty","messageList",r.COMBINE_INVALID_INPUT),(!Number.isInteger(t)||t<=0||t>300)&&B("max items is invalid","maxItems",r.COMBINE_INVALID_INPUT),e>t&&B(`messageList max length is ${t}`,"messageList",r.COMBINE_ITEM_LIMIT_EXCEEDED)},X=e=>{H(e.length);for(let t=0;t<e.length;t+=1){const a=e[t];void 0!==a?j(a,t):B(`messageList[${t}] is required`,`messageList[${t}]`,r.COMBINE_INVALID_INPUT)}},K=e=>{let t=0;for(const r of e){if("combine"!==r.type)continue;const e=z(r);e>t&&(t=e)}return t+1},Q=e=>{(!Number.isInteger(e)||e<=0)&&B("combineLevel must be positive integer","combineLevel",r.COMBINE_INVALID_INPUT),e>10&&B("combineLevel must be <= 10","combineLevel",r.COMBINE_LEVEL_EXCEEDED)};class W{static validate(e,a){try{return{success:!0,data:e.parse(a)}}catch(s){if(s instanceof O){const e=s.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("; ")}`,i=s.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:i,details:{fields:e}})}}return{success:!1,error:new t("Unknown validation error",{code:r.VALIDATION_UNKNOWN,details:{fields:[]}})}}}static validateOrThrow(e,a){const s=this.validate(e,a);if(s.success&&void 0!==s.data)return s.data;if(s.error)throw s.error;throw new t("Unknown validation error",{code:r.VALIDATION_UNKNOWN,details:{fields:[]}})}static safeParse(e,t){return this.validate(e,t)}}const Y=(e,a)=>new t(a,{code:r.VALIDATION_INVALID_FORMAT,details:{fields:[{path:e,message:a,rule:"invalid_format"}]}}),Z=(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()},J=e=>`mark_${String(e)}`,ee=(e,t)=>{if("singleChat"===e||"groupChat"===e||"chatRoom"===e)return e;throw Y(t,`${t} must be one of singleChat, groupChat, chatRoom`)},te=e=>"singleChat"===e?"chat":"groupChat"===e?"groupchat":"chatroom",re=e=>"string"==typeof e&&e.length>0?e:void 0,ae=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}},se=e=>T(e)?e:void 0,ie=(e,t)=>{const r=se(e);if(!r)return;const a=(e=>"string"==typeof e?_(e,{}):se(e)??{})(r.payload),s=Array.isArray(a.bodies)?a.bodies:[],i=se(s[0])??se(a.body),n=(e=>"txt"===e||"text"===e?"text":"custom"===e?"custom":"cmd"===e?"cmd":"image"===e||"file"===e||"voice"===e||"video"===e||"location"===e||"combine"===e?e:null)(i?.type??a.type);if(!i||!n)return;const o=((e,t)=>{if("text"===e)return{content:re(t.msg)??re(t.content)??""};if("custom"===e){const e=se(t.customExts)??se(t.params)??{},r={};for(const[t,a]of Object.entries(e))"string"==typeof a&&(r[t]=a);return{event:re(t.customEvent)??re(t.event)??"",params:r}}if("cmd"===e)return{action:re(t.action)??""};if("image"===e){const e=re(t.url)??re(t.remotePath)??"";return{localUrl:"",filename:re(t.filename)??re(t.displayName),filetype:re(t.filetype)??"application/octet-stream",width:ae(t.width),height:ae(t.height),isGif:!0===t.isGif||1===t.subType,isOriginalImage:!0===t.isOriginalImage,originalImageUrl:e,bigImageUrl:re(t.bigImageUrl),thumbnailUrl:re(t.thumbnailUrl)??re(t.thumbnailRemotePath),secret:re(t.secret)??re(t.secretKey),fileLength:ae(t.fileLength)}}return"file"===e?{url:re(t.url)??re(t.remotePath),filename:re(t.filename)??re(t.displayName),filetype:re(t.filetype)??"application/octet-stream",fileSize:ae(t.fileSize),fileLength:ae(t.fileLength),secret:re(t.secret)??re(t.secretKey)}:"voice"===e?{url:re(t.url)??re(t.remotePath),filename:re(t.filename)??re(t.displayName),filetype:re(t.filetype)??"application/octet-stream",duration:ae(t.duration)??0,fileLength:ae(t.fileLength),secret:re(t.secret)??re(t.secretKey)}:"video"===e?{url:re(t.url)??re(t.remotePath),filename:re(t.filename)??re(t.displayName),filetype:re(t.filetype)??"application/octet-stream",duration:ae(t.duration)??0,width:ae(t.width),height:ae(t.height),fileLength:ae(t.fileLength),secret:re(t.secret)??re(t.secretKey),thumbnailUrl:re(t.thumbnailUrl)??re(t.thumbnailRemotePath)}:"location"===e?{latitude:ae(t.latitude)??0,longitude:ae(t.longitude)??0,address:re(t.address),buildingName:re(t.buildingName)}:null})(n,i);if(!o)return;const d=re(a.from)??re(r.from)??"",l=re(a.to)??t.conversationId,c=se(a.sender),g={userId:re(c?.userId)??d,nickname:re(c?.nickname),avatarUrl:re(c?.avatarUrl)},u=se(a.ext)??{},m=(e=>{const t=se(e);if(!t)return;const r=re(t.operatorId)??re(t.operator),a=ae(t.operationCount)??ae(t.count),s=ae(t.operationTime)??ae(t.edit_time);return r&&void 0!==a&&void 0!==s?{operatorId:r,operationCount:a,operationTime:s}:void 0})(a.modifiedInfo??se(a.meta)?.edit_msg);return{msgServerId:re(r.id)??t.messageId,msgLocalId:re(r.msgLocalId)??"",from:d,to:l,sender:g,conversationId:t.conversationId,conversationType:t.conversationType,type:n,sendStatus:"sent",ext:u,timestamp:ae(r.timestamp)??t.timestamp,body:o,direct:d===t.currentUserId?"SEND":"RECEIVE",...m?{modifiedInfo:m}:{}}},ne=e=>`${e.conversationType}:${e.conversationId}`,oe=e=>{const{orgName:t,appName:r}=a(e.appKey);return{orgName:t,appName:r,encodedUserId:encodeURIComponent(e.userId),encodedResource:encodeURIComponent(e.clientResource)}},de=async(e,t,r,a)=>{const s=oe(t),i=(e=>{const t=e,r=t.conversations;if(void 0!==r){if(!Array.isArray(r)||0===r.length)throw Y("params.conversations","params.conversations must be a non-empty array");return r.map((e,t)=>{if(!T(e))throw Y(`params.conversations.${String(t)}`,`params.conversations.${String(t)} must be an object`);return{conversationId:Z(e.conversationId,`params.conversations.${String(t)}.conversationId`),conversationType:ee(e.conversationType,`params.conversations.${String(t)}.conversationType`)}})}return[{conversationId:Z(t.conversationId,"params.conversationId"),conversationType:ee(t.conversationType,"params.conversationType")}]})(r),n=((e,t)=>{if("number"!=typeof e||!Number.isInteger(e)||e<0||e>19)throw Y(t,`${t} must be an integer between 0 and 19`);return e})(r.mark,"params.mark"),o=await e.request(`/${s.orgName}/${s.appName}/sdk/user/${s.encodedUserId}/user_channels/mark?resource=${s.encodedResource}`,{method:a?"POST":"DELETE",body:{mark:J(n),targets:i.map(e=>({to:e.conversationId,type:te(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(ne({conversationId:r,conversationType:a}))}),t})((T(o)&&T(o.data)?o.data:{}).ignore),l=[],c=[];for(const g of i){const e={conversationId:g.conversationId,conversationType:g.conversationType};d.has(ne(g))?c.push({...e,reason:"ignored_by_server"}):l.push(e)}return{succeeded:l,failed:c,mark:n,operation:a?"addMark":"removeMark"}},le=async(e,t,r,a)=>{const s=oe(t),i=Z(r.conversationId,"params.conversationId"),n=ee(r.conversationType,"params.conversationType"),o=Z(r.messageId,"params.messageId");return await e.request(`/${s.orgName}/${s.appName}/sdk/user/${s.encodedUserId}/user_channel/pin?resource=${s.encodedResource}`,{method:a?"POST":"DELETE",body:{to:i,type:te(n),pin_msg_id:o},operation:a?"pinMessage":"unpinMessage"}),{conversationId:i,conversationType:n,messageId:o,operation:a?"pin":"unpin"}},ce=R.enum(["singleChat","groupChat","chatRoom"]),ge=R.record(R.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"),ue=R.object({path:R.string().min(1,"data.path is required"),size:R.number().optional(),name:R.string().optional(),type:R.string().optional()}),me=R.object({uri:R.string().min(1,"data.uri is required"),size:R.number().optional(),name:R.string().optional(),type:R.string().optional()}),pe="undefined"!=typeof File?R.instanceof(File):R.never(),he=R.union([pe,ue,me]),ye=R.object({conversationId:R.string().min(1,"conversationId is required"),conversationType:ce,ext:ge.optional(),timestamp:R.number().int().positive("timestamp must be a positive integer").optional(),receiverList:R.array(R.string().min(1,"receiverList item is required")).nonempty("receiverList must not be empty").optional(),deliverOnlineOnly:R.boolean().optional(),webhookEnv:R.string().optional(),priority:R.enum(["high","normal","low"]).optional(),needReadReceipt:R.boolean().optional(),isChatThread:R.boolean().optional()}),ve=R.object({type:R.string().min(1,"messageList.type is required"),sender:R.object({userId:R.string().min(1,"messageList.sender.userId is required"),nickname:R.string().optional(),avatarUrl:R.string().optional()}),conversationId:R.string().min(1,"messageList.conversationId is required"),conversationType:ce,timestamp:R.number().int().positive("messageList.timestamp must be positive"),body:R.record(R.unknown()),combineLevel:R.number().int().min(0).max(10).optional()}).passthrough(),Ie=e=>e.superRefine((e,t)=>{e.receiverList&&"singleChat"===e.conversationType&&t.addIssue({code:R.ZodIssueCode.custom,message:"receiverList is only allowed for group or chat room conversation",path:["receiverList"]}),e.isChatThread&&"groupChat"!==e.conversationType&&t.addIssue({code:R.ZodIssueCode.custom,message:"isChatThread is only allowed for group conversation",path:["isChatThread"]}),e.needReadReceipt&&"chatRoom"===e.conversationType&&t.addIssue({code:R.ZodIssueCode.custom,message:"needReadReceipt is not allowed for chatRoom conversation",path:["needReadReceipt"]})}),fe=Ie(ye.extend({content:R.string().min(1,"content is required"),targetLanguages:R.array(R.string().min(1)).optional()})),be=Ie(ye.extend({originalUrl:R.string().min(1,"originalUrl is required").optional(),filename:R.string().min(1,"filename is required").optional(),filetype:R.string().min(1,"filetype is required").optional(),width:R.number().positive("width must be positive").optional(),height:R.number().positive("height must be positive").optional(),isGif:R.boolean().optional(),isOriginalImage:R.boolean().optional(),fileLength:R.number().positive("fileLength must be positive").optional(),data:he.optional(),thumbnailUrl:R.string().min(1).optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),Te=Ie(ye.extend({originalUrl:R.string().min(1,"originalUrl is required").optional(),filename:R.string().min(1,"filename is required").optional(),filetype:R.string().min(1,"filetype is required").optional(),fileSize:R.number().positive("fileSize must be positive").optional(),fileLength:R.number().positive("fileLength must be positive").optional(),data:he.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),_e=Ie(ye.extend({originalUrl:R.string().min(1,"originalUrl is required").optional(),filename:R.string().min(1,"filename is required").optional(),filetype:R.string().min(1,"filetype is required").optional(),duration:R.number().positive("duration must be positive"),fileLength:R.number().positive("fileLength must be positive").optional(),data:he.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),Ce=Ie(ye.extend({originalUrl:R.string().min(1,"originalUrl is required").optional(),filename:R.string().min(1,"filename is required").optional(),filetype:R.string().min(1,"filetype is required").optional(),duration:R.number().positive("duration must be positive"),width:R.number().positive("width must be positive").optional(),height:R.number().positive("height must be positive").optional(),fileLength:R.number().positive("fileLength must be positive").optional(),thumbnailUrl:R.string().min(1).optional(),data:he.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),Ee=Ie(ye.extend({latitude:R.number(),longitude:R.number(),address:R.string().min(1).optional(),buildingName:R.string().min(1).optional()})),Le=Ie(ye.extend({action:R.string().min(1,"action is required")})),we=Ie(ye.extend({event:R.string().min(1,"event is required"),params:R.record(R.string()).optional()})),Oe=Ie(ye.extend({title:R.string().min(1,"title is required"),summary:R.string().min(1,"summary is required"),compatibleText:R.string().min(1).optional(),messageList:R.array(ve).min(1,"messageList must not be empty").max(300,"messageList max length is 300")})),Re=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}},Ne=()=>q(),Me=(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 s=P(a);if(!s)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 s},Ae=e=>!!e.isGif||(e.isOriginalImage??!1),Ue=(e,t,r,a,s)=>({msgServerId:"",msgLocalId:s??q(),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}),Se=(e,t)=>{const r=W.validateOrThrow(Oe,e),a=r.messageList,s=Re(t);X(a);const i=K(a);Q(i);const n={title:r.title,summary:r.summary,messageList:a,filename:"combine",filetype:"application/octet-stream",combineLevel:i},o=Ue(r,s,"combine",n);return((e,t)=>{t&&D.set(e,t)})(o,r.compatibleText),o},xe=e=>{const{orgName:t,appName:r}=a(e.appKey);return`/${t}/${r}`},De=e=>{const t=new Uint8Array(N.util.base64.length(e));return N.util.base64.decode(e,t,0),t},$e=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),ke=async e=>{try{return await e()}catch(t){if(!(t instanceof n))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 n(`REST business error: ${e}`,{code:t.code,details:t.details})}},Ve=e=>"string"==typeof e?e:"number"==typeof e||"boolean"==typeof e||"bigint"==typeof e?String(e):"",Pe=e=>{if("string"!=typeof e)return"";const t=e.trim();return t&&"undefined"!==t&&"null"!==t?t:""},qe=e=>({userId:e}),Fe=(e,t)=>{if(!$e(e)||!$e(e.data))throw i({apiName:t,message:`${t} response data is invalid`,mapped:!1});return e.data},Ge=(e,t)=>{if(!$e(e)||!Array.isArray(e.data))throw i({apiName:t,message:`${t} response data is invalid`,mapped:!1});return e.data},Be=(e,t)=>Array.isArray(e)?e:Ge(e,t),ze={txt:"text",img:"image",video:"video",file:"file",loc:"location",custom:"custom",combine:"combine"},je={text:"txt",image:"img",video:"video",file:"file",location:"loc",custom:"custom",combine:"combine"},He={chat:"singleChat",chatroom:"chatRoom",groupchat:"groupChat",singleChat:"singleChat",chatRoom:"chatRoom",groupChat:"groupChat"},Xe=(e,t,r)=>{if(!t)return"";if(t.includes("em-redirect"))return t;const{orgName:s,appName:i}=a(e.appKey),n=t.indexOf("/chatfiles/"),d=n>=0?t.slice(n):t,l=`${e.restBaseUrl}/${s}/${i}${d}`;return o(l,r)},Ke=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},Qe=(e,t,r)=>{const a=Ve(r.contentType??r.type),s=je[a];if(!s)return null;const i=$e(r.content)?r.content:{},n=((e,t)=>{const r=Ve(t.conversationType);if("groupchat"===r||"chatroom"===r)return Ve(t.receiverId);const a=Ve(t.senderId);return a===e?Ve(t.receiverId):a})(t,r),o=He[Ve(r.conversationType)]??"singleChat",d={msgServerId:Ve(r.messageId),msgLocalId:Ve(r.messageId),from:Ve(r.senderId),to:Ve(r.receiverId),conversationId:n,conversationType:o,type:s,ext:$e(r.ext)?r.ext:{},timestamp:"number"==typeof r.sentTime?r.sentTime:new Date(Ve(r.sentTime)).getTime(),sender:{userId:Ve(r.senderId)},highlight:Ke(r.highlight),text:"string"==typeof r.text?r.text:void 0};let l;const c=Ve(i.remotePath??i.url),g=Ve(i.secret??i.secretKey);switch(s){case"txt":l={type:"txt",content:Ve(i.message??r.text)};break;case"img":{const t=Xe(e,c,g);l={type:"img",url:t,thumb:i.thumb?Xe(e,Ve(i.thumb),Ve(i.thumb_secret??i.thumbnailSecretKey)):`${t}&thumbnail=true`,secret:g,width:Number(i.width??($e(i.size)?i.size.width:0))||0,height:Number(i.height??($e(i.size)?i.size.height:0))||0,fileLength:Number(i.file_length??i.fileLength??0)};break}case"video":l={type:"video",url:Xe(e,c,g),thumb:i.thumb||i.thumbnailRemotePath?Xe(e,Ve(i.thumb??i.thumbnailRemotePath),Ve(i.thumb_secret??i.thumbnailSecretKey)):"",secret:g,filename:Ve(i.filename??i.displayName),duration:Number(i.length??i.duration??0),fileLength:Number(i.file_length??i.fileLength??0)};break;case"file":l={type:"file",url:Xe(e,c,g),secret:g,filename:Ve(i.filename??i.displayName),fileLength:Number(i.file_length??i.fileLength??0)};break;case"loc":l={type:"loc",latitude:Number(i.lat??i.latitude??0),longitude:Number(i.lng??i.longitude??0),address:Ve(i.addr??i.address),buildingName:Ve(i.buildingName)};break;case"custom":l={type:"custom",customEvent:Ve(i.customEvent),customExts:$e(i.customExts)?i.customExts:{}};break;default:return null}return{...d,body:l}},We=async(e,t,r)=>{const a=`${xe(t)}/users/${t.userId}/messages/search/get`,s=((e,t)=>{const{option:r,pageNum:a=1,pageSize:s=20}=e,i=r.keywordList.map(e=>e.trim()).filter(e=>e.length>0),n={searchMode:"default",highlightEnable:!0,page:a,size:s};return 1===i.length?n.keyword=i[0]:(n.keywords=i,n.keywordMatch="and"===r.keywordListMatchType?"all":"any"),r.conversationId&&("singleChat"===r.conversationType?n.participantPairs=[{userId1:t,userId2:r.conversationId}]:"groupChat"===r.conversationType?n.groupIds=[r.conversationId]:"chatRoom"===r.conversationType&&(n.chatroomIds=[r.conversationId])),r.msgTypes&&r.msgTypes.length>0&&(n.contentType=r.msgTypes.map(e=>ze[e]??e).join(",")),void 0!==r.startTime&&(n.startTime=r.startTime),void 0!==r.endTime&&(n.endTime=r.endTime),r.searchScope&&(n.searchExt=r.searchScope),r.direction&&(n.sort="up"===r.direction?"sentTime:asc":"sentTime:desc"),{data:n}})(r,t.userId),i=await e.post(a,s,{operation:"searchMessages"}),n=$e(i)?i:{},o=$e(n.data)?n.data:n,d=$e(o.data)?o.data:o,l=Array.isArray(d.items)?d.items:Array.isArray(d.list)?d.list:[],c=$e(d.pagination)?d.pagination:d,g=Number(c.pageNum??c.page??r.pageNum??1),u=Number(c.pageSize??c.size??r.pageSize??20),m=Number(c.totalPages??0),p=1===c.isFinished||g>=m,h=[];for(const y of l){if(!$e(y))continue;const e=Qe(t,t.userId,y);e&&h.push(e)}return{messages:h,pageNum:g,pageSize:u,totalPages:m,isLast:p}},Ye=e=>{const{orgName:t,appName:r}=a(e.appKey);return`/api/sdk/v1/${t}/${r}`},Ze=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),Je=e=>Ze(e)&&"string"==typeof e.path&&e.path.trim().length>0,et=e=>(e=>"undefined"!=typeof File&&e instanceof File)(e)||Je(e),tt=e=>{if(!Ze(e))return;return{data:Ze(e.data)?e.data:void 0,error:Ze(e.error)?e.error:void 0}},rt=(e,t)=>{const a=tt(e),s=a?.data?.text;if("string"!=typeof s)throw new g(`${t} response data is invalid`,r.REST_BUSINESS_UNKNOWN,{details:{api:t,response:e}});return s},at=(e,r,a,s="sdk")=>"auth"===s?new u(e,{code:r,details:a}):"validation"===s?new t(e,{code:r,details:a}):new g(e,r,{details:a}),st=e=>!(void 0===e||Ze(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))),it=e=>{if(!e)return;const t=(e.split("#")[0]?.split("?")[0]??"").split("/").filter(Boolean);return t.length>0?t[t.length-1]:void 0},nt=e=>{const{serviceCode:t,serviceMessage:a}=(e=>{const t=e instanceof g&&Ze(e.details)?e.details:void 0,r=tt(t?.rawResponse??t?.response??e),a=t?.serverCode??r?.error?.code,s=t?.serverMessage??r?.error?.message;return{serviceCode:"string"==typeof a||"number"==typeof a?String(a):void 0,serviceMessage:"string"==typeof s?s:void 0}})(e);if(e instanceof m)return at("File upload failed",r.UPLOAD_REQUEST_FAILED,{cause:e.details});if(e instanceof g&&!t)return e;if(t)switch(t){case"4041001":return at("File not found",r.VOICE_TO_TEXT_FILE_NOT_FOUND,{serviceCode:t,serviceMessage:a});case"4001002":return at("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{serviceCode:t,serviceMessage:a},"validation");case"5021001":return at("File upload failed",r.UPLOAD_REQUEST_FAILED,{serviceCode:t,serviceMessage:a});case"4001003":return at("Voice duration exceeds 60 seconds",r.VOICE_TO_TEXT_FILE_DURATION_TOO_LONG,{serviceCode:t,serviceMessage:a},"validation");case"4031001":return at("Voice-to-text service is not enabled",r.SERVICE_NOT_ENABLED,{serviceCode:t,serviceMessage:a});case"4031002":return at("Beta service usage limit exceeded",r.SERVICE_LIMIT_EXCEEDED,{serviceCode:t,serviceMessage:a});case"4001001":return"string"==typeof(s=a)&&s.toLowerCase().includes("uploaded file exceeds")?at("File too large",r.VOICE_TO_TEXT_FILE_TOO_LARGE,{serviceCode:t,serviceMessage:a}):at(a||"Missing or invalid request parameter",r.VALIDATION_REQUIRED,{serviceCode:t,serviceMessage:a},"validation");case"5021003":case"5001003":return at("Voice-to-text failed",r.VOICE_TO_TEXT_FAILED,{serviceCode:t,serviceMessage:a});case"4011001":return at(a||"Unauthorized or invalid token",r.AUTH_UNAUTHORIZED,{serviceCode:t,serviceMessage:a},"auth");default:return at(a||(e instanceof Error?e.message:"Voice-to-text failed"),r.VOICE_TO_TEXT_FAILED,{serviceCode:t,serviceMessage:a})}var s;return e instanceof g?at(e.message,e.code,e.details):at(e instanceof Error?e.message:"Voice-to-text failed",r.VOICE_TO_TEXT_FAILED)},ot=(e,t)=>{if(!Ze(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 at("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceMessageBody"},"validation");var a;if(st(t))throw at("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceParams"},"validation");if(!e.url)throw at("File not found",r.VOICE_TO_TEXT_FILE_NOT_FOUND,{path:"voiceMessageBody.url"});if(!it(e.url))throw at("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceMessageBody.url"},"validation");return e},dt=(e,t)=>{if(st(t))throw at("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceParams"},"validation");if(!et(e))throw at("Invalid file",r.VOICE_TO_TEXT_FILE_INVALID,{path:"file"},"validation");return e},lt=async(e,a,s,i)=>{const n=ot(s,i),o=it(n.url);if(!o)throw((e,r,a,s="invalid")=>new t(e,{code:r,details:{fields:[{path:a,message:e,rule:s}]}}))("File not found",r.VOICE_TO_TEXT_FILE_NOT_FOUND,"voiceMessageBody.url");try{const t=await e.post(`${Ye(a)}/speech/transcriptions`,{data:{fileId:o,username:a.userId,...i?{audio:i}:{}}},{operation:"voiceMessageToText"});return{text:rt(t,"voiceMessageToText")}}catch(d){throw nt(d)}},ct=R.object({keywordList:R.array(R.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:R.enum(["or","and"]).optional(),conversationId:R.string().min(1).optional(),conversationType:R.enum(["singleChat","groupChat","chatRoom"]).optional(),msgTypes:R.array(R.enum(["txt","img","video","file","loc","custom","combine"])).optional(),startTime:R.number().optional(),endTime:R.number().optional(),searchScope:R.enum(["none","with","only"]).optional(),direction:R.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"}),gt=R.object({option:ct,pageNum:R.number().int().min(1).default(1),pageSize:R.number().int().min(1).max(100).default(20)}),ut=f(b,{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"]}}}}}),mt=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=W.validateOrThrow(fe,e),a=Re(t),s=Ne(),i={content:r.content};return r.targetLanguages&&(i.targetLanguages=r.targetLanguages),Ue(r,a,"text",i,s)})(e,this.buildMessageSenderOrThrow())}createImageMessage(e){return((e,t,r)=>{const a=W.validateOrThrow(be,e),i=Re(t),n=Ne(),o=a.data?Me(void 0,a.data):"",d=a.originalUrl?s(a.originalUrl,{deriveVariants:!r?.useCustomAttachmentUpload}):void 0;a.data&&V.set(n,a.data);const l=a.isGif??!1,c={localUrl:o,filename:a.filename,filetype:a.filetype,width:a.width,height:a.height,isGif:l,isOriginalImage:Ae({isGif:l,isOriginalImage:a.isOriginalImage})};return d?.originalImageUrl&&(c.originalImageUrl=d.originalImageUrl,c.bigImageUrl=d.bigImageUrl,c.thumbnailUrl=d.thumbnailUrl),void 0!==a.fileLength&&(c.fileLength=a.fileLength),a.thumbnailUrl&&(c.thumbnailUrl=a.thumbnailUrl),Ue(a,i,"image",c,n)})(e,this.buildMessageSenderOrThrow(),this.getClientOrThrow().getMessageCreationOptions())}createFileMessage(e){return((e,t)=>{const r=W.validateOrThrow(Te,e),a=Re(t),s=Ne(),i=Me(r.originalUrl,r.data);r.data&&V.set(s,r.data);const n={url:i,filename:r.filename,filetype:r.filetype};return void 0!==r.fileSize&&(n.fileSize=r.fileSize),void 0!==r.fileLength&&(n.fileLength=r.fileLength),Ue(r,a,"file",n,s)})(e,this.buildMessageSenderOrThrow())}createVoiceMessage(e){return((e,t)=>{const r=W.validateOrThrow(_e,e),a=Re(t),s=Ne(),i=Me(r.originalUrl,r.data);r.data&&V.set(s,r.data);const n={url:i,filename:r.filename,filetype:r.filetype,duration:r.duration};return void 0!==r.fileLength&&(n.fileLength=r.fileLength),Ue(r,a,"voice",n,s)})(e,this.buildMessageSenderOrThrow())}createVideoMessage(e){return((e,t)=>{const r=W.validateOrThrow(Ce,e),a=Re(t),s=Ne(),i=Me(r.originalUrl,r.data);r.data&&V.set(s,r.data);const n={url:i,filename:r.filename,filetype:r.filetype,duration:r.duration};return void 0!==r.width&&(n.width=r.width),void 0!==r.height&&(n.height=r.height),void 0!==r.fileLength&&(n.fileLength=r.fileLength),r.thumbnailUrl&&(n.thumbnailUrl=r.thumbnailUrl),Ue(r,a,"video",n,s)})(e,this.buildMessageSenderOrThrow())}createLocationMessage(e){return((e,t)=>{const r=W.validateOrThrow(Ee,e),a=Re(t),s={latitude:r.latitude,longitude:r.longitude};return r.address&&(s.address=r.address),r.buildingName&&(s.buildingName=r.buildingName),Ue(r,a,"location",s)})(e,this.buildMessageSenderOrThrow())}createCmdMessage(e){return((e,t)=>{const r=W.validateOrThrow(Le,e),a=Re(t),s={action:r.action};return void 0!==r.deliverOnlineOnly&&(s.deliverOnlineOnly=r.deliverOnlineOnly),Ue(r,a,"cmd",s)})(e,this.buildMessageSenderOrThrow())}createCustomMessage(e){return((e,t)=>{const r=W.validateOrThrow(we,e),a=Re(t),s={event:r.event};return r.params&&(s.params=r.params),Ue(r,a,"custom",s)})(e,this.buildMessageSenderOrThrow())}createCombineMessage(e){return Se(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&&!C(t,e.mark)))).map(E);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=oe(t),s=Z(r.conversationId,"params.conversationId"),i=ee(r.conversationType,"params.conversationType"),n=r.deleteRoamingMessages??!1;if("boolean"!=typeof n)throw Y("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:s,type:"groupChat"===i?"groupChat":te(i),delete_roam:n},operation:"deleteConversation"}),{conversationId:s,conversationType:i,operation:"delete"}})(this.getRestClient(t),t,e),a=this.getClientOrThrow(),s=a.getCacheManager()?.deleteConversation({conversationId:r.conversationId,type:r.conversationType});return s?.changed&&a.emitConversationListUpdate("local"),r}async setConversationPinned(e){const t=this.getRestContextOrThrow(),r=await(async(e,t,r)=>{const a=oe(t),s=Z(r.conversationId,"params.conversationId"),i=ee(r.conversationType,"params.conversationType");if("boolean"!=typeof r.pinned)throw Y("params.pinned","params.pinned must be a boolean");const n="groupChat"===i?"groupChat":te(i),o=r.pinned?await e.post(`/${a.orgName}/${a.appName}/sdk/user/${a.encodedUserId}/user_channel/top?resource=${a.encodedResource}`,{type:n,to:s},{operation:"setConversationPinned"}):await e.delete(`/${a.orgName}/${a.appName}/sdk/user/${a.encodedUserId}/user_channel/top?type=${encodeURIComponent(n)}&to=${encodeURIComponent(s)}&resource=${a.encodedResource}`,{operation:"setConversationPinned"}),d=T(o)&&T(o.data)?o.data:{};return{conversationId:s,conversationType:i,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(),s=a?.applyConversationPinnedMutation({conversationId:r.conversationId,type:r.conversationType,isPinned:r.isPinned??e.pinned,pinnedTime:r.pinnedTime});return s?.changed&&this.getClientOrThrow().emitConversationListUpdate("local"),r}async addConversationMark(e){const t=this.getRestContextOrThrow(),r=await(async(e,t,r)=>de(e,t,r,!0))(this.getRestClient(t),t,e),a=this.getClientOrThrow().getCacheManager(),s=a?.applyConversationMarkMutation({conversations:[...r.succeeded.map(e=>({...e,applied:!0})),...r.failed.map(e=>({...e,applied:!1}))],mark:r.mark,operation:r.operation});return s?.changed&&this.getClientOrThrow().emitConversationListUpdate("local"),r}async removeConversationMark(e){const t=this.getRestContextOrThrow(),r=await(async(e,t,r)=>de(e,t,r,!1))(this.getRestClient(t),t,e),a=this.getClientOrThrow().getCacheManager(),s=a?.applyConversationMarkMutation({conversations:[...r.succeeded.map(e=>({...e,applied:!0})),...r.failed.map(e=>({...e,applied:!1}))],mark:r.mark,operation:r.operation});return s?.changed&&this.getClientOrThrow().emitConversationListUpdate("local"),r}async clearAllMessagesAndConversations(){const e=this.getRestContextOrThrow();await(async(e,t)=>{const r=oe(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)=>le(e,t,r,!0))(this.getRestClient(t),t,e))}async unpinMessage(e){const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>le(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=oe(t),s=Z(r.conversationId,"params.conversationId"),i=ee(r.conversationType,"params.conversationType"),n=await e.get(`/${a.orgName}/${a.appName}/sdk/user/${a.encodedUserId}/user_channel/pin?to=${encodeURIComponent(s)}&type=${encodeURIComponent(te(i))}&limit=${String(20)}`,{operation:"getPinnedMessageList"}),o=T(n)&&T(n.data)?n.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 n="number"==typeof r.pin_opt_at?r.pin_opt_at:0,o=ie(r.message,{messageId:a,conversationId:s,conversationType:i,currentUserId:t.userId,timestamp:n});return o?(e.push({messageId:a,conversationId:s,conversationType:i,operatorId:"string"==typeof r.pin_operator?r.pin_operator:void 0,pinnedAt:n,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;p.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){if(this.validateConversationLocator(e),this.requireNonEmptyString(e.messageId,"messageId"),"text"!==e.message.type&&"custom"!==e.message.type)throw new t("only text and custom messages are editable",{code:r.OPERATION_UNSUPPORTED});await this.requireConnectedClient().sendMessageAction({kind:"update",conversationId:e.conversationId,conversationType:e.conversationType,messageId:e.messageId,body:e.message.body,messageType:e.message.type,ext:e.message.ext},(e,t)=>this.buildActionError(e,t));const a=Date.now(),s=this.getCurrentUserIdOrThrow(),i={operatorId:s,operationCount:1,operationTime:a};return{msgServerId:e.messageId,msgLocalId:"",from:s,to:e.conversationId,sender:{userId:s},conversationId:e.conversationId,conversationType:e.conversationType,type:e.message.type,sendStatus:"sent",ext:e.message.ext,timestamp:a,body:e.message.body,direct:"SEND",modifiedInfo:i}}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 s=`${xe(t)}/users/${t.userId}/messageroaming`,i=await e.post(s,{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"}),n=Fe(i,"getHistoryMessages"),o=Array.isArray(n.msgs)?n.msgs:[],d=[];for(const l of o){if(!$e(l)||"string"!=typeof l.msg||0===l.msg.length)continue;const e=a(De(l.msg));e&&d.push(e)}return{items:d,cursor:Pe(n.next_key),hasMore:!0!==n.is_last&&d.length>0}})(this.getRestClient(t),t,e,e=>this.getClientOrThrow().decodeServerMessageMeta(e)))}async searchMessages(e){const t=W.validateOrThrow(gt,e),r=this.getRestContextOrThrow();return this.executeRestOperation(()=>We(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",s="singleChat"===r.conversationType?"chat":"group",i=encodeURIComponent(t.clientResource),n=r.messageIds?`${xe(t)}/sdk/message/roaming/${s}/user/${t.userId}?${a}=${encodeURIComponent(r.conversationId)}&msgIdList=${encodeURIComponent(r.messageIds.join(","))}&resource=${i}`:`${xe(t)}/sdk/message/roaming/${s}/user/${t.userId}/time?${a}=${encodeURIComponent(r.conversationId)}&delTime=${r.beforeTimestamp}&resource=${i}`;await e.delete(n,{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=M();a.set("limit",String(r.pageSize??10)),r.cursor&&a.set("key",r.cursor);const s=`${xe(t)}/chatgroups/${encodeURIComponent(r.groupId)}/acks/${encodeURIComponent(r.messageId)}?${a.toString()}`,i=await e.get(s,{operation:"getGroupMessageReadUsers"}),n=Fe(i,"getGroupMessageReadUsers"),o=$e(n.group_ack)?n.group_ack:n,d=(Array.isArray(o.userlist)?o.userlist:[]).map(e=>$e(e)&&"string"==typeof e.username?{userId:e.username,user:qe(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 n.ackmid?n.ackmid:r.messageId,users:d,count:"number"==typeof o.total?o.total:d.length,cursor:Pe(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=`${xe(t)}/chatgroups/${encodeURIComponent(r.groupId)}/acks/batch`,s=await e.post(a,{messageIds:r.messageIds},{operation:"getGroupMessageReadReceipts"});return Ge(s,"getGroupMessageReadReceipts").map(e=>$e(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(`${xe(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=`${xe(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=M(),s="string"==typeof r.messageId?r.messageId:[...r.messageId].join(",");a.set("msgIdList",s),a.set("msgType","groupChat"===r.conversationType?"group":"chat"),r.groupId&&a.set("groupId",r.groupId);const i=await e.get(`${xe(t)}/reaction/user/${t.userId}?${a.toString()}`,{operation:"getReactionList"});return Ge(i,"getReactionList").map(e=>{if(!$e(e)||"string"!=typeof e.msgId)return null;const t=Array.isArray(e.reactionList)?e.reactionList:[];return{messageId:e.msgId,reactions:t.map(e=>$e(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=M();a.set("msgId",r.messageId),a.set("message",r.reaction),a.set("cursor",r.cursor??""),a.set("limit",String(r.pageSize??20));const s=await e.get(`${xe(t)}/reaction/user/${t.userId}/detail?${a.toString()}`,{operation:"getReactionDetail"}),i=Fe(s,"getReactionDetail"),n=Array.isArray(i.reactionUserList)?i.reactionUserList.map(e=>$e(e)&&"string"==typeof e.userId?{userId:e.userId,user:qe(e.userId),createdAt:"string"==typeof e.createdAt?e.createdAt:void 0}:null).filter(e=>null!==e):[],o=Array.isArray(i.userList)?i.userList.filter(e=>"string"==typeof e).map(e=>({userId:e,user:qe(e)})):[],d=n.length>0?n:o;return{reaction:"string"==typeof i.reaction?i.reaction:r.reaction,count:"number"==typeof i.count?i.count:d.length,isAddedBySelf:!0===i.state,reactionUsers:d,cursor:Pe(i.cursor),hasMore:Pe(i.cursor).length>0,createdAt:"string"==typeof i.createdAt?i.createdAt:void 0}})(this.getRestClient(t),t,e))}async getSupportedTranslationLanguages(){const e=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t)=>{const r=await ke(()=>e.get(`${xe(t)}/users/${t.userId}/translate/support/language`,{operation:"getSupportedTranslationLanguages"}));return Be(r,"getSupportedTranslationLanguages").map(e=>$e(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 s=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t,r)=>{const a=await ke(()=>e.post(`${xe(t)}/users/${t.userId}/translate`,{text:r.text,to:[...r.targetLanguages]},{operation:"translateMessage"})),s=Be(a,"translateMessage"),n=$e(s[0])?s[0]:null;if(!n)throw i({apiName:"translateMessage",message:"translateMessage response data is invalid",mapped:!1});const o=Array.isArray(n.translations)?n.translations:[],d=$e(n.detectedLanguage)?n.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=>$e(e)&&"string"==typeof e.text&&"string"==typeof e.to?{text:e.text,to:e.to}:null).filter(e=>null!==e)}})(this.getRestClient(s),s,{text:a,targetLanguages:e.targetLanguages}))}async voiceMessageToText(e,t){ot(e,t);const r=this.getRestContextOrThrow();return this.executeRestOperation(()=>lt(this.getRestClient(r),r,e,t))}async voiceFileToText(e,t){dt(e,t);const a=this.getRestContextOrThrow(),s=this.getClientOrThrow().getUploadAdapter();if(!s)throw new g("Upload capability is missing for current platform",r.UPLOAD_REQUIRED_FIELD_MISSING);return this.executeRestOperation(()=>(async(e,t,a,s)=>{const i=dt(a,s),n=d({file:i,fallbackName:Je(i)?"voice.amr":void 0,fallbackMimeType:"audio/amr"});try{const a=await e.upload({url:`${t.restBaseUrl}${Ye(t)}/speech/recognitions`,headers:{Authorization:`Bearer ${t.token}`,Accept:"application/json",[l]:c()},source:n.source,fields:{username:t.userId,...s?.format?{format:s.format}:{},...void 0!==s?.sampleRate?{sampleRate:String(s.sampleRate)}:{},...void 0!==s?.bitsPerSample?{bitsPerSample:String(s.bitsPerSample)}:{},...void 0!==s?.channels?{channels:String(s.channels)}:{}}});let i=a.body;try{i=JSON.parse(a.body)}catch{i=a.body}if(a.status<200||a.status>=300)throw new g("Voice-to-text failed",r.VOICE_TO_TEXT_FAILED,{details:{httpStatus:a.status,rawResponse:i}});return{text:rt(i,"voiceFileToText")}}catch(o){if(o instanceof g)throw nt(o);throw nt(L(o))}})(s,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 g(a??"message recall time limit reached",e):e===r.MESSAGE_EDIT_FAILED?new g(a??"message update failed",e):e===r.OPERATION_UNSUPPORTED?new t(a??"operation unsupported",{code:e}):new g(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}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:ut,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()!==A.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(),s=await w({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,s.fetchedUserInfos),{...t,users:t.users.map(e=>{const t=s.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),s=t.filter(e=>e.userId!==r);a&&e.dispatchOwnInfoUpdated(a),e.dispatchUserInfoUpdated(s),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 I?new v(e.message,{code:e.code,details:e.details}):e instanceof n||e instanceof g?e:new g(String(e),r.UNKNOWN)}};mt.key="chatManager";let pt=mt;export{pt as C,S as I,F as M,W as V,A as a,U as b,x as c,K as d,Q as e,P as f,$ as g,V as h,k as i,H as j,q as k,X as v};
@@ -0,0 +1 @@
1
+ "use strict";const e=require("./common-BIpcR2uQ.cjs"),t=require("./cache-utils-gowrxNr8.cjs"),r=require("./session-list-query-C4OQMvPf.cjs"),a=require("./group-user-info-resolver-Ds35Z1Uf.cjs"),i=require("zod"),s=require("./light-dJjIln5b.cjs"),o=require("./query-params-BHyPuD2k.cjs"),n={DISCONNECTED:"disconnected",CONNECTING:"connecting",CONNECTED:"connected",RECONNECTING:"reconnecting",RECONNECT_FAILED:"reconnectFailed"},d=new WeakMap;const l=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()}},c=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},g=()=>{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),m=(t,r,a)=>{throw new e.ValidationError(t,{code:a,details:{fields:[{path:r,message:t,rule:"invalid_format"}]}})},p=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},h=(t,r)=>{if(t.sender.userId||m(`messageList[${r}] sender.userId is required`,`messageList[${r}].sender.userId`,e.ERROR_CODES.COMBINE_INVALID_INPUT),t.conversationId&&["singleChat","groupChat","chatRoom"].includes(t.conversationType)||m(`messageList[${r}] conversation is invalid`,`messageList[${r}].conversationId`,e.ERROR_CODES.COMBINE_INVALID_INPUT),(!Number.isInteger(t.timestamp)||t.timestamp<=0)&&m(`messageList[${r}] timestamp must be positive integer`,`messageList[${r}].timestamp`,e.ERROR_CODES.COMBINE_INVALID_INPUT),u(t.body)||m(`messageList[${r}] body must be object`,`messageList[${r}].body`,e.ERROR_CODES.COMBINE_INVALID_INPUT),"combine"===t.type){const a=p(t);(!Number.isInteger(a)||a<0)&&m(`messageList[${r}] combineLevel is invalid`,`messageList[${r}].combineLevel`,e.ERROR_CODES.COMBINE_INVALID_INPUT),a>10&&m(`messageList[${r}] combineLevel exceeds limit`,`messageList[${r}].combineLevel`,e.ERROR_CODES.COMBINE_LEVEL_EXCEEDED)}},y=(t,r=300)=>{(!Number.isInteger(t)||t<=0)&&m("messageList must not be empty","messageList",e.ERROR_CODES.COMBINE_INVALID_INPUT),(!Number.isInteger(r)||r<=0||r>300)&&m("max items is invalid","maxItems",e.ERROR_CODES.COMBINE_INVALID_INPUT),t>r&&m(`messageList max length is ${r}`,"messageList",e.ERROR_CODES.COMBINE_ITEM_LIMIT_EXCEEDED)},v=t=>{y(t.length);for(let r=0;r<t.length;r+=1){const a=t[r];void 0!==a?h(a,r):m(`messageList[${r}] is required`,`messageList[${r}]`,e.ERROR_CODES.COMBINE_INVALID_INPUT)}},I=e=>{let t=0;for(const r of e){if("combine"!==r.type)continue;const e=p(r);e>t&&(t=e)}return t+1},E=t=>{(!Number.isInteger(t)||t<=0)&&m("combineLevel must be positive integer","combineLevel",e.ERROR_CODES.COMBINE_INVALID_INPUT),t>10&&m("combineLevel must be <= 10","combineLevel",e.ERROR_CODES.COMBINE_LEVEL_EXCEEDED)};class _{static validate(t,r){try{return{success:!0,data:t.parse(r)}}catch(a){if(a instanceof i.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 f=(t,r)=>new e.ValidationError(r,{code:e.ERROR_CODES.VALIDATION_INVALID_FORMAT,details:{fields:[{path:t,message:r,rule:"invalid_format"}]}}),R=(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()},b=e=>`mark_${String(e)}`,C=(e,t)=>{if("singleChat"===e||"groupChat"===e||"chatRoom"===e)return e;throw f(t,`${t} must be one of singleChat, groupChat, chatRoom`)},T=e=>"singleChat"===e?"chat":"groupChat"===e?"groupchat":"chatroom",O=e=>"string"==typeof e&&e.length>0?e:void 0,L=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}},N=e=>t.isRecord(e)?e:void 0,S=(e,r)=>{const a=N(e);if(!a)return;const i=(e=>"string"==typeof e?t.safeJsonParse(e,{}):N(e)??{})(a.payload),s=Array.isArray(i.bodies)?i.bodies:[],o=N(s[0])??N(i.body),n=(e=>"txt"===e||"text"===e?"text":"custom"===e?"custom":"cmd"===e?"cmd":"image"===e||"file"===e||"voice"===e||"video"===e||"location"===e||"combine"===e?e:null)(o?.type??i.type);if(!o||!n)return;const d=((e,t)=>{if("text"===e)return{content:O(t.msg)??O(t.content)??""};if("custom"===e){const e=N(t.customExts)??N(t.params)??{},r={};for(const[t,a]of Object.entries(e))"string"==typeof a&&(r[t]=a);return{event:O(t.customEvent)??O(t.event)??"",params:r}}if("cmd"===e)return{action:O(t.action)??""};if("image"===e){const e=O(t.url)??O(t.remotePath)??"";return{localUrl:"",filename:O(t.filename)??O(t.displayName),filetype:O(t.filetype)??"application/octet-stream",width:L(t.width),height:L(t.height),isGif:!0===t.isGif||1===t.subType,isOriginalImage:!0===t.isOriginalImage,originalImageUrl:e,bigImageUrl:O(t.bigImageUrl),thumbnailUrl:O(t.thumbnailUrl)??O(t.thumbnailRemotePath),secret:O(t.secret)??O(t.secretKey),fileLength:L(t.fileLength)}}return"file"===e?{url:O(t.url)??O(t.remotePath),filename:O(t.filename)??O(t.displayName),filetype:O(t.filetype)??"application/octet-stream",fileSize:L(t.fileSize),fileLength:L(t.fileLength),secret:O(t.secret)??O(t.secretKey)}:"voice"===e?{url:O(t.url)??O(t.remotePath),filename:O(t.filename)??O(t.displayName),filetype:O(t.filetype)??"application/octet-stream",duration:L(t.duration)??0,fileLength:L(t.fileLength),secret:O(t.secret)??O(t.secretKey)}:"video"===e?{url:O(t.url)??O(t.remotePath),filename:O(t.filename)??O(t.displayName),filetype:O(t.filetype)??"application/octet-stream",duration:L(t.duration)??0,width:L(t.width),height:L(t.height),fileLength:L(t.fileLength),secret:O(t.secret)??O(t.secretKey),thumbnailUrl:O(t.thumbnailUrl)??O(t.thumbnailRemotePath)}:"location"===e?{latitude:L(t.latitude)??0,longitude:L(t.longitude)??0,address:O(t.address),buildingName:O(t.buildingName)}:null})(n,o);if(!d)return;const l=O(i.from)??O(a.from)??"",c=O(i.to)??r.conversationId,g=N(i.sender),u={userId:O(g?.userId)??l,nickname:O(g?.nickname),avatarUrl:O(g?.avatarUrl)},m=N(i.ext)??{},p=(e=>{const t=N(e);if(!t)return;const r=O(t.operatorId)??O(t.operator),a=L(t.operationCount)??L(t.count),i=L(t.operationTime)??L(t.edit_time);return r&&void 0!==a&&void 0!==i?{operatorId:r,operationCount:a,operationTime:i}:void 0})(i.modifiedInfo??N(i.meta)?.edit_msg);return{msgServerId:O(a.id)??r.messageId,msgLocalId:O(a.msgLocalId)??"",from:l,to:c,sender:u,conversationId:r.conversationId,conversationType:r.conversationType,type:n,sendStatus:"sent",ext:m,timestamp:L(a.timestamp)??r.timestamp,body:d,direct:l===r.currentUserId?"SEND":"RECEIVE",...p?{modifiedInfo:p}:{}}},w=e=>`${e.conversationType}:${e.conversationId}`,M=t=>{const{orgName:r,appName:a}=e.parseAppKey(t.appKey);return{orgName:r,appName:a,encodedUserId:encodeURIComponent(t.userId),encodedResource:encodeURIComponent(t.clientResource)}},A=async(e,r,a,i)=>{const s=M(r),o=(e=>{const r=e,a=r.conversations;if(void 0!==a){if(!Array.isArray(a)||0===a.length)throw f("params.conversations","params.conversations must be a non-empty array");return a.map((e,r)=>{if(!t.isRecord(e))throw f(`params.conversations.${String(r)}`,`params.conversations.${String(r)} must be an object`);return{conversationId:R(e.conversationId,`params.conversations.${String(r)}.conversationId`),conversationType:C(e.conversationType,`params.conversations.${String(r)}.conversationType`)}})}return[{conversationId:R(r.conversationId,"params.conversationId"),conversationType:C(r.conversationType,"params.conversationType")}]})(a),n=((e,t)=>{if("number"!=typeof e||!Number.isInteger(e)||e<0||e>19)throw f(t,`${t} must be an integer between 0 and 19`);return e})(a.mark,"params.mark"),d=await e.request(`/${s.orgName}/${s.appName}/sdk/user/${s.encodedUserId}/user_channels/mark?resource=${s.encodedResource}`,{method:i?"POST":"DELETE",body:{mark:b(n),targets:o.map(e=>({to:e.conversationId,type:T(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(w({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(w(t))?g.push({...e,reason:"ignored_by_server"}):c.push(e)}return{succeeded:c,failed:g,mark:n,operation:i?"addMark":"removeMark"}},D=async(e,t,r,a)=>{const i=M(t),s=R(r.conversationId,"params.conversationId"),o=C(r.conversationType,"params.conversationType"),n=R(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:s,type:T(o),pin_msg_id:n},operation:a?"pinMessage":"unpinMessage"}),{conversationId:s,conversationType:o,messageId:n,operation:a?"pin":"unpin"}},U=i.z.enum(["singleChat","groupChat","chatRoom"]),x=i.z.record(i.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"),z=i.z.object({path:i.z.string().min(1,"data.path is required"),size:i.z.number().optional(),name:i.z.string().optional(),type:i.z.string().optional()}),$=i.z.object({uri:i.z.string().min(1,"data.uri is required"),size:i.z.number().optional(),name:i.z.string().optional(),type:i.z.string().optional()}),V="undefined"!=typeof File?i.z.instanceof(File):i.z.never(),k=i.z.union([V,z,$]),P=i.z.object({conversationId:i.z.string().min(1,"conversationId is required"),conversationType:U,ext:x.optional(),timestamp:i.z.number().int().positive("timestamp must be a positive integer").optional(),receiverList:i.z.array(i.z.string().min(1,"receiverList item is required")).nonempty("receiverList must not be empty").optional(),deliverOnlineOnly:i.z.boolean().optional(),webhookEnv:i.z.string().optional(),priority:i.z.enum(["high","normal","low"]).optional(),needReadReceipt:i.z.boolean().optional(),isChatThread:i.z.boolean().optional()}),q=i.z.object({type:i.z.string().min(1,"messageList.type is required"),sender:i.z.object({userId:i.z.string().min(1,"messageList.sender.userId is required"),nickname:i.z.string().optional(),avatarUrl:i.z.string().optional()}),conversationId:i.z.string().min(1,"messageList.conversationId is required"),conversationType:U,timestamp:i.z.number().int().positive("messageList.timestamp must be positive"),body:i.z.record(i.z.unknown()),combineLevel:i.z.number().int().min(0).max(10).optional()}).passthrough(),F=e=>e.superRefine((e,t)=>{e.receiverList&&"singleChat"===e.conversationType&&t.addIssue({code:i.z.ZodIssueCode.custom,message:"receiverList is only allowed for group or chat room conversation",path:["receiverList"]}),e.isChatThread&&"groupChat"!==e.conversationType&&t.addIssue({code:i.z.ZodIssueCode.custom,message:"isChatThread is only allowed for group conversation",path:["isChatThread"]}),e.needReadReceipt&&"chatRoom"===e.conversationType&&t.addIssue({code:i.z.ZodIssueCode.custom,message:"needReadReceipt is not allowed for chatRoom conversation",path:["needReadReceipt"]})}),B=F(P.extend({content:i.z.string().min(1,"content is required"),targetLanguages:i.z.array(i.z.string().min(1)).optional()})),G=F(P.extend({originalUrl:i.z.string().min(1,"originalUrl is required").optional(),filename:i.z.string().min(1,"filename is required").optional(),filetype:i.z.string().min(1,"filetype is required").optional(),width:i.z.number().positive("width must be positive").optional(),height:i.z.number().positive("height must be positive").optional(),isGif:i.z.boolean().optional(),isOriginalImage:i.z.boolean().optional(),fileLength:i.z.number().positive("fileLength must be positive").optional(),data:k.optional(),thumbnailUrl:i.z.string().min(1).optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),K=F(P.extend({originalUrl:i.z.string().min(1,"originalUrl is required").optional(),filename:i.z.string().min(1,"filename is required").optional(),filetype:i.z.string().min(1,"filetype is required").optional(),fileSize:i.z.number().positive("fileSize must be positive").optional(),fileLength:i.z.number().positive("fileLength must be positive").optional(),data:k.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),j=F(P.extend({originalUrl:i.z.string().min(1,"originalUrl is required").optional(),filename:i.z.string().min(1,"filename is required").optional(),filetype:i.z.string().min(1,"filetype is required").optional(),duration:i.z.number().positive("duration must be positive"),fileLength:i.z.number().positive("fileLength must be positive").optional(),data:k.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),H=F(P.extend({originalUrl:i.z.string().min(1,"originalUrl is required").optional(),filename:i.z.string().min(1,"filename is required").optional(),filetype:i.z.string().min(1,"filetype is required").optional(),duration:i.z.number().positive("duration must be positive"),width:i.z.number().positive("width must be positive").optional(),height:i.z.number().positive("height must be positive").optional(),fileLength:i.z.number().positive("fileLength must be positive").optional(),thumbnailUrl:i.z.string().min(1).optional(),data:k.optional()}).refine(e=>Boolean(e.originalUrl||e.data),{message:"originalUrl or data is required",path:["originalUrl"]})),X=F(P.extend({latitude:i.z.number(),longitude:i.z.number(),address:i.z.string().min(1).optional(),buildingName:i.z.string().min(1).optional()})),Q=F(P.extend({action:i.z.string().min(1,"action is required")})),W=F(P.extend({event:i.z.string().min(1,"event is required"),params:i.z.record(i.z.string()).optional()})),Y=F(P.extend({title:i.z.string().min(1,"title is required"),summary:i.z.string().min(1,"summary is required"),compatibleText:i.z.string().min(1).optional(),messageList:i.z.array(q).min(1,"messageList must not be empty").max(300,"messageList max length is 300")})),Z=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}},J=()=>g(),ee=(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=c(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},te=e=>!!e.isGif||(e.isOriginalImage??!1),re=(e,t,r,a,i)=>({msgServerId:"",msgLocalId:i??g(),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}),ae=(e,t)=>{const r=_.validateOrThrow(Y,e),a=r.messageList,i=Z(t);v(a);const s=I(a);E(s);const o={title:r.title,summary:r.summary,messageList:a,filename:"combine",filetype:"application/octet-stream",combineLevel:s},n=re(r,i,"combine",o);return((e,t)=>{t&&d.set(e,t)})(n,r.compatibleText),n},ie=t=>{const{orgName:r,appName:a}=e.parseAppKey(t.appKey);return`/${r}/${a}`},se=e=>{const t=new Uint8Array(s.lightExports.util.base64.length(e));return s.lightExports.util.base64.decode(e,t,0),t},oe=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),ne=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})}},de=e=>"string"==typeof e?e:"number"==typeof e||"boolean"==typeof e||"bigint"==typeof e?String(e):"",le=e=>{if("string"!=typeof e)return"";const t=e.trim();return t&&"undefined"!==t&&"null"!==t?t:""},ce=e=>({userId:e}),ge=(t,r)=>{if(!oe(t)||!oe(t.data))throw e.createRestBusinessError({apiName:r,message:`${r} response data is invalid`,mapped:!1});return t.data},ue=(t,r)=>{if(!oe(t)||!Array.isArray(t.data))throw e.createRestBusinessError({apiName:r,message:`${r} response data is invalid`,mapped:!1});return t.data},me=(e,t)=>Array.isArray(e)?e:ue(e,t),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=(t,r,a)=>{if(!r)return"";if(r.includes("em-redirect"))return r;const{orgName:i,appName:s}=e.parseAppKey(t.appKey),o=r.indexOf("/chatfiles/"),n=o>=0?r.slice(o):r,d=`${t.restBaseUrl}/${i}/${s}${n}`;return e.appendAttachUrlParams(d,a)},Ie=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},Ee=(e,t,r)=>{const a=de(r.contentType??r.type),i=he[a];if(!i)return null;const s=oe(r.content)?r.content:{},o=((e,t)=>{const r=de(t.conversationType);if("groupchat"===r||"chatroom"===r)return de(t.receiverId);const a=de(t.senderId);return a===e?de(t.receiverId):a})(t,r),n=ye[de(r.conversationType)]??"singleChat",d={msgServerId:de(r.messageId),msgLocalId:de(r.messageId),from:de(r.senderId),to:de(r.receiverId),conversationId:o,conversationType:n,type:i,ext:oe(r.ext)?r.ext:{},timestamp:"number"==typeof r.sentTime?r.sentTime:new Date(de(r.sentTime)).getTime(),sender:{userId:de(r.senderId)},highlight:Ie(r.highlight),text:"string"==typeof r.text?r.text:void 0};let l;const c=de(s.remotePath??s.url),g=de(s.secret??s.secretKey);switch(i){case"txt":l={type:"txt",content:de(s.message??r.text)};break;case"img":{const t=ve(e,c,g);l={type:"img",url:t,thumb:s.thumb?ve(e,de(s.thumb),de(s.thumb_secret??s.thumbnailSecretKey)):`${t}&thumbnail=true`,secret:g,width:Number(s.width??(oe(s.size)?s.size.width:0))||0,height:Number(s.height??(oe(s.size)?s.size.height:0))||0,fileLength:Number(s.file_length??s.fileLength??0)};break}case"video":l={type:"video",url:ve(e,c,g),thumb:s.thumb||s.thumbnailRemotePath?ve(e,de(s.thumb??s.thumbnailRemotePath),de(s.thumb_secret??s.thumbnailSecretKey)):"",secret:g,filename:de(s.filename??s.displayName),duration:Number(s.length??s.duration??0),fileLength:Number(s.file_length??s.fileLength??0)};break;case"file":l={type:"file",url:ve(e,c,g),secret:g,filename:de(s.filename??s.displayName),fileLength:Number(s.file_length??s.fileLength??0)};break;case"loc":l={type:"loc",latitude:Number(s.lat??s.latitude??0),longitude:Number(s.lng??s.longitude??0),address:de(s.addr??s.address),buildingName:de(s.buildingName)};break;case"custom":l={type:"custom",customEvent:de(s.customEvent),customExts:oe(s.customExts)?s.customExts:{}};break;default:return null}return{...d,body:l}},_e=async(e,t,r)=>{const a=`${ie(t)}/users/${t.userId}/messages/search/get`,i=((e,t)=>{const{option:r,pageNum:a=1,pageSize:i=20}=e,s=r.keywordList.map(e=>e.trim()).filter(e=>e.length>0),o={searchMode:"default",highlightEnable:!0,page:a,size:i};return 1===s.length?o.keyword=s[0]:(o.keywords=s,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=>pe[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),s=await e.post(a,i,{operation:"searchMessages"}),o=oe(s)?s:{},n=oe(o.data)?o.data:o,d=oe(n.data)?n.data:n,l=Array.isArray(d.items)?d.items:Array.isArray(d.list)?d.list:[],c=oe(d.pagination)?d.pagination:d,g=Number(c.pageNum??c.page??r.pageNum??1),u=Number(c.pageSize??c.size??r.pageSize??20),m=Number(c.totalPages??0),p=1===c.isFinished||g>=m,h=[];for(const y of l){if(!oe(y))continue;const e=Ee(t,t.userId,y);e&&h.push(e)}return{messages:h,pageNum:g,pageSize:u,totalPages:m,isLast:p}},fe=t=>{const{orgName:r,appName:a}=e.parseAppKey(t.appKey);return`/api/sdk/v1/${r}/${a}`},Re=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),be=e=>Re(e)&&"string"==typeof e.path&&e.path.trim().length>0,Ce=e=>(e=>"undefined"!=typeof File&&e instanceof File)(e)||be(e),Te=e=>{if(!Re(e))return;return{data:Re(e.data)?e.data:void 0,error:Re(e.error)?e.error:void 0}},Oe=(t,r)=>{const a=Te(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},Le=(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}),Ne=e=>!(void 0===e||Re(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))),Se=e=>{if(!e)return;const t=(e.split("#")[0]?.split("?")[0]??"").split("/").filter(Boolean);return t.length>0?t[t.length-1]:void 0},we=t=>{const{serviceCode:r,serviceMessage:a}=(t=>{const r=t instanceof e.SDKError&&Re(t.details)?t.details:void 0,a=Te(r?.rawResponse??r?.response??t),i=r?.serverCode??a?.error?.code,s=r?.serverMessage??a?.error?.message;return{serviceCode:"string"==typeof i||"number"==typeof i?String(i):void 0,serviceMessage:"string"==typeof s?s:void 0}})(t);if(t instanceof e.UploadError)return Le("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 Le("File not found",e.ERROR_CODES.VOICE_TO_TEXT_FILE_NOT_FOUND,{serviceCode:r,serviceMessage:a});case"4001002":return Le("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{serviceCode:r,serviceMessage:a},"validation");case"5021001":return Le("File upload failed",e.ERROR_CODES.UPLOAD_REQUEST_FAILED,{serviceCode:r,serviceMessage:a});case"4001003":return Le("Voice duration exceeds 60 seconds",e.ERROR_CODES.VOICE_TO_TEXT_FILE_DURATION_TOO_LONG,{serviceCode:r,serviceMessage:a},"validation");case"4031001":return Le("Voice-to-text service is not enabled",e.ERROR_CODES.SERVICE_NOT_ENABLED,{serviceCode:r,serviceMessage:a});case"4031002":return Le("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")?Le("File too large",e.ERROR_CODES.VOICE_TO_TEXT_FILE_TOO_LARGE,{serviceCode:r,serviceMessage:a}):Le(a||"Missing or invalid request parameter",e.ERROR_CODES.VALIDATION_REQUIRED,{serviceCode:r,serviceMessage:a},"validation");case"5021003":case"5001003":return Le("Voice-to-text failed",e.ERROR_CODES.VOICE_TO_TEXT_FAILED,{serviceCode:r,serviceMessage:a});case"4011001":return Le(a||"Unauthorized or invalid token",e.ERROR_CODES.AUTH_UNAUTHORIZED,{serviceCode:r,serviceMessage:a},"auth");default:return Le(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?Le(t.message,t.code,t.details):Le(t instanceof Error?t.message:"Voice-to-text failed",e.ERROR_CODES.VOICE_TO_TEXT_FAILED)},Me=(t,r)=>{if(!Re(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 Le("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceMessageBody"},"validation");var a;if(Ne(r))throw Le("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceParams"},"validation");if(!t.url)throw Le("File not found",e.ERROR_CODES.VOICE_TO_TEXT_FILE_NOT_FOUND,{path:"voiceMessageBody.url"});if(!Se(t.url))throw Le("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceMessageBody.url"},"validation");return t},Ae=(t,r)=>{if(Ne(r))throw Le("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{path:"voiceParams"},"validation");if(!Ce(t))throw Le("Invalid file",e.ERROR_CODES.VOICE_TO_TEXT_FILE_INVALID,{path:"file"},"validation");return t},De=async(t,r,a,i)=>{const s=Me(a,i),o=Se(s.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(`${fe(r)}/speech/transcriptions`,{data:{fileId:o,username:r.userId,...i?{audio:i}:{}}},{operation:"voiceMessageToText"});return{text:Oe(e,"voiceMessageToText")}}catch(n){throw we(n)}},Ue=i.z.object({keywordList:i.z.array(i.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:i.z.enum(["or","and"]).optional(),conversationId:i.z.string().min(1).optional(),conversationType:i.z.enum(["singleChat","groupChat","chatRoom"]).optional(),msgTypes:i.z.array(i.z.enum(["txt","img","video","file","loc","custom","combine"])).optional(),startTime:i.z.number().optional(),endTime:i.z.number().optional(),searchScope:i.z.enum(["none","with","only"]).optional(),direction:i.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"}),xe=i.z.object({option:Ue,pageNum:i.z.number().int().min(1).default(1),pageSize:i.z.number().int().min(1).max(100).default(20)}),ze=e.mergeRuntimeErrorMaps(e.COMMON_ERROR_MAP,{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=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=_.validateOrThrow(B,e),a=Z(t),i=J(),s={content:r.content};return r.targetLanguages&&(s.targetLanguages=r.targetLanguages),re(r,a,"text",s,i)})(e,this.buildMessageSenderOrThrow())}createImageMessage(t){return((t,r,a)=>{const i=_.validateOrThrow(G,t),s=Z(r),o=J(),n=i.data?ee(void 0,i.data):"",d=i.originalUrl?e.deriveImageUrls(i.originalUrl,{deriveVariants:!a?.useCustomAttachmentUpload}):void 0;i.data&&l.set(o,i.data);const c=i.isGif??!1,g={localUrl:n,filename:i.filename,filetype:i.filetype,width:i.width,height:i.height,isGif:c,isOriginalImage:te({isGif:c,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),re(i,s,"image",g,o)})(t,this.buildMessageSenderOrThrow(),this.getClientOrThrow().getMessageCreationOptions())}createFileMessage(e){return((e,t)=>{const r=_.validateOrThrow(K,e),a=Z(t),i=J(),s=ee(r.originalUrl,r.data);r.data&&l.set(i,r.data);const o={url:s,filename:r.filename,filetype:r.filetype};return void 0!==r.fileSize&&(o.fileSize=r.fileSize),void 0!==r.fileLength&&(o.fileLength=r.fileLength),re(r,a,"file",o,i)})(e,this.buildMessageSenderOrThrow())}createVoiceMessage(e){return((e,t)=>{const r=_.validateOrThrow(j,e),a=Z(t),i=J(),s=ee(r.originalUrl,r.data);r.data&&l.set(i,r.data);const o={url:s,filename:r.filename,filetype:r.filetype,duration:r.duration};return void 0!==r.fileLength&&(o.fileLength=r.fileLength),re(r,a,"voice",o,i)})(e,this.buildMessageSenderOrThrow())}createVideoMessage(e){return((e,t)=>{const r=_.validateOrThrow(H,e),a=Z(t),i=J(),s=ee(r.originalUrl,r.data);r.data&&l.set(i,r.data);const o={url:s,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),re(r,a,"video",o,i)})(e,this.buildMessageSenderOrThrow())}createLocationMessage(e){return((e,t)=>{const r=_.validateOrThrow(X,e),a=Z(t),i={latitude:r.latitude,longitude:r.longitude};return r.address&&(i.address=r.address),r.buildingName&&(i.buildingName=r.buildingName),re(r,a,"location",i)})(e,this.buildMessageSenderOrThrow())}createCmdMessage(e){return((e,t)=>{const r=_.validateOrThrow(Q,e),a=Z(t),i={action:r.action};return void 0!==r.deliverOnlineOnly&&(i.deliverOnlineOnly=r.deliverOnlineOnly),re(r,a,"cmd",i)})(e,this.buildMessageSenderOrThrow())}createCustomMessage(e){return((e,t)=>{const r=_.validateOrThrow(W,e),a=Z(t),i={event:r.event};return r.params&&(i.params=r.params),re(r,a,"custom",i)})(e,this.buildMessageSenderOrThrow())}createCombineMessage(e){return ae(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 a=(this.getClientOrThrow().getCacheManager()?.loadSessionList()??[]).filter(e=>null!==e.lastMessage&&((void 0===t?.isPinned||e.isPinned===t.isPinned)&&!(void 0!==t?.mark&&!r.hasSessionMark(e,t.mark)))).map(r.toConversationItem);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=M(t),i=R(r.conversationId,"params.conversationId"),s=C(r.conversationType,"params.conversationType"),o=r.deleteRoamingMessages??!1;if("boolean"!=typeof o)throw f("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"===s?"groupChat":T(s),delete_roam:o},operation:"deleteConversation"}),{conversationId:i,conversationType:s,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=M(r),s=R(a.conversationId,"params.conversationId"),o=C(a.conversationType,"params.conversationType");if("boolean"!=typeof a.pinned)throw f("params.pinned","params.pinned must be a boolean");const n="groupChat"===o?"groupChat":T(o),d=a.pinned?await e.post(`/${i.orgName}/${i.appName}/sdk/user/${i.encodedUserId}/user_channel/top?resource=${i.encodedResource}`,{type:n,to:s},{operation:"setConversationPinned"}):await e.delete(`/${i.orgName}/${i.appName}/sdk/user/${i.encodedUserId}/user_channel/top?type=${encodeURIComponent(n)}&to=${encodeURIComponent(s)}&resource=${i.encodedResource}`,{operation:"setConversationPinned"}),l=t.isRecord(d)&&t.isRecord(d.data)?d.data:{};return{conversationId:s,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(),s=i?.applyConversationPinnedMutation({conversationId:a.conversationId,type:a.conversationType,isPinned:a.isPinned??e.pinned,pinnedTime:a.pinnedTime});return s?.changed&&this.getClientOrThrow().emitConversationListUpdate("local"),a}async addConversationMark(e){const t=this.getRestContextOrThrow(),r=await(async(e,t,r)=>A(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)=>A(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=M(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)=>D(e,t,r,!0))(this.getRestClient(t),t,e))}async unpinMessage(e){const t=this.getRestContextOrThrow();await this.executeRestOperation(()=>(async(e,t,r)=>D(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=M(r),s=R(a.conversationId,"params.conversationId"),o=C(a.conversationType,"params.conversationType"),n=await e.get(`/${i.orgName}/${i.appName}/sdk/user/${i.encodedUserId}/user_channel/pin?to=${encodeURIComponent(s)}&type=${encodeURIComponent(T(o))}&limit=${String(20)}`,{operation:"getPinnedMessageList"}),d=t.isRecord(n)&&t.isRecord(n.data)?n.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 n="number"==typeof a.pin_opt_at?a.pin_opt_at:0,d=S(a.message,{messageId:i,conversationId:s,conversationType:o,currentUserId:r.userId,timestamp:n});return d?(e.push({messageId:i,conversationId:s,conversationType:o,operatorId:"string"==typeof a.pin_operator?a.pin_operator:void 0,pinnedAt:n,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){if(this.validateConversationLocator(t),this.requireNonEmptyString(t.messageId,"messageId"),"text"!==t.message.type&&"custom"!==t.message.type)throw new e.ValidationError("only text and custom messages are editable",{code:e.ERROR_CODES.OPERATION_UNSUPPORTED});await this.requireConnectedClient().sendMessageAction({kind:"update",conversationId:t.conversationId,conversationType:t.conversationType,messageId:t.messageId,body:t.message.body,messageType:t.message.type,ext:t.message.ext},(e,t)=>this.buildActionError(e,t));const r=Date.now(),a=this.getCurrentUserIdOrThrow(),i={operatorId:a,operationCount:1,operationTime:r};return{msgServerId:t.messageId,msgLocalId:"",from:a,to:t.conversationId,sender:{userId:a},conversationId:t.conversationId,conversationType:t.conversationType,type:t.message.type,sendStatus:"sent",ext:t.message.ext,timestamp:r,body:t.message.body,direct:"SEND",modifiedInfo:i}}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=`${ie(t)}/users/${t.userId}/messageroaming`,s=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=ge(s,"getHistoryMessages"),n=Array.isArray(o.msgs)?o.msgs:[],d=[];for(const l of n){if(!oe(l)||"string"!=typeof l.msg||0===l.msg.length)continue;const e=a(se(l.msg));e&&d.push(e)}return{items:d,cursor:le(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=_.validateOrThrow(xe,e),r=this.getRestContextOrThrow();return this.executeRestOperation(()=>_e(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",s=encodeURIComponent(t.clientResource),o=r.messageIds?`${ie(t)}/sdk/message/roaming/${i}/user/${t.userId}?${a}=${encodeURIComponent(r.conversationId)}&msgIdList=${encodeURIComponent(r.messageIds.join(","))}&resource=${s}`:`${ie(t)}/sdk/message/roaming/${i}/user/${t.userId}/time?${a}=${encodeURIComponent(r.conversationId)}&delTime=${r.beforeTimestamp}&resource=${s}`;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=o.createQueryParams();a.set("limit",String(r.pageSize??10)),r.cursor&&a.set("key",r.cursor);const i=`${ie(t)}/chatgroups/${encodeURIComponent(r.groupId)}/acks/${encodeURIComponent(r.messageId)}?${a.toString()}`,s=await e.get(i,{operation:"getGroupMessageReadUsers"}),n=ge(s,"getGroupMessageReadUsers"),d=oe(n.group_ack)?n.group_ack:n,l=(Array.isArray(d.userlist)?d.userlist:[]).map(e=>oe(e)&&"string"==typeof e.username?{userId:e.username,user:ce(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 n.ackmid?n.ackmid:r.messageId,users:l,count:"number"==typeof d.total?d.total:l.length,cursor:le(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=`${ie(t)}/chatgroups/${encodeURIComponent(r.groupId)}/acks/batch`,i=await e.post(a,{messageIds:r.messageIds},{operation:"getGroupMessageReadReceipts"});return ue(i,"getGroupMessageReadReceipts").map(e=>oe(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(`${ie(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=`${ie(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=o.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 s=await e.get(`${ie(t)}/reaction/user/${t.userId}?${a.toString()}`,{operation:"getReactionList"});return ue(s,"getReactionList").map(e=>{if(!oe(e)||"string"!=typeof e.msgId)return null;const t=Array.isArray(e.reactionList)?e.reactionList:[];return{messageId:e.msgId,reactions:t.map(e=>oe(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=o.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(`${ie(t)}/reaction/user/${t.userId}/detail?${a.toString()}`,{operation:"getReactionDetail"}),s=ge(i,"getReactionDetail"),n=Array.isArray(s.reactionUserList)?s.reactionUserList.map(e=>oe(e)&&"string"==typeof e.userId?{userId:e.userId,user:ce(e.userId),createdAt:"string"==typeof e.createdAt?e.createdAt:void 0}:null).filter(e=>null!==e):[],d=Array.isArray(s.userList)?s.userList.filter(e=>"string"==typeof e).map(e=>({userId:e,user:ce(e)})):[],l=n.length>0?n:d;return{reaction:"string"==typeof s.reaction?s.reaction:r.reaction,count:"number"==typeof s.count?s.count:l.length,isAddedBySelf:!0===s.state,reactionUsers:l,cursor:le(s.cursor),hasMore:le(s.cursor).length>0,createdAt:"string"==typeof s.createdAt?s.createdAt:void 0}})(this.getRestClient(t),t,e))}async getSupportedTranslationLanguages(){const e=this.getRestContextOrThrow();return this.executeRestOperation(()=>(async(e,t)=>{const r=await ne(()=>e.get(`${ie(t)}/users/${t.userId}/translate/support/language`,{operation:"getSupportedTranslationLanguages"}));return me(r,"getSupportedTranslationLanguages").map(e=>oe(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(()=>(async(t,r,a)=>{const i=await ne(()=>t.post(`${ie(r)}/users/${r.userId}/translate`,{text:a.text,to:[...a.targetLanguages]},{operation:"translateMessage"})),s=me(i,"translateMessage"),o=oe(s[0])?s[0]:null;if(!o)throw e.createRestBusinessError({apiName:"translateMessage",message:"translateMessage response data is invalid",mapped:!1});const n=Array.isArray(o.translations)?o.translations:[],d=oe(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:n.map(e=>oe(e)&&"string"==typeof e.text&&"string"==typeof e.to?{text:e.text,to:e.to}:null).filter(e=>null!==e)}})(this.getRestClient(a),a,{text:r,targetLanguages:t.targetLanguages}))}async voiceMessageToText(e,t){Me(e,t);const r=this.getRestContextOrThrow();return this.executeRestOperation(()=>De(this.getRestClient(r),r,e,t))}async voiceFileToText(t,r){Ae(t,r);const i=this.getRestContextOrThrow(),s=this.getClientOrThrow().getUploadAdapter();if(!s)throw new e.SDKError("Upload capability is missing for current platform",e.ERROR_CODES.UPLOAD_REQUIRED_FIELD_MISSING);return this.executeRestOperation(()=>(async(t,r,i,s)=>{const o=Ae(i,s),n=e.normalizeUploadSource({file:o,fallbackName:be(o)?"voice.amr":void 0,fallbackMimeType:"audio/amr"});try{const a=await t.upload({url:`${r.restBaseUrl}${fe(r)}/speech/recognitions`,headers:{Authorization:`Bearer ${r.token}`,Accept:"application/json",[e.REQUEST_ID_HEADER]:e.createTraceId()},source:n.source,fields:{username:r.userId,...s?.format?{format:s.format}:{},...void 0!==s?.sampleRate?{sampleRate:String(s.sampleRate)}:{},...void 0!==s?.bitsPerSample?{bitsPerSample:String(s.bitsPerSample)}:{},...void 0!==s?.channels?{channels:String(s.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:Oe(i,"voiceFileToText")}}catch(d){if(d instanceof e.SDKError)throw we(d);throw we(a.mapUploadAdapterError(d))}})(s,i,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}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:ze,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()!==n.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 i=r.getCacheManager(),s=await a.resolveGroupUserInfoMap({groupId:e,users:t.users.map(e=>e.user),includeNameCard:!0,cacheManager:i,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,s.fetchedUserInfos),{...t,users:t.users.map(e=>{const t=s.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)}};$e.key="chatManager";let Ve=$e;exports.ChatManager=Ve,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=n,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=_,exports.attachmentFileStore=l,exports.calculateCombineLevel=I,exports.copyCombineCompatibleTextSidecar=(e,t)=>{const r=d.get(e);r&&d.set(t,r)},exports.createLocalFileUrl=c,exports.ensureCombineItemLimit=y,exports.ensureCombineLevel=E,exports.generateMsgLocalId=g,exports.getCombineCompatibleTextSidecar=e=>d.get(e),exports.validateCombineMessageList=v;