k2-im 0.1.27 → 0.1.29

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.
@@ -39,8 +39,8 @@ interface ConversationDraft$1 {
39
39
  attachments: readonly [];
40
40
  updatedAt: number;
41
41
  }
42
- /** 消息内容类型。sticker=表情/贴图(BMessage contentType=7);call=单聊通话记录(contentType=10);transfer=转账(contentType=16);miniProgram=小程序分享卡(contentType=22);redPacket=红包卡(contentType=25);game=小游戏(contentType=27);未知 wire 正文统一归一为 unknown。 */
43
- type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'call' | 'redPacket' | 'mediaAlbum' | 'unknown';
42
+ /** 消息内容类型。sticker=表情/贴图(BMessage contentType=7);call=单聊通话记录(contentType=10);transfer=转账(contentType=16);robot=机器人卡片(contentType=18);miniProgram=小程序分享卡(contentType=22);redPacket=红包卡(contentType=25);game=小游戏(contentType=27);未知 wire 正文统一归一为 unknown。 */
43
+ type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'call' | 'redPacket' | 'mediaAlbum' | 'robot' | 'unknown';
44
44
  /**
45
45
  * 发送态(客户端态):消息从本地创建到服务端确认的生命周期。
46
46
  * `uploading` 仅媒体消息使用:文件上传阶段(uploading→pending→sending→sent);
@@ -102,6 +102,8 @@ type LastMessageSummary = {
102
102
  kind: 'contact';
103
103
  } | {
104
104
  kind: 'miniProgram';
105
+ } | {
106
+ kind: 'robot';
105
107
  } | {
106
108
  kind: 'game';
107
109
  gameType: ImGameType;
@@ -136,6 +138,13 @@ type LastMessageSummary = {
136
138
  firstItemKind?: 'image' | 'video';
137
139
  } | {
138
140
  kind: 'encrypted';
141
+ }
142
+ /**
143
+ * 密文解密失败/缺密钥占位。必须独立于 `encrypted`:后者只表示「还是密文」,
144
+ * 前者要对齐 iOS 解密失败长文案,不能再伪装成「[加密消息]」。
145
+ */
146
+ | {
147
+ kind: 'decrypt-failed';
139
148
  } | {
140
149
  kind: 'recalled';
141
150
  by: string;
@@ -182,14 +191,20 @@ interface ImVideoBody {
182
191
  width: number;
183
192
  /** 视频像素高(BMessage.height)。 */
184
193
  height: number;
185
- /** 时长(秒,BMessage.duration;proto 单位秒,contentType=3|4 有效)。 */
194
+ /** 时长(秒,可含小数);移动端旧消息的毫秒值由 SDK 转换,宿主不得猜单位。 */
186
195
  duration?: number;
196
+ /** SDK 已确认时长为秒的标记;兼容旧缓存时防止重复转换。缺省仍按公开 API 的秒约定传入。 */
197
+ durationUnit?: 'seconds';
187
198
  /** 封面帧原始字节(本地首帧截图,内嵌不单传,对应 BMessage.thumbData bytes)。UI 转 blob 渲染,无需下载即可展示封面。 */
188
199
  thumbData?: Uint8Array;
189
200
  /** 视频文件 MD5(BMessage.MD5;Android 当前未赋值,保留可选)。 */
190
201
  md5?: string;
191
- /** 文件大小(字节;协议 BMessage.fileLength 单位 KB,mapping 层换算)。 */
202
+ /** 已确认的视频大小(字节),来自本地文件或合集;历史单视频的大小单位不明确时省略,下载总量由 HTTP 响应确定。 */
192
203
  size?: number;
204
+ /** SDK 本地字节值标记,供持久化读取区分旧版本曾按 KB 换算的记录。 */
205
+ sizeUnit?: 'bytes';
206
+ /** 未确认单位的历史大小,十进制无符号整数;SDK 仅用于原样转发,宿主不得将它用于显示大小或规划下载。 */
207
+ unverifiedFileLength?: string;
193
208
  /** 视频描述(BMessage.describe,可选)。 */
194
209
  describe?: string;
195
210
  /** 文件解密 TEA key 原始字节(仅密文视频有;接收端解 BContent 后从 BMessage.teaKey 得,用于解下载到的原视频文件)。 */
@@ -324,6 +339,53 @@ interface ImMiniProgramBody {
324
339
  /** 多语言子游戏名 JSON 字符串,例如 `{"ch":"...","en":"..."}`。 */
325
340
  subGameName?: string;
326
341
  }
342
+ /**
343
+ * 机器人卡片文本模块(wire `section`)。
344
+ *
345
+ * `content` 保留原文,可含 Markdown 链接与裸 URL;宿主负责展示层解析,不在 Core 拆成富文本树。
346
+ */
347
+ interface ImRobotTextModule {
348
+ type: 'section';
349
+ textType: string;
350
+ content: string;
351
+ }
352
+ /** 机器人卡片图片组;`src` 是明文 http(s),不走消息 TEA 文件通道。 */
353
+ interface ImRobotImageGroupModule {
354
+ type: 'image-group';
355
+ images: readonly string[];
356
+ }
357
+ /**
358
+ * 机器人卡片倒计时。
359
+ *
360
+ * `endTimeMs` 已归一为 epoch 毫秒;wire 秒/毫秒混用只在 mapper 转换,宿主不要再猜单位。
361
+ */
362
+ interface ImRobotCountdownModule {
363
+ type: 'countdown';
364
+ endTimeMs: number;
365
+ }
366
+ type ImRobotModule = ImRobotTextModule | ImRobotImageGroupModule | ImRobotCountdownModule;
367
+ /** 机器人卡片底部指令;`miniProgram` 仅打开小程序时存在。 */
368
+ interface ImRobotCommand {
369
+ menuName: string;
370
+ menuId?: string;
371
+ /** wire `msg_type`;`2` 表示打开小程序,其它走固定话术。第一期宿主可只展示。 */
372
+ messageType?: string;
373
+ miniProgram?: {
374
+ path?: string;
375
+ appId?: string;
376
+ domain?: string;
377
+ };
378
+ }
379
+ /**
380
+ * 机器人卡片正文(contentType==='robot',协议 BMessage.contentType=18)。
381
+ *
382
+ * @remarks 排版数据在 `BMessage.content` JSON。解析失败仍保留 robot 类型与空模块,
383
+ * 不能退化成 unknown——iOS 此时仍画出卡片头。divider 与未识别 module 在 mapper 丢弃。
384
+ */
385
+ interface ImRobotBody {
386
+ modules: readonly ImRobotModule[];
387
+ commands: readonly (readonly ImRobotCommand[])[];
388
+ }
327
389
  /** 转账状态。0 待领取 / 1 已收款 / 2 已退还 / 3 已过期(对齐 iOS IMTranferBody,过期 3 以客户端为准)。 */
328
390
  type ImTransferStatus = 0 | 1 | 2 | 3;
329
391
  /** 转账会话类型。1 个人 / 2 群(BMessage.sessionType)。 */
@@ -518,6 +580,8 @@ interface ImMessageBody {
518
580
  redPacket?: ImRedPacketBody;
519
581
  /** contentType==='mediaAlbum' 时的媒体合集正文(配文 + 1~9 个图片/视频项)。 */
520
582
  mediaAlbum?: ImMediaAlbumBody;
583
+ /** contentType==='robot' 时的机器人卡片。 */
584
+ robot?: ImRobotBody;
521
585
  /** contentType==='unknown' 时的稳定未知正文,不含原始 wire type。 */
522
586
  unknown?: UnknownMessageBody;
523
587
  }
@@ -594,7 +658,7 @@ interface ImMessageEncryption {
594
658
  encrypted: boolean;
595
659
  /** 扩展:加密方案标识,默认 'rsa-tea'。 */
596
660
  scheme?: 'rsa-tea';
597
- /** true=密文但解密失败/缺密钥(占位,非真实空正文):供 UI 显式「无法解密」提示,与明文空消息区分。 */
661
+ /** true=密文但解密失败/缺密钥(占位,非真实空正文):供 UI 显式渲染解密失败提示,与明文空消息、普通密文区分。 */
598
662
  decryptFailed?: boolean;
599
663
  }
600
664
  /** 单条消息领域模型(§4.1)。主键为客户端生成的 id(无 serverId)。 */
@@ -2784,17 +2848,24 @@ interface MediaTransferAdapterConfig {
2784
2848
  /** 是否启用 S3 Transfer Acceleration(默认 true;`cn-` 分区没有加速端点,会强制关闭)。 */
2785
2849
  useAccelerateEndpoint?: boolean;
2786
2850
  /**
2787
- * 是否允许超过分片阈值(16MiB)的上传使用 S3 分片上传(默认 true)。
2851
+ * 统一允许 S3 分片上传和 Range 分段下载,默认 false(单次 PUT / 普通 GET)。
2852
+ * 显式 true 后仍按 16MiB 阈值及已确认下载大小选择策略,小资源不分片。
2853
+ * 开启前各桶须支持分片请求方法,并暴露上传 ETag、下载 Content-Range 与强 ETag。
2854
+ * @example { multipartTransfer: true } 同时允许大资源分片上传、下载。
2855
+ */
2856
+ multipartTransfer?: boolean;
2857
+ /**
2858
+ * 总开关开启后,是否允许超过分片阈值(16MiB)的上传使用 S3 分片上传。
2788
2859
  *
2789
2860
  * 分片相比单次 PUT 需要各物理桶的 CORS 额外放行 POST(Create/CompleteMultipartUpload)、
2790
2861
  * DELETE(AbortMultipartUpload)并 `ExposeHeaders: ETag`;未配齐时分片会直接失败。
2791
- * 部署可置 false 立即退回全量单次 PutObject(大文件回到单连接与整包内存的旧行为),无需发版。
2862
+ * @deprecated 优先使用 multipartTransfer 统一控制;本字段 false 仅进一步关闭上传,true 不能单独开启。
2792
2863
  */
2793
2864
  multipartUpload?: boolean;
2794
2865
  /**
2795
- * 大于 16MiB 的明文/simple 文件是否尝试 Range 并发下载(默认 true)。
2866
+ * 总开关开启后,大于 16MiB 的明文/simple 文件是否尝试 Range 并发下载。
2796
2867
  * 需要下载域名支持 Range,并暴露 Content-Range 与强 ETag;返回 200 时消费完整响应并记录诊断。
2797
- * 置 false 使用单次 GET。此开关不改变上传或整文件 TEA 的行为。
2868
+ * @deprecated 优先使用 multipartTransfer 统一控制;本字段 false 仅进一步关闭下载,true 不能单独开启。
2798
2869
  */
2799
2870
  rangeDownload?: boolean;
2800
2871
  /**
@@ -4132,6 +4203,8 @@ type ConversationLastMessageSummary = {
4132
4203
  kind: 'contact';
4133
4204
  } | {
4134
4205
  kind: 'miniProgram';
4206
+ } | {
4207
+ kind: 'robot';
4135
4208
  } | {
4136
4209
  kind: 'transfer';
4137
4210
  } | {
@@ -4162,6 +4235,10 @@ type ConversationLastMessageSummary = {
4162
4235
  firstItemKind?: 'image' | 'video';
4163
4236
  } | {
4164
4237
  kind: 'encrypted';
4238
+ }
4239
+ /** 密文解密失败占位;与 `encrypted` 分开,列表走独立 iOS 长文案。 */
4240
+ | {
4241
+ kind: 'decrypt-failed';
4165
4242
  } | {
4166
4243
  kind: 'recalled';
4167
4244
  by: string;
@@ -4613,7 +4690,7 @@ interface ConversationMessageApi {
4613
4690
  sendText: (text: string, options?: TextMessageOptions) => Promise<SendMessageResult>;
4614
4691
  /** 分享个人、普通群或社群名片;发送目标仍由当前 handle 的精确会话身份决定。 */
4615
4692
  sendContact: (contact: ContactCardInput, options?: ContactMessageOptions) => Promise<SendMessageResult>;
4616
- /** 读取图片 Blob 并进入既有图片上传/加密/Outbox 链路;图片 caption 当前显式 unsupported。 */
4693
+ /** 发送 JPEG、PNG 或 WebP 原图;核对文件头和 MIME,不支持的格式返回 IM_SDK_IMAGE_FORMAT_UNSUPPORTED。图片 caption 当前显式 unsupported。 */
4617
4694
  sendImage: (file: File | Blob, options?: ImageMessageOptions) => Promise<SendMessageResult>;
4618
4695
  /** 读取视频 Blob 并发送;caption 使用已验证的 BMessage.describe。 */
4619
4696
  sendVideo: (file: File | Blob, options?: VideoMessageOptions) => Promise<SendMessageResult>;
@@ -4630,7 +4707,8 @@ interface ConversationMessageApi {
4630
4707
  * SDK 内部回落成普通图片/视频消息(三端一致)。**校验是整条的**——某一项超限会拒绝整条,
4631
4708
  * 因为协议上它就是一条消息,没有「发一半」这种状态。
4632
4709
  *
4633
- * GIF 不能进合集(三端一致),调用方要先按 MIME 把它拆出去走 `sendGif`。
4710
+ * 图片仅支持 JPEG、PNG、WebP,任一项格式不支持时整批返回 IM_SDK_IMAGE_FORMAT_UNSUPPORTED。
4711
+ * GIF 不能进合集,调用方应先用 Chat Kit 分类工具拆出去走 `sendGif`。
4634
4712
  */
4635
4713
  sendMediaAlbum: (items: readonly MediaAlbumItemInput[], options?: MediaAlbumMessageOptions) => Promise<SendMessageResult>;
4636
4714
  /** 发送已经托管在远端的静态贴图;资源和贴图包身份均为必填合同。 */
@@ -5082,6 +5160,19 @@ interface ImMediaTasksApi {
5082
5160
  file: Blob;
5083
5161
  signal?: AbortSignal;
5084
5162
  }) => Promise<(TKind extends 'video' ? VideoPreviewMetadata : ImagePreviewMetadata) | null>;
5163
+ /**
5164
+ * 从本地视频提取仅供页面展示的高清 JPEG 封面,不上传、不下载、不写缓存。
5165
+ *
5166
+ * 长边最多 960px 且不放大原视频;与发送预读共用同一解码执行器。返回 Blob 由宿主创建和释放
5167
+ * object URL,不能作为 localPreviewMetadata 发进消息正文。读取失败返回 null 并记录诊断;
5168
+ * 宿主取消抛 AbortError,运行时失效或未装配能力时抛与 prepareLocalPreview 相同的明确错误。
5169
+ * @param input.file 本地或已解密的完整视频 Blob。
5170
+ * @param input.signal 页面卸载、换源或切会话时取消这次抽帧。
5171
+ */
5172
+ prepareLocalVideoPoster: (input: {
5173
+ file: Blob;
5174
+ signal?: AbortSignal;
5175
+ }) => Promise<Blob | null>;
5085
5176
  }
5086
5177
 
5087
5178
  /**
@@ -5641,15 +5732,16 @@ interface ImEmojiCatalogEntry {
5641
5732
  *
5642
5733
  * 形状 = im-browser `MediaTransferAdapterConfig`:必填 `getUploadCredentials`(按逻辑桶名向宿主自己的 BFF 申请
5643
5734
  * STS 临时凭证)+ 各 `MediaKind`(image/video/voice/file/sticker)的**逻辑桶名** + 可选 `channelBuckets`(社群会话
5644
- * 按类型覆盖)、`avatarBucket`、`useAccelerateEndpoint`、`multipartUpload`、`maxConcurrentUploads`。
5735
+ * 按类型覆盖)、`avatarBucket`、`useAccelerateEndpoint`、`multipartTransfer`、`maxConcurrentUploads`。
5645
5736
  *
5646
5737
  * 上传凭证由业务后端按登录态签发(与 iOS、prod H5 同一个接口),回包同时给出**物理桶**、区域、`key_prefix` 和
5647
5738
  * 公开访问域名;SDK 据此拼 object key 与消息体 URL,宿主 env 里配的只是申请凭证用的逻辑桶名。凭证缓存(本地
5648
5739
  * 1 小时、按服务端过期时间提前 5 分钟失效)、同桶单飞与失败重签由 SDK 负责,宿主只需提供「打一次接口」的纯函数。
5649
5740
  *
5650
- * ⚠ 各 bucket 需在对象存储侧配置 CORS 允许本站 origin 的 PUT + GET;超过 16MiB 的上传走 S3 分片,另需放行
5741
+ * 默认单次 PUT/GET;仅 multipartTransfer=true 才允许大资源分片上传、下载。
5742
+ * 各 bucket 需在对象存储侧配置 CORS 允许本站 origin 的 PUT + GET;开启分片后,超过 16MiB 的上传另需放行
5651
5743
  * POST(Create/CompleteMultipartUpload)、DELETE(AbortMultipartUpload)并 ExposeHeaders: ETag。CORS 未配齐时
5652
- * 可用 `multipartUpload: false` 退回全量单次 PutObject。
5744
+ * 下载还需暴露 Content-Range 与强 ETag;multipartTransfer=false 统一关闭分片上传和下载。
5653
5745
  * ⚠ 并发字段只由 SDK core 的媒体编排消费;adapter 会忽略该字段。高内存设备可设置 5-6,低内存设备建议 2-3。
5654
5746
  */
5655
5747
  type ImMediaConfig = MediaTransferAdapterConfig;
@@ -6289,7 +6381,7 @@ type ImLocale = 'en-US' | 'th-TH' | 'vi-VN' | 'zh-CN' | 'zh-TW';
6289
6381
  * 二期收敛:kit 框架无关层不再直接产中文,改产本联合里的码 + 参数(如 {reason}/{label}/{size}),由宿主经 im-i18n 渲染。
6290
6382
  * 动态原始报错(error.message)作为 `{reason}` 参数拼接,不入 catalog(属诊断,不翻译)。
6291
6383
  */
6292
- type ImServiceTextKey = 'common.notConnected' | 'common.selectOrOpenConversation' | 'common.conversationTypeNotReady' | 'common.conversationNotReady' | `recall.${RecallFailReason}` | `edit.${EditFailReason}` | 'localDelete.done' | 'localDelete.notFound' | 'localDelete.inFlight' | 'localDelete.failed' | 'channelDelete.notFound' | 'channelDelete.unsupported' | 'channelDelete.notSent' | 'channelDelete.unavailable' | 'channelDelete.forbidden' | 'channelDelete.timeout' | 'channelDelete.failed' | 'channelDelete.disconnected' | 'directBlock.contactRequired' | 'groupBlock.left' | 'groupBlock.removed' | 'groupBlock.dismissed' | 'groupBlock.unknownRestricted' | 'channelBlock.guest' | 'channelBlock.left' | 'channelBlock.removed' | 'channelBlock.dismissed' | 'channelBlock.muted' | 'channelBlock.allMembersMuted' | 'channelBlock.currentUserMuted' | 'channelBlock.blacklisted' | 'channelBlock.unknownRestricted' | 'channelProfile.loadFailed' | 'channelProfile.notFound' | 'channelProfile.retryAction' | 'channelMembers.title' | 'channelMembers.searchPlaceholder' | 'channelMembers.loading' | 'channelMembers.loadFailed' | 'channelMembers.retryAction' | 'channelMembers.empty' | 'channelMembers.loadingMore' | 'channelMembers.loadMoreFailed' | 'channelMembers.exhausted' | 'channelMembers.loadMoreAction' | 'label.image' | 'label.video' | 'label.file' | 'label.sticker' | 'send.failed' | 'send.retryFailed' | 'send.cancelFailed' | 'send.mediaFailed' | 'send.mediaEmpty' | 'send.mediaCancelled' | 'send.mediaCountLimit' | 'send.mediaTooLarge' | 'send.mediaFormatMismatch' | 'send.videoTooLong' | 'send.videoDurationUnavailable' | 'send.voiceEmpty' | 'send.voiceStorageNotConfigured' | 'send.voiceCancelled' | 'send.voiceFailed' | 'media.uploadWaiting' | 'media.voiceNotReady' | 'media.voiceLoadEmpty' | 'media.voiceLoadFailed' | 'media.videoOpenEmpty' | 'media.videoLoadFailed' | 'media.imageInvalid' | 'media.imageLoadFailed' | 'media.fileDownloadEmpty' | 'media.fileDownloadFailed' | 'conversation.muteEnableFailed' | 'conversation.muteDisableFailed' | 'conversation.backgroundLoadFailed' | 'read.markReadFailed' | 'storage.failed' | 'sync.failed' | 'draft.saveFailed' | 'history.returnLatestFailed' | 'pinned.forbidden' | 'pinned.network' | 'pinned.contract' | 'pinned.unsupported' | 'pinned.failed' | 'pinned.previewUnavailable' | 'pinned.locateFailed' | 'pinned.recalled' | 'pinned.deleted' | 'pinned.protected' | 'pinned.pinAction' | 'pinned.unpinAction' | 'pinned.unpinConfirm' | 'pinned.cancelAction' | 'lifecycle.missingLoginState' | 'lifecycle.prepareFailed' | 'lifecycle.missingConnectParams' | 'lifecycle.connectFailed' | 'lifecycle.disposed' | 'forward.emptyInput' | 'forward.allSkipped' | 'forward.partialSkipped' | 'forward.done' | 'forward.failed';
6384
+ type ImServiceTextKey = 'common.notConnected' | 'common.selectOrOpenConversation' | 'common.conversationTypeNotReady' | 'common.conversationNotReady' | `recall.${RecallFailReason}` | `edit.${EditFailReason}` | 'localDelete.done' | 'localDelete.notFound' | 'localDelete.inFlight' | 'localDelete.failed' | 'channelDelete.notFound' | 'channelDelete.unsupported' | 'channelDelete.notSent' | 'channelDelete.unavailable' | 'channelDelete.forbidden' | 'channelDelete.timeout' | 'channelDelete.failed' | 'channelDelete.disconnected' | 'directBlock.contactRequired' | 'groupBlock.left' | 'groupBlock.removed' | 'groupBlock.dismissed' | 'groupBlock.unknownRestricted' | 'channelBlock.guest' | 'channelBlock.left' | 'channelBlock.removed' | 'channelBlock.dismissed' | 'channelBlock.muted' | 'channelBlock.allMembersMuted' | 'channelBlock.currentUserMuted' | 'channelBlock.blacklisted' | 'channelBlock.unknownRestricted' | 'channelProfile.loadFailed' | 'channelProfile.notFound' | 'channelProfile.retryAction' | 'channelMembers.title' | 'channelMembers.searchPlaceholder' | 'channelMembers.loading' | 'channelMembers.loadFailed' | 'channelMembers.retryAction' | 'channelMembers.empty' | 'channelMembers.loadingMore' | 'channelMembers.loadMoreFailed' | 'channelMembers.exhausted' | 'channelMembers.loadMoreAction' | 'label.image' | 'label.video' | 'label.file' | 'label.sticker' | 'send.failed' | 'send.retryFailed' | 'send.cancelFailed' | 'send.mediaFailed' | 'send.mediaEmpty' | 'send.mediaCancelled' | 'send.mediaCountLimit' | 'send.mediaTooLarge' | 'send.mediaFormatMismatch' | 'send.imageFormatUnsupported' | 'send.videoTooLong' | 'send.videoDurationUnavailable' | 'send.voiceEmpty' | 'send.voiceStorageNotConfigured' | 'send.voiceCancelled' | 'send.voiceFailed' | 'media.uploadWaiting' | 'media.voiceNotReady' | 'media.voiceLoadEmpty' | 'media.voiceLoadFailed' | 'media.videoOpenEmpty' | 'media.videoLoadFailed' | 'media.imageInvalid' | 'media.imageLoadFailed' | 'media.fileDownloadEmpty' | 'media.fileDownloadFailed' | 'conversation.muteEnableFailed' | 'conversation.muteDisableFailed' | 'conversation.backgroundLoadFailed' | 'read.markReadFailed' | 'storage.failed' | 'sync.failed' | 'draft.saveFailed' | 'history.returnLatestFailed' | 'pinned.forbidden' | 'pinned.network' | 'pinned.contract' | 'pinned.unsupported' | 'pinned.failed' | 'pinned.previewUnavailable' | 'pinned.locateFailed' | 'pinned.recalled' | 'pinned.deleted' | 'pinned.protected' | 'pinned.pinAction' | 'pinned.unpinAction' | 'pinned.unpinConfirm' | 'pinned.cancelAction' | 'lifecycle.missingLoginState' | 'lifecycle.prepareFailed' | 'lifecycle.missingConnectParams' | 'lifecycle.connectFailed' | 'lifecycle.disposed' | 'forward.emptyInput' | 'forward.allSkipped' | 'forward.partialSkipped' | 'forward.done' | 'forward.failed';
6293
6385
 
6294
6386
  /** 会话列表摘要的框架无关分段;宿主可自行决定表情使用图片、文本或其它组件呈现。 */
6295
6387
  type ConversationListPreviewSegment = {
@@ -7157,6 +7249,27 @@ declare namespace forward_service {
7157
7249
  export type { forward_service_ForwardCommandHooks as ForwardCommandHooks, forward_service_ImForwardOperationResult as ImForwardOperationResult };
7158
7250
  }
7159
7251
 
7252
+ /** 媒体入口的去向;不支持的图片必须提示用户,不能自动作为附件发送。 */
7253
+ type MediaFileClassification = 'image' | 'video' | 'sticker' | 'file' | 'unsupported-image';
7254
+ /**
7255
+ * PC/H5 选图、拖拽和批量发送共用的分类规则。GIF 保持原有签名校验和失败提示路径。
7256
+ * 普通图片复用 SDK 文件头白名单;MIME 缺失时仍识别有效图片,并按图片扩展名拦截不支持的文件。
7257
+ * 读取失败会抛给调用方,不能将无法读取的图片静默改成附件。
7258
+ *
7259
+ * @example
7260
+ * await classifyMediaFile(svgFile); // 'unsupported-image',由宿主提示改用文件发送
7261
+ * await classifyMediaFile(pngFile); // 'image',即使 MIME 为空也按文件头识别
7262
+ */
7263
+ declare function classifyMediaFile(file: File): Promise<MediaFileClassification>;
7264
+ type GifFileClassification = 'gif' | 'not-gif' | 'invalid-gif';
7265
+ /**
7266
+ * 同时核对 MIME 与文件头,避免 GIF 合同冲突的文件回落到普通 IMAGE 链路。
7267
+ *
7268
+ * 浏览器 MIME 可以为空;一旦 MIME 或文件头任一方声明 GIF,另一方就必须一致。
7269
+ */
7270
+ declare function classifyGifFile(file: Blob): Promise<GifFileClassification>;
7271
+ declare function isGifFile(file: Blob): Promise<boolean>;
7272
+
7160
7273
  /**
7161
7274
  * 为宿主手里的本地图片/视频文件预读展示元信息(尺寸、视频时长、视频首帧封面 JPEG 字节)。
7162
7275
  *
@@ -7746,15 +7859,6 @@ declare function fetchConversationVoiceBatch(runtime: ChatRuntime, input: Browse
7746
7859
  */
7747
7860
  declare function fetchNextConversationSearchBatch(runtime: ChatRuntime, pageToken: ImPageToken): Promise<SearchBatchResult>;
7748
7861
 
7749
- type GifFileClassification = 'gif' | 'not-gif' | 'invalid-gif';
7750
- /**
7751
- * 同时核对 MIME 与文件头,避免 GIF 合同冲突的文件回落到普通 IMAGE 链路。
7752
- *
7753
- * 浏览器 MIME 可以为空;一旦 MIME 或文件头任一方声明 GIF,另一方就必须一致。
7754
- */
7755
- declare function classifyGifFile(file: Blob): Promise<GifFileClassification>;
7756
- declare function isGifFile(file: Blob): Promise<boolean>;
7757
-
7758
7862
  /**
7759
7863
  * 消息输入区的发送命令:文本、图片、视频、文件、语音、批量发送、取消上传和失败重试。
7760
7864
  *
@@ -8693,5 +8797,5 @@ declare function resampleWaveform(data: readonly number[], targetCount: number):
8693
8797
  */
8694
8798
  declare function placeholderWaveform(seed: string, count: number): number[];
8695
8799
 
8696
- export { DEFAULT_EMOJI_ASSET_BASE, DEFAULT_LOADING_MINIMUM_VISIBLE_MS, DEFAULT_LOADING_SHOW_DELAY_MS, EMOJI_CATALOG, EMOJI_GAME_DICE_STABLE_KEY, EMOJI_GAME_RPS_STABLE_KEY, EMOJI_TOKEN_RE, MAX_BATCH_FILES, MAX_RECENT_EMOJI_COUNT, MINI_PROGRAM_LANG_NUMBERS, SPIKE_STEP, UNICODE_EMOJI_CATALOG, blockReasonForChannelSession, blockReasonForChannelState, blockReasonForGroupState, blockReasonForSession, calculateMediaBox, canEditMessage, canPinChannelMessage, canPinGroupMessage, canPinMessage, canPromoteMediaPresentationSource, canRecallMessage, canTransmit, canTransmitByType, canTransmitContent, cancelMediaUpload, captureRuntimeClientOperation, captureRuntimeOperation, channelMiniProgramRelKey, classifyGifFile, createChatRuntime, createDelayedLoadingIndicator, createEmojiMatcher, createLinkMatcher, createNewMessageBadgeController, createThreadItems, csvIncludes, decideChannelMiniProgramRelOpen, decideConversationAction, decideMemberTargetAction, decideMessageAction, emojiAssetUrl, emojiUrlByCode, fetchConversationFileBatch, fetchConversationImageBatch, fetchConversationMessageBatch, fetchConversationVideoBatch, fetchConversationVoiceBatch, fetchNextConversationSearchBatch, formatChatDateSeparator, formatConversationDisplayTime, formatFileSize, formatMediaDuration, forward_service as forwardService, getFileExtension, getLocalDayKey, hasEmojiCandidate, hasLinkCandidate, highlightSegments, isGifFile, isMessageLocateScrollProtected, isMessageTailChangeFromOlderWindowTrim, isMessageViewportMeasurable, isMessageVisibleForNewMessageBadge, isPinnedMessageProtected, isVoiceStorageConfigured, loadOlderUntilBoundary, mediaBatchBudgetBytes, media_service as mediaService, message_service as messageService, normalizeLinkHref, parseUnicodeEmojiCode, pinnedMessage_service as pinnedMessageService, placeholderWaveform, prependRecentEmoji, profile_service as profileService, read_service as readService, refreshPrependMessageAnchorPosition, replaceInterruptedMediaFile, requiresConversationEncryption, requiresForwardTypeConfirmation, resampleWaveform, resolveBestMediaPresentationSource, resolveCenteredMessageScrollTop, resolveChannelMemberAvatarUrl, resolveChannelMemberDisplayName, resolveChannelMiniProgramRelIcon, resolveChannelMiniProgramRelName, resolveChannelMiniProgramRelOpenSurface, resolveChannelMiniProgramRelUrl, resolveChannelPinnedGameCopy, resolveConversationListPresentation, resolveDisplayTimestamp, resolveEmojiToken, resolveFriendDisplayName, resolveImProfileAccessDestination, resolveImThreadActiveDate, resolveMediaPresentation, resolveMemberDisplayName, resolveMessageBodyKind, resolveMessageNotificationDecision, resolveMessageTimelineTimestamp, resolveMiniProgramFloatLinkUrl, resolveMiniProgramOpenUrl, resolvePrependMessageAnchor, resolvePrependMessageAnchorAdjustment, resolvePrependMessageAnchorPosition, resolvePublicNickname, resolveQuotedMessagePresentation, resolveSenderAvatarUrl, resolveStandaloneEmojiMessage, resolveSurvivingMessageAnchorAdjustment, resolveUnicodeEmoji, resolveVisibleChannelMiniProgramRels, resolveVisibleMessageAnchorPositions, retryMessage, runMediaSendBatch, sendAsFilesBatch, sendBlockReasonForDecision, sendMediaAlbum, sendMediaFile, sendMediaFilesBatch, sendText, sendVoice, shouldCompleteInitialViewport, shouldFillInitialHistoryViewport, shouldFollowIncomingMessage, shouldLoadNewerHistoryPage, shouldPrefetchOlderHistory, shouldRestoreMessageViewportFocus, shouldShowChatDateSeparator, shouldTrackRemoteMessageForBadge, sortChannelMiniProgramFloatingItems, spikeCountForDuration, supportsConversationMention, unicodeEmojiTextFromCode };
8697
- export type { ApplySessionResult, BrowseMessagesInput, CanPinMessageInput, CenteredMessageScrollInput, ChannelMiniProgramOpenGame, ChannelMiniProgramRelOpenDecision, ChannelMiniProgramRelOpenSurface, ChatMediaMessageRef, ChatProfileAdapter, ChatRuntime, ChatRuntimeCredentials, ChatRuntimeFactories, ChatRuntimeHostDeps, ChatRuntimeOpResult, ConversationCapabilityAction, ConversationListPresentation, ConversationListPresentationLabels, ConversationListPresentationOptions, ConversationListPreviewMediaKind, ConversationListPreviewSegment, ConversationSearchCategory, CreateThreadItemsInput, DelayedLoadingIndicator, DelayedLoadingIndicatorOptions, EmojiEntry, EmojiRecentItem, EmojiSegment, FormatTimeDisplayContext, ForwardCommandHooks, GifFileClassification, HighlightSegment, ImChannelMemberPresentation, ImChannelMentionPresentation, ImChannelProfilePresentation, ImForwardOperationResult, ImGroupMemberPresentation, ImMediaBatchSendResult, ImMessageActionResult, ImMessageBodyKind, ImMessageView, ImPinnedMessageActionResult, ImPinnedMessageSnapshot, ImProfileAccessDestination, ImQuotedMessagePresentation, ImTextResolver, ImThreadActiveDateSnapshot, ImThreadDateMarkerMetric, ImThreadDecoration, ImThreadEncryptionItem, ImThreadIntent, ImThreadItem, ImThreadPresentationAdapter, ImThreadReadActions, ImThreadReadTargetResolver, ImThreadViewportMetrics, IncomingMessageFollowInput, InitialHistoryViewportFillInput, InitialViewportCompletionInput, LinkSegment, MediaBatchBudgetOptions, MediaBatchLimitInfo, MediaLimitItem, MediaObjectUrlLease, MediaPresentationFit, MediaPresentationPolicy, MediaPresentationRule, MediaPresentationSourceCandidate, MediaPresentationSourceQuality, MediaSendBatchResult, MemberTargetCapabilityAction, MemberTargetCapabilityInput, MessageCapabilityAction, MessageCapabilityInput, MessageLocateScrollProtectionInput, MessageNotificationDecision, MessageNotificationInput, MiniProgramHostLocale, MiniProgramOpenUrlInput, NewMessageBadgeController, NewMessageBadgeCountListener, NewMessageBadgeVisibilityInput, NewerHistoryPageTriggerInput, OlderHistoryPrefetchInput, PrependAnchorCandidate, PrependAnchorViewport, PrependMessageAnchorPosition, RemoteMessageBadgeTrackingInput, ResolveMediaPresentationInput, ResolvedMediaPresentation, RichExtraSegment, RuntimeClientOperation, RuntimeOperation, SearchBatchResult, SearchFilesInput, SearchMessagesInput, SearchTextMessagesInput, SendCapabilityMode, SendCommandHooks, SendVoicePayload, SenderProfileEntry, ServiceNoteHooks, StandaloneEmojiMessage, UnicodeEmojiEntry, VisibleChannelMiniProgramRels };
8800
+ export { DEFAULT_EMOJI_ASSET_BASE, DEFAULT_LOADING_MINIMUM_VISIBLE_MS, DEFAULT_LOADING_SHOW_DELAY_MS, EMOJI_CATALOG, EMOJI_GAME_DICE_STABLE_KEY, EMOJI_GAME_RPS_STABLE_KEY, EMOJI_TOKEN_RE, MAX_BATCH_FILES, MAX_RECENT_EMOJI_COUNT, MINI_PROGRAM_LANG_NUMBERS, SPIKE_STEP, UNICODE_EMOJI_CATALOG, blockReasonForChannelSession, blockReasonForChannelState, blockReasonForGroupState, blockReasonForSession, calculateMediaBox, canEditMessage, canPinChannelMessage, canPinGroupMessage, canPinMessage, canPromoteMediaPresentationSource, canRecallMessage, canTransmit, canTransmitByType, canTransmitContent, cancelMediaUpload, captureRuntimeClientOperation, captureRuntimeOperation, channelMiniProgramRelKey, classifyGifFile, classifyMediaFile, createChatRuntime, createDelayedLoadingIndicator, createEmojiMatcher, createLinkMatcher, createNewMessageBadgeController, createThreadItems, csvIncludes, decideChannelMiniProgramRelOpen, decideConversationAction, decideMemberTargetAction, decideMessageAction, emojiAssetUrl, emojiUrlByCode, fetchConversationFileBatch, fetchConversationImageBatch, fetchConversationMessageBatch, fetchConversationVideoBatch, fetchConversationVoiceBatch, fetchNextConversationSearchBatch, formatChatDateSeparator, formatConversationDisplayTime, formatFileSize, formatMediaDuration, forward_service as forwardService, getFileExtension, getLocalDayKey, hasEmojiCandidate, hasLinkCandidate, highlightSegments, isGifFile, isMessageLocateScrollProtected, isMessageTailChangeFromOlderWindowTrim, isMessageViewportMeasurable, isMessageVisibleForNewMessageBadge, isPinnedMessageProtected, isVoiceStorageConfigured, loadOlderUntilBoundary, mediaBatchBudgetBytes, media_service as mediaService, message_service as messageService, normalizeLinkHref, parseUnicodeEmojiCode, pinnedMessage_service as pinnedMessageService, placeholderWaveform, prependRecentEmoji, profile_service as profileService, read_service as readService, refreshPrependMessageAnchorPosition, replaceInterruptedMediaFile, requiresConversationEncryption, requiresForwardTypeConfirmation, resampleWaveform, resolveBestMediaPresentationSource, resolveCenteredMessageScrollTop, resolveChannelMemberAvatarUrl, resolveChannelMemberDisplayName, resolveChannelMiniProgramRelIcon, resolveChannelMiniProgramRelName, resolveChannelMiniProgramRelOpenSurface, resolveChannelMiniProgramRelUrl, resolveChannelPinnedGameCopy, resolveConversationListPresentation, resolveDisplayTimestamp, resolveEmojiToken, resolveFriendDisplayName, resolveImProfileAccessDestination, resolveImThreadActiveDate, resolveMediaPresentation, resolveMemberDisplayName, resolveMessageBodyKind, resolveMessageNotificationDecision, resolveMessageTimelineTimestamp, resolveMiniProgramFloatLinkUrl, resolveMiniProgramOpenUrl, resolvePrependMessageAnchor, resolvePrependMessageAnchorAdjustment, resolvePrependMessageAnchorPosition, resolvePublicNickname, resolveQuotedMessagePresentation, resolveSenderAvatarUrl, resolveStandaloneEmojiMessage, resolveSurvivingMessageAnchorAdjustment, resolveUnicodeEmoji, resolveVisibleChannelMiniProgramRels, resolveVisibleMessageAnchorPositions, retryMessage, runMediaSendBatch, sendAsFilesBatch, sendBlockReasonForDecision, sendMediaAlbum, sendMediaFile, sendMediaFilesBatch, sendText, sendVoice, shouldCompleteInitialViewport, shouldFillInitialHistoryViewport, shouldFollowIncomingMessage, shouldLoadNewerHistoryPage, shouldPrefetchOlderHistory, shouldRestoreMessageViewportFocus, shouldShowChatDateSeparator, shouldTrackRemoteMessageForBadge, sortChannelMiniProgramFloatingItems, spikeCountForDuration, supportsConversationMention, unicodeEmojiTextFromCode };
8801
+ export type { ApplySessionResult, BrowseMessagesInput, CanPinMessageInput, CenteredMessageScrollInput, ChannelMiniProgramOpenGame, ChannelMiniProgramRelOpenDecision, ChannelMiniProgramRelOpenSurface, ChatMediaMessageRef, ChatProfileAdapter, ChatRuntime, ChatRuntimeCredentials, ChatRuntimeFactories, ChatRuntimeHostDeps, ChatRuntimeOpResult, ConversationCapabilityAction, ConversationListPresentation, ConversationListPresentationLabels, ConversationListPresentationOptions, ConversationListPreviewMediaKind, ConversationListPreviewSegment, ConversationSearchCategory, CreateThreadItemsInput, DelayedLoadingIndicator, DelayedLoadingIndicatorOptions, EmojiEntry, EmojiRecentItem, EmojiSegment, FormatTimeDisplayContext, ForwardCommandHooks, GifFileClassification, HighlightSegment, ImChannelMemberPresentation, ImChannelMentionPresentation, ImChannelProfilePresentation, ImForwardOperationResult, ImGroupMemberPresentation, ImMediaBatchSendResult, ImMessageActionResult, ImMessageBodyKind, ImMessageView, ImPinnedMessageActionResult, ImPinnedMessageSnapshot, ImProfileAccessDestination, ImQuotedMessagePresentation, ImTextResolver, ImThreadActiveDateSnapshot, ImThreadDateMarkerMetric, ImThreadDecoration, ImThreadEncryptionItem, ImThreadIntent, ImThreadItem, ImThreadPresentationAdapter, ImThreadReadActions, ImThreadReadTargetResolver, ImThreadViewportMetrics, IncomingMessageFollowInput, InitialHistoryViewportFillInput, InitialViewportCompletionInput, LinkSegment, MediaBatchBudgetOptions, MediaBatchLimitInfo, MediaFileClassification, MediaLimitItem, MediaObjectUrlLease, MediaPresentationFit, MediaPresentationPolicy, MediaPresentationRule, MediaPresentationSourceCandidate, MediaPresentationSourceQuality, MediaSendBatchResult, MemberTargetCapabilityAction, MemberTargetCapabilityInput, MessageCapabilityAction, MessageCapabilityInput, MessageLocateScrollProtectionInput, MessageNotificationDecision, MessageNotificationInput, MiniProgramHostLocale, MiniProgramOpenUrlInput, NewMessageBadgeController, NewMessageBadgeCountListener, NewMessageBadgeVisibilityInput, NewerHistoryPageTriggerInput, OlderHistoryPrefetchInput, PrependAnchorCandidate, PrependAnchorViewport, PrependMessageAnchorPosition, RemoteMessageBadgeTrackingInput, ResolveMediaPresentationInput, ResolvedMediaPresentation, RichExtraSegment, RuntimeClientOperation, RuntimeOperation, SearchBatchResult, SearchFilesInput, SearchMessagesInput, SearchTextMessagesInput, SendCapabilityMode, SendCommandHooks, SendVoicePayload, SenderProfileEntry, ServiceNoteHooks, StandaloneEmojiMessage, UnicodeEmojiEntry, VisibleChannelMiniProgramRels };
package/dist/chat-kit.js CHANGED
@@ -1 +1 @@
1
- export{p as DEFAULT_LOADING_MINIMUM_VISIBLE_MS,o as DEFAULT_LOADING_SHOW_DELAY_MS,d as MINI_PROGRAM_LANG_NUMBERS,H as SPIKE_STEP,D as calculateMediaBox,s as canPromoteMediaPresentationSource,u as captureRuntimeClientOperation,t as captureRuntimeOperation,m as channelMiniProgramRelKey,q as createDelayedLoadingIndicator,B as createLinkMatcher,e as csvIncludes,c as decideChannelMiniProgramRelOpen,F as formatFileSize,E as formatMediaDuration,G as getFileExtension,A as hasLinkCandidate,y as highlightSegments,v as mediaService,z as normalizeLinkHref,K as placeholderWaveform,w as readService,J as resampleWaveform,r as resolveBestMediaPresentationSource,g as resolveChannelMiniProgramRelIcon,f as resolveChannelMiniProgramRelName,i as resolveChannelMiniProgramRelOpenSurface,h as resolveChannelMiniProgramRelUrl,j as resolveChannelPinnedGameCopy,n as resolveConversationListPresentation,C as resolveMediaPresentation,b as resolveMiniProgramFloatLinkUrl,a as resolveMiniProgramOpenUrl,x as resolveQuotedMessagePresentation,l as resolveVisibleChannelMiniProgramRels,k as sortChannelMiniProgramFloatingItems,I as spikeCountForDuration}from'./chunk-N3Q22YZP.js';export{j as DEFAULT_EMOJI_ASSET_BASE,i as EMOJI_CATALOG,c as EMOJI_GAME_DICE_STABLE_KEY,b as EMOJI_GAME_RPS_STABLE_KEY,m as EMOJI_TOKEN_RE,L as MAX_BATCH_FILES,a as MAX_RECENT_EMOJI_COUNT,g as UNICODE_EMOJI_CATALOG,K as blockReasonForChannelSession,J as blockReasonForChannelState,Q as blockReasonForGroupState,T as blockReasonForSession,E as canEditMessage,u as canPinChannelMessage,t as canPinGroupMessage,v as canPinMessage,D as canRecallMessage,aa as cancelMediaUpload,O as classifyGifFile,s as createChatRuntime,p as createEmojiMatcher,G as decideConversationAction,I as decideMemberTargetAction,H as decideMessageAction,l as emojiAssetUrl,n as emojiUrlByCode,Aa as fetchConversationFileBatch,Ba as fetchConversationImageBatch,ya as fetchConversationMessageBatch,Ca as fetchConversationVideoBatch,Da as fetchConversationVoiceBatch,Ea as fetchNextConversationSearchBatch,da as forwardService,o as hasEmojiCandidate,P as isGifFile,w as isPinnedMessageProtected,X as isVoiceStorageConfigured,M as mediaBatchBudgetBytes,ia as messageService,e as parseUnicodeEmojiCode,na as pinnedMessageService,d as prependRecentEmoji,xa as profileService,W as replaceInterruptedMediaFile,R as requiresConversationEncryption,z as resolveChannelMemberAvatarUrl,y as resolveChannelMemberDisplayName,k as resolveEmojiToken,C as resolveFriendDisplayName,oa as resolveImProfileAccessDestination,x as resolveMemberDisplayName,r as resolveMessageNotificationDecision,B as resolvePublicNickname,A as resolveSenderAvatarUrl,q as resolveStandaloneEmojiMessage,h as resolveUnicodeEmoji,ba as retryMessage,N as runMediaSendBatch,$ as sendAsFilesBatch,F as sendBlockReasonForDecision,Z as sendMediaAlbum,V as sendMediaFile,_ as sendMediaFilesBatch,U as sendText,Y as sendVoice,S as supportsConversationMention,f as unicodeEmojiTextFromCode}from'./chunk-7M4QHJTF.js';export{C as createNewMessageBadgeController,i as createThreadItems,f as formatChatDateSeparator,e as formatConversationDisplayTime,c as getLocalDayKey,l as isMessageLocateScrollProtected,v as isMessageTailChangeFromOlderWindowTrim,k as isMessageViewportMeasurable,B as isMessageVisibleForNewMessageBadge,x as loadOlderUntilBoundary,p as refreshPrependMessageAnchorPosition,j as resolveCenteredMessageScrollTop,a as resolveDisplayTimestamp,g as resolveImThreadActiveDate,h as resolveMessageBodyKind,b as resolveMessageTimelineTimestamp,n as resolvePrependMessageAnchor,q as resolvePrependMessageAnchorAdjustment,o as resolvePrependMessageAnchorPosition,s as resolveSurvivingMessageAnchorAdjustment,r as resolveVisibleMessageAnchorPositions,t as shouldCompleteInitialViewport,y as shouldFillInitialHistoryViewport,u as shouldFollowIncomingMessage,z as shouldLoadNewerHistoryPage,m as shouldPrefetchOlderHistory,w as shouldRestoreMessageViewportFocus,d as shouldShowChatDateSeparator,A as shouldTrackRemoteMessageForBadge}from'./chunk-JOWVWU35.js';import'./chunk-HGVJTQKD.js';import'./chunk-TRR2QHCJ.js';import'./chunk-MYXIQBZ4.js';export{ra as canTransmit,pa as canTransmitByType,qa as canTransmitContent,oa as requiresForwardTypeConfirmation}from'./chunk-PY2CC436.js';import'./chunk-WOT6VMZA.js';
1
+ export{p as DEFAULT_LOADING_MINIMUM_VISIBLE_MS,o as DEFAULT_LOADING_SHOW_DELAY_MS,d as MINI_PROGRAM_LANG_NUMBERS,H as SPIKE_STEP,D as calculateMediaBox,s as canPromoteMediaPresentationSource,u as captureRuntimeClientOperation,t as captureRuntimeOperation,m as channelMiniProgramRelKey,q as createDelayedLoadingIndicator,B as createLinkMatcher,e as csvIncludes,c as decideChannelMiniProgramRelOpen,F as formatFileSize,E as formatMediaDuration,G as getFileExtension,A as hasLinkCandidate,y as highlightSegments,v as mediaService,z as normalizeLinkHref,K as placeholderWaveform,w as readService,J as resampleWaveform,r as resolveBestMediaPresentationSource,g as resolveChannelMiniProgramRelIcon,f as resolveChannelMiniProgramRelName,i as resolveChannelMiniProgramRelOpenSurface,h as resolveChannelMiniProgramRelUrl,j as resolveChannelPinnedGameCopy,n as resolveConversationListPresentation,C as resolveMediaPresentation,b as resolveMiniProgramFloatLinkUrl,a as resolveMiniProgramOpenUrl,x as resolveQuotedMessagePresentation,l as resolveVisibleChannelMiniProgramRels,k as sortChannelMiniProgramFloatingItems,I as spikeCountForDuration}from'./chunk-AULYARAI.js';export{j as DEFAULT_EMOJI_ASSET_BASE,i as EMOJI_CATALOG,c as EMOJI_GAME_DICE_STABLE_KEY,b as EMOJI_GAME_RPS_STABLE_KEY,m as EMOJI_TOKEN_RE,L as MAX_BATCH_FILES,a as MAX_RECENT_EMOJI_COUNT,g as UNICODE_EMOJI_CATALOG,K as blockReasonForChannelSession,J as blockReasonForChannelState,R as blockReasonForGroupState,U as blockReasonForSession,E as canEditMessage,u as canPinChannelMessage,t as canPinGroupMessage,v as canPinMessage,D as canRecallMessage,ba as cancelMediaUpload,P as classifyGifFile,O as classifyMediaFile,s as createChatRuntime,p as createEmojiMatcher,G as decideConversationAction,I as decideMemberTargetAction,H as decideMessageAction,l as emojiAssetUrl,n as emojiUrlByCode,Ba as fetchConversationFileBatch,Ca as fetchConversationImageBatch,za as fetchConversationMessageBatch,Da as fetchConversationVideoBatch,Ea as fetchConversationVoiceBatch,Fa as fetchNextConversationSearchBatch,ea as forwardService,o as hasEmojiCandidate,Q as isGifFile,w as isPinnedMessageProtected,Y as isVoiceStorageConfigured,M as mediaBatchBudgetBytes,ja as messageService,e as parseUnicodeEmojiCode,oa as pinnedMessageService,d as prependRecentEmoji,ya as profileService,X as replaceInterruptedMediaFile,S as requiresConversationEncryption,z as resolveChannelMemberAvatarUrl,y as resolveChannelMemberDisplayName,k as resolveEmojiToken,C as resolveFriendDisplayName,pa as resolveImProfileAccessDestination,x as resolveMemberDisplayName,r as resolveMessageNotificationDecision,B as resolvePublicNickname,A as resolveSenderAvatarUrl,q as resolveStandaloneEmojiMessage,h as resolveUnicodeEmoji,ca as retryMessage,N as runMediaSendBatch,aa as sendAsFilesBatch,F as sendBlockReasonForDecision,_ as sendMediaAlbum,W as sendMediaFile,$ as sendMediaFilesBatch,V as sendText,Z as sendVoice,T as supportsConversationMention,f as unicodeEmojiTextFromCode}from'./chunk-AFLOPH2O.js';export{C as createNewMessageBadgeController,i as createThreadItems,f as formatChatDateSeparator,e as formatConversationDisplayTime,c as getLocalDayKey,l as isMessageLocateScrollProtected,v as isMessageTailChangeFromOlderWindowTrim,k as isMessageViewportMeasurable,B as isMessageVisibleForNewMessageBadge,x as loadOlderUntilBoundary,p as refreshPrependMessageAnchorPosition,j as resolveCenteredMessageScrollTop,a as resolveDisplayTimestamp,g as resolveImThreadActiveDate,h as resolveMessageBodyKind,b as resolveMessageTimelineTimestamp,n as resolvePrependMessageAnchor,q as resolvePrependMessageAnchorAdjustment,o as resolvePrependMessageAnchorPosition,s as resolveSurvivingMessageAnchorAdjustment,r as resolveVisibleMessageAnchorPositions,t as shouldCompleteInitialViewport,y as shouldFillInitialHistoryViewport,u as shouldFollowIncomingMessage,z as shouldLoadNewerHistoryPage,m as shouldPrefetchOlderHistory,w as shouldRestoreMessageViewportFocus,d as shouldShowChatDateSeparator,A as shouldTrackRemoteMessageForBadge}from'./chunk-BZFBUHDE.js';import'./chunk-R6BJQWPW.js';import'./chunk-HZD2QAZB.js';import'./chunk-TKWU3IO7.js';export{ra as canTransmit,pa as canTransmitByType,qa as canTransmitContent,oa as requiresForwardTypeConfirmation}from'./chunk-XICYFDN4.js';import'./chunk-WOT6VMZA.js';
@@ -0,0 +1 @@
1
+ import {j,p,b as b$1,i,f,q as q$1}from'./chunk-HZD2QAZB.js';import {Xa,Wa}from'./chunk-TKWU3IO7.js';import {ra,a as a$1,b,na,wa,ya}from'./chunk-XICYFDN4.js';import {a}from'./chunk-WOT6VMZA.js';var vn=14,yn="game:rps",Cn="game:dice";function Ve(e){if(e.stableKey.length===0||e.stableKey.trim()!==e.stableKey)throw new TypeError("Emoji recent item \u9700\u8981\u975E\u7A7A\u4E14\u65E0\u9996\u5C3E\u7A7A\u767D\u7684 stableKey")}function Mn(e,t){Ve(t);let n=new Set([t.stableKey]),r=[t];for(let o of e)if(Ve(o),!n.has(o.stableKey)&&(n.add(o.stableKey),r.push(o),r.length===14))break;return Object.freeze(r)}var ze=["0x1f600","0x1f603","0x1f604","0x1f601","0x1f606","0x1f605","0x1f923","0x1f602","0x1f642","0x1f643","0x1f609","0x1f60a","0x1f607","0x1f970","0x1f60d","0x1f929","0x1f618","0x1f617","0x1f61a","0x1f619","0x1f60b","0x1f61b","0x1f61c","0x1f92a","0x1f61d","0x1f911","0x1f917","0x1f92d","0x1f92b","0x1f914","0x1f910","0x1f928","0x1f610","0x1f611","0x1f636","0x1f60f","0x1f612","0x1f644","0x1f62c","0x1f925","0x1f60c","0x1f614","0x1f62a","0x1f924","0x1f634","0x1f637","0x1f912","0x1f915","0x1f922","0x1f92e","0x1f927","0x1f975","0x1f976","0x1f974","0x1f635","0x1f92f","0x1f920","0x1f973","0x1f60e","0x1f913","0x1f9d0","0x1f615","0x1f61f","0x1f641","0x1f62e","0x1f62f","0x1f632","0x1f633","0x1f97a","0x1f626","0x1f627","0x1f628","0x1f630","0x1f625","0x1f622","0x1f62d","0x1f631","0x1f616","0x1f623","0x1f61e","0x1f613","0x1f629","0x1f62b","0x1f971","0x1f624","0x1f621","0x1f620","0x1f92c","0x1f608","0x1f47f","0x1f480","0x1f4a9","0x1f921","0x1f479","0x1f47a","0x1f47b","0x1f47d","0x1f47e","0x1f916","0x1f63a","0x1f638","0x1f639","0x1f63b","0x1f63c","0x1f63d","0x1f640","0x1f63f","0x1f63e","0x1f648","0x1f649","0x1f64a","0x1f48c","0x1f498","0x1f49d","0x1f496","0x1f497","0x1f493","0x1f49e","0x1f495","0x1f49f","0x1f494","0x1f9e1","0x1f49b","0x1f49a","0x1f499","0x1f49c","0x1f90e","0x1f5a4","0x1f90d","0x1f48b","0x1f4af","0x1f4a2","0x1f4a5","0x1f4ab","0x1f4a6","0x1f4a8","0x1f4ac","0x1f4ad","0x1f4a4","0x1f44b","0x1f91a","0x1f590","0x270b","0x1f596","0x1f44c","0x1f90f","0x270c","0x1f91e","0x1f91f","0x1f918","0x1f919","0x1f448","0x1f449","0x1f446","0x1f595","0x1f447","0x1f44d","0x1f44e","0x270a","0x1f44a","0x1f91b","0x1f91c","0x1f44f","0x1f64c","0x1f450","0x1f932","0x1f91d","0x1f64f","0x270d","0x1f485","0x1f933","0x1f4aa","0x1f9be","0x1f9bf","0x1f9b5","0x1f9b6","0x1f442","0x1f9bb","0x1f443","0x1f9e0","0x1f9b7","0x1f9b4","0x1f440","0x1f445","0x1f444","0x1f435","0x1f9a7","0x1f436","0x1f98a","0x1f99d","0x1f431","0x1f981","0x1f42f","0x1f42e","0x1f437","0x1f43d","0x1f42d","0x1f439","0x1f430","0x1f43b","0x1f428","0x1f43c","0x1f9a5","0x1f983","0x1f414","0x1f423","0x1f425","0x1f427","0x1f985","0x1f986","0x1f989","0x1f9a9","0x1f99a","0x1f99c","0x1f438","0x1f433","0x1f980","0x1f490","0x1f338","0x1f4ae","0x1f339","0x1f940","0x1f33a","0x1f33b","0x1f340","0x1f341","0x1f342","0x1f343","0x1f9c0","0x1f969","0x1f354","0x1f35f","0x1f355","0x1f32d","0x1f96a","0x1f32e","0x1f32f","0x1f365","0x1f36b","0x2615","0x1f37a","0x1f943","0x1f30f","0x1f9f1","0x1f6d1","0x1f6a7","0x2693","0x1f680","0x23f3","0x231a","0x23f0","0x1f553","0x1f319","0x1f31a","0x1f31b","0x1f31c","0x1f31d","0x1f31e","0x1fa90","0x2b50","0x1f31f","0x1f320","0x1f30c","0x26c5","0x1f300","0x1f308","0x1f302","0x2614","0x26a1","0x26c4","0x1f525","0x1f4a7","0x1f30a","0x1f383","0x1f384","0x1f386","0x1f387","0x1f9e8","0x2728","0x1f388","0x1f389","0x1f38a","0x1f38b","0x1f38d","0x1f38e","0x1f38f","0x1f390","0x1f391","0x1f9e7","0x1f380","0x1f381","0x1f3ab","0x1f3c6","0x1f3c5","0x1f947","0x1f948","0x1f949","0x1f3c1","0x1f6a9","0x1f38c","0x1f3f4"];var bn=1114111,In=55296,hn=57343,Ke=65039,Sn="0123456789abcdef";function Tn(e,t){if(!e.startsWith("0x")||e.length<=2)throw new TypeError(`\u975E\u6CD5 Unicode emoji code: ${t}`);let n=e.slice(2);for(let o of n)if(!Sn.includes(o))throw new TypeError(`\u975E\u6CD5 Unicode emoji code: ${t}`);let r=Number.parseInt(n,16);if(!Number.isSafeInteger(r)||r>bn||r>=In&&r<=hn)throw new RangeError(`Unicode emoji code point \u8D8A\u754C: ${t}`);return r}function ie(e){if(e.length===0||e.trim()!==e)throw new TypeError(`\u975E\u6CD5 Unicode emoji code: ${e}`);let t=e.split(" ");if(t.some(n=>n.length===0))throw new TypeError(`\u975E\u6CD5 Unicode emoji code: ${e}`);return Object.freeze(t.map(n=>Tn(n,e)))}function En(e){return String.fromCodePoint(...ie(e))}function be(e){return e.map(t=>`0x${t.toString(16)}`).join(" ")}function Pn(e){let t=ie(e),n=be(t);if(n!==e)throw new TypeError(`Unicode emoji code \u5FC5\u987B\u4F7F\u7528 canonical \u5C0F\u5199\u683C\u5F0F: ${e}`);return Object.freeze({stableKey:`unicode:${n}`,code:e,codePoints:t,text:String.fromCodePoint(...t),kind:"unicode"})}var Ie=Object.freeze(ze.map(Pn)),K=new Map,W=new Map;for(let e of Ie){if(K.has(e.code)||W.has(e.text))throw new Error(`Unicode emoji \u76EE\u5F55\u5B58\u5728\u91CD\u590D\u9879: ${e.code}`);K.set(e.code,e),W.set(e.text,e);}for(let e of Ie){let n=e.codePoints.at(-1)===Ke?e.codePoints.slice(0,-1):[...e.codePoints,Ke],r=be(n),o=String.fromCodePoint(...n);K.has(r)||K.set(r,e),W.has(o)||W.set(o,e);}function Rn(e){if(e.startsWith("0x")){let t=be(ie(e));return K.get(t)}return W.get(e)}var We=["[100\u5206]","[VS]","[\u4E0A]","[\u4E0B]","[\u4E0D\u542C]","[\u4E0D\u770B]","[\u4E0D\u9AD8\u5174]","[\u4EB2\u543B]","[\u4F1E]","[\u51FB\u638C]","[\u5357\u74DC\u5934]","[\u53F3]","[\u54C8\u54C8]","[\u54E6]","[\u5564\u9152]","[\u55B7\u568F]","[\u5723\u8BDE\u6811]","[\u5929\u4F7F\u7B11]","[\u5956\u676F]","[\u5BB3\u6015]","[\u5DE6]","[\u5E73\u9759]","[\u5F3A\u58EE]","[\u5F69\u8679]","[\u5F97\u610F]","[\u5FAE\u7B11]","[\u5FC3\u7D2F]","[\u5FC3\u8DF3]","[\u601D\u8003]","[\u6076\u9B54\u6012]","[\u6076\u9B54\u7B11]","[\u6210\u957F]","[\u6293\u72C2]","[\u62F3\u5934]","[\u6325\u624B]","[\u63E1\u62F3]","[\u65E0]","[\u661F\u661F]","[\u661F\u661F\u773C]","[\u6708\u997C]","[\u6C14\u6124]","[\u6EE1\u8DB3]","[\u706B]","[\u718A\u732B]","[\u7231\u4F60]","[\u725B]","[\u72D7]","[\u732B]","[\u7591\u60D1]","[\u7687\u51A0]","[\u778C\u7761]","[\u795D]","[\u79D8]","[\u7BEE\u7403]","[\u7F8E\u5473]","[\u836F]","[\u8DB3\u7403]","[\u95EA\u7535]","[\u95EA\u8000\u7684\u5FC3]","[\u96EA\u82B1]","[\u997A\u5B50]","[\u9A6C]","[\u9B3C]","[\u9E21]","[\u9F13\u638C]","[\u9F20]","[ALLIN]","[\u4F24\u5FC3]","[\u4FBF\u4FBF]","[\u5077\u7B11]","[\u50B2\u6162]","[\u50BB\u7B11]","[\u5192\u6C57]","[\u51CB\u96F6]","[\u53D1\u5446]","[\u53EF\u601C]","[\u53F9\u6C14]","[\u5403\u60CA]","[\u5403\u74DC]","[\u5408\u638C]","[\u5446\u6EDE]","[\u5455\u5410]","[\u5492\u9A82]","[\u5496\u5561]","[\u54C7]","[\u559C\u7231]","[\u5634\u5507]","[\u563F\u54C8]","[\u56F0]","[\u56F0\u4F4F]","[\u5927\u54ED]","[\u5927\u7B11]","[\u592A\u9633]","[\u5931\u671B]","[\u594B\u6597]","[\u5978\u7B11]","[\u59D4\u5C48]","[\u5BB3\u7F9E]","[\u5C2C\u7B11]","[\u5E72\u676F]","[\u5E86\u795D]","[\u5FC3\u788E]","[\u6050\u60E7]","[\u60CA\u8BB6]","[\u6109\u60A6]","[\u611F\u5192]","[\u6124\u6012]","[\u61CA\u607C]","[\u620F\u5F04]","[\u6253\u51FB]","[\u62A0\u9F3B]","[\u62B1\u62F3]","[\u62C5\u5FC3]","[\u62DC\u62DC]","[\u62E5\u62B1]","[\u6342\u8138]","[\u63E1\u624B]","[\u642C\u7816]","[\u6536\u5230]","[\u6536\u5272]","[\u65B9\u5757]","[\u65E0\u8BED]","[\u6655]","[\u6708\u4EAE]","[\u673A\u667A]","[\u6C57]","[\u6D77\u8482]","[\u70B8\u5F39]","[\u70DF\u82B1]","[\u718A\u54ED\u4E86]","[\u7206\u7AF9]","[\u7231\u5FC3]","[\u725B\u5E02]","[\u72D7\u5934]","[\u732A]","[\u73AB\u7470]","[\u751F\u65E5\u86CB\u7CD5]","[\u767D\u773C]","[\u76B1\u7709]","[\u770B\u6DA8]","[\u770B\u8DCC]","[\u7728\u773C]","[\u7761\u89C9]","[\u793C\u7269]","[\u793E\u4F1A]","[\u798F]","[\u7B11\u54ED]","[\u7CD6\u679C]","[\u7EA2\u5305]","[\u8036]","[\u8138\u7EA2]","[\u82E6\u6DA9]","[\u83DC\u5200]","[\u8870]","[\u88C2\u5F00]","[\u8981\u54ED\u4E86]","[\u8C03\u76AE]","[\u8D5E]","[\u8E29]","[\u9119\u89C6]","[\u9177]","[\u91D1\u94B1]","[\u9501\u7BB1]","[\u957F\u8349]","[\u95EE\u53F7]","[\u95F9\u5267]","[\u9634\u9669]","[\u964D\u843D\u4F1E]","[\u96BE\u8FC7]","[\u98DE\u543B]","[\u9AB7\u9AC5]","[\u9EBB\u5C06]"];var $e=j,An=new Set(We),kn="/images/emoji/v1",_n=(()=>{let e=new Map;for(let t of $e)for(let n of t.tokens)e.set(n,t);return e})();function Nn(e){return _n.get(e)}function Dn(e,t=kn){return `${t}/${e.file}`}var On=/\[[^[\]]{1,20}\]/g,Gn=(()=>{let e=new Map;for(let t of $e)e.set(t.code,t);return e})();function qt(e,t){let n=Gn.get(e);return n===void 0?void 0:Dn(n,t)}var jn=/\[[^[\]]{1,20}\]/;function Qt(e){return jn.test(e)}function Ln(){return e=>{let t=[];for(let n of e.matchAll(On)){let r=Nn(n[0]);if(n.index!==void 0){if(r!==void 0){t.push({start:n.index,end:n.index+n[0].length-1,segment:{kind:"emoji",text:n[0],code:r.code}});continue}An.has(n[0])&&t.push({start:n.index,end:n.index+n[0].length-1,segment:{kind:"legacy-emoji-placeholder",text:n[0]}});}}return t}}var Hn=Ln();function Zt(e){if(e.contentType!=="text"||e.encryption.decryptFailed===true||e.mention!==void 0)return null;let t=e.body.text;if(t===void 0||t==="")return null;let n=Hn(t);if(n.length===0)return null;let r=0,o=[];for(let a of n){if(a.start!==r||a.segment.kind!=="emoji"&&a.segment.kind!=="legacy-emoji-placeholder")return null;o.push(a.segment),r=a.end+1;}return r!==t.length?null:Object.freeze({segments:Object.freeze(o),count:o.length})}function rr(e){return e.source!=="live"?{show:false,reason:"not-live"}:e.permission===null?{show:false,reason:"unsupported"}:e.permission!=="granted"?{show:false,reason:"permission-denied"}:e.visibilityState==="visible"?{show:false,reason:"page-visible"}:e.accountId!==""&&e.senderId===e.accountId?{show:false,reason:"self-message"}:e.contentType==="system"?{show:false,reason:"system-message"}:e.muted?{show:false,reason:"conversation-muted"}:e.globallyEnabled?{show:true}:{show:false,reason:"globally-disabled"}}function Xe(e){let t=new Map,n=new Set,r=e.revokeObjectUrl??(s=>URL.revokeObjectURL(s));function o(s){s.revoked||(s.revoked=true,n.delete(s),r(s.url));}function a(s){t.get(s.key)===s&&t.delete(s.key),s.retired=true,s.leases===0?o(s):n.add(s);}function c(){let s=0,d=0;for(let m of t.values())m.evictable&&(s+=1,d+=m.byteSize);return {entries:s,bytes:d}}function i(){let s=c();for(;s.entries>e.maxCachedEntries||s.bytes>e.maxCachedBytes;){let d;for(let m of t.values())if(m.evictable&&m.leases===0){d=m;break}if(d===void 0)return;a(d),s=c();}}function l(s,d,m){let h=m.byteSize??0,Z=Number.isFinite(h)&&h>0?Math.floor(h):0,R=t.get(s);if(R?.url===d){R.byteSize=Z,R.evictable=m.evictable,t.delete(s),t.set(s,R),i();return}R!==void 0&&a(R),t.set(s,{key:s,url:d,byteSize:Z,evictable:m.evictable,leases:0,retired:false,revoked:false}),i();}function g(s,d){let m=t.get(s);if(m===void 0)return false;let h=t.get(d);return h!==void 0&&h!==m&&a(h),t.delete(s),m.key=d,t.set(d,m),true}function f(s,d){let m=t.get(s);return m===void 0?false:(d!==void 0&&Number.isFinite(d)&&d>0&&(m.byteSize=Math.floor(d)),m.evictable=true,t.delete(s),t.set(s,m),i(),t.get(s)===m)}function y(s){let d=t.get(s);if(d===void 0||d.revoked)return;d.leases+=1,t.delete(s),t.set(s,d);let m=false;return Object.freeze({url:d.url,release(){m||(m=true,d.leases=Math.max(0,d.leases-1),d.retired&&d.leases===0?o(d):i());}})}function u(s){let d=t.get(s);d!==void 0&&a(d);}function v(s){for(let d of [...t.keys()])d.startsWith(s)&&u(d);}function C(){let s=[...t.values()];t.clear();for(let d of [...s,...n])o(d);n.clear();}return {register:l,move:g,makeEvictable:f,acquire:y,remove:u,removeByPrefix:v,clearAll:C,getStats:()=>Object.freeze({activeEntries:t.size,retiredEntries:n.size,...c()})}}var Bn=20;function Fn(){if(typeof navigator>"u")return {maxCachedEntries:6,maxCachedBytes:512*1024*1024};let e=navigator,t=e.deviceMemory??4,n=/Android|iPhone|iPad|Mobile/i.test(e.userAgent);return e.connection?.saveData===true||t<=2||navigator.hardwareConcurrency<=2?{maxCachedEntries:2,maxCachedBytes:128*1024*1024}:n?{maxCachedEntries:4,maxCachedBytes:256*1024*1024}:t>=8&&navigator.hardwareConcurrency>=8?{maxCachedEntries:9,maxCachedBytes:1024*1024*1024}:{maxCachedEntries:6,maxCachedBytes:512*1024*1024}}function he(e){let t=`message\0${e.conversationType}\0${e.conversationId}\0${e.messageId}`;return e.itemIndex===void 0?t:`${t}\0${e.itemIndex}`}function Un(e){return `message\0${e.conversationType}\0${e.conversationId}\0`}function Se(e){return `source\0${e}`}function Rr(e){let t=a$1(e.cachePrefix),n=b(t),r=e.createClient??p,o=e.createStorage??(p=>typeof indexedDB>"u"?void 0:Xa({...p,mediaAssetCache:{strategies:b$1()}})),a=e.createProfile,c=e.deleteStorage??(p=>Wa(p.accountId,{namespaceFactory:p.namespaceFactory})),i$1=null,l=null,g=false,f,y,u,v=0,C,s=false,d={wsUrl:"",userId:"",token:"",deviceToken:"",channelType:"0",cmHttpBaseUrl:""},m=i(e.debug,()=>({generation:v,...d.userId===""?{}:{accountId:d.userId}}));m.record("debug","chat-kit","session","runtime-created");function h(){return {generation:v,...d.userId===""?{}:{accountId:d.userId}}}function Z(){d.userId="",d.token="",d.deviceToken="",d.channelType="0";}let R={},ee={},ne={},A=new Map,k=Xe(Fn()),te=new Set,B=new Set,re=new Set;function F(){for(let p of re)p();}function de(){let p=h(),x=i$1,b=y!==void 0||u!==void 0;y?.(),y=void 0,u?.(),u=void 0,b&&m.record("debug","chat-kit","session","client-subscriptions-released",()=>p),x?.connection.disconnect("im-chat-auth-changed"),i$1=null,l=null,Promise.resolve(f?.close?.()).catch(()=>{}),f=void 0,v+=1,R={},ee={},ne={},le(),A.clear(),F();}function oe(){if(s)throw new Error("ChatRuntime \u5DF2 dispose\uFF0C\u4E0D\u80FD\u521B\u5EFA/\u590D\u7528 client");if(i$1===null){f=o({namespaceFactory:n});let x=C?.getCoreClient(),b=C?.getCoreApi?.();g=x!==void 0||b!==void 0;let E=C?.clientType??2,S=v,w=C?.onRequestError,U=x&&a?a({client:x,clientType:E,storage:f}):void 0,pn={authProvider:{getLoginContext:async()=>{let P=C?.getSession?.(),j=C?.getSession!==void 0,ue=(j?P?.userId:d.userId)?.trim()??"",Le=(j?P?.token:d.token)?.trim()??"";return ue===""||Le===""||ue!==d.userId?null:{userId:ue,token:Le,deviceToken:d.deviceToken,clientType:E,channelType:Number(d.channelType)}}},endpointProvider:{getEndpoints:async()=>[{url:d.wsUrl}],getCmHttpBaseUrl:async()=>d.cmHttpBaseUrl},cache:{prefix:t},adapters:{namespaceFactory:n,storage:{create:P=>{if(P.namespaceFactory!==n)throw new Error("ChatRuntime storage namespace factory \u4E0D\u4E00\u81F4");return f},purgeCurrentAccount:P=>c(P)}},profile:U,media:C?.getMediaConfig(),expressions:C?.getExpressionOptions?.(),coreApi:b,coreClient:x,onRequestError:w===void 0?void 0:P=>!s&&v===S?w(P):void 0,debug:e.debug},je=r(pn),fe=je.events;if(fe===void 0&&B.size>0)throw Promise.resolve(f?.close?.()).catch(()=>{}),f=void 0,new Error("IM client \u7F3A\u5C11\u4EA7\u54C1\u4E8B\u4EF6 API");i$1=je,y=i$1.connection.subscribe(P=>{for(let j of te)j(P);}),fe!==void 0&&(u=fe.subscribe(P=>{for(let j of B)j(P);})),m.record("debug","chat-kit","session","client-subscriptions-established",()=>h());}return i$1}function Ge(){let p=oe();return l??=q$1(p,{coreApiAvailable:g}),l}function le(){k.clearAll();}function gn(p){k.removeByPrefix(Un(p));}return {getClient:()=>i$1,getProductClient:()=>i$1===null?null:Ge(),ensureProductClient:Ge,getConnectionState:()=>i$1?.connection.state??"idle",getGeneration:()=>v,getCredentials:()=>d,getMediaConfig:()=>C?.getMediaConfig(),getDiagnostics:()=>m,configureHost(p){C=p;},applySession(p,x,b){let E=p?.userId??"",S=p?.token??"",w=i$1!==null&&(d.userId!==E||d.token!==S);return w&&de(),d.wsUrl=x.wsUrl,d.cmHttpBaseUrl=x.cmHttpBaseUrl,d.userId=E,d.token=S,d.deviceToken=b,d.channelType="0",m.record("info","chat-kit","session","session-applied",()=>({data:{accountId:E,hasToken:S!=="",didReset:w}})),{didReset:w,hasToken:S!==""}},ensureClient:oe,async prepare(){if(s)return {ok:false,errorKey:"lifecycle.disposed"};if(d.userId==="")return {ok:false,errorKey:"lifecycle.missingLoginState"};let p=Date.now(),x=h();m.record("info","chat-kit","session","prepare-start",()=>x);try{return await oe().connection.prepare(),m.record("info","chat-kit","session","prepare-complete",()=>({...x,durationMs:Date.now()-p})),{ok:!0}}catch(b){return m.record("error","chat-kit","session","prepare-failed",()=>({...x,durationMs:Date.now()-p,error:{message:"ChatRuntime prepare \u5931\u8D25",data:b}})),{ok:false,errorKey:"lifecycle.prepareFailed",errorParams:{reason:b instanceof Error?b.message:String(b)}}}},async connect(){if(s)return {ok:false,errorKey:"lifecycle.disposed"};if(d.wsUrl===""||d.userId===""||d.token==="")return {ok:false,errorKey:"lifecycle.missingConnectParams"};let p=Date.now(),x=h();m.record("info","chat-kit","connection","connect-start",()=>x);try{return await oe().connection.connect(),m.record("info","chat-kit","connection","connect-complete",()=>({...x,durationMs:Date.now()-p})),{ok:!0}}catch(b){return m.record("error","chat-kit","connection","connect-failed",()=>({...x,durationMs:Date.now()-p,error:{message:"ChatRuntime connect \u5931\u8D25",data:b}})),{ok:false,errorKey:"lifecycle.connectFailed",errorParams:{reason:b instanceof Error?b.message:String(b)}}}},disconnect(){let p=h();m.record("info","chat-kit","connection","disconnect",()=>p),i$1?.connection.disconnect("im-chat-manual");},async logout(p){let x=Date.now(),b=h();m.record("info","chat-kit","session","logout-start",()=>({...b,data:p}));let E=i$1,S,w;if(E!==null)try{w=E.logout(p);}catch(U){S=U;}if(Z(),v+=1,w!==void 0)try{await w;}catch(U){S=U;}if(R={},ee={},ne={},le(),A.clear(),F(),m.record(S===void 0?"info":"error","chat-kit","session",S===void 0?"logout-complete":"logout-failed",()=>({...b,durationMs:Date.now()-x,...S===void 0?{}:{error:{message:"ChatRuntime logout \u5931\u8D25",data:S}}})),S!==void 0)throw S},resetForAuthChange:de,dispose(){let p=h();m.record("info","chat-kit","session","dispose",()=>p),de(),te.clear(),B.clear(),re.clear(),s=true;},subscribeEvents(p){return te.add(p),()=>{te.delete(p);}},subscribeProductEvents(p){return B.add(p),()=>{B.delete(p);}},getSenderProfileCache:()=>R,setSenderProfileCache(p){R=p,F();},getGroupMemberNames:()=>ee,setGroupMemberNames(p){ee=p,F();},getChannelMemberProfiles:()=>ne,setChannelMemberProfiles(p){ne=p,F();},subscribeProfileChange(p){return re.add(p),()=>{re.delete(p);}},putSelfVoiceBytes(p,x){for(A.delete(p),A.set(p,x);A.size>Bn;){let b=A.keys().next().value;if(b===void 0)break;A.delete(b);}},getSelfVoiceBytes:p=>A.get(p),clearSelfVoiceBytes(){A.clear();},createLocalMediaPreview(p){let x=URL.createObjectURL(p);return k.register(Se(x),x,{byteSize:p.size,evictable:false}),x},discardLocalMediaPreview(p){k.remove(Se(p));},trackLocalMediaPreview(p,x){k.move(Se(x),he(p));},resolveMediaPreviewToRemote(p,x,b){let E=he(p);x==="image"||x==="video"?k.makeEvictable(E,b):k.remove(E);},acquireMediaBlob(p){return k.acquire(he(p))},cleanupLocalMediaBlobs:le,cleanupConversationMediaBlobs:gn}}function Ye(e){return "group"in e?e.group:e.channel}function Je(e,t,n){if(t.conversationType!==e.ref.conversationType||t.conversationId!==e.ref.conversationId||t.status!=="sent"||t.recalled!==void 0||t.deletedForEveryone!==void 0||t.encryption.decryptFailed===true||!["text","image","video","voice","file","miniProgram","transfer","game"].includes(t.contentType))return false;if(n===null)return true;let r=Ye(n);return r.conversationType!==e.ref.conversationType||r.conversationId!==e.ref.conversationId||n.messageId!==t.id}function Vn(e){let{session:t,message:n,currentPinnedMessage:r,selfId:o,ownerId:a}=e;return t?.ref.conversationType==="group"&&(t.groupState===void 0||t.groupState==="active")&&o!==""&&a!==void 0&&a!==""&&o===a&&Je(t,n,r)}function zn(e){let{session:t,message:n,currentPinnedMessage:r}=e;return t?.ref.conversationType==="channel"&&t.channelState==="active"&&t.channelPermissions?.moderateMessages===true&&Je(t,n,r)}function Ar(e){return e.session?.ref.conversationType==="group"?Vn(e):e.session?.ref.conversationType==="channel"?zn(e):false}function qe(e,t){if(e===null)return false;let n=Ye(e);return n.conversationType===t.conversationType&&n.conversationId===t.conversationId&&e.messageId===t.id}function _r(e,t,n,r,o){let a=e[r];if(a&&a.remark!=="")return a.remark;let c=n===""?void 0:t[n]?.[r];if(c!==void 0&&c!=="")return c;if(a&&a.nickname!=="")return a.nickname;let i=(o??"").trim();return i!==""?i:r.length>12?`${r.slice(0,6)}\u2026${r.slice(-4)}`:r}function Nr(e,t,n,r){let o=e[r];if(o?.remark!==void 0&&o.remark!=="")return o.remark;let a=t[n]?.[r]?.displayName;return a!==void 0&&a!==""?a:o?.nickname!==void 0&&o.nickname!==""?o.nickname:r}function Dr(e,t,n,r){let o=t[n]?.[r]?.avatar;return o!==void 0&&o!==""?o:Kn(e,r)}function Kn(e,t){return e[t]?.avatar??""}function Or(e,t){return e[t]?.nickname??""}function Gr(e){return (e.remark??"").trim()||e.nickname||e.id}function Te(e,t,n=Date.now()){return e.senderId!==t||e.status!=="sent"||e.recalled!==void 0||e.deletedForEveryone!==void 0?false:n-(e.serverTime??e.createdAt)<=300*1e3}function Ee(e,t,n,r=Date.now()){return e.senderId!==t||e.status!=="sent"||e.recalled!==void 0||e.deletedForEveryone!==void 0||e.body.text===void 0||e.body.text===""?false:r-(e.serverTime??e.createdAt)<=n}var I=Object.freeze({availability:"available",reason:"ok"});function M(e){return Object.freeze({availability:"unavailable",reason:e})}function Wn(e,t){return e.ref.conversationType===t.conversationType&&e.ref.conversationId===t.conversationId}function $(e){if(e.status!=="sent"||e.recalled!==void 0||e.deletedForEveryone!==void 0||e.contentType==="system")return M("unsupported-type")}function $n(e){return e.status==="sent"&&e.recalled===void 0&&e.deletedForEveryone===void 0&&e.encryption.decryptFailed!==true&&["text","image","video","voice","file","miniProgram","game","mediaAlbum"].includes(e.contentType)}function Xn(e){return e.status==="sent"&&e.recalled===void 0&&e.deletedForEveryone===void 0}function X(e){return e.conversationType==="channel"?e.value.canMutateMessages:(e.conversationType==="group",e.value.canUseMessageActions)}function Qe(e,t,n={}){return t.availability==="available"?"":e==="direct"?n.mode!=="target"?"":t.reason==="blocked"||t.reason==="not-friend"?"directBlock.contactRequired":"":e==="group"?t.reason==="left"?"groupBlock.left":t.reason==="removed"?"groupBlock.removed":t.reason==="dismissed"?"groupBlock.dismissed":"groupBlock.unknownRestricted":e==="channel"?t.reason==="guest"?"channelBlock.guest":t.reason==="left"?"channelBlock.left":t.reason==="removed"?"channelBlock.removed":t.reason==="dismissed"?"channelBlock.dismissed":t.reason==="muted-all"?"channelBlock.allMembersMuted":t.reason==="muted-self"?"channelBlock.currentUserMuted":t.reason==="muted"?"channelBlock.muted":t.reason==="blacklisted"?"channelBlock.blacklisted":"channelBlock.unknownRestricted":""}function Fr(e,t){switch(t){case "conversation.openProfile":return e.conversationType==="direct"||e.conversationType==="group",e.value.canOpenProfile;case "conversation.readHistory":return e.conversationType==="direct"?I:e.value.canReadHistory;case "conversation.listPreferences":return e.conversationType==="channel"?e.value.state==="muted"?I:e.value.canOpenProfile:e.conversationType==="group"?e.value.canOpenProfile:I;case "composer.send":return e.value.canSendMessages;case "composer.mentionAll":return e.conversationType==="channel"?e.value.canMentionAll:I;case "profile.edit":return e.conversationType==="channel"||e.conversationType==="group"?e.value.canEditProfile:I;case "relationship.manage":return e.conversationType==="direct"?e.value.canManageRelationship:M("unsupported-type");case "members.view":return e.conversationType==="channel"||e.conversationType==="group"?e.value.canViewMembers:M("unsupported-type");case "members.manage":return e.conversationType==="channel"||e.conversationType==="group"?e.value.canManageMembers:M("unsupported-type");case "members.invite":return e.conversationType==="channel"||e.conversationType==="group"?e.value.canInviteMembers:M("unsupported-type");case "members.remove":return e.conversationType==="channel"?e.value.canRemoveMembers:e.conversationType==="group"?e.value.canManageMembers:M("unsupported-type");case "members.setAdmin":return e.conversationType==="channel"?e.value.canSetMemberAdmin:M("unsupported-type");case "ownership.transfer":return e.conversationType==="channel"||e.conversationType==="group"?e.value.canTransferOwnership:M("unsupported-type");case "conversation.leave":return e.conversationType==="channel"||e.conversationType==="group"?e.value.canLeave:M("unsupported-type");case "channel.manageMute":return e.conversationType==="channel"?e.value.canManageMute:M("unsupported-type");case "channel.setMemberPrivateChat":return e.conversationType==="channel"?e.value.canSetMemberPrivateChat:M("unsupported-type");case "channel.dismiss":return e.conversationType==="channel"?e.value.canDismiss:M("unsupported-type")}}function Ur(e,t){let{message:n,pinnedMessage:r,selfId:o,snapshot:a,nowMs:c=Date.now()}=t;if(!Wn(a,n))return M("unsupported-type");let i=qe(r,n);switch(e){case "message.react":return n.status!=="sent"||!wa(n)?M("unsupported-type"):a.conversationType==="channel"?a.value.canSendMessages:I;case "message.forward":{let l=$(n);return l!==void 0?l:ra(n)?I:M("unsupported-type")}case "message.favorite":{let l=$(n);return l!==void 0?l:n.encryption?.decryptFailed===true?M("unsupported-type"):n.contentType==="text"||n.contentType==="image"||n.contentType==="video"||n.contentType==="voice"||n.contentType==="file"||n.contentType==="mediaAlbum"?I:M("unsupported-type")}case "message.multiSelect":{let l=$(n);return l!==void 0?l:i?M("message-protected"):I}case "message.reply":{let l=$(n);return l!==void 0?l:a.conversationType==="direct"?I:X(a)}case "message.recall":return i?M("message-protected"):a.conversationType==="direct"?Te(n,o,c)?I:M("role-insufficient"):X(a).availability!=="available"?X(a):Te(n,o,c)?I:M("role-insufficient");case "message.edit":return i?M("message-protected"):a.conversationType==="direct"?Ee(n,o,na,c)?I:M("role-insufficient"):X(a).availability!=="available"?X(a):Ee(n,o,na,c)?I:M("role-insufficient");case "message.pin":return i?M("message-protected"):$n(n)&&(a.conversationType==="group"||a.conversationType==="channel")?a.value.canPinMessages:M("unsupported-type");case "message.unpin":return a.conversationType==="group"||a.conversationType==="channel"?a.value.canUnpinMessages:M("unsupported-type");case "message.deleteLocal":{if(i)return M("message-protected");let l=$(n);return l!==void 0?l:n.contentType==="unknown"?M("unsupported-type"):a.conversationType==="direct"||a.conversationType==="group"?I:M("unsupported-type")}case "message.deleteForEveryone":return i?M("message-protected"):a.conversationType!=="channel"||!Xn(n)?M("unsupported-type"):a.value.canDeleteMessagesForEveryone}}function Vr(e,t){let{selfId:n,snapshot:r,targetRole:o="unknown",targetUserId:a}=t;if(a===""||a===n)return M("role-insufficient");if(r.conversationType==="group"){if(e!=="members.removeTarget")return M("unsupported-type");let i=r.value.canManageMembers;return i.availability!=="available"?i:r.value.ownerId!==void 0&&a===r.value.ownerId?M("role-insufficient"):I}if(r.conversationType!=="channel")return M("unsupported-type");if(e==="members.removeTarget"||e==="members.editNicknameTarget"){let i=r.value.canRemoveMembers;return i.availability!=="available"?i:r.value.role==="owner"?o==="member"||o==="admin"?I:M("role-insufficient"):r.value.role==="admin"&&o==="member"?I:M("role-insufficient")}let c=r.value.canSetMemberAdmin;return c.availability!=="available"?c:r.value.role!=="owner"?M("role-insufficient"):e==="members.setAdminTarget"?o==="member"?I:M("role-insufficient"):o==="admin"?I:M("role-insufficient")}function Ze(e){if(e===void 0||e==="active")return "";switch(e){case "guest":return "channelBlock.guest";case "left":return "channelBlock.left";case "removed":return "channelBlock.removed";case "dismissed":return "channelBlock.dismissed";case "muted":return "channelBlock.muted";case "blacklisted":return "channelBlock.blacklisted";case "unknown_restricted":return "channelBlock.unknownRestricted"}}function en(e,t=Date.now()){if(e?.channelState===void 0)return "channelBlock.unknownRestricted";let n=ya({channelState:e.channelState,snapshot:e.channelAccessSnapshot,permissions:e.channelPermissions,nowMs:t});return n.channelState==="muted"?n.muteReason==="all-members"?"channelBlock.allMembersMuted":n.muteReason==="current-user"?"channelBlock.currentUserMuted":"channelBlock.muted":n.channelState!=="active"?Ze(n.channelState)||"channelBlock.unknownRestricted":n.permissions.sendMessages?"":"channelBlock.unknownRestricted"}var D=9;function Yn(e={}){let t=typeof navigator<"u"?navigator:void 0,n=e.deviceMemoryGb??(typeof t?.deviceMemory=="number"?t.deviceMemory:4),r=Math.floor(n*1024*1024*1024/8);return Math.min(512*1024*1024,Math.max(64*1024*1024,r))}async function nn(e,t,n={}){if(e.length===0)return {processedCount:0,rejectedByLimit:false};let r=e.length>9;r&&n.onRejectedByLimit?.({reason:"count-limit",maxCount:9,selectedCount:e.length});let o=e.slice(0,9);if(n.startAll)return await Promise.all(o.map(g=>t(g).catch(()=>false))),{processedCount:o.length,rejectedByLimit:r};let a=Yn(n),c=Math.max(1,Math.floor(n.maxConcurrency??Number.POSITIVE_INFINITY)),i=0,l=new Set;for(let g of o){for(;l.size>0&&(l.size>=c||i+g.size>a);)await Promise.race(l);i+=g.size;let f=t(g).catch(()=>false).finally(()=>{i-=g.size,l.delete(f);});l.add(f);}return await Promise.all(l),{processedCount:o.length,rejectedByLimit:r}}async function tn(e){if(await Y(e)!=="not-gif")return "sticker";if(await f(e))return "image";let t=e.type.trim().toLowerCase();return t.startsWith("image/")||/\.(?:jpe?g|png|webp|gif|svgz?|heic|heif|avif|bmp|tiff?|ico|jfif|jxl|psd|dng|raw)$/i.test(e.name)?"unsupported-image":t.startsWith("video/")?"video":"file"}async function Y(e){let t=e.type.trim().toLowerCase(),n=new Uint8Array(await e.slice(0,6).arrayBuffer()),r=n.length===6?String.fromCharCode(...n):"",o=r==="GIF87a"||r==="GIF89a",a=t==="image/gif";return o&&(a||t==="")?"gif":o||a?"invalid-gif":"not-gif"}async function Pe(e){return await Y(e)==="gif"}var Jn=new Set(["group","channel"]),qn=new Set(["group","channel"]),rn=30*1024*1024,Re=200*1024*1024,on=2*1024*1024*1024,Qn=3*1024*1024;function q(e,t,n){let r=e.getConversationHandle();if(!(r===void 0||n===void 0||n==="supergroup"))return r.ref.conversationId===t&&r.ref.conversationType===n?r:void 0}function Q(e,t){return e.retainConversationHandle?.(t)??(()=>{})}function J(e,t){try{return e.getSnapshot().messages.find(n=>n.contentType==="video"?n.body.video?.url===t:n.contentType==="image"?n.body.image?.url===t:n.contentType==="sticker"?n.body.sticker?.url===t:n.contentType==="mediaAlbum"?n.body.mediaAlbum?.items.some(r=>r.url===t)===!0:!1)?.id}catch{return}}function we(e){if(e===void 0)return;let t=e.atAll?[{userId:"0",displayName:""}]:[];for(let n of e.atUserIds)t.push({userId:n,displayName:e.atUsersName?.[n]??n});return t.length===0?void 0:t}function Zn(e){if(e===void 0||e==="active")return "";switch(e){case "left":return "groupBlock.left";case "removed":return "groupBlock.removed";case "dismissed":return "groupBlock.dismissed";default:return "groupBlock.unknownRestricted"}}function no(e){return Jn.has(e)}function et(e){return qn.has(e)}function to(e,t=Date.now()){return e?.type==="channel"?en(e,t):e?.type==="group"?Zn(e.groupState):""}function _(e,t,n,r={}){let o=e.getProductClient();if(o===null)return "";let a=n??o.conversations.list().find(i=>i.ref.conversationId===t)?.ref.conversationType;if(a===void 0||a==="supergroup")return "";let c=o.capabilities.get({conversationType:a,conversationId:t}).value.canSendMessages;return Qe(a,c,r)}async function ro(e,t,n){let r=e.getClient(),o=t.text.trim();if(r===null)return n.setNote(n.t("common.notConnected")),false;if(t.conversationId==="")return n.setNote(n.t("common.selectOrOpenConversation")),false;if(o==="")return false;let a=e.getGeneration();try{let c=t.conversationType;if(c===void 0)return n.setNote(n.t("common.conversationTypeNotReady")),!1;let i=q(n,t.conversationId,c);if(i===void 0)return n.setNote(n.t("common.conversationNotReady")),!1;let l=_(e,t.conversationId,c);if(l!=="")return n.setNote(n.t(l)),!1;let g=Q(n,i);try{let f=await i.messages.sendText(o,{...et(c)?{mentions:we(t.mention)}:{},...t.refMessageId===void 0?{}:{replyToMessageId:t.refMessageId}});return n.refreshActiveMessages(),f.ok?e.getGeneration()===a:(e.getGeneration()===a&&n.setNote(n.t("send.failed",{reason:f.error.code})),!1)}finally{g();}}catch(c){return e.getGeneration()===a&&n.setNote(n.t("send.failed",{reason:c instanceof Error?c.message:String(c)})),false}}async function an(e,t,n){let{kind:r,file:o,conversationId:a,conversationType:c,refMessageId:i}=t,l=n.t(`label.${r}`);if(e.getClient()===null)return n.setNote(n.t("common.notConnected")),false;if(a===""||c===void 0)return n.setNote(n.t("common.conversationNotReady")),false;let f$1=q(n,a,c);if(f$1===void 0)return n.setNote(n.t("common.conversationNotReady")),false;let y=_(e,a,c);if(y!=="")return n.setNote(n.t(y)),false;let u=r==="video"?Re:r==="file"?on:r==="sticker"?Qn:rn;if(o.size>u)return n.pushMediaLimitItem({name:o.name,sizeMb:o.size/1024/1024,label:l,maxMb:Math.round(u/1024/1024)}),n.showWarning?.(n.t("send.mediaTooLarge",{name:o.name,label:l,maxMb:Math.round(u/1024/1024)})),false;let v=e.getGeneration();if(o.size===0)return e.getGeneration()===v&&n.setNote(n.t("send.mediaEmpty",{label:l})),false;if(r==="sticker"&&!await Pe(o))return e.getGeneration()===v&&n.setNote(n.t("send.mediaFormatMismatch",{name:o.name})),false;let C=Q(n,f$1),s;try{if(r==="image"&&!await f(o))return e.getGeneration()===v&&n.setNote(n.t("send.imageFormatUnsupported",{name:o.name})),!1;if(e.getGeneration()!==v)return !1;s=r==="file"?void 0:e.createLocalMediaPreview(o);let d=t.localPreviewMetadata;if(e.getGeneration()!==v)return s!==void 0&&e.discardLocalMediaPreview(s),!1;let m=await(r==="image"?f$1.messages.sendImage(o,{...s===void 0?{}:{localPreviewUrl:s},...d===void 0?{}:{localPreviewMetadata:d},...i===void 0?{}:{replyToMessageId:i}}):r==="video"?f$1.messages.sendVideo(o,{...s===void 0?{}:{localPreviewUrl:s},...d===void 0?{}:{localPreviewMetadata:d},...i===void 0?{}:{replyToMessageId:i}}):r==="sticker"?f$1.messages.sendGif(o,{...s===void 0?{}:{localPreviewUrl:s},...i===void 0?{}:{replyToMessageId:i}}):f$1.messages.sendFile(o,{fileName:o.name,...i===void 0?{}:{replyToMessageId:i}}));if(n.refreshActiveMessages(),!m.ok){if(e.getGeneration()===v&&(m.error.code==="IM_SDK_VIDEO_DURATION_TOO_LONG"?n.showWarning?.(n.t("send.videoTooLong",{name:o.name,maxMinutes:5})):m.error.code==="IM_SDK_VIDEO_DURATION_UNAVAILABLE"?n.showWarning?.(n.t("send.videoDurationUnavailable",{name:o.name})):n.setNote(m.error.code==="IM_SDK_MEDIA_CANCELLED"?n.t("send.mediaCancelled",{label:l}):n.t("send.mediaFailed",{label:l,reason:m.error.code}))),s!==void 0){let h=J(f$1,s);h===void 0?e.discardLocalMediaPreview(s):e.trackLocalMediaPreview({conversationId:a,conversationType:c,messageId:h},s);}return !1}return e.getGeneration()===v}catch(d){if(e.getGeneration()===v&&n.setNote(n.t("send.mediaFailed",{label:l,reason:d instanceof Error?d.message:String(d)})),s!==void 0){let m=J(f$1,s);m===void 0?e.discardLocalMediaPreview(s):e.trackLocalMediaPreview({conversationId:a,conversationType:c,messageId:m},s);}return false}finally{C();}}async function oo(e,t,n){let{kind:r,file:o,messageId:a,conversationId:c,conversationType:i}=t,l=n.t(`label.${r}`);if(e.getClient()===null)return n.setNote(n.t("common.notConnected")),false;let g=q(n,c,i);if(g===void 0)return n.setNote(n.t("common.conversationNotReady")),false;let f=_(e,c,i);if(f!=="")return n.setNote(n.t(f)),false;let y=r==="video"?Re:on;if(o.size>y)return n.pushMediaLimitItem({name:o.name,sizeMb:o.size/1024/1024,label:l,maxMb:Math.round(y/1024/1024)}),n.showWarning?.(n.t("send.mediaTooLarge",{name:o.name,label:l,maxMb:Math.round(y/1024/1024)})),false;let u=e.getGeneration();if(o.size===0)return e.getGeneration()===u&&n.setNote(n.t("send.mediaEmpty",{label:l})),false;let v=Q(n,g),C;try{if(C=r==="video"?e.createLocalMediaPreview(o):void 0,e.getGeneration()!==u)return C!==void 0&&e.discardLocalMediaPreview(C),!1;let s=await(r==="video"?g.messages.replaceInterruptedVideo(a,o,{...C===void 0?{}:{localPreviewUrl:C}}):g.messages.replaceInterruptedFile(a,o,{fileName:o.name}));if(n.refreshActiveMessages(),!s.ok){e.getGeneration()===u&&(s.error.code==="IM_SDK_VIDEO_DURATION_TOO_LONG"?n.showWarning?.(n.t("send.videoTooLong",{name:o.name,maxMinutes:5})):s.error.code==="IM_SDK_VIDEO_DURATION_UNAVAILABLE"?n.showWarning?.(n.t("send.videoDurationUnavailable",{name:o.name})):n.setNote(n.t("send.mediaFailed",{label:l,reason:s.error.code})));let d=C!==void 0&&g.getSnapshot().messages.some(m=>m.id===a&&m.contentType==="video"&&m.body.video?.url===C);return C!==void 0&&!d?e.discardLocalMediaPreview(C):C!==void 0&&e.trackLocalMediaPreview({conversationId:c,conversationType:i,messageId:a},C),!1}return e.getGeneration()===u}catch(s){return e.getGeneration()===u&&n.setNote(n.t("send.mediaFailed",{label:l,reason:s instanceof Error?s.message:String(s)})),C!==void 0&&(J(g,C)===a?e.trackLocalMediaPreview({conversationId:c,conversationType:i,messageId:a},C):e.discardLocalMediaPreview(C)),false}finally{v();}}function nt(e){let t=e.getMediaConfig()?.buckets.voice;return t!==void 0&&t!==""}async function ao(e,t,n){let{payload:r,conversationId:o,conversationType:a,refMessageId:c}=t;if(e.getClient()===null)return n.setNote(n.t("common.notConnected")),false;if(o===""||a===void 0)return n.setNote(n.t("common.conversationNotReady")),false;let l=q(n,o,a);if(l===void 0)return n.setNote(n.t("common.conversationNotReady")),false;let g=_(e,o,a);if(g!=="")return n.setNote(n.t(g)),false;if(r.data.length===0)return n.setNote(n.t("send.voiceEmpty")),false;if(!nt(e))return n.setNote(n.t("send.voiceStorageNotConfigured")),false;let f=e.getGeneration(),y=Q(n,l);try{let u=new File([r.data],r.filename,{type:r.mimeType}),v=await l.messages.sendVoice(u,{durationMs:r.durationMs,waveform:r.waveform,...c===void 0?{}:{replyToMessageId:c}});return n.refreshActiveMessages(),v.ok?e.getGeneration()!==f?!1:(e.putSelfVoiceBytes(v.message.id,r.data),!0):(e.getGeneration()===f&&n.setNote(v.error.code==="IM_SDK_MEDIA_CANCELLED"?n.t("send.voiceCancelled"):n.t("send.voiceFailed",{reason:v.error.code})),!1)}catch(u){return e.getGeneration()===f&&n.setNote(n.t("send.voiceFailed",{reason:u instanceof Error?u.message:String(u)})),false}finally{y();}}var tt=new Set(["IM_SDK_VIDEO_TOO_LARGE","IM_SDK_VIDEO_PREVIEW_METADATA_INVALID","IM_SDK_VIDEO_DURATION_TOO_LONG","IM_SDK_VIDEO_DURATION_UNAVAILABLE"]);async function io(e,t,n){let{caption:r,conversationId:o,conversationType:a,items:c,refMessageId:i}=t;if(e.getClient()===null)return n.setNote(n.t("common.notConnected")),false;if(o===""||a===void 0)return n.setNote(n.t("common.conversationNotReady")),false;let g=q(n,o,a);if(g===void 0)return n.setNote(n.t("common.conversationNotReady")),false;let f$1=_(e,o,a);if(f$1!=="")return n.setNote(n.t(f$1)),false;if(c.length===0)return false;let y=e.getGeneration();for(let s of c){let d=n.t(`label.${s.kind}`),m=s.kind==="video"?Re:rn;if(s.file.size>m)return n.pushMediaLimitItem({name:s.file.name,sizeMb:s.file.size/1024/1024,label:d,maxMb:Math.round(m/1024/1024)}),n.showWarning?.(n.t("send.mediaTooLarge",{name:s.file.name,label:d,maxMb:Math.round(m/1024/1024)})),false;if(s.file.size===0)return n.setNote(n.t("send.mediaEmpty",{label:d})),false}for(let s of c){let d=await Y(s.file);if(s.kind==="image"&&d==="not-gif"&&!await f(s.file))return e.getGeneration()===y&&n.setNote(n.t("send.imageFormatUnsupported",{name:s.file.name})),false;if(d!=="not-gif")return e.getGeneration()!==y||n.showWarning?.(n.t("send.mediaFailed",{label:n.t("label.image"),reason:"IM_SDK_MEDIA_ALBUM_GIF_UNSUPPORTED"})),false}if(e.getGeneration()!==y)return false;let u=Q(n,g),v=c.map(s=>e.createLocalMediaPreview(s.file)),C=s=>{v.forEach((d,m)=>{s===void 0?e.discardLocalMediaPreview(d):e.trackLocalMediaPreview({conversationId:o,conversationType:a,messageId:s,itemIndex:m},d);});};try{if(e.getGeneration()!==y)return C(void 0),!1;let s=await g.messages.sendMediaAlbum(c.map((d,m)=>({kind:d.kind,file:d.file,localPreviewUrl:v[m],...d.localPreviewMetadata===void 0?{}:{localPreviewMetadata:d.localPreviewMetadata}})),{...r===void 0||r.trim()===""?{}:{caption:r},...t.hd===void 0?{}:{hd:t.hd},...i===void 0?{}:{replyToMessageId:i}});if(n.refreshActiveMessages(),!s.ok){if(e.getGeneration()===y){let d=n.t(tt.has(s.error.code)?"label.video":"label.image");n.setNote(s.error.code==="IM_SDK_MEDIA_CANCELLED"?n.t("send.mediaCancelled",{label:d}):n.t("send.mediaFailed",{label:d,reason:s.error.code}));}return C(J(g,v[0])),!1}return e.getGeneration()===y}catch(s){return e.getGeneration()===y&&n.setNote(n.t("send.mediaFailed",{label:n.t("label.image"),reason:s instanceof Error?s.message:String(s)})),C(J(g,v[0])),false}finally{u();}}async function so(e,t,n){let r=t.files.slice(0,9);t.files.length>9&&(n.setMediaBatchLimit({selectedCount:t.files.length,maxCount:9}),n.showWarning?.(n.t("send.mediaCountLimit",{maxCount:9,ignoredCount:t.files.length-9})));let o=e.getGeneration(),a=[];for(let i of r){let l=await tn(i);if(e.getGeneration()!==o)break;if(l==="unsupported-image"){n.setNote(n.t("send.imageFormatUnsupported",{name:i.name})),a.push(Promise.resolve(false));continue}a.push(an(e,{kind:l,file:i,conversationId:t.conversationId,conversationType:t.conversationType,...t.refMessageId===void 0?{}:{refMessageId:t.refMessageId}},n));}let c=await Promise.all(a.map(i=>i.catch(()=>false)));return Object.freeze({selectedCount:t.files.length,processedCount:a.length,acceptedCount:c.filter(Boolean).length,rejectedByLimit:t.files.length>9})}async function co(e,t,n){let r=0,o=await nn(t.files,async a=>{let c=await an(e,{kind:"file",file:a,conversationId:t.conversationId,conversationType:t.conversationType,...t.refMessageId===void 0?{}:{refMessageId:t.refMessageId}},n);return c&&(r+=1),c},{startAll:true,onRejectedByLimit:a=>{n.setMediaBatchLimit({selectedCount:a.selectedCount,maxCount:a.maxCount}),n.showWarning?.(n.t("send.mediaCountLimit",{maxCount:a.maxCount,ignoredCount:a.selectedCount-a.maxCount}));}});return Object.freeze({selectedCount:t.files.length,processedCount:o.processedCount,acceptedCount:r,rejectedByLimit:o.rejectedByLimit})}async function lo(e,t,n){let r=e.getClient(),o=n.getConversationHandle();if(r===null||o===void 0)return n.setNote(n.t("send.cancelFailed")),false;let a=e.getGeneration();try{let c=r.media.getSnapshot().filter(i=>i.direction==="upload"&&i.messageId===t&&i.ref.conversationType===o.ref.conversationType&&i.ref.conversationId===o.ref.conversationId);return c.length!==1?(n.setNote(n.t("send.cancelFailed")),!1):(await r.media.cancel(c[0].id),e.getGeneration()!==a||n.getConversationHandle()!==o?!1:(n.refreshActiveMessages(),!0))}catch{return e.getGeneration()===a&&n.getConversationHandle()===o&&n.setNote(n.t("send.cancelFailed")),false}}async function fo(e,t,n){let r=e.getClient();if(r===null)return false;let o=n.getConversationHandle();if(o===void 0)return n.setNote(n.t("send.retryFailed")),false;let a=e.getGeneration(),c=r.media.getSnapshot().find(l=>l.direction==="upload"&&(l.state==="failed"||l.state==="canceled")&&l.messageId===t&&l.ref.conversationType===o.ref.conversationType&&l.ref.conversationId===o.ref.conversationId);if(c!==void 0)try{return await r.media.retry(c.id),e.getGeneration()!==a?!1:(n.refreshActiveMessages(),!0)}catch{return e.getGeneration()===a&&n.setNote(n.t("send.retryFailed")),false}let i=r.outbox.getSnapshot().find(l=>l.messageId===t);if(i===void 0||i.ref.conversationType!==o.ref.conversationType||i.ref.conversationId!==o.ref.conversationId)return n.setNote(n.t("send.retryFailed")),false;try{return await r.outbox.retry(t),e.getGeneration()!==a?!1:(n.refreshActiveMessages(),!0)}catch{return e.getGeneration()===a&&n.setNote(n.t("send.retryFailed")),false}}var dt={};a(dt,{executeForwardMessages:()=>st,forwardMessages:()=>ct});function rt(e,t){let n=e.getConversationHandle();if(n!==void 0)return t.every(r=>r.conversationType!=="supergroup"&&r.conversationType===n.ref.conversationType&&r.conversationId===n.ref.conversationId)?n:void 0}function ot(e){let t=e?.code;return typeof t=="string"&&t!==""?t:"unknown"}function at(e,t){let n=e;return typeof n?.code=="string"&&typeof n.category=="string"&&typeof n.operation=="string"&&typeof n.retryable=="boolean"?n:Object.freeze({code:"IM_CHAT_KIT_FORWARD_FAILED",category:"state",operation:"message-operations.forward",retryable:false,conversation:Object.freeze({...t.ref}),cause:e})}function it(e,t){return t.every(n=>n.conversationType!=="supergroup"&&n.conversationType===e.ref.conversationType&&n.conversationId===e.ref.conversationId)}async function st(e,t){let n="forward";if(e.getProductClient()===null||e.getConnectionState()!=="authenticated"||t.handle===void 0||!it(t.handle,t.messages))return Object.freeze({ok:false,operation:n,reason:"not-ready"});if(t.messages.length===0||t.targets.length===0)return Object.freeze({ok:false,operation:n,reason:"empty-input"});for(let f of t.targets){let y=_(e,f.conversationId,f.conversationType,{mode:"target"});if(y!=="")return Object.freeze({ok:false,operation:n,reason:"target-blocked",blockReason:y})}let o=t.messages.filter(ra),a=t.messages.length-o.length;if(o.length===0)return Object.freeze({ok:false,operation:n,reason:"all-skipped",skippedCount:a});let c=e.getGeneration(),i;try{i=await t.handle.messages.forward(o.map(f=>f.id),t.targets);}catch(f){return e.getGeneration()!==c?Object.freeze({ok:false,operation:n,reason:"stale"}):Object.freeze({ok:false,operation:n,reason:"sdk-rejected",error:at(f,t.handle)})}if(e.getGeneration()!==c)return Object.freeze({ok:false,operation:n,reason:"stale"});let l=i.sent.length,g=a+i.skippedSourceMessageIds.length;return Object.freeze(l===0?{ok:false,operation:n,reason:i.failed.length>0?"sdk-rejected":"all-skipped",...i.failed[0]===void 0?{}:{error:i.failed[0].error},result:i,skippedCount:g}:{ok:true,operation:n,result:i,sentCount:l,skippedCount:g})}async function ct(e,t,n){if(e.getClient()===null)return n.setNote(n.t("common.notConnected")),null;if(t.messages.length===0||t.targets.length===0)return n.setNote(n.t("forward.emptyInput")),null;let o=rt(n,t.messages);if(o===void 0)return n.setNote(n.t("common.conversationNotReady")),null;for(let y of t.targets){let u=_(e,y.conversationId,y.conversationType,{mode:"target"});if(u!=="")return n.setNote(n.t(u)),null}let a=t.messages.filter(ra),c=t.messages.length-a.length;if(a.length===0)return n.setNote(n.t("forward.allSkipped")),null;let i=e.getGeneration(),l;try{l=await o.messages.forward(a.map(y=>y.id),t.targets);}catch(y){return e.getGeneration()===i&&n.getConversationHandle()===o&&n.setNote(n.t("forward.failed",{reason:ot(y)})),null}if(e.getGeneration()!==i||n.getConversationHandle()!==o)return l;let g=l.sent.length,f=c+l.skippedSourceMessageIds.length;if(g===0){let y=l.failed[0];y!==void 0?n.setNote(n.t("forward.failed",{reason:y.error.code})):f>0?n.setNote(n.t("forward.allSkipped")):n.setNote(n.t("forward.failed",{reason:"unknown"}));}else f>0?n.setNote(n.t("forward.partialSkipped",{skipped:f,ok:g})):n.setNote(n.t("forward.done"));return n.refreshActiveMessages?.(),l}var bt={};a(bt,{deleteChannelMessageForEveryone:()=>Mt,editMessage:()=>xt,executeDeleteChannelMessageForEveryone:()=>vt,executeDeleteLocalMessage:()=>pt,executeRecallMessage:()=>gt,executeRetryMessage:()=>yt,recallMessage:()=>Ct});var lt={IM_SDK_MESSAGE_NOT_FOUND:"recall.not-found",IM_SDK_MESSAGE_STATE_MISMATCH:"recall.not-found",IM_SDK_RECALL_NOT_OWN:"recall.not-own",IM_SDK_RECALL_NOT_SENT:"recall.not-sent",IM_SDK_RECALL_EXPIRED:"recall.expired",IM_SDK_RECALL_UNSUPPORTED:"recall.unsupported",IM_SDK_RECALL_TIMEOUT:"recall.timeout",IM_SDK_RECALL_FAILED:"recall.failed",IM_SDK_RECALL_DISCONNECTED:"recall.disconnected"},ft={IM_SDK_MESSAGE_NOT_FOUND:"edit.not-found",IM_SDK_MESSAGE_STATE_MISMATCH:"edit.not-found",IM_SDK_EDIT_NOT_OWN:"edit.not-own",IM_SDK_EDIT_NOT_SENT:"edit.not-sent",IM_SDK_EDIT_RECALLED:"edit.recalled",IM_SDK_EDIT_DELETED:"edit.deleted",IM_SDK_EDIT_EXPIRED:"edit.expired",IM_SDK_EDIT_UNSUPPORTED:"edit.unsupported",IM_SDK_DIRECT_MENTION_UNSUPPORTED:"edit.unsupported",IM_SDK_EDIT_EMPTY:"edit.empty",IM_SDK_EDIT_RESTRICTED:"edit.restricted",IM_SDK_EDIT_CONTENT_UNSUPPORTED:"edit.unsupported-content",IM_SDK_EDIT_KEY_UNAVAILABLE:"edit.no-key",IM_SDK_EDIT_ENCRYPT_FAILED:"edit.encrypt-failed",IM_SDK_EDIT_TIMEOUT:"edit.timeout",IM_SDK_EDIT_FAILED:"edit.failed",IM_SDK_EDIT_DISCONNECTED:"edit.disconnected"},ut={IM_SDK_MESSAGE_NOT_FOUND:"channelDelete.notFound",IM_SDK_CHANNEL_DELETE_UNSUPPORTED:"channelDelete.unsupported",IM_SDK_CHANNEL_DELETE_NOT_SENT:"channelDelete.notSent",IM_SDK_CHANNEL_DELETE_UNAVAILABLE:"channelDelete.unavailable",IM_SDK_CHANNEL_DELETE_FORBIDDEN:"channelDelete.forbidden",IM_SDK_CHANNEL_DELETE_TIMEOUT:"channelDelete.timeout",IM_SDK_CHANNEL_DELETE_FAILED:"channelDelete.failed",IM_SDK_CHANNEL_DELETE_DISCONNECTED:"channelDelete.disconnected"};function Ae(e,t){let n=e.getConversationHandle();if(!(n===void 0||t.conversationType==="supergroup"))return n.ref.conversationType===t.conversationType&&n.ref.conversationId===t.conversationId?n:void 0}function ke(e){return typeof e?.code=="string"?e.code:void 0}function mt(e){return typeof e=="object"&&e!==null&&typeof e.code=="string"&&typeof e.category=="string"&&typeof e.operation=="string"&&typeof e.retryable=="boolean"}function se(e,t,n){return mt(e)?e:Object.freeze({code:"IM_CHAT_KIT_MESSAGE_OPERATION_FAILED",category:"state",operation:`message-operations.${t}`,retryable:false,...n===void 0?{}:{conversation:Object.freeze({...n.ref})},cause:e})}function _e(e,t){return e!==void 0&&t.conversationType!=="supergroup"&&e.ref.conversationType===t.conversationType&&e.ref.conversationId===t.conversationId}async function gt(e,t){let n="recall";if(!_e(t.handle,t.message))return Object.freeze({ok:false,operation:n,reason:"not-ready"});let r=e.getGeneration();try{await t.handle.messages.recall(t.message.id);}catch(o){return e.getGeneration()!==r?Object.freeze({ok:false,operation:n,reason:"stale"}):Object.freeze({ok:false,operation:n,reason:"sdk-rejected",error:se(o,n,t.handle)})}return e.getGeneration()===r?Object.freeze({ok:true,operation:n}):Object.freeze({ok:false,operation:n,reason:"stale"})}async function pt(e,t){let n="delete-local";if(!_e(t.handle,t.message)||t.handle.ref.conversationType!=="direct"&&t.handle.ref.conversationType!=="group"||t.message.conversationType!=="direct"&&t.message.conversationType!=="group")return Object.freeze({ok:false,operation:n,reason:"not-ready"});let r=e.getGeneration();try{await t.handle.messages.deleteLocal(t.message.id);}catch(o){return e.getGeneration()!==r?Object.freeze({ok:false,operation:n,reason:"stale"}):Object.freeze({ok:false,operation:n,reason:"sdk-rejected",error:se(o,n,t.handle)})}return e.getGeneration()===r?Object.freeze({ok:true,operation:n}):Object.freeze({ok:false,operation:n,reason:"stale"})}async function vt(e,t){let n="delete-for-everyone";if(!_e(t.handle,t.message)||t.handle.ref.conversationType!=="channel"||t.message.conversationType!=="channel")return Object.freeze({ok:false,operation:n,reason:"not-ready"});let r=e.getGeneration();try{await t.handle.messages.deleteForEveryone(t.message.id);}catch(o){return e.getGeneration()!==r?Object.freeze({ok:false,operation:n,reason:"stale"}):Object.freeze({ok:false,operation:n,reason:"sdk-rejected",error:se(o,n,t.handle)})}return e.getGeneration()===r?Object.freeze({ok:true,operation:n}):Object.freeze({ok:false,operation:n,reason:"stale"})}async function yt(e,t){let n="retry",r=e.getProductClient(),o=t.handle;if(r===null||o===void 0)return Object.freeze({ok:false,operation:n,reason:"not-ready"});let a=e.getGeneration();try{let c=r.media.getSnapshot().find(i=>i.direction==="upload"&&(i.state==="failed"||i.state==="canceled")&&i.messageId===t.messageId&&i.ref.conversationType===o.ref.conversationType&&i.ref.conversationId===o.ref.conversationId);if(c!==void 0)await r.media.retry(c.id);else {let i=r.outbox.getSnapshot().find(l=>l.messageId===t.messageId);if(i===void 0||i.ref.conversationType!==o.ref.conversationType||i.ref.conversationId!==o.ref.conversationId)return Object.freeze({ok:!1,operation:n,reason:"not-ready"});await r.outbox.retry(t.messageId);}}catch(c){return e.getGeneration()!==a?Object.freeze({ok:false,operation:n,reason:"stale"}):Object.freeze({ok:false,operation:n,reason:"sdk-rejected",error:se(c,n,o)})}return e.getGeneration()===a?Object.freeze({ok:true,operation:n}):Object.freeze({ok:false,operation:n,reason:"stale"})}async function Ct(e,t,n){let r=Ae(n,t.message);if(r===void 0){n.setNote(n.t("common.conversationNotReady"));return}let o=e.getGeneration();try{await r.messages.recall(t.message.id);}catch(a){if(e.getGeneration()!==o)return;n.setNote(n.t(lt[ke(a)??""]??"recall.failed"));}}async function Mt(e,t,n){let r=Ae(n,t.message);if(r===void 0||r.ref.conversationType!=="channel"||t.message.conversationType!=="channel"){n.setNote(n.t("common.conversationNotReady"));return}let o=e.getGeneration();try{await r.messages.deleteForEveryone(t.message.id);}catch(a){if(e.getGeneration()!==o)return;n.setNote(n.t(ut[ke(a)??""]??"channelDelete.failed"));}}async function xt(e,t,n){let r=Ae(n,t.message);if(r===void 0)return n.setNote(n.t("common.conversationNotReady")),false;let o=e.getGeneration(),a=we(t.mention);try{await r.messages.editText(t.message.id,t.text,{...a===void 0?{}:{mentions:a}});}catch(c){return e.getGeneration()!==o||n.setNote(n.t(ft[ke(c)??""]??"edit.failed")),false}return e.getGeneration()===o}var At={};a(At,{executePinMessage:()=>ht,executeSyncPinnedMessage:()=>Tt,executeUnpinMessage:()=>St,getPinnedMessage:()=>Rt,peekPinnedMessage:()=>wt,pinMessage:()=>Et,syncPinnedMessage:()=>cn,unpinMessage:()=>Pt});function L(e,t){let n=e.getProductClient();return n===null||e.getConnectionState()!=="authenticated"?(t?.setNote(t.t("common.notConnected")),null):n}function It(e){switch(e){case "permission":return "pinned.forbidden";case "network":return "pinned.network";case "contract":return "pinned.contract";case "unsupported":return "pinned.unsupported";default:return "pinned.failed"}}function sn(e){return typeof e=="object"&&e!==null&&typeof e.category=="string"}function Ne(e,t,n){if(sn(e))return e;let r=typeof e?.kind=="string"?e.kind:void 0,o=r==="forbidden"?"permission":r==="network"?"network":r==="unsupported"?"unsupported":r==="contract"?"contract":"state";return Object.freeze({code:"IM_CHAT_KIT_PINNED_MESSAGE_OPERATION_FAILED",category:o,operation:`message-operations.${t}`,retryable:o==="network",conversation:Object.freeze({...n}),cause:e})}async function ht(e,t){let r=L(e);if(r===null||t.message.conversationId!==t.conversation.conversationId||t.message.conversationType!==t.conversation.conversationType)return Object.freeze({ok:false,operation:"pin",reason:"not-ready"});let o=e.getGeneration();try{let a=t.conversation.conversationType==="group"?await r.groups.pinMessage(t.conversation,t.message.id):await r.channels.pinMessage(t.conversation,t.message.id);return e.getGeneration()===o?Object.freeze({ok:!0,operation:"pin",value:a}):Object.freeze({ok:!1,operation:"pin",reason:"stale"})}catch(a){return e.getGeneration()!==o?Object.freeze({ok:false,operation:"pin",reason:"stale"}):Object.freeze({ok:false,operation:"pin",reason:"sdk-rejected",error:Ne(a,"pin",t.conversation)})}}async function St(e,t){let n="unpin",r=L(e);if(r===null)return Object.freeze({ok:false,operation:n,reason:"not-ready"});let o=e.getGeneration();try{return t.conversationType==="group"?await r.groups.unpinMessage(t):await r.channels.unpinMessage(t),e.getGeneration()===o?Object.freeze({ok:!0,operation:n}):Object.freeze({ok:!1,operation:n,reason:"stale"})}catch(a){return e.getGeneration()!==o?Object.freeze({ok:false,operation:n,reason:"stale"}):Object.freeze({ok:false,operation:n,reason:"sdk-rejected",error:Ne(a,n,t)})}}async function Tt(e,t){let n="sync-pin",r=L(e);if(r===null)return Object.freeze({ok:false,operation:n,reason:"not-ready"});let o=e.getGeneration();try{let a=t.conversationType==="group"?await r.groups.getPinnedMessage(t):await r.channels.getPinnedMessage(t);return e.getGeneration()===o?Object.freeze({ok:!0,operation:n,value:a}):Object.freeze({ok:!1,operation:n,reason:"stale"})}catch(a){return e.getGeneration()!==o?Object.freeze({ok:false,operation:n,reason:"stale"}):Object.freeze({ok:false,operation:n,reason:"sdk-rejected",error:Ne(a,n,t)})}}function De(e,t,n,r){if(e.getGeneration()!==t)return;let o=sn(r)?It(r.category):"pinned.failed";n.setNote(n.t(o));}async function Et(e,t,n){let r=L(e,n);if(r===null)return null;let o=e.getGeneration();try{let a=t.conversation.conversationType==="group"?await r.groups.pinMessage(t.conversation,t.message.id):await r.channels.pinMessage(t.conversation,t.message.id);return e.getGeneration()===o?a:null}catch(a){return De(e,o,n,a),null}}async function Pt(e,t,n){let r=L(e,n);if(r===null)return false;let o=e.getGeneration();try{return t.conversationType==="group"?await r.groups.unpinMessage(t):await r.channels.unpinMessage(t),e.getGeneration()===o}catch(a){return De(e,o,n,a),false}}async function Rt(e,t,n){let r=await cn(e,t,n);return r.ok?r.value:null}async function cn(e,t,n){let r=L(e,n);if(r===null)return {ok:false};let o=e.getGeneration();try{let a=t.conversationType==="group"?await r.groups.getPinnedMessage(t):await r.channels.getPinnedMessage(t);return e.getGeneration()===o?{ok:!0,value:a}:{ok:!1}}catch(a){return De(e,o,n,a),{ok:false}}}function wt(e,t){let n=e.getProductClient();return n===null?null:t.conversationType==="group"?n.groups.peekPinnedMessage(t):n.channels.peekPinnedMessage(t)}function Co(e){return e.conversation.conversationType==="channel"&&e.channelProfile?.memberPrivateChatDisabled!==false?"blocked":e.relationship==="friend"?"friend-profile":"friend-contact"}var Vt={};a(Vt,{applyGroupMemberNickname:()=>Lt,applyGroupMemberRename:()=>Gt,applyMemberNames:()=>jt,clearGroupMemberNicknameProjection:()=>Ht,ensureSelfProfile:()=>Bt,prewarmActiveSenders:()=>Ut,prewarmMemberAvatars:()=>Ft,refreshStaleSenders:()=>mn,resolveChannelMembers:()=>Ot,resolveGroupMembers:()=>un,resolveSenderName:()=>Dt});var kt=new WeakMap,_t=new WeakMap,Nt=new WeakMap;function Oe(e,t){let n=e.get(t);return n===void 0&&(n=new Map,e.set(t,n)),n}function ln(e,t){return e===void 0?t===void 0?0:-1:t===void 0?1:e.length!==t.length?e.length>t.length?1:-1:e===t?0:e>t?1:-1}var dn=new WeakMap;function T(e){return (e??"").trim()}function H(e){let t=dn.get(e),n=e.getGeneration();return (t===void 0||t.generation!==n)&&(t={generation:n,groups:new Map},dn.set(e,t)),t}function ce(e,t,n,r={}){let o=H(e).groups.get(t);if(o===void 0||o.size===0)return n;let a={...n};for(let[c,i]of o){let l=n[c];if((i===""?l===void 0:l===i)&&r.reconcile===true){o.delete(c);continue}i===""?delete a[c]:a[c]=i;}return o.size===0&&H(e).groups.delete(t),a}function fn(e,t,n){let r=H(e).groups.get(t);if(r!==void 0){if(n===void 0){H(e).groups.delete(t);return}r.delete(n.trim()),r.size===0&&H(e).groups.delete(t);}}function N(e,t,n,r){e.getDiagnostics().record("warn","chat-kit","profile",t,()=>({...r===void 0?{}:{data:r},error:{message:"\u8D44\u6599\u9884\u70ED\u5931\u8D25",data:n}}));}function Dt(e,t,n){let r=e.getClient(),o=e.getCredentials().userId;if(t===""||t==="system"||t===o||r===null)return Promise.resolve(false);let a=n?.forceRefresh===true,c=Oe(kt,e),i=a?void 0:c.get(t);if(i!==void 0)return i;let l=e.getSenderProfileCache();if(!a&&l[t]!==void 0)return Promise.resolve(true);l[t]===void 0&&e.setSenderProfileCache({...l,[t]:{remark:"",nickname:"",avatar:""}});let g=e.getGeneration(),f=r.contact.getProfile(t,a?{forceRefresh:true}:void 0).then(y=>{if(e.getGeneration()!==g)return false;let u=T(y?.remark),v=T(y?.nickname),C=T(y?.avatar);return (u!==""||v!==""||C!=="")&&e.setSenderProfileCache({...e.getSenderProfileCache(),[t]:{remark:u,nickname:v,avatar:C}}),true}).catch(y=>{if(e.getGeneration()!==g)return false;if(!a){let u={...e.getSenderProfileCache()};delete u[t],e.setSenderProfileCache(u);}return e.getDiagnostics().record("warn","chat-kit","profile","sender-profile-resolve-failed",()=>({data:{userId:t},error:{message:"\u89E3\u6790\u53D1\u9001\u8005\u8D44\u6599\u5931\u8D25",data:y}})),false}).finally(()=>{!a&&c.get(t)===f&&c.delete(t);});return a||c.set(t,f),f}function un(e,t,n){let r=e.getClient();if(t===""||r===null)return Promise.resolve(false);let o=n?.forceRefresh===true,a=Oe(_t,e),c=o?void 0:a.get(t);if(c!==void 0)return c;let i=e.getGroupMemberNames();if(!o&&i[t]!==void 0)return Promise.resolve(true);let l=i[t]!==void 0;l||e.setGroupMemberNames({...i,[t]:{}});let g=e.getGeneration(),f=()=>{if(l||e.getGeneration()!==g)return;let u={...e.getGroupMemberNames()};delete u[t],e.setGroupMemberNames(u);},y=r.group.getMemberNames(t,{forceRefresh:o}).then(u=>e.getGeneration()!==g?false:u===null?(f(),false):(e.setGroupMemberNames({...e.getGroupMemberNames(),[t]:ce(e,t,u,{reconcile:true})}),true)).catch(u=>(f(),e.getGeneration()===g&&N(e,"group-member-name-resolve-failed",u,{groupId:t}),false)).finally(()=>{!o&&a.get(t)===y&&a.delete(t);});return o||a.set(t,y),y}function Ot(e,t,n,r){let o=e.getClient();if(o===null||t===""||r?.isCurrent?.()===false)return Promise.resolve(false);let a=r?.forceRefresh===true,c=e.getChannelMemberProfiles()[t]??{},i=[...new Set(n.map(v=>v.trim()).filter(v=>v!==""&&v!=="system"))].filter(v=>a||c[v]===void 0||c[v].expiresAt<=Date.now());if(i.length===0)return Promise.resolve(true);let l=Oe(Nt,e),g=`${t}:${[...i].sort().join(",")}`,f=a?void 0:l.get(g);if(f!==void 0)return f;let y=e.getGeneration(),u=o.channel.getMembersByIds(t,i,a?{forceRefresh:true}:void 0).then(v=>{if(e.getGeneration()!==y||r?.isCurrent?.()===false)return false;let C=Date.now()+3e5,s={...e.getChannelMemberProfiles()[t]??{}};for(let d of v){let m=s[d.userId];m!==void 0&&ln(d.updateVersion,m.updateVersion)<0||(s[d.userId]={displayName:d.displayName,...d.avatar===void 0?{}:{avatar:d.avatar},role:d.role,...d.updateVersion===void 0?{}:{updateVersion:d.updateVersion},expiresAt:C});}return e.setChannelMemberProfiles({...e.getChannelMemberProfiles(),[t]:s}),true}).catch(v=>(e.getGeneration()===y&&e.getDiagnostics().record("warn","chat-kit","profile","channel-members-resolve-failed",()=>({conversation:{conversationType:"channel",conversationId:t},error:{message:"\u89E3\u6790 CHANNEL \u6210\u5458\u8D44\u6599\u5931\u8D25",data:v}})),false)).finally(()=>{!a&&l.get(g)===u&&l.delete(g);});return a||l.set(g,u),u}function Gt(e,t,n={}){let r=t.body.system;if(t.contentType!=="system"||r?.eventType!=="group_member_renamed")return;let o=new Set((n.preserveUserIds??[]).map(a=>a.trim()).filter(Boolean));for(let a of r.targetUserIds??[]){let c=a.trim();o.has(c)||fn(e,t.conversationId,c);}un(e,t.conversationId,{forceRefresh:true});}function jt(e,t,n){let r={};for(let o of n)o.nickName!==""&&(r[o.userId]=o.nickName);e.setGroupMemberNames({...e.getGroupMemberNames(),[t]:ce(e,t,r)});}function Lt(e,t,n,r){let o=t.trim(),a=n.trim();if(o===""||a==="")return;let c=r.trim(),i=H(e),l=i.groups.get(o)??new Map;l.set(a,c),i.groups.set(o,l);let g=e.getGroupMemberNames()[o];if(g===void 0)return;let f={...g};c===""?delete f[a]:f[a]=c,e.setGroupMemberNames({...e.getGroupMemberNames(),[o]:f});}function Ht(e,t,n={}){let r=t.trim();if(r===""||(fn(e,r),n.clearCachedNames!==true))return;let o=e.getGroupMemberNames();if(o[r]===void 0)return;let a={...o};delete a[r],e.setGroupMemberNames(a);}function Bt(e){let t=e.getClient(),n=e.getCredentials().userId;if(n===""||t===null||e.getSenderProfileCache()[n]!==void 0)return;let r=e.getGeneration();t.contact.getProfile(n).then(o=>{if(o===null||e.getGeneration()!==r)return;let a=T(o.remark),c=T(o.nickname),i=T(o.avatar);(a!==""||c!==""||i!=="")&&e.getSenderProfileCache()[n]===void 0&&e.setSenderProfileCache({...e.getSenderProfileCache(),[n]:{remark:a,nickname:c,avatar:i}});}).catch(o=>{e.getGeneration()===r&&N(e,"self-profile-prefetch-failed",o,{userId:n});});}async function Ft(e,t){let n=e.getClient();if(n===null)return;let r=e.getGeneration(),o=[];for(let a of t){let c=a.userId;e.getSenderProfileCache()[c]===void 0&&o.push((async()=>{let i;try{i=await n.contact.peekProfile(c);}catch(y){e.getGeneration()===r&&N(e,"member-avatar-prefetch-failed",y,{userId:c});return}if(i===null||e.getGeneration()!==r)return;let l=T(i.value.remark),g=T(i.value.nickname),f=T(i.value.avatar);(l!==""||g!==""||f!=="")&&e.getSenderProfileCache()[c]===void 0&&e.setSenderProfileCache({...e.getSenderProfileCache(),[c]:{remark:l,nickname:g,avatar:f}});})());}await Promise.allSettled(o);}async function Ut(e,t,n,r){let o=e.getClient();if(o===null)return;let a=e.getCredentials().userId,c=e.getGeneration(),i=[],l=[],g=false,f=t[0]?.conversationType;f==="group"&&e.getGroupMemberNames()[n]===void 0&&i.push((async()=>{let u;try{u=await o.group.peekMemberNames(n);}catch(v){e.getGeneration()===c&&N(e,"group-member-name-prefetch-failed",v,{groupId:n});return}u===null||e.getGeneration()!==c||(e.getGroupMemberNames()[n]===void 0&&e.setGroupMemberNames({...e.getGroupMemberNames(),[n]:ce(e,n,u.value)}),u.stale&&(g=true));})());let y=[...new Set(t.map(u=>u.senderId).filter(u=>u!==""&&u!=="system"&&u!==a))];f==="channel"&&y.length>0&&i.push((async()=>{let u;try{u=await o.channel.getMembersByIds(n,y);}catch(s){e.getGeneration()===c&&N(e,"channel-member-prefetch-failed",s,{conversation:{conversationType:"channel",conversationId:n}});return}if(e.getGeneration()!==c||r?.isCurrent?.()===false)return;let v=Date.now()+3e5,C={...e.getChannelMemberProfiles()[n]??{}};for(let s of u){let d=C[s.userId];d!==void 0&&ln(s.updateVersion,d.updateVersion)<0||(C[s.userId]={displayName:s.displayName,...s.avatar===void 0?{}:{avatar:s.avatar},role:s.role,...s.updateVersion===void 0?{}:{updateVersion:s.updateVersion},expiresAt:v});}e.setChannelMemberProfiles({...e.getChannelMemberProfiles(),[n]:C});})());for(let u of y)e.getSenderProfileCache()[u]===void 0&&i.push((async()=>{let v;try{v=await o.contact.peekProfile(u);}catch(m){e.getGeneration()===c&&N(e,"sender-profile-prefetch-failed",m,{userId:u});return}if(v===null||e.getGeneration()!==c)return;let C=T(v.value.remark),s=T(v.value.nickname),d=T(v.value.avatar);(C!==""||s!==""||d!=="")&&e.getSenderProfileCache()[u]===void 0&&e.setSenderProfileCache({...e.getSenderProfileCache(),[u]:{remark:C,nickname:s,avatar:d}}),v.stale&&l.push(u);})());await Promise.allSettled(i),e.getGeneration()===c&&mn(e,l,g?n:void 0);}function mn(e,t,n){let r=e.getClient();if(r===null)return;let o=e.getGeneration();n!==void 0&&r.group.getMemberNames(n,{forceRefresh:true}).then(a=>{a!==null&&e.getGeneration()===o&&e.setGroupMemberNames({...e.getGroupMemberNames(),[n]:ce(e,n,a,{reconcile:true})});}).catch(a=>{e.getGeneration()===o&&N(e,"group-member-name-refresh-failed",a,{groupId:n});});for(let a of t)r.contact.getProfile(a,{forceRefresh:true}).then(c=>{if(c===null||e.getGeneration()!==o)return;let i=T(c.remark),l=T(c.nickname),g=T(c.avatar),f=e.getSenderProfileCache()[a];(i!==""||l!==""||g!=="")&&(f===void 0||f.remark!==i||f.nickname!==l||f.avatar!==g)&&e.setSenderProfileCache({...e.getSenderProfileCache(),[a]:{remark:i,nickname:l,avatar:g}});}).catch(c=>{e.getGeneration()===o&&N(e,"sender-profile-refresh-failed",c,{userId:a});});}async function xo(e,t){let n=O(e),r=t.keyword.trim();return G(n,()=>{switch(t.conversation.conversationType){case "direct":return n.inDirect({conversationType:"direct",conversationId:t.conversation.conversationId},r);case "group":return n.inGroup({conversationType:"group",conversationId:t.conversation.conversationId},r);case "channel":return n.inChannel({conversationType:"channel",conversationId:t.conversation.conversationId},r)}})}async function bo(e,t){let n=O(e),r=t.keyword.trim();return G(n,()=>n.texts(t.conversation,r))}function Io(e,t){let n=O(e),r=t.keyword?.trim();return G(n,()=>n.files(t.conversation,r===void 0||r===""?void 0:r))}function ho(e,t){let n=O(e);return G(n,()=>n.images(t.conversation))}function So(e,t){let n=O(e);return G(n,()=>n.videos(t.conversation))}function To(e,t){let n=O(e);return G(n,()=>n.voices(t.conversation))}function Eo(e,t){let n=O(e);return G(n,()=>n.next(t))}function O(e){let t=e.getClient();if(t===null)throw new Error("IM client is not available");return t.search.messages}async function G(e,t){let n=await t();for(let r=0;r<5;r+=1){if(n.items.length>0||n.exhausted||r===4)return {results:n.items,...n.nextPageToken===void 0?{}:{nextPageToken:n.nextPageToken},exhausted:n.exhausted};if(n.nextPageToken===void 0)throw new Error("IM search page is missing nextPageToken");n=await e.next(n.nextPageToken);}throw new Error("Unreachable search pagination state")}export{so as $,Kn as A,bo as Aa,Or as B,Io as Ba,Gr as C,ho as Ca,Te as D,So as Da,Ee as E,To as Ea,Qe as F,Eo as Fa,Fr as G,Ur as H,Vr as I,Ze as J,en as K,D as L,Yn as M,nn as N,tn as O,Y as P,Pe as Q,Zn as R,no as S,et as T,to as U,ro as V,an as W,oo as X,nt as Y,ao as Z,io as _,vn as a,co as aa,yn as b,lo as ba,Cn as c,fo as ca,Mn as d,st as da,ie as e,dt as ea,En as f,gt as fa,Ie as g,pt as ga,Rn as h,vt as ha,$e as i,yt as ia,kn as j,bt as ja,Nn as k,ht as ka,Dn as l,St as la,On as m,Tt as ma,qt as n,wt as na,Qt as o,At as oa,Ln as p,Co as pa,Zt as q,Dt as qa,rr as r,un as ra,Rr as s,Ot as sa,Vn as t,Gt as ta,zn as u,jt as ua,Ar as v,Lt as va,qe as w,Ht as wa,_r as x,Bt as xa,Nr as y,Vt as ya,Dr as z,xo as za};