k2-im 0.1.19 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/sdk.d.ts CHANGED
@@ -40,7 +40,7 @@ interface ConversationDraft$1 {
40
40
  updatedAt: number;
41
41
  }
42
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' | 'unknown';
43
+ type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'call' | 'redPacket' | 'mediaAlbum' | 'unknown';
44
44
  /**
45
45
  * 发送态(客户端态):消息从本地创建到服务端确认的生命周期。
46
46
  * `uploading` 仅媒体消息使用:文件上传阶段(uploading→pending→sending→sent);
@@ -50,7 +50,7 @@ type MessageSendStatus = 'pending' | 'uploading' | 'sending' | 'sent' | 'failed'
50
50
  /** 送达/已读态(服务端态):消息在对端的回执状态。 */
51
51
  type MessageReceipt = 'unread' | 'delivered' | 'read';
52
52
  /** 群系统提示事件类型(结构化语义;UI/i18n 层据此渲染文案,**不在 mapper 写死中文**)。 */
53
- type ImSystemEventType = 'direct_contact_established' | 'direct_contact_required' | 'direct_message_refused' | 'group_info_changed' | 'group_activated' | 'group_member_joined' | 'group_member_invited' | 'group_member_left' | 'group_member_removed' | 'group_master_changed' | 'group_dismissed' | 'group_member_renamed' | 'group_message_pinned' | 'group_message_unpinned' | 'channel_name_changed' | 'channel_avatar_changed' | 'channel_announcement_changed' | 'channel_member_joined' | 'channel_member_invited' | 'channel_member_left' | 'channel_member_removed' | 'channel_owner_transferred' | 'channel_admin_added' | 'channel_admin_removed' | 'channel_dismissed' | 'channel_all_muted' | 'channel_all_unmuted' | 'channel_created' | 'channel_private_chat_disabled' | 'channel_private_chat_enabled' | 'channel_member_renamed' | 'channel_member_muted' | 'channel_member_unmuted' | 'channel_message_pinned' | 'channel_message_unpinned' | 'channel_unknown' | 'red_packet_claimed' | 'red_packet_claimed_thunder' | 'unknown';
53
+ type ImSystemEventType = 'direct_contact_established' | 'direct_contact_required' | 'direct_message_refused' | 'group_info_changed' | 'group_activated' | 'group_member_joined' | 'group_member_invited' | 'group_member_left' | 'group_member_removed' | 'group_master_changed' | 'group_dismissed' | 'group_member_renamed' | 'group_message_pinned' | 'group_message_unpinned' | 'group_call_started' | 'group_call_ended' | 'group_call_missed' | 'channel_name_changed' | 'channel_avatar_changed' | 'channel_announcement_changed' | 'channel_member_joined' | 'channel_member_invited' | 'channel_member_left' | 'channel_member_removed' | 'channel_owner_transferred' | 'channel_admin_added' | 'channel_admin_removed' | 'channel_dismissed' | 'channel_all_muted' | 'channel_all_unmuted' | 'channel_created' | 'channel_private_chat_disabled' | 'channel_private_chat_enabled' | 'channel_member_renamed' | 'channel_member_muted' | 'channel_member_unmuted' | 'channel_message_pinned' | 'channel_message_unpinned' | 'channel_unknown' | 'red_packet_claimed' | 'red_packet_claimed_thunder' | 'unknown';
54
54
  /** 系统提示结构化内容(contentType==='system'):存语义,不把最终中文句子当主数据源(UI/composable 据 eventType + 资料生成文案)。 */
55
55
  interface ImSystemMessageBody {
56
56
  eventType: ImSystemEventType;
@@ -117,6 +117,23 @@ type LastMessageSummary = {
117
117
  } | {
118
118
  kind: 'voice';
119
119
  durationMs?: number;
120
+ }
121
+ /**
122
+ * 媒体合集(contentType 28)。
123
+ *
124
+ * 只给结构化计数与配文,**不在这里拼「2 张照片, 1 个视频」这种文案**——中英文的量词、复数与
125
+ * 连接符各不相同,必须由 im-i18n 按 locale 组装。`caption` 非空时宿主优先显示配文(对齐三端)。
126
+ *
127
+ * `firstItemKind` 是第一项是照片还是视频。有配文时列表显示的是配文,光看计数无法决定该配
128
+ * 照片图标还是视频图标,三端统一按第一项取(对齐 iOS `IMMediaAlbumMessageBody`)。
129
+ * 入站解析后所有项都被丢弃时缺省,宿主据此不显示类型图标。
130
+ */
131
+ | {
132
+ kind: 'mediaAlbum';
133
+ imageCount: number;
134
+ videoCount: number;
135
+ caption?: string;
136
+ firstItemKind?: 'image' | 'video';
120
137
  } | {
121
138
  kind: 'encrypted';
122
139
  } | {
@@ -419,6 +436,59 @@ interface UnknownMessageBody {
419
436
  reason: 'unsupported-content-type' | 'malformed-content';
420
437
  }
421
438
  /** 按 contentType 的结构化内容体。 */
439
+ /**
440
+ * 媒体合集单项:一张图片或一个视频。
441
+ *
442
+ * 对应协议 `content` JSON 里 `items[]` 的一个元素(wire `mediaType` 1=图片 2=视频)。
443
+ * 与 `ImImageBody` / `ImVideoBody` 的区别是它**不是**独立的一条消息——同一条合集消息里的
444
+ * 若干项共享消息级的撤回、已读、引用与转发语义。
445
+ */
446
+ interface ImMediaAlbumItem {
447
+ /** 该项是图片还是视频;由协议 `mediaType` 归一而来,未知取值的项在解析阶段已被丢弃。 */
448
+ kind: 'image' | 'video';
449
+ /** 远端地址。加密项也是这个地址,解密用本项自己的 `teaKey`。 */
450
+ url: string;
451
+ /** 原始像素宽。宫格按它判定朝向,为 0 时宿主用兜底几何。 */
452
+ width: number;
453
+ /** 原始像素高。 */
454
+ height: number;
455
+ /**
456
+ * 视频时长,**毫秒**。
457
+ *
458
+ * 协议 `items[].duration` 本身就是毫秒,这里不做换算——注意这与单视频消息
459
+ * `ImVideoBody.duration`(秒)单位不同,所以刻意用 `durationMs` 命名区分。图片项没有此字段。
460
+ */
461
+ durationMs?: number;
462
+ /** 远端缩略图地址;可能缺省,此时只能用 `thumbData`。 */
463
+ thumbUrl?: string;
464
+ /** 内嵌缩略图/封面 JPEG 字节。加密消息服务端出不了封面,宫格首屏只能靠它。 */
465
+ thumbData?: Uint8Array;
466
+ /** 原文件 MD5。 */
467
+ md5?: string;
468
+ /** 原文件大小(字节)。 */
469
+ size?: number;
470
+ /** 本项的文件解密 TEA key;`fileEncryptType` 为 0/2/3 时必有。 */
471
+ teaKey?: Uint8Array;
472
+ /** 文件加密类型:0=跟随消息 1=不加密 2=前 32 字节 TEA 3=完整 TEA。 */
473
+ fileEncryptType?: number;
474
+ /** 发送方勾选了「原图」。仅作展示角标,不影响下载与解密。 */
475
+ hd?: boolean;
476
+ }
477
+ /**
478
+ * 媒体合集正文(`contentType === 'mediaAlbum'`,协议 28)。
479
+ *
480
+ * 一条消息同时承载一段可选配文和 1–9 个图片/视频项。产品上的「图文消息」就是
481
+ * `items.length === 1 && caption` 非空的情形,所以**分档判断一律看 `items.length`,不要看 contentType**。
482
+ *
483
+ * `items` 为空数组只会出现在入站解析残缺时(所有项的 `mediaType` 都不认识,或都无法解密);
484
+ * 这种正文不可出站——出站编码会显式拒绝,避免把坏消息转发出去。
485
+ */
486
+ interface ImMediaAlbumBody {
487
+ /** 配文;缺省与空串等价,出站不写空串。 */
488
+ caption?: string;
489
+ /** 媒体项,顺序即用户选择顺序(决定宫格 index 与首项朝向)。 */
490
+ items: readonly ImMediaAlbumItem[];
491
+ }
422
492
  interface ImMessageBody {
423
493
  /** P0 文本内容(明文,解密后的结果)。 */
424
494
  text?: string;
@@ -446,6 +516,8 @@ interface ImMessageBody {
446
516
  call?: ImCallRecordBody;
447
517
  /** contentType==='redPacket' 时的红包卡片。 */
448
518
  redPacket?: ImRedPacketBody;
519
+ /** contentType==='mediaAlbum' 时的媒体合集正文(配文 + 1~9 个图片/视频项)。 */
520
+ mediaAlbum?: ImMediaAlbumBody;
449
521
  /** contentType==='unknown' 时的稳定未知正文,不含原始 wire type。 */
450
522
  unknown?: UnknownMessageBody;
451
523
  }
@@ -480,7 +552,7 @@ type ImMessageFailureReason = 'timeout' | 'rejected' | 'encrypt_failed' | 'netwo
480
552
  * 失败**展示语义**码(强类型枚举,非裸串):供 im-i18n 按 locale 渲染失败气泡文案。
481
553
  * 由 `reason` / `SendMediaFailReason` / ACK errcode 穷尽映射而来,与 im-i18n failure catalog 键一一对应(media.* 带 mediaKind 参数)。
482
554
  */
483
- type ImFailureDisplayCode = 'media.empty' | 'media.noCrypto' | 'media.previewFailed' | 'media.encryptFailed' | 'media.uploadFailed' | 'media.cancelled' | 'media.invalidDuration' | 'media.uploadInterrupted' | 'contactRequired' | 'messageRefused' | 'forbiddenOrLeft' | 'contentRejected' | 'groupDismissed' | 'groupUnavailable' | 'channelDismissed' | 'channelMuted' | 'channelNotMember' | 'channelAdminRequired' | 'conversationUnsupported' | 'sendCanceled' | 'sessionLoggedOut' | 'timeout' | 'network' | 'unknown';
555
+ type ImFailureDisplayCode = 'media.empty' | 'media.noCrypto' | 'media.previewFailed' | 'media.encryptFailed' | 'media.uploadFailed' | 'media.cancelled' | 'media.invalidDuration' | 'media.uploadInterrupted' | 'media.contentTooLarge' | 'contactRequired' | 'messageRefused' | 'forbiddenOrLeft' | 'contentRejected' | 'groupDismissed' | 'groupUnavailable' | 'channelDismissed' | 'channelMuted' | 'channelNotMember' | 'channelAdminRequired' | 'conversationUnsupported' | 'sendCanceled' | 'sessionLoggedOut' | 'timeout' | 'network' | 'unknown';
484
556
  interface ImMessageFailure {
485
557
  /** 归一后的错误码(来自 MESChatAck.errcode 或本地失败码,本地码用负值)。 */
486
558
  code: number;
@@ -508,7 +580,12 @@ interface MediaTaskUpdate {
508
580
  direction: 'upload' | 'download';
509
581
  state: 'queued' | 'running' | 'completed' | 'failed' | 'canceled';
510
582
  percent: number;
511
- /** upload 任务子阶段;finalizing 是等待远端 URL 最终确认。 */
583
+ /**
584
+ * upload 任务子阶段。
585
+ *
586
+ * `waiting-upload-slot` 与 `state: 'queued'` 同时出现,表示还没开始传字节(在生成缩略图或在等上传槽位),
587
+ * 此时 percent 恒为 0;`transferring` 正在传字节;`finalizing` 是等待远端 URL 最终确认。
588
+ */
512
589
  phase?: 'waiting-upload-slot' | 'transferring' | 'finalizing';
513
590
  failure?: ImMessageFailure;
514
591
  }
@@ -802,15 +879,25 @@ interface ForwardTarget {
802
879
  conversationId: string;
803
880
  conversationType: ForwardTargetConversationType;
804
881
  }
805
- /** 转发只接收稳定消息身份;编排层必须回 DomainState 重取正文和最新撤回/编辑状态。 */
806
- type ForwardMessageSource = Pick<ImMessage, 'id' | 'conversationId' | 'conversationType'>;
882
+ /**
883
+ * 转发只接收稳定消息身份;编排层必须回 DomainState 重取正文和最新撤回/编辑状态。
884
+ *
885
+ * `itemIndex` 只对媒体合集有意义:带上它表示「把 `body.mediaAlbum.items[itemIndex]` 这一项当成一条
886
+ * 独立的图片/视频消息转发出去」,出站 contentType 是该项自己的 kind(image 或 video),不是源消息的
887
+ * mediaAlbum。不传(默认)就是整条原样转发,行为与该字段出现之前逐字节一致。
888
+ */
889
+ type ForwardMessageSource = Pick<ImMessage, 'id' | 'conversationId' | 'conversationType'> & {
890
+ itemIndex?: number;
891
+ };
807
892
  /** forwardMessages 入参:有序源消息回复(选中序;单条 = length 1)+ 目标列表(1..9)。 */
808
893
  interface ForwardMessagesInput {
809
894
  messages: ForwardMessageSource[];
810
895
  targets: ForwardTarget[];
811
896
  }
812
897
  /** 单条「源消息 × 目标会话」转发结果原因。 */
813
- type ForwardFailReason = 'empty-input' | 'too-many-targets' | 'unsupported-target-type' | 'type-not-allowed' | 'media-not-ready' | 'conversation-blocked' | 'send-failed';
898
+ type ForwardFailReason = 'empty-input' | 'too-many-targets' | 'unsupported-target-type' | 'type-not-allowed' | 'media-not-ready'
899
+ /** 按合集项转发时 `itemIndex` 越界,或该项在最新正文里已经不存在。 */
900
+ | 'album-item-not-found' | 'conversation-blocked' | 'send-failed';
814
901
  /** 单条源消息向一个目标的结果;目标必须携带类型,避免同 id 的 direct/GROUP/CHANNEL 结果碰撞。 */
815
902
  type ForwardItemStatus = {
816
903
  ok: true;
@@ -1311,8 +1398,14 @@ interface ImExpressionEmojiRecent {
1311
1398
  }
1312
1399
  type ImExpressionRecentItem$1 = ImExpressionAsset$1 | ImExpressionEmojiRecent;
1313
1400
 
1314
- /** 会话收藏可展示的内容类型;与 iOS `isSupportCollectionMsgType` 对齐。 */
1315
- type ImSessionFavoriteKind = 'text' | 'image' | 'video' | 'voice' | 'location' | 'file';
1401
+ /**
1402
+ * 会话收藏可展示的内容类型;与 iOS `isSupportCollectionMsgType` 对齐。
1403
+ *
1404
+ * @remarks 这些值与收藏接口的 `content_type` 数值一一对应,而那个数值就是消息自己的 contentType
1405
+ * (1=文本 2=图片 3=视频 4=语音 5=位置 11=文件 **28=媒体合集**),不是另一套收藏专用枚举。
1406
+ * Android `MessageCollectExecute` 直接写 `message.getContentType()`,iOS 写 `msg.msgType`,两端一致。
1407
+ */
1408
+ type ImSessionFavoriteKind = 'text' | 'image' | 'video' | 'voice' | 'location' | 'file' | 'mediaAlbum';
1316
1409
  /** 服务端一条会话收藏快照;列表以 HTTP 为准,不回写原消息。 */
1317
1410
  interface ImSessionFavoriteItem$1 {
1318
1411
  readonly collectId: string;
@@ -1572,6 +1665,35 @@ type ImEvent = {
1572
1665
  };
1573
1666
  type ImEventListener = (event: ImEvent) => void;
1574
1667
 
1668
+ /** caption 长度上限,对齐 iOS 与旧 Web H5 的 1024。 */
1669
+ declare const MEDIA_ALBUM_CAPTION_MAX_LENGTH = 1024;
1670
+ /** 单条合集最多的项数,三端一致(Android CHOOSE_MAX_COUNT / iOS photoMaxNum / 旧 H5 MAX_COUNT)。 */
1671
+ declare const MEDIA_ALBUM_MAX_ITEMS = 9;
1672
+ /**
1673
+ * 预判一次媒体合集发送最终会建出哪种气泡。
1674
+ *
1675
+ * 发送编排按 R2/R3(与 Android、旧 Web H5 逐字一致)对「**恰好 1 项且没有配文**」**不发 28**,
1676
+ * 而是回落成普通图片 / 视频消息;纯空白配文等同于没有配文(对齐 Android `shouldUseMediaAlbum` 的 trim 判空)。
1677
+ * `hd` 不影响这个判定——回落路径上它本来就会丢掉,单图/单视频正文里没有这个字段。
1678
+ *
1679
+ * **为什么要对外暴露**:宿主判断「SDK 已受理」的时刻是乐观气泡落库,而不是发送 promise resolve
1680
+ * (后者要等所有项上传完并入 Outbox)。宿主要认出那条气泡就必须能预判它的 contentType,
1681
+ * 否则「只选 1 张图、不写配文」这一档永远等不到自己要找的 `mediaAlbum` 气泡。
1682
+ * **不要在宿主里重写这条规则**:它是协议侧的三端约定,写两份必然漂。
1683
+ *
1684
+ * 只覆盖**首次发送**。重发走的是已经成型的合集上下文,不会在中途改变消息类型。
1685
+ *
1686
+ * @param input.items 合集项;只读项数与首项的 `kind`。
1687
+ * @param input.caption 配文;`undefined` 与纯空白都算没有配文。
1688
+ * @returns 首次发送会建出的气泡 contentType。
1689
+ */
1690
+ declare function resolveMediaAlbumSendContentType(input: {
1691
+ items: readonly {
1692
+ kind: 'image' | 'video';
1693
+ }[];
1694
+ caption?: string;
1695
+ }): 'mediaAlbum' | 'image' | 'video';
1696
+
1575
1697
  /** 文本搜索命中的原文 UTF-16 区间;可直接用于 JavaScript `slice(start, end)`。 */
1576
1698
  interface ImTextSearchRange {
1577
1699
  start: number;
@@ -1843,6 +1965,10 @@ type ForwardCandidateMessage = ForwardContentCandidate & Pick<ImMessage, 'encryp
1843
1965
  /**
1844
1966
  * 多选转发时是否需要先提示用户“剔除后继续”。
1845
1967
  * 覆盖语音、所有显式 unknown 与解密失败;原始 wire 类型不进入产品判定。
1968
+ *
1969
+ * 点名的都是**根本转不出去**的类型(语音、通话记录、unknown 都没有注册转发策略),提示的含义是
1970
+ * “这几条会被剔除”。已注册策略的类型一律不在此列——**媒体合集也不在**:它和图片/视频一样整条正文
1971
+ * 克隆、不重新上传,把它加进来会对一条能完整转发的消息发出假警告。
1846
1972
  */
1847
1973
  declare function requiresForwardTypeConfirmation(message: ForwardCandidateMessage): boolean;
1848
1974
  /**
@@ -1904,6 +2030,66 @@ interface ReactionParentMessage {
1904
2030
  */
1905
2031
  declare function canReactToMessage(message: ReactionParentMessage): boolean;
1906
2032
 
2033
+ /** 浏览器 PushSubscription.toJSON() 的可移植数据;不依赖 DOM 或浏览器全局。 */
2034
+ interface ImWebPushSubscription {
2035
+ endpoint?: string;
2036
+ expirationTime?: number | null;
2037
+ keys?: Record<string, string>;
2038
+ }
2039
+ /** 状态不包含 endpoint、加密密钥或登录凭据,可安全用于设置页。 */
2040
+ interface ImPushSnapshot {
2041
+ status: 'idle' | 'pending' | 'syncing' | 'synced' | 'unconfirmed' | 'error' | 'disposed';
2042
+ error?: 'timeout' | 'invalid-ack' | 'server-rejected' | 'send-failed';
2043
+ /** unconfirmed 表示已收到旧后端默认错误码 ACK,不能据此证明绑定成功或失败。 */
2044
+ serverCode?: number;
2045
+ /** 超时等失败后等下一条连接恢复;不主动反复重报或制造重连。 */
2046
+ requiresReconnect?: boolean;
2047
+ }
2048
+ /**
2049
+ * 当前账号的推送绑定。浏览器授权、订阅和取消订阅由宿主拥有。
2050
+ * setWebSubscription 只提交同步意图;只有 snapshot.status === 'synced' 表示收到服务端成功 ACK。
2051
+ */
2052
+ interface ImPushApi {
2053
+ /** 必须携带创建订阅时的账号,防止异步结果被交给另一个账号。离线时保留最新意图。 */
2054
+ setWebSubscription: (input: {
2055
+ userId: string;
2056
+ subscription: ImWebPushSubscription;
2057
+ }) => void;
2058
+ /** 停止本地同步并释放订阅数据;不宣称服务端解绑,宿主仍须调用 PushSubscription.unsubscribe()。 */
2059
+ clear: () => void;
2060
+ snapshot: () => ImPushSnapshot;
2061
+ /** 立即提供快照,返回退订函数;监听器的异常经宿主错误端口报告。 */
2062
+ subscribe: (listener: (snapshot: ImPushSnapshot) => void) => () => void;
2063
+ }
2064
+
2065
+ /** 收藏快照里的合集项;与写出的 wire `items[]` 互为读写。 */
2066
+ interface ImSessionFavoriteAlbumItem {
2067
+ readonly kind: 'image' | 'video';
2068
+ readonly width: number;
2069
+ readonly height: number;
2070
+ readonly url: string;
2071
+ readonly thumbUrl: string;
2072
+ readonly thumbDataUrl: string;
2073
+ readonly durationMs: number;
2074
+ readonly hd: boolean;
2075
+ }
2076
+ /**
2077
+ * 合集项封面:内嵌 thumbData → 明文 thumbUrl。
2078
+ * 远端 `url` 在加密会话里是密文对象,不能当 `<img src>`。
2079
+ */
2080
+ declare function resolveSessionFavoriteAlbumItemPreviewUrl(item: ImSessionFavoriteAlbumItem): string;
2081
+ /**
2082
+ * 从收藏快照 `body.items` 读出合集项。
2083
+ *
2084
+ * `mediaType === 2` 是视频(Android / iOS / 出站同一套);其余完整项按图片。
2085
+ * 非对象、以及既没有远端地址也没有可展示封面的残缺项丢掉,不补默认图。
2086
+ */
2087
+ declare function parseSessionFavoriteAlbumItems(body: Readonly<Record<string, unknown>>): readonly ImSessionFavoriteAlbumItem[];
2088
+ /**
2089
+ * 合集收藏配文。列表映射已经把 `caption` 写进 `item.text`。
2090
+ */
2091
+ declare function resolveSessionFavoriteAlbumCaption(item: Pick<ImSessionFavoriteItem$1, 'kind' | 'text' | 'body'>): string;
2092
+
1907
2093
  /**
1908
2094
  * 在宿主显式授权时迁移旧 `cache.prefix` 下的当前账号本地数据。
1909
2095
  * 迁移使用新旧 namespace factory 精确定位,不扫描未知库,也不自动删除源数据;失败必须由调用方处理。
@@ -2059,9 +2245,19 @@ interface MediaTransferAdapterConfig {
2059
2245
  rangeDownload?: boolean;
2060
2246
  /**
2061
2247
  * 媒体发送阶段的并发上限;由 im-core 消费,adapter 本身仍只负责单个上传任务。
2062
- * 缺省为 4,允许 1-6;高并发会提高吞吐,也会增加文件加密的内存峰值。
2248
+ *
2249
+ * 并发按媒体体积分两档:图片与不超过分片阈值(16 MiB)的小文件走单次 PutObject、不占分片缓冲,
2250
+ * 缺省 5;视频与超过阈值(或字节数未知)的文件走分片,每路各带分片缓冲,缺省 3。
2251
+ * 两档都只接受 1-6 的整数,超出范围由 core 显式报错。
2252
+ * - 传一个数字:所有媒体共用这一个并发数,与分档前的语义一致。
2253
+ * - 传 `{ total, largeFiles }`:显式分档,`largeFiles` 不得超过 `total`。
2063
2254
  */
2064
- maxConcurrentUploads?: number;
2255
+ maxConcurrentUploads?: number | {
2256
+ /** 在途上传总数上限(两档合计);缺省 5。 */
2257
+ total?: number;
2258
+ /** 其中大文件档的上限(视频、超过分片阈值或字节数未知的内容);缺省 min(3, total)。 */
2259
+ largeFiles?: number;
2260
+ };
2065
2261
  }
2066
2262
 
2067
2263
  /**
@@ -2223,7 +2419,10 @@ interface VoiceRecordingSession {
2223
2419
  resume: () => Promise<void>;
2224
2420
  /** 定稿:落地当前段(如在录)→ 拼接全部 PCM → Speex/Ogg 编码。会话随之关闭。 */
2225
2421
  finish: () => Promise<VoiceRecordingResult>;
2226
- /** 取消:丢弃全部段落,释放麦克风。幂等。 */
2422
+ /**
2423
+ * 取消:丢弃全部段落,释放麦克风。幂等。
2424
+ * 定稿失败或定稿超时之后仍可调用,用来确保麦克风被收回。
2425
+ */
2227
2426
  cancel: () => void;
2228
2427
  /** 试听:已落地 PCM 拼接为 WAV(暂停态调用;录制态请先 pause)。 */
2229
2428
  previewWav: () => Promise<VoicePreviewWav>;
@@ -2355,12 +2554,16 @@ interface ImMessageReactions {
2355
2554
  aggregates: readonly ImMessageReactionAggregate[];
2356
2555
  }
2357
2556
  /** 可渲染媒体正文;密钥和底层文件加密策略只允许留在 SDK/Core。 */
2358
- interface ImMessageViewBody extends Omit<ImMessageBody, 'image' | 'video' | 'voice' | 'file' | 'sticker'> {
2557
+ interface ImMessageViewBody extends Omit<ImMessageBody, 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'mediaAlbum'> {
2359
2558
  image?: Readonly<Omit<NonNullable<ImMessageBody['image']>, 'teaKey' | 'fileEncryptType'>>;
2360
2559
  video?: Readonly<Omit<NonNullable<ImMessageBody['video']>, 'teaKey' | 'fileEncryptType'>>;
2361
2560
  voice?: Readonly<Omit<NonNullable<ImMessageBody['voice']>, 'teaKey' | 'fileEncryptType'>>;
2362
2561
  file?: Readonly<Omit<NonNullable<ImMessageBody['file']>, 'teaKey' | 'fileEncryptType'>>;
2363
2562
  sticker?: Readonly<NonNullable<ImMessageBody['sticker']>>;
2563
+ /** 合集的每一项都带自己的密钥材料,逐项剥离后才交给产品层;按项下载走 SDK handle,不需要这些字段。 */
2564
+ mediaAlbum?: Readonly<Omit<NonNullable<ImMessageBody['mediaAlbum']>, 'items'> & {
2565
+ items: readonly Readonly<Omit<ImMediaAlbumItem, 'teaKey' | 'fileEncryptType'>>[];
2566
+ }>;
2364
2567
  }
2365
2568
  /**
2366
2569
  * 官方 Chat Kit 与宿主消息线程使用的完整稳定消息 DTO。
@@ -2436,6 +2639,44 @@ interface MiniProgramMessageOptions {
2436
2639
  interface TransferMessageOptions {
2437
2640
  replyToMessageId?: string;
2438
2641
  }
2642
+ /**
2643
+ * 媒体合集里的一项:一张图片或一个视频。
2644
+ *
2645
+ * @remarks `kind` 由**调用方**按 MIME 分类,SDK 不嗅探文件内容——宿主的文件选择器本来就要按类型分流
2646
+ * (GIF 得走 `sendGif`),再让 SDK 猜一次只会多一处口径不一致。
2647
+ */
2648
+ interface MediaAlbumItemInput {
2649
+ /** 这一项是图片还是视频。 */
2650
+ kind: 'image' | 'video';
2651
+ /** 原文件;`File` 可直接传,`Blob` 需调用方保证 `type` 可判定。 */
2652
+ file: File | Blob;
2653
+ /** 宿主创建的本地 object URL,仅供上传中的宫格显示这一格;URL 释放由宿主生命周期负责。 */
2654
+ localPreviewUrl?: string;
2655
+ /**
2656
+ * 这一项的本地宽高(视频再带时长与首帧)。
2657
+ *
2658
+ * 不传时 SDK 会自己读一次(与单图/单视频同一条预览路径)。宫格的格子几何按原始宽高算,
2659
+ * 缺了它整条消息的格子比例会在上传完成时跳变。
2660
+ */
2661
+ localPreviewMetadata?: ImagePreviewMetadata | VideoPreviewMetadata;
2662
+ }
2663
+ /**
2664
+ * 媒体合集发送选项。
2665
+ *
2666
+ * @remarks 恰好 1 项且没有配文时,SDK 内部会回落成普通图片/视频消息(与 Android / iOS / 旧 H5 一致),
2667
+ * 此时返回的仍是同样的 `SendMessageResult`,调用方不需要区分。
2668
+ */
2669
+ interface MediaAlbumMessageOptions {
2670
+ /** 配文,最长 1024 字符;纯空白等同于没有配文。超长由 SDK 明确拒绝,**不静默截断**。 */
2671
+ caption?: string;
2672
+ replyToMessageId?: string;
2673
+ /**
2674
+ * 发送方勾选了「原图」,写进每一项的 `hd` 标记。
2675
+ *
2676
+ * 本期不做任何图片/视频压缩,勾与不勾都发原文件,这个字段只让接收端显示「原图」角标。
2677
+ */
2678
+ hd?: boolean;
2679
+ }
2439
2680
  /**
2440
2681
  * 本地视频的固有尺寸、时长与首帧封面。
2441
2682
  *
@@ -3530,6 +3771,22 @@ type ConversationLastMessageSummary = {
3530
3771
  } | {
3531
3772
  kind: 'voice';
3532
3773
  durationMs?: number;
3774
+ }
3775
+ /**
3776
+ * 媒体合集(一条消息内 1~9 个图片/视频 + 可选配文)。
3777
+ *
3778
+ * 只给计数与配文,数量文案由宿主经 im-i18n 按 locale 组装;有配文时优先显示配文。
3779
+ * 两个计数都为 0 表示入站正文残缺(所有项都无法解析),宿主应按未知正文处理。
3780
+ *
3781
+ * `firstItemKind` 是第一项是照片还是视频。有配文时列表显示的是配文,光看计数决定不了该配
3782
+ * 照片图标还是视频图标,三端统一按第一项取;正文残缺时缺省,宿主据此不显示类型图标。
3783
+ */
3784
+ | {
3785
+ kind: 'mediaAlbum';
3786
+ imageCount: number;
3787
+ videoCount: number;
3788
+ caption?: string;
3789
+ firstItemKind?: 'image' | 'video';
3533
3790
  } | {
3534
3791
  kind: 'encrypted';
3535
3792
  } | {
@@ -3982,6 +4239,16 @@ interface ConversationMessageApi {
3982
4239
  sendFile: (file: File | Blob, options?: FileMessageOptions) => Promise<SendMessageResult>;
3983
4240
  /** 发送 GIF 贴图;原文件明文上传 sticker bucket,消息固定 EXPRESSION/LINK/GIF。 */
3984
4241
  sendGif: (file: File | Blob, options?: GifMessageOptions) => Promise<SendMessageResult>;
4242
+ /**
4243
+ * 发送媒体合集:1~9 个图片/视频合成**一条**消息,可带一段配文。
4244
+ *
4245
+ * @remarks 全部项上传成功才发出;任一项失败整条失败,不发半条消息。恰好 1 项且没有配文时
4246
+ * SDK 内部回落成普通图片/视频消息(三端一致)。**校验是整条的**——某一项超限会拒绝整条,
4247
+ * 因为协议上它就是一条消息,没有「发一半」这种状态。
4248
+ *
4249
+ * GIF 不能进合集(三端一致),调用方要先按 MIME 把它拆出去走 `sendGif`。
4250
+ */
4251
+ sendMediaAlbum: (items: readonly MediaAlbumItemInput[], options?: MediaAlbumMessageOptions) => Promise<SendMessageResult>;
3985
4252
  /** 发送已经托管在远端的静态贴图;资源和贴图包身份均为必填合同。 */
3986
4253
  sendSticker: (asset: ImStickerAssetInput, options?: ExpressionMessageOptions) => Promise<SendMessageResult>;
3987
4254
  /** 发送已经托管在远端的 GIF;Giphy 没有 package identity,输入不得提供 packageId。 */
@@ -4062,6 +4329,43 @@ interface ConversationMessageApi {
4062
4329
  * ```
4063
4330
  */
4064
4331
  forward: (messageIds: readonly string[], targets: readonly ConversationRef<ProductHandleConversationType>[]) => Promise<ForwardMessagesResult>;
4332
+ /**
4333
+ * 把媒体合集里的第 `itemIndex` 项,当成**一条独立的图片或视频消息**转发到多个目标会话。
4334
+ *
4335
+ * 用途:全屏预览里点转发时,用户要转的是当前正在看的这一格,而不是整条合集。
4336
+ *
4337
+ * @remarks
4338
+ * 与 `forward` 的区别是产出的消息类型变了(合集 → 图片/视频),所以是独立方法而不是给 `forward`
4339
+ * 放宽入参。与 `forward` 相同的是:复用该项已有的远端地址与解密 key,**不重新上传**;目标会话仍由
4340
+ * direct/GROUP/CHANNEL 各自的 SendStrategy 组帧入 Outbox。
4341
+ *
4342
+ * 视频项在合集里的时长是毫秒,转成单视频消息时 SDK 会换算成协议要求的秒,调用方不需要处理。
4343
+ * 合集项上的「原图」角标与远端缩略图地址不会带到单媒体消息上——单图/单视频正文没有这两个字段。
4344
+ *
4345
+ * 三种情况进 `failed`:源消息不是媒体合集(`IM_SDK_FORWARD_CONTENT_UNSUPPORTED`)、
4346
+ * `itemIndex` 越界或该项已不存在(`IM_SDK_MEDIA_ALBUM_ITEM_INVALID`)、该项还没有可复用的远端地址
4347
+ * (还在上传或入站残缺,`IM_SDK_FORWARD_MEDIA_NOT_READY`,可重试)。
4348
+ *
4349
+ * **还有一类结果三个数组会全空**:源消息已撤回、已被双删、解密失败、在本地已经查不到,
4350
+ * 或它的类型本身就不可转发时,这条消息在预检阶段就被剔除,只出现在 `skippedSourceMessageIds` 里。
4351
+ * 这与 `forward` 的批量语义一致(批量转发本来就要把不可转的源剔掉再发其余的),
4352
+ * 但单条调用时它意味着**什么都没发出去**。所以调用方判成功要看 `sent`,
4353
+ * 不要只判 `failed.length > 0`——那样在「预览期间原消息被撤回」这种竞态下会既不发送也不提示。
4354
+ *
4355
+ * @param messageId 当前 handle 中的合集消息 id。
4356
+ * @param itemIndex 宫格里的项下标,从 0 起;必须是非负整数。
4357
+ * @param targets 目标会话,最多 9 个。
4358
+ * @example
4359
+ * ```ts
4360
+ * const result = await handle.messages.forwardMediaAlbumItem('message-42', 2, [
4361
+ * { conversationType: 'direct', conversationId: '1001' },
4362
+ * ])
4363
+ * // 一条都没发出去就要提示:失败原因在 failed 里,源消息被剔除时 failed 也是空的。
4364
+ * if (result.sent.length === 0)
4365
+ * showError(result.failed[0]?.error.code ?? 'IM_SDK_FORWARD_CONTENT_UNSUPPORTED')
4366
+ * ```
4367
+ */
4368
+ forwardMediaAlbumItem: (messageId: string, itemIndex: number, targets: readonly ConversationRef<ProductHandleConversationType>[]) => Promise<ForwardMessagesResult>;
4065
4369
  /**
4066
4370
  * 按 id 向服务端取回本地没有的消息,并回填进本地历史。
4067
4371
  *
@@ -4280,6 +4584,14 @@ interface ImMessageRef {
4280
4584
  conversation: ConversationRef<ProductHandleConversationType>;
4281
4585
  /** 当前会话内的稳定消息 id。 */
4282
4586
  messageId: string;
4587
+ /**
4588
+ * 媒体合集里的第几项(从 0 起)。
4589
+ *
4590
+ * **只有合集消息需要它,也只有合集消息接受它**:一条合集是一条消息、多个文件,光靠 messageId
4591
+ * 指不到具体某一项。给单媒体消息传这个字段会被显式拒绝,而不是忽略——忽略的话调用方以为自己
4592
+ * 在下载第 3 项,实际拿到的是整条消息的唯一媒体。
4593
+ */
4594
+ itemIndex?: number;
4283
4595
  }
4284
4596
  /**
4285
4597
  * 可观察媒体上传/下载任务的只读产品投影。
@@ -4294,13 +4606,27 @@ interface ImMediaTask {
4294
4606
  messageId: string;
4295
4607
  /** 关联消息的精确会话 sibling。 */
4296
4608
  ref: ConversationRef<ProductHandleConversationType>;
4609
+ /**
4610
+ * 媒体合集的项下标;单媒体消息与全部上传任务为 undefined。
4611
+ *
4612
+ * 一条合集的多项共用同一个 messageId,各自是独立的下载任务。调用方按 messageId 找任务时
4613
+ * 必须连这个字段一起比,否则并发下载两项时会把另一项的进度读成自己的。
4614
+ * 上传任务不带下标:一条合集整体只有一条上传进度(所有项都传完才算这条消息发出去)。
4615
+ */
4616
+ itemIndex?: number;
4297
4617
  /** upload 来自发送链路,download 来自本产品 API。 */
4298
4618
  direction: 'upload' | 'download';
4299
4619
  /** 终态 completed/failed/canceled 不会被同一尝试的迟到 progress 回退。 */
4300
4620
  state: 'queued' | 'running' | 'completed' | 'failed' | 'canceled';
4301
4621
  /** 0-100 的归一化整数。 */
4302
4622
  percent: number;
4303
- /** upload 子阶段;finalizing 为等待对象存储确认。 */
4623
+ /**
4624
+ * upload 子阶段。
4625
+ *
4626
+ * `waiting-upload-slot` 与 `state: 'queued'` 同时出现,表示这条媒体还没开始传字节(在生成缩略图或在
4627
+ * 等上传槽位),此时 `percent` 恒为 0——宿主应显示「等待中」而不是把 0 当成停住的进度。
4628
+ * `transferring` 是正在传字节,`finalizing` 是字节已传完、在等对象存储确认。
4629
+ */
4304
4630
  phase?: 'waiting-upload-slot' | 'transferring' | 'finalizing';
4305
4631
  /** 可供产品按 code/category 决策的稳定错误;不含底层 URL、密钥或响应正文。 */
4306
4632
  error?: ImSdkErrorShape;
@@ -4356,6 +4682,31 @@ interface ImMediaTasksApi {
4356
4682
  * @throws 持久缓存读取失败时抛 `IM_SDK_MEDIA_CACHE_READ_FAILED`,不能把存储故障伪装成 cache miss。
4357
4683
  */
4358
4684
  getCached: (message: ImMessageRef) => Promise<Blob | null>;
4685
+ /**
4686
+ * 为宿主手里的**本地**图片/视频文件预读展示元信息:尺寸、视频时长、视频首帧封面的 JPEG 字节。
4687
+ *
4688
+ * 给「发送前预览」这类场景用:宿主要在用户还没点发送时就把缩略图画出来,而浏览器读不出视频的
4689
+ * 首帧——`<video preload="metadata">` 在 iOS Safari 上只加载元信息、**不解码任何一帧**,
4690
+ * 拿它当缩略图会得到一个空白格子(还会白占一路解码)。
4691
+ *
4692
+ * 返回的对象可以**原样**作为 `localPreviewMetadata` 交给 `sendImage` / `sendVideo` /
4693
+ * `sendMediaAlbum`:发送链路会跳过重复解码,上传中的气泡也从第一帧就有封面。
4694
+ * 视频封面用的就是发送链路那套规格(长边 320、JPEG),所以弹层里看到的与最终发出去的是同一张。
4695
+ *
4696
+ * @param input.kind 按文件类型选解码路径;`'video'` 才会抽首帧与读时长。
4697
+ * @param input.file 本地文件;不会被上传,也不会进任何缓存。
4698
+ * @param input.signal 宿主放弃时中止解码(例如预览弹层被关掉)。
4699
+ * @returns 解码成功返回元信息;**浏览器确实读不出这个文件**(格式不支持、解码超时)时返回 `null`,
4700
+ * 调用方应当显式呈现「这个文件读不出来」,不要拿空白格子糊过去。失败原因会记入 SDK 结构化诊断。
4701
+ * @throws 宿主通过 `signal` 中止时抛 `AbortError`——那是调用方自己的取消,不能和「读不出来」混为一谈。
4702
+ * @throws runtime 已 logout/dispose 时抛 `IM_SDK_MEDIA_RUNTIME_INACTIVE`;
4703
+ * 未装配预览端口时抛 `IM_SDK_MEDIA_PREVIEW_UNAVAILABLE`,不静默返回 `null`。
4704
+ */
4705
+ prepareLocalPreview: <TKind extends 'image' | 'video'>(input: {
4706
+ kind: TKind;
4707
+ file: Blob;
4708
+ signal?: AbortSignal;
4709
+ }) => Promise<(TKind extends 'video' ? VideoPreviewMetadata : ImagePreviewMetadata) | null>;
4359
4710
  }
4360
4711
 
4361
4712
  /**
@@ -4804,14 +5155,8 @@ interface ImSearchApi {
4804
5155
  readonly messages: ImMessageSearchApi;
4805
5156
  }
4806
5157
 
4807
- /**
4808
- * 会话收藏稳定产品门面。
4809
- *
4810
- * 本模块不缓存服务端列表;每次 list/add/delete 都以当前账号 provider 为准。
4811
- * 收藏快照与原聊天消息解耦:原消息删除、撤回或编辑不会回写收藏。
4812
- */
4813
-
4814
5158
  type ImSessionFavoriteItem = Readonly<ImSessionFavoriteItem$1>;
5159
+
4815
5160
  /** 产品层会话收藏 API。 */
4816
5161
  interface ImSessionFavoritesApi {
4817
5162
  list: () => Promise<readonly ImSessionFavoriteItem[]>;
@@ -4822,7 +5167,13 @@ interface ImSessionFavoritesApi {
4822
5167
  }) => Promise<ImSessionFavoriteItem>;
4823
5168
  delete: (collectIds: readonly string[]) => Promise<void>;
4824
5169
  }
4825
- /** 对齐 iOS Cell:文本 / 图 / 视频 / 语音 / 文件可收藏;表情、名片、通话等不可。 */
5170
+ /**
5171
+ * 对齐 iOS Cell:文本 / 图 / 视频 / 语音 / 文件 / 媒体合集可收藏;表情、名片、通话等不可。
5172
+ *
5173
+ * 两端的收藏类型判定都是**黑名单**(iOS `isSupportCollectionMsgType` 排除名片/通话/表情/游戏/未知;
5174
+ * Android `isCanCollectByType` 排除通话/表情/名片/未知/解密失败),媒体合集不在黑名单里,
5175
+ * 收藏接口的 `content_type` 直接用消息自己的 28。
5176
+ */
4826
5177
  declare function resolveSessionFavoriteKindFromMessage(message: ImMessageView): ImSessionFavoriteKind | null;
4827
5178
  /**
4828
5179
  * 组收藏快照明文。content 空则返回 null,对齐 iOS `collectMsg:YES` 不写空 body。
@@ -5268,6 +5619,8 @@ interface AdvancedConversationsApi extends ImConversationsApi, ImConversationBac
5268
5619
  * ```
5269
5620
  */
5270
5621
  interface ImProductClient {
5622
+ /** 当前设备推送订阅的服务端绑定与同步状态。 */
5623
+ readonly push: ImPushApi;
5271
5624
  readonly session: ImSessionApi;
5272
5625
  readonly capabilities: ImConversationCapabilitiesApi;
5273
5626
  readonly conversations: ImConversationListApi;
@@ -5428,5 +5781,5 @@ interface ImDiagnosticMemoryBuffer extends ImDiagnosticSink {
5428
5781
  */
5429
5782
  declare function createImDiagnosticMemoryBuffer(options?: ImDiagnosticMemoryBufferOptions): ImDiagnosticMemoryBuffer;
5430
5783
 
5431
- export { EDIT_WINDOW_MS, IM_CHAT_FONT_SCALES, IM_DIAGNOSTIC_CATEGORIES, IM_EMOJI_CATALOG, ImPinnedMessageOperationError, MediaTransferError, REACTION_SUPPORTED_CONTENT_TYPES, buildSessionFavoritePlainBody, canReactToMessage, canTransmit, canTransmitByType, canTransmitContent, classifyStickerImageType, createFaceToFaceGroupQrPayload, createImClient, createImConsoleDiagnosticSink, createImDiagnosticMemoryBuffer, createImTextSearchMatcher, createSdkDiagnosticWriter, createVoicePlayer, createVoiceRecordingSession, detectVoiceCapabilities, extractSearchText, getImTextSearchInitial, mediaTransferErrorCodeOf, migrateImCachePrefix, normalizeMediaUploadCredentials, requiresForwardTypeConfirmation, resolveChannelAccess, resolveImEmojiToken, resolveSessionFavoriteKindFromMessage, resolveTextSegments, sortSessions, sumSessionsUnread, voiceErrorCodeOf };
5432
- export type { CapabilityAvailability, CapabilityDecision, CapabilityReason, ChannelAccessSnapshot, ChannelBaseSessionState, ChannelConversationCapabilities, ChannelConversationMessageApi, ChannelJoinApplication, ChannelJoinApplicationNotification, ChannelJoinApplicationPage, ChannelMember, ChannelMemberPage, ChannelMentionMember, ChannelMentionMemberPage, ChannelMiniProgramRel, ChannelMiniProgramRelConfigType, ChannelMuteReason, ChannelPermissionSet, ChannelProfile, ChannelRole, ChannelSessionState, ContactCardInput, ContactMessageOptions, ConversationBackgroundPreset, ConversationBackgroundSelection, ConversationCapabilitySnapshot, ConversationDraft, ConversationDraftApi, ConversationEntryUnreadSnapshot, ConversationHandle, ConversationHandleSnapshot, ConversationInitialPosition, ConversationLastMessageSummary, ConversationListItem, ConversationListMention, ConversationMessageApi, ConversationOpenOptions, ConversationRef, ConversationSearchPage, ConversationSearchResult, ConversationSystemSummary, ConversationType, DirectConversationCapabilities, DirectConversationMessageApi, DraftInput, EditTextOptions, ExpressionMessageOptions, FileMessageOptions, ForwardFailReason, ForwardItemStatus, ForwardMessageFailure, ForwardMessagesInput, ForwardMessagesResult, ForwardTarget, ForwardedMessageRef, GameMessageOptions, GifMessageOptions, GroupConversationCapabilities, GroupConversationMessageApi, GroupMemberItem, GroupProfile, ImAppearanceSettingsApi, ImApplicationItem, ImApplicationRef, ImApplicationsApi, ImAuthIssue, ImAuthProvider, ImCacheOptions, ImCachePrefixMigrationContext, ImCachePrefixMigrator, ImCallKind, ImCallOutcome, ImCallRecordBody, ImChannelConversationAccessSnapshot, ImChannelMentionApi, ImChannelMiniProgramRel, ImChannelPermissions, ImChannelPinnedMessage, ImChannelProfile, ImChannelRole, ImChannelState, ImChannelsApi, ImChatFontScale, ImClientOptions, ImConnectionState, ImContactBody, ImContactKind, ImContactProfile, ImContactRelationship, ImContactRemarkPhone, ImContactSearchResult, ImContactsApi, ImConversationBackgroundApi, ImConversationCapabilitiesApi, ImConversationListApi, ImConversationListSnapshot, ImConversationListState, ImConversationSearchApi, ImCoreApiOptions, ImCreateChannelInput, ImCreateChannelResult, ImCreateFaceToFaceGroupResult, ImCreateGroupInput, ImCreateGroupResult, ImCreatedChannel, ImCreatedGroup, ImDebugOptions, ImDiagnosticCategory, ImDiagnosticError, ImDiagnosticLayer, ImDiagnosticLevel, ImDiagnosticMemoryBuffer, ImDiagnosticMemoryBufferFilter, ImDiagnosticMemoryBufferOptions, ImDiagnosticMemoryBufferSnapshot, ImDiagnosticMessage, ImDiagnosticRecord, ImDiagnosticSink, ImDiagnosticWriter, ImDirectCallAnswerResult, ImDirectCallFailReason, ImDirectCallHangupInput, ImDirectCallHangupReason, ImDirectCallInviteInput, ImDirectCallNotifyAudioInput, ImDirectCallTargetInput, ImDirectCallsApi, ImDirectReadReceiptSettings, ImDirectoryApi, ImDirectoryFieldMatch, ImDirectoryItem, ImDirectoryKind, ImDirectoryPage, ImDirectorySearchApi, ImDirectorySearchItem, ImDirectorySearchResult, ImDraftsApi, ImEmojiCatalogEntry, ImEndpointProvider, ImEventsApi, ImExpressionAsset, ImExpressionAssetInput, ImExpressionEmojiRecentInput, ImExpressionFavoriteKind, ImExpressionOptions, ImExpressionRecentInput, ImExpressionRecentItem, ImExpressionRecentItemKind, ImExpressionsApi, ImFaceToFaceGroup, ImFileBody, ImFriendshipRequestResult, ImGameBody, ImGameType, ImGifAssetInput, ImGiphyAsset, ImGiphyPage, ImGiphyPageOptions, ImGroupCallAnswerInput, ImGroupCallBusyInput, ImGroupCallCreateInput, ImGroupCallJoinInput, ImGroupCallMeetingSnapshot, ImGroupCallMember, ImGroupCallMemberStatus, ImGroupCallStatusInput, ImGroupCallTargetInput, ImGroupCallsApi, ImGroupConversationState, ImGroupMentionApi, ImGroupPinnedMessage, ImGroupProfile, ImGroupsApi, ImImageBody, ImLifecycleSnapshot, ImLocalDataApi, ImLocalDataInfo, ImLogoutOptions, ImMediaConfig, ImMediaTask, ImMediaTasksApi, ImMembershipJoinResult, ImMessageMention, ImMessageReactionAggregate, ImMessageReactions, ImMessageRef, ImMessageSearchApi, ImMessageView, ImMessageViewBody, ImMessagesByIdResult, ImMiniProgramBody, ImMiniProgramShowType, ImOutboxApi, ImOutboxItem, ImPageToken, ImPinnedMessageErrorKind, ImPinnedMessageOperation, ImProductApplicationUpdate, ImProductAuthInvalidReason, ImProductClient, ImProductEvent, ImProductEventError, ImProductEventMap, ImProductMessage, ImReactionChangeAction, ImReactionChangeResult, ImReadReceiptSettingsApi, ImRedPacketBody, ImRedPacketType, ImSdkErrorCategory, ImSdkErrorShape, ImSearchApi, ImSessionApi, ImSessionFavoriteItem, ImSessionFavoriteKind, ImSessionFavoritesApi, ImSessionLifecycleState, ImSettingsApi, ImStickerAssetInput, ImStickerBody, ImStickerPack, ImSupportedConversationRef, ImTextSearchMatch, ImTextSearchMatchOptions, ImTextSearchMatcher, ImTextSearchRange, ImTransferBody, ImTransferSessionType, ImTransferStatus, ImVideoBody, ImVoiceBody, ImageMessageOptions, ImagePreviewMetadata, LocalConversationHistoryClearResult, LocalMessageDeletionResult, MediaTransferErrorCode, MediaUploadCredentials, MediaUploadCredentialsProvider, MediaUploadCredentialsRequest, MentionCandidate, MentionCandidatePage, MentionInput, MessageContentType, MessageWindowInfo, MessageWindowPage, MessagesByIdFailure, MigrateImCachePrefixInput, MiniProgramMessageOptions, ProductConversationListType, ProductHandleConversationType, ProductMessageSearchPage, ProductMessageSearchResult, ResolveTextOptions, ResolvedConversationBackground, SegmentMatch, SegmentMatcher, SendMessageResult, StickerAssetKind, TextMessageOptions, TextSegment, TransferMessageOptions, UnknownMessageBody, UserProfile, VideoMessageOptions, VideoPreviewMetadata, VoiceCapabilities, VoiceErrorCode, VoiceMessageMetadata, VoicePlayer, VoicePlayerOptions, VoicePlayerState, VoiceRecordingResult, VoiceRecordingSession, VoiceRecordingSessionOptions, VoiceRecordingState, VoiceToggleOptions };
5784
+ export { EDIT_WINDOW_MS, IM_CHAT_FONT_SCALES, IM_DIAGNOSTIC_CATEGORIES, IM_EMOJI_CATALOG, ImPinnedMessageOperationError, MEDIA_ALBUM_CAPTION_MAX_LENGTH, MEDIA_ALBUM_MAX_ITEMS, MediaTransferError, REACTION_SUPPORTED_CONTENT_TYPES, buildSessionFavoritePlainBody, canReactToMessage, canTransmit, canTransmitByType, canTransmitContent, classifyStickerImageType, createFaceToFaceGroupQrPayload, createImClient, createImConsoleDiagnosticSink, createImDiagnosticMemoryBuffer, createImTextSearchMatcher, createSdkDiagnosticWriter, createVoicePlayer, createVoiceRecordingSession, detectVoiceCapabilities, extractSearchText, getImTextSearchInitial, mediaTransferErrorCodeOf, migrateImCachePrefix, normalizeMediaUploadCredentials, parseSessionFavoriteAlbumItems, requiresForwardTypeConfirmation, resolveChannelAccess, resolveImEmojiToken, resolveMediaAlbumSendContentType, resolveSessionFavoriteAlbumCaption, resolveSessionFavoriteAlbumItemPreviewUrl, resolveSessionFavoriteKindFromMessage, resolveTextSegments, sortSessions, sumSessionsUnread, voiceErrorCodeOf };
5785
+ export type { CapabilityAvailability, CapabilityDecision, CapabilityReason, ChannelAccessSnapshot, ChannelBaseSessionState, ChannelConversationCapabilities, ChannelConversationMessageApi, ChannelJoinApplication, ChannelJoinApplicationNotification, ChannelJoinApplicationPage, ChannelMember, ChannelMemberPage, ChannelMentionMember, ChannelMentionMemberPage, ChannelMiniProgramRel, ChannelMiniProgramRelConfigType, ChannelMuteReason, ChannelPermissionSet, ChannelProfile, ChannelRole, ChannelSessionState, ContactCardInput, ContactMessageOptions, ConversationBackgroundPreset, ConversationBackgroundSelection, ConversationCapabilitySnapshot, ConversationDraft, ConversationDraftApi, ConversationEntryUnreadSnapshot, ConversationHandle, ConversationHandleSnapshot, ConversationInitialPosition, ConversationLastMessageSummary, ConversationListItem, ConversationListMention, ConversationMessageApi, ConversationOpenOptions, ConversationRef, ConversationSearchPage, ConversationSearchResult, ConversationSystemSummary, ConversationType, DirectConversationCapabilities, DirectConversationMessageApi, DraftInput, EditTextOptions, ExpressionMessageOptions, FileMessageOptions, ForwardFailReason, ForwardItemStatus, ForwardMessageFailure, ForwardMessagesInput, ForwardMessagesResult, ForwardTarget, ForwardedMessageRef, GameMessageOptions, GifMessageOptions, GroupConversationCapabilities, GroupConversationMessageApi, GroupMemberItem, GroupProfile, ImAppearanceSettingsApi, ImApplicationItem, ImApplicationRef, ImApplicationsApi, ImAuthIssue, ImAuthProvider, ImCacheOptions, ImCachePrefixMigrationContext, ImCachePrefixMigrator, ImCallKind, ImCallOutcome, ImCallRecordBody, ImChannelConversationAccessSnapshot, ImChannelMentionApi, ImChannelMiniProgramRel, ImChannelPermissions, ImChannelPinnedMessage, ImChannelProfile, ImChannelRole, ImChannelState, ImChannelsApi, ImChatFontScale, ImClientOptions, ImConnectionState, ImContactBody, ImContactKind, ImContactProfile, ImContactRelationship, ImContactRemarkPhone, ImContactSearchResult, ImContactsApi, ImConversationBackgroundApi, ImConversationCapabilitiesApi, ImConversationListApi, ImConversationListSnapshot, ImConversationListState, ImConversationSearchApi, ImCoreApiOptions, ImCreateChannelInput, ImCreateChannelResult, ImCreateFaceToFaceGroupResult, ImCreateGroupInput, ImCreateGroupResult, ImCreatedChannel, ImCreatedGroup, ImDebugOptions, ImDiagnosticCategory, ImDiagnosticError, ImDiagnosticLayer, ImDiagnosticLevel, ImDiagnosticMemoryBuffer, ImDiagnosticMemoryBufferFilter, ImDiagnosticMemoryBufferOptions, ImDiagnosticMemoryBufferSnapshot, ImDiagnosticMessage, ImDiagnosticRecord, ImDiagnosticSink, ImDiagnosticWriter, ImDirectCallAnswerResult, ImDirectCallFailReason, ImDirectCallHangupInput, ImDirectCallHangupReason, ImDirectCallInviteInput, ImDirectCallNotifyAudioInput, ImDirectCallTargetInput, ImDirectCallsApi, ImDirectReadReceiptSettings, ImDirectoryApi, ImDirectoryFieldMatch, ImDirectoryItem, ImDirectoryKind, ImDirectoryPage, ImDirectorySearchApi, ImDirectorySearchItem, ImDirectorySearchResult, ImDraftsApi, ImEmojiCatalogEntry, ImEndpointProvider, ImEventsApi, ImExpressionAsset, ImExpressionAssetInput, ImExpressionEmojiRecentInput, ImExpressionFavoriteKind, ImExpressionOptions, ImExpressionRecentInput, ImExpressionRecentItem, ImExpressionRecentItemKind, ImExpressionsApi, ImFaceToFaceGroup, ImFileBody, ImFriendshipRequestResult, ImGameBody, ImGameType, ImGifAssetInput, ImGiphyAsset, ImGiphyPage, ImGiphyPageOptions, ImGroupCallAnswerInput, ImGroupCallBusyInput, ImGroupCallCreateInput, ImGroupCallJoinInput, ImGroupCallMeetingSnapshot, ImGroupCallMember, ImGroupCallMemberStatus, ImGroupCallStatusInput, ImGroupCallTargetInput, ImGroupCallsApi, ImGroupConversationState, ImGroupMentionApi, ImGroupPinnedMessage, ImGroupProfile, ImGroupsApi, ImImageBody, ImLifecycleSnapshot, ImLocalDataApi, ImLocalDataInfo, ImLogoutOptions, ImMediaAlbumBody, ImMediaAlbumItem, ImMediaConfig, ImMediaTask, ImMediaTasksApi, ImMembershipJoinResult, ImMessageMention, ImMessageReactionAggregate, ImMessageReactions, ImMessageRef, ImMessageSearchApi, ImMessageView, ImMessageViewBody, ImMessagesByIdResult, ImMiniProgramBody, ImMiniProgramShowType, ImOutboxApi, ImOutboxItem, ImPageToken, ImPinnedMessageErrorKind, ImPinnedMessageOperation, ImProductApplicationUpdate, ImProductAuthInvalidReason, ImProductClient, ImProductEvent, ImProductEventError, ImProductEventMap, ImProductMessage, ImPushApi, ImPushSnapshot, ImReactionChangeAction, ImReactionChangeResult, ImReadReceiptSettingsApi, ImRedPacketBody, ImRedPacketType, ImSdkErrorCategory, ImSdkErrorShape, ImSearchApi, ImSessionApi, ImSessionFavoriteAlbumItem, ImSessionFavoriteItem, ImSessionFavoriteKind, ImSessionFavoritesApi, ImSessionLifecycleState, ImSettingsApi, ImStickerAssetInput, ImStickerBody, ImStickerPack, ImSupportedConversationRef, ImTextSearchMatch, ImTextSearchMatchOptions, ImTextSearchMatcher, ImTextSearchRange, ImTransferBody, ImTransferSessionType, ImTransferStatus, ImVideoBody, ImVoiceBody, ImWebPushSubscription, ImageMessageOptions, ImagePreviewMetadata, LocalConversationHistoryClearResult, LocalMessageDeletionResult, MediaAlbumItemInput, MediaAlbumMessageOptions, MediaTransferErrorCode, MediaUploadCredentials, MediaUploadCredentialsProvider, MediaUploadCredentialsRequest, MentionCandidate, MentionCandidatePage, MentionInput, MessageContentType, MessageWindowInfo, MessageWindowPage, MessagesByIdFailure, MigrateImCachePrefixInput, MiniProgramMessageOptions, ProductConversationListType, ProductHandleConversationType, ProductMessageSearchPage, ProductMessageSearchResult, ResolveTextOptions, ResolvedConversationBackground, SegmentMatch, SegmentMatcher, SendMessageResult, StickerAssetKind, TextMessageOptions, TextSegment, TransferMessageOptions, UnknownMessageBody, UserProfile, VideoMessageOptions, VideoPreviewMetadata, VoiceCapabilities, VoiceErrorCode, VoiceMessageMetadata, VoicePlayer, VoicePlayerOptions, VoicePlayerState, VoiceRecordingResult, VoiceRecordingSession, VoiceRecordingSessionOptions, VoiceRecordingState, VoiceToggleOptions };
package/dist/sdk.js CHANGED
@@ -1 +1 @@
1
- import'./chunk-IDECJJXC.js';export{l as IM_CHAT_FONT_SCALES,e as IM_DIAGNOSTIC_CATEGORIES,h as IM_EMOJI_CATALOG,c as ImPinnedMessageOperationError,k as buildSessionFavoritePlainBody,d as createFaceToFaceGroupQrPayload,m as createImClient,f as createImConsoleDiagnosticSink,p as createImDiagnosticMemoryBuffer,g as createSdkDiagnosticWriter,a as migrateImCachePrefix,i as resolveImEmojiToken,j as resolveSessionFavoriteKindFromMessage}from'./chunk-NVF5RDHB.js';export{Ra as MediaTransferError,$a as createVoicePlayer,ab as createVoiceRecordingSession,Za as detectVoiceCapabilities,Sa as mediaTransferErrorCodeOf,Ta as normalizeMediaUploadCredentials,_a as voiceErrorCodeOf}from'./chunk-ULJD6ZA3.js';export{ia as EDIT_WINDOW_MS,qa as REACTION_SUPPORTED_CONTENT_TYPES,ra as canReactToMessage,ma as canTransmit,ka as canTransmitByType,la as canTransmitContent,o as classifyStickerImageType,Z as createImTextSearchMatcher,X as extractSearchText,Y as getImTextSearchInitial,ja as requiresForwardTypeConfirmation,ta as resolveChannelAccess,ca as resolveTextSegments,za as sortSessions,Aa as sumSessionsUnread}from'./chunk-W2FKET4Z.js';import'./chunk-WOT6VMZA.js';
1
+ import'./chunk-IDECJJXC.js';export{l as IM_CHAT_FONT_SCALES,e as IM_DIAGNOSTIC_CATEGORIES,h as IM_EMOJI_CATALOG,c as ImPinnedMessageOperationError,k as buildSessionFavoritePlainBody,d as createFaceToFaceGroupQrPayload,m as createImClient,f as createImConsoleDiagnosticSink,p as createImDiagnosticMemoryBuffer,g as createSdkDiagnosticWriter,a as migrateImCachePrefix,i as resolveImEmojiToken,j as resolveSessionFavoriteKindFromMessage}from'./chunk-DN4H5C7G.js';export{Ra as MediaTransferError,$a as createVoicePlayer,ab as createVoiceRecordingSession,Za as detectVoiceCapabilities,Sa as mediaTransferErrorCodeOf,Ta as normalizeMediaUploadCredentials,_a as voiceErrorCodeOf}from'./chunk-YAM4YHKF.js';export{la as EDIT_WINDOW_MS,m as MEDIA_ALBUM_CAPTION_MAX_LENGTH,n as MEDIA_ALBUM_MAX_ITEMS,ta as REACTION_SUPPORTED_CONTENT_TYPES,ua as canReactToMessage,pa as canTransmit,na as canTransmitByType,oa as canTransmitContent,q as classifyStickerImageType,aa as createImTextSearchMatcher,_ as extractSearchText,$ as getImTextSearchInitial,lb as parseSessionFavoriteAlbumItems,ma as requiresForwardTypeConfirmation,wa as resolveChannelAccess,o as resolveMediaAlbumSendContentType,mb as resolveSessionFavoriteAlbumCaption,kb as resolveSessionFavoriteAlbumItemPreviewUrl,fa as resolveTextSegments,Ca as sortSessions,Da as sumSessionsUnread}from'./chunk-A2BLOVZ5.js';import'./chunk-WOT6VMZA.js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "k2-im",
3
3
  "type": "module",
4
- "version": "0.1.19",
4
+ "version": "0.1.21",
5
5
  "private": false,
6
6
  "license": "MIT",
7
7
  "publishConfig": {