k2-im 0.1.36 → 0.1.38
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/browser.js +1 -1
- package/dist/chat-kit-pinia.d.ts +157 -19
- package/dist/chat-kit-pinia.js +1 -1
- package/dist/chat-kit-vue.d.ts +123 -2
- package/dist/chat-kit-vue.js +1 -1
- package/dist/chat-kit.d.ts +162 -16
- package/dist/chat-kit.js +1 -1
- package/dist/chunk-3ST5E6YS.js +1 -0
- package/dist/chunk-4I23ADH2.js +2 -0
- package/dist/{chunk-4WMIGRG4.js → chunk-GHFHAGJ7.js} +1 -1
- package/dist/{chunk-SWQXHZDF.js → chunk-HWA7NOXG.js} +1 -1
- package/dist/chunk-ITOAFWZU.js +2 -0
- package/dist/chunk-LMP34HNC.js +2 -0
- package/dist/chunk-ZERTVCH2.js +7 -0
- package/dist/i18n.d.ts +3 -1
- package/dist/i18n.js +1 -1
- package/dist/index.d.ts +164 -17
- package/dist/index.js +1 -1
- package/dist/sdk.d.ts +96 -11
- package/dist/sdk.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-4CH72T6I.js +0 -7
- package/dist/chunk-ANHUDX3C.js +0 -2
- package/dist/chunk-NB6MXFCH.js +0 -2
- package/dist/chunk-R3FWUQK4.js +0 -2
- package/dist/chunk-UKL2AULH.js +0 -1
package/dist/browser.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{Ta as canCopyImageToClipboard,Ua as copyImageToClipboard,B as createLazyBrowserApiProtocolClient}from'./chunk-
|
|
1
|
+
export{Ta as canCopyImageToClipboard,Ua as copyImageToClipboard,B as createLazyBrowserApiProtocolClient}from'./chunk-ZERTVCH2.js';import'./chunk-4I23ADH2.js';import'./chunk-WOT6VMZA.js';
|
package/dist/chat-kit-pinia.d.ts
CHANGED
|
@@ -202,6 +202,8 @@ interface ImVideoBody {
|
|
|
202
202
|
width: number;
|
|
203
203
|
/** 视频像素高(BMessage.height)。 */
|
|
204
204
|
height: number;
|
|
205
|
+
/** 发送方显式选择了 HD 原视频(BMessage.hd);不按分辨率猜测。 */
|
|
206
|
+
hd?: boolean;
|
|
205
207
|
/** 时长(秒,可含小数);移动端旧消息的毫秒值由 SDK 转换,宿主不得猜单位。 */
|
|
206
208
|
duration?: number;
|
|
207
209
|
/** SDK 已确认时长为秒的标记;兼容旧缓存时防止重复转换。缺省仍按公开 API 的秒约定传入。 */
|
|
@@ -711,7 +713,7 @@ interface MediaTaskUpdate {
|
|
|
711
713
|
* upload 任务子阶段。
|
|
712
714
|
*
|
|
713
715
|
* `waiting-upload-slot` 与 `state: 'queued'` 同时出现,表示还没开始传字节(在生成缩略图或在等上传槽位),
|
|
714
|
-
*
|
|
716
|
+
* 首发 percent 为 0,断点恢复时保留已有进度;`transferring` 正在传字节;`finalizing` 是等待远端 URL 最终确认。
|
|
715
717
|
*/
|
|
716
718
|
phase?: 'waiting-upload-slot' | 'waiting-retry' | 'transferring' | 'finalizing';
|
|
717
719
|
/** 当前发送意图的尝试序号与总上限。 */
|
|
@@ -720,6 +722,18 @@ interface MediaTaskUpdate {
|
|
|
720
722
|
/** 已传与总字节数,供共享展示层估算速度。 */
|
|
721
723
|
bytesTransferred?: number;
|
|
722
724
|
bytesTotal?: number;
|
|
725
|
+
/** 上传合集的逐项真实字节快照;整组发送仍由外层任务控制,不为每格创建独立发送。 */
|
|
726
|
+
items?: readonly Readonly<{
|
|
727
|
+
/** 从零开始的合集位置。 */
|
|
728
|
+
itemIndex: number;
|
|
729
|
+
/** 本项实际上传字节与源文件总字节。 */
|
|
730
|
+
bytesTransferred: number;
|
|
731
|
+
bytesTotal: number;
|
|
732
|
+
/** 远端资源确认完成前最多 99%。 */
|
|
733
|
+
percent: number;
|
|
734
|
+
/** 本项状态;已完成项不随兄弟项取消或失败回退。 */
|
|
735
|
+
state: 'queued' | 'running' | 'completed' | 'failed' | 'canceled';
|
|
736
|
+
}>[];
|
|
723
737
|
/** 跨刷新恢复可用性;缺省尚未建立恢复记录。 */
|
|
724
738
|
recovery?: 'available' | 'session-only';
|
|
725
739
|
recoveryReason?: string;
|
|
@@ -774,7 +788,7 @@ interface ImMessage {
|
|
|
774
788
|
};
|
|
775
789
|
/**
|
|
776
790
|
* CHANNEL 管理员/社群主全员删除终态。它与发送者本人撤回、`deleteLocal` 完全不同:服务端通过
|
|
777
|
-
* `RADIO_ADMIN_CANCEL_*`
|
|
791
|
+
* `RADIO_ADMIN_CANCEL_*` 同步给全员,正文不可逆清空;线程与会话摘要仅向群主、管理员展示删除提示,普通成员及未知角色隐藏。
|
|
778
792
|
*/
|
|
779
793
|
deletedForEveryone?: {
|
|
780
794
|
by: string;
|
|
@@ -956,6 +970,15 @@ interface ImSession {
|
|
|
956
970
|
* 派生展示字段(随最新消息变化,会话列表据此显示发送中 loading / 失败图标);运行期真相,不持久化(persistSession 落盘时剔除)。
|
|
957
971
|
*/
|
|
958
972
|
lastMessageSendState?: 'sending' | 'failed';
|
|
973
|
+
/**
|
|
974
|
+
* 最新一条己方已发送消息的回执态。
|
|
975
|
+
*
|
|
976
|
+
* 只在自己发出且 `status='sent'` 时投影;发送中/失败、对端消息、撤回、全员删除和系统提示都不给。
|
|
977
|
+
* `delivered` 与尚未回执一样投影为 `unread`;当前协议没有送达通知,不能把 `sent` 当作对端已收到。
|
|
978
|
+
* 该字段随最新消息变化,并随会话落盘,避免冷启动后
|
|
979
|
+
* 因「盘中缺字段 / 内存有字段」反复广播;对端已读变化必须刷新会话行。
|
|
980
|
+
*/
|
|
981
|
+
lastMessageReceipt?: 'unread' | 'read';
|
|
959
982
|
/** P0 我方已读游标(见 §4.3)。 */
|
|
960
983
|
readCursor?: string;
|
|
961
984
|
/** 群受限状态(仅 group;来自 0x2204 群通知 side-effect)。缺省视为 'active'(可正常发送)。 */
|
|
@@ -1057,8 +1080,8 @@ interface UserProfile {
|
|
|
1057
1080
|
/** 用户自设昵称(后端 `nick_name`)。 */
|
|
1058
1081
|
nickname: string;
|
|
1059
1082
|
/**
|
|
1060
|
-
*
|
|
1061
|
-
* 与 `nickname` 并存:展示名优先级 =
|
|
1083
|
+
* 好友展示备注(后端 `/user/info/friend` 的 `remark_name`,无备注时回退 `contact_name`,仅好友关系有)。
|
|
1084
|
+
* 与 `nickname` 并存:展示名优先级 = 备注名/通讯录名 > 昵称(安卓 SessionUtils.getShowUserName 实证)。
|
|
1062
1085
|
*/
|
|
1063
1086
|
remark?: string;
|
|
1064
1087
|
avatar?: string;
|
|
@@ -1849,6 +1872,8 @@ interface MediaAssetCacheStrategy {
|
|
|
1849
1872
|
softMaxBytes: number;
|
|
1850
1873
|
maxEntries: number;
|
|
1851
1874
|
maxEntryBytes: number;
|
|
1875
|
+
/** 完整媒体副本允许连续未访问的最长毫秒数;省略时不按时间过期,仍执行容量限制。 */
|
|
1876
|
+
maxIdleMs?: number;
|
|
1852
1877
|
}
|
|
1853
1878
|
/** 精确按 kind 解析策略;未注册返回 undefined,不提供默认策略。 */
|
|
1854
1879
|
interface MediaAssetCacheStrategyRegistry {
|
|
@@ -1862,8 +1887,12 @@ interface MediaAssetCacheStrategyRegistry {
|
|
|
1862
1887
|
*/
|
|
1863
1888
|
interface MediaAssetCachePort {
|
|
1864
1889
|
get: (key: MediaAssetCacheKey) => Promise<MediaAssetCacheEntry | null>;
|
|
1890
|
+
/** 按输入顺序检查完整资源是否存在且未过期;不读取 Blob、不延长闲置期限,存储故障必须抛出。 */
|
|
1891
|
+
hasMany?: (keys: readonly MediaAssetCacheKey[]) => Promise<readonly boolean[]>;
|
|
1865
1892
|
put: (entry: MediaAssetCacheEntry) => Promise<'stored' | 'skipped'>;
|
|
1866
1893
|
clear: () => Promise<void>;
|
|
1894
|
+
/** 删除超过闲置期限的完整持久副本;不撤销已经返回的 Blob 或宿主持有的播放地址。 */
|
|
1895
|
+
prune?: () => Promise<void>;
|
|
1867
1896
|
}
|
|
1868
1897
|
|
|
1869
1898
|
interface ImProfilePort {
|
|
@@ -2109,6 +2138,11 @@ type StoredConversationBackground = {
|
|
|
2109
2138
|
* 失败经 `error` 事件(scope:'storage')暴露、不静默吞、不阻塞内存主流程。
|
|
2110
2139
|
*/
|
|
2111
2140
|
interface ImStoragePort {
|
|
2141
|
+
/**
|
|
2142
|
+
* 显式支持 CHANNEL 持久同步位置。声明 true 的 adapter 必须在删除会话正文/清历史事务中
|
|
2143
|
+
* 同时删除 channelSyncCheckpointKey 对应 meta;旧 adapter 缺省不启用跨运行续传。
|
|
2144
|
+
*/
|
|
2145
|
+
readonly supportsChannelSyncCheckpoint?: true;
|
|
2112
2146
|
/** 可选的最近页持久缓存;缺少该能力时 SDK 必须明确跳过持久预取。 */
|
|
2113
2147
|
recentHistoryCache?: ImRecentHistoryCachePort;
|
|
2114
2148
|
/** 打开/创建账号库并跑迁移(幂等)。open 前的读写应视为未就绪并抛错(不静默兜底)。 */
|
|
@@ -2174,12 +2208,13 @@ interface ImStoragePort {
|
|
|
2174
2208
|
deleteSession: (conversation: ImStorageConversation) => Promise<void>;
|
|
2175
2209
|
/** 删除单会话已读态(删除会话用)。 */
|
|
2176
2210
|
deleteReadState: (conversation: ImStorageConversation) => Promise<void>;
|
|
2177
|
-
/**
|
|
2211
|
+
/** 删除某会话全部本地消息及对应 CHANNEL 同步位置,二者须在同一事务内清理。 */
|
|
2178
2212
|
deleteConversationMessages: (conversation: ImStorageConversation) => Promise<void>;
|
|
2179
2213
|
/**
|
|
2180
2214
|
* 原子清空精确会话的本机历史,并同步写入清空后的会话摘要与本机读态。
|
|
2181
2215
|
*
|
|
2182
2216
|
* @remarks 这是可选 capability,供产品 `history.clearLocal()` 使用;自定义 adapter 未实现时必须显式拒绝,不能退化为多次写入制造半清理状态。
|
|
2217
|
+
* 同一事务还须删除 channelSyncCheckpointKey(conversation) 对应同步位置,避免正文已清而继续跳过旧页。
|
|
2183
2218
|
* 不删除会话行、草稿、Outbox、置顶消息或任何远端数据。
|
|
2184
2219
|
*/
|
|
2185
2220
|
clearConversationHistory?: (conversation: ConversationRef, nextSession?: ImSession, nextReadState?: ReadState) => Promise<void>;
|
|
@@ -2961,8 +2996,8 @@ interface IndexedDbStorageAdapterOptions {
|
|
|
2961
2996
|
maxPendingWriteBytes?: number;
|
|
2962
2997
|
};
|
|
2963
2998
|
}
|
|
2964
|
-
/** 官方浏览器 adapter
|
|
2965
|
-
type IndexedDbStorageAdapter = ImStoragePort & MediaAssetCachePort & Required<Pick<ImStoragePort, 'getConversationBackground' | 'recentHistoryCache' | 'saveConversationBackground' | 'deleteConversationBackground' | 'getDefaultConversationBackground' | 'saveDefaultConversationBackground' | 'deleteDefaultConversationBackground'>>;
|
|
2999
|
+
/** 官方浏览器 adapter 始终提供背景、最近历史和媒体缓存维护;通用端口为其它实现保留可选能力。 */
|
|
3000
|
+
type IndexedDbStorageAdapter = ImStoragePort & MediaAssetCachePort & Required<Pick<MediaAssetCachePort, 'prune' | 'hasMany'>> & Required<Pick<ImStoragePort, 'getConversationBackground' | 'recentHistoryCache' | 'saveConversationBackground' | 'deleteConversationBackground' | 'getDefaultConversationBackground' | 'saveDefaultConversationBackground' | 'deleteDefaultConversationBackground'>>;
|
|
2966
3001
|
/**
|
|
2967
3002
|
* 创建 IndexedDB 存储 adapter(实现 ImStoragePort)。
|
|
2968
3003
|
* 生命周期:先 `open({ namespace })`(幂等,跑 schema 迁移),再读写;`close()` 释放句柄。
|
|
@@ -4350,6 +4385,13 @@ interface ConversationListItem {
|
|
|
4350
4385
|
by: string;
|
|
4351
4386
|
}>;
|
|
4352
4387
|
lastMessageSendState?: 'sending' | 'failed';
|
|
4388
|
+
/**
|
|
4389
|
+
* 最新一条己方已发送消息的对端已读态。
|
|
4390
|
+
*
|
|
4391
|
+
* 只在自己发出且已发送成功时出现;发送中/失败、对端消息、撤回和系统提示都不给。
|
|
4392
|
+
* 单聊会话列表用它在摘要前画灰色单勾/绿色双勾;群组与社群即使有该字段也不展示。
|
|
4393
|
+
*/
|
|
4394
|
+
lastMessageReceipt?: 'unread' | 'read';
|
|
4353
4395
|
timestamp: number;
|
|
4354
4396
|
unreadCount: number;
|
|
4355
4397
|
/** 是否为用户手工添加的本地未读提醒;此时 `unreadCount` 至少投影为 1。 */
|
|
@@ -4538,6 +4580,21 @@ type ConversationEntryUnreadSnapshot = Readonly<{
|
|
|
4538
4580
|
}> | Readonly<{
|
|
4539
4581
|
state: 'unavailable';
|
|
4540
4582
|
}>;
|
|
4583
|
+
/** 进入时冻结的导航提示;数量独立于会话已读,不暴露内部历史排序边界。 */
|
|
4584
|
+
type ConversationEntryUnreadNavigation = Readonly<{
|
|
4585
|
+
state: 'none';
|
|
4586
|
+
}> | Readonly<{
|
|
4587
|
+
state: 'pending' | 'unavailable';
|
|
4588
|
+
count: number;
|
|
4589
|
+
}> | Readonly<{
|
|
4590
|
+
state: 'located';
|
|
4591
|
+
count: number;
|
|
4592
|
+
firstMessageId: string;
|
|
4593
|
+
}> | Readonly<{
|
|
4594
|
+
state: 'failed';
|
|
4595
|
+
count: number;
|
|
4596
|
+
error: ImSdkErrorShape;
|
|
4597
|
+
}>;
|
|
4541
4598
|
|
|
4542
4599
|
/**
|
|
4543
4600
|
* Emoji、GIF 与贴图稳定产品门面。
|
|
@@ -4701,6 +4758,8 @@ interface ConversationOpenOptions {
|
|
|
4701
4758
|
* 后续 read 事件或新消息不会移动分隔线。
|
|
4702
4759
|
*/
|
|
4703
4760
|
initialPosition?: ConversationInitialPosition;
|
|
4761
|
+
/** 冻结进入时未读导航,独立于初始位置;清会话未读后仍可定位原边界。 */
|
|
4762
|
+
captureEntryUnread?: boolean;
|
|
4704
4763
|
/**
|
|
4705
4764
|
* 初始历史加载方式,默认 `blocking`。
|
|
4706
4765
|
*
|
|
@@ -4728,6 +4787,8 @@ interface ConversationHandleSnapshot<TType extends ProductHandleConversationType
|
|
|
4728
4787
|
messages: readonly ImMessageView[];
|
|
4729
4788
|
/** 本次打开时冻结的未读入口;只用于产品 UI 分隔线,不作为 SDK 已读真相。 */
|
|
4730
4789
|
entryUnread: ConversationEntryUnreadSnapshot;
|
|
4790
|
+
/** 显式请求的进入导航快照;旧消费者不请求时省略。 */
|
|
4791
|
+
entryUnreadNavigation?: ConversationEntryUnreadNavigation;
|
|
4731
4792
|
/** 当前账号本机草稿;不承诺跨端同步。 */
|
|
4732
4793
|
draft: ConversationDraft | null;
|
|
4733
4794
|
loading: boolean;
|
|
@@ -5028,15 +5089,17 @@ interface ConversationHandle<TType extends ProductHandleConversationType = Produ
|
|
|
5028
5089
|
resolveMessage: (messageId: string) => Promise<ImMessageView | null>;
|
|
5029
5090
|
history: {
|
|
5030
5091
|
loadLatest: () => Promise<void>;
|
|
5092
|
+
/** 有限加载进入时冻结边界;成功才替换窗口,不可定位返回 false,网络失败抛错并保留数量。 */
|
|
5093
|
+
loadEntryUnread: () => Promise<boolean>;
|
|
5031
5094
|
loadOlder: () => Promise<void>;
|
|
5032
5095
|
/** 历史定位窗口向更新方向连续翻页;接回最新端后 `hasNewer` 变为 false。 */
|
|
5033
5096
|
loadNewer: () => Promise<void>;
|
|
5034
5097
|
/**
|
|
5035
5098
|
* 按稳定消息 id 打开目标附近的连续历史窗口。
|
|
5036
5099
|
*
|
|
5037
|
-
* @remarks
|
|
5038
|
-
*
|
|
5039
|
-
* @throws
|
|
5100
|
+
* @remarks GROUP 完整置顶预览可按消息时间定位;CHANNEL 置顶未缓存时先按 ID 取回正式历史记录,
|
|
5101
|
+
* 以服务端游标继续双向分页。短期搜索结果只作为只读锚点;partial 置顶和过期搜索结果明确拒绝定位。
|
|
5102
|
+
* @throws 没有可用锚点、远端确认缺失或目标不属于当前复合会话时,抛出稳定 `IM_SDK_MESSAGE_NOT_FOUND`
|
|
5040
5103
|
* (`category: 'state'`、`retryable: false`、`details.messageId`)。这是常见产品结果而非链路异常,
|
|
5041
5104
|
* 调用方应据此与真正的存储/协议失败区分反馈,不要解析错误文案。
|
|
5042
5105
|
*/
|
|
@@ -5058,6 +5121,10 @@ interface ConversationHandle<TType extends ProductHandleConversationType = Produ
|
|
|
5058
5121
|
draft: ConversationDraftApi;
|
|
5059
5122
|
/** 标记窗口最新消息或显式可见消息为已读;SDK 按精确 sibling 解析真实 read cursor。 */
|
|
5060
5123
|
markRead: (messageId?: string) => Promise<void>;
|
|
5124
|
+
/** 结算最新可信边界的会话未读;不会将整个范围登记为对端可见回执。 */
|
|
5125
|
+
markConversationRead: () => Promise<void>;
|
|
5126
|
+
/** 只登记实际可见的消息 ID;历史消息也可补报,媒体消费继续使用独立动作。 */
|
|
5127
|
+
markVisibleMessages: (messageIds: readonly string[]) => Promise<void>;
|
|
5061
5128
|
setMuted: (muted: boolean) => Promise<void>;
|
|
5062
5129
|
close: () => void;
|
|
5063
5130
|
}
|
|
@@ -5168,6 +5235,8 @@ interface ImMediaTask {
|
|
|
5168
5235
|
* 上传任务不带下标:一条合集整体只有一条上传进度(所有项都传完才算这条消息发出去)。
|
|
5169
5236
|
*/
|
|
5170
5237
|
itemIndex?: number;
|
|
5238
|
+
/** 合集各项的真实上传快照;控制动作仍作用于整条消息,不包含资源或传输凭据。 */
|
|
5239
|
+
items?: MediaTaskUpdate['items'];
|
|
5171
5240
|
/** upload 来自发送链路,download 来自本产品 API。 */
|
|
5172
5241
|
direction: 'upload' | 'download';
|
|
5173
5242
|
/** 终态 completed/failed/canceled 不会被同一尝试的迟到 progress 回退。 */
|
|
@@ -5213,6 +5282,20 @@ interface ImMediaTask {
|
|
|
5213
5282
|
* ```
|
|
5214
5283
|
*/
|
|
5215
5284
|
interface ImMediaTasksApi {
|
|
5285
|
+
/** 清除当前账号完整媒体缓存及下载断点;保留消息、草稿、上传源和已交付的播放资源,在途下载仍可完成。 */
|
|
5286
|
+
clearCache: () => Promise<void>;
|
|
5287
|
+
/**
|
|
5288
|
+
* 按输入顺序查询完整本机媒体是否可用;不下载、不读取 Blob、不续缓存期限或创建任务。
|
|
5289
|
+
* 仅支持图片/视频(含媒体合集);未配置持久缓存时只检查内存。
|
|
5290
|
+
* @throws 不支持轻量查询或存储读取失败时明确拒绝,不伪装成未命中。
|
|
5291
|
+
* @example const [available] = await client.media.probeCached([messageRef])
|
|
5292
|
+
*/
|
|
5293
|
+
probeCached: (messages: readonly ImMessageRef[]) => Promise<readonly boolean[]>;
|
|
5294
|
+
/**
|
|
5295
|
+
* 缓存写入、清理或过期后通知消费者重新查询;账号销毁后自动退订。
|
|
5296
|
+
* @example const stop = client.media.subscribeCacheChanges(() => refreshVisibleMedia())
|
|
5297
|
+
*/
|
|
5298
|
+
subscribeCacheChanges: (listener: () => void) => () => void;
|
|
5216
5299
|
/**
|
|
5217
5300
|
* 返回当前账号全部活跃任务与近期终态任务的冻结快照;总量超过 128 时只淘汰终态,极端并发活跃可暂时超过上限。
|
|
5218
5301
|
* @throws runtime 已 logout/dispose 时抛 `IM_SDK_MEDIA_RUNTIME_INACTIVE`。
|
|
@@ -5227,7 +5310,10 @@ interface ImMediaTasksApi {
|
|
|
5227
5310
|
* 取消 queued/running 任务;上传委托 core,下载中止当前 AbortController。
|
|
5228
5311
|
* @throws 未知任务、非法状态或底层未受理时以稳定 `IM_SDK_MEDIA_TASK_*` 错误拒绝。
|
|
5229
5312
|
*/
|
|
5230
|
-
cancel: (taskId: string
|
|
5313
|
+
cancel: (taskId: string, options?: {
|
|
5314
|
+
/** 取消发送但保留已确认上传分片与原文件,只有用户显式重试才继续。默认取消仍清理。 */
|
|
5315
|
+
retainCheckpoint?: boolean;
|
|
5316
|
+
}) => Promise<void>;
|
|
5231
5317
|
/** 暂停上传,等待请求收尾后返回;下载不支持暂停。 */
|
|
5232
5318
|
pause: (taskId: string) => Promise<void>;
|
|
5233
5319
|
/** 恢复已暂停上传,复用同一原文件与消息。 */
|
|
@@ -5245,19 +5331,28 @@ interface ImMediaTasksApi {
|
|
|
5245
5331
|
/**
|
|
5246
5332
|
* 重试 failed/canceled 任务;上传复用保留原文件,下载重新解析同一精确消息引用。
|
|
5247
5333
|
* 续传不可用或清理未确认时,必须先征得用户同意重新上传,再传 restartUpload:true。
|
|
5248
|
-
*
|
|
5334
|
+
* 保留式取消后的重发复用已确认分片和原密钥;默认清理式取消不保证保有原文件。
|
|
5249
5335
|
* 下载取消已受理后即可创建新尝试,不复用旧取消 Promise;旧 loader 结束前仍占用并发槽,但不能覆盖新任务。
|
|
5250
5336
|
* @throws 原文件已淘汰、任务仍在途或消息/下载 capability 不可用时显式拒绝。
|
|
5251
5337
|
*/
|
|
5252
5338
|
retry: (taskId: string, options?: {
|
|
5253
5339
|
/** 用户已确认放弃旧进度并重新上传;仅上传任务接受,清理失败时仍停止。 */
|
|
5254
5340
|
restartUpload?: boolean;
|
|
5341
|
+
/** 下载断点已失效或超出缓存预算时,用户确认从头下载。 */
|
|
5342
|
+
restartDownload?: boolean;
|
|
5255
5343
|
}) => Promise<void>;
|
|
5256
5344
|
/**
|
|
5257
5345
|
* 下载并按消息正文合同解密,同一消息并发调用复用同一 Promise,成功返回 Blob。
|
|
5258
5346
|
* @throws 消息不存在/非媒体/无远端 URL/未装配 capability、传输失败、取消或 teardown 均以稳定错误拒绝,不返回空 Blob。
|
|
5259
5347
|
*/
|
|
5260
5348
|
download: (message: ImMessageRef) => Promise<Blob>;
|
|
5349
|
+
/**
|
|
5350
|
+
* 将最近预览的精确媒体项设为最高下载优先级,不新建或取消任务。
|
|
5351
|
+
* 下一空闲任务/分片请求名额优先给该项;已发请求不中断,关闭播放器不撤销优先级。
|
|
5352
|
+
* 后续调用替换上一个目标;账号退出后不可调用。
|
|
5353
|
+
* @example client.media.prioritizeDownload({ conversation, messageId, itemIndex: 1 })
|
|
5354
|
+
*/
|
|
5355
|
+
prioritizeDownload: (message: ImMessageRef) => void;
|
|
5261
5356
|
/**
|
|
5262
5357
|
* 仅读取当前账号内存或持久媒体资产缓存;命中返回 Blob,未缓存或类型未注册返回 `null`。
|
|
5263
5358
|
*
|
|
@@ -6048,6 +6143,7 @@ interface ImClientOptions {
|
|
|
6048
6143
|
/** 显式开启视频/文件跨刷新续传。最多 3 条、24 小时,保存加密密钥但不保存文件副本;注销清除。 */
|
|
6049
6144
|
uploadRecovery?: {
|
|
6050
6145
|
enabled: boolean;
|
|
6146
|
+
retainFailedUploads?: boolean;
|
|
6051
6147
|
};
|
|
6052
6148
|
}
|
|
6053
6149
|
/**
|
|
@@ -6664,6 +6760,7 @@ interface ChatRuntimeHostDeps {
|
|
|
6664
6760
|
/** 显式启用账号隔离的跨刷新恢复记录;保存密钥、不保存原文件,注销清除。 */
|
|
6665
6761
|
uploadRecovery?: {
|
|
6666
6762
|
enabled: boolean;
|
|
6763
|
+
retainFailedUploads?: boolean;
|
|
6667
6764
|
};
|
|
6668
6765
|
/** 获取 GIF provider 配置;API key 只留在宿主闭包与 SDK adapter,不进入共享 Store。 */
|
|
6669
6766
|
getExpressionOptions?: () => ImExpressionOptions | undefined;
|
|
@@ -6941,7 +7038,11 @@ interface ChatRuntime {
|
|
|
6941
7038
|
resolveMediaPreviewToRemote: (ref: ChatMediaMessageRef, contentType: 'image' | 'video' | 'sticker', byteSize?: number) => void;
|
|
6942
7039
|
/** 为指定消息取得本地媒体播放租约;没有本地缓存时返回 `undefined`,调用方应改用远端资源。 */
|
|
6943
7040
|
acquireMediaBlob: (ref: ChatMediaMessageRef) => MediaObjectUrlLease | undefined;
|
|
7041
|
+
/** 只读检查完整本地媒体是否可用,不取得租约、不改变缓存淘汰顺序。 */
|
|
7042
|
+
hasMediaBlob: (ref: ChatMediaMessageRef) => boolean;
|
|
6944
7043
|
/** 撤销当前账号创建的全部媒体预览地址并释放 Blob 内存,切账号、退出或销毁时调用。 */
|
|
7044
|
+
/** 清理当前账号完整媒体缓存和下载断点;上传源保留,正在使用的播放地址在释放后才撤销。 */
|
|
7045
|
+
clearMediaCache: () => Promise<void>;
|
|
6945
7046
|
cleanupLocalMediaBlobs: () => void;
|
|
6946
7047
|
/** 删除会话时释放该会话绑定的本地媒体预览/播放缓存。 */
|
|
6947
7048
|
cleanupConversationMediaBlobs: (conversation: ConversationRef<'direct' | 'group' | 'channel' | 'robot'>) => void;
|
|
@@ -7606,11 +7707,18 @@ declare function defineImMediaStore(pinia: Pinia): pinia.StoreDefinition<"k2-im-
|
|
|
7606
7707
|
uploadWaiting: any;
|
|
7607
7708
|
uploadFinalizing: any;
|
|
7608
7709
|
replacementRequest: any;
|
|
7710
|
+
cacheAvailability: any;
|
|
7711
|
+
cachedAvailability: (message: ImMessageView, itemIndex?: number) => boolean | undefined;
|
|
7712
|
+
cacheProbePending: any;
|
|
7713
|
+
cacheAvailabilityPending: (message: ImMessageView, itemIndex?: number) => boolean;
|
|
7609
7714
|
start: () => void;
|
|
7610
7715
|
reset: () => void;
|
|
7611
|
-
cancel: (taskId: string
|
|
7716
|
+
cancel: (taskId: string, options?: {
|
|
7717
|
+
retainCheckpoint?: boolean;
|
|
7718
|
+
}) => Promise<ImMediaOperationResult>;
|
|
7612
7719
|
retry: (taskId: string, options?: {
|
|
7613
7720
|
restartUpload?: boolean;
|
|
7721
|
+
restartDownload?: boolean;
|
|
7614
7722
|
}) => Promise<ImMediaOperationResult>;
|
|
7615
7723
|
pause: (taskId: string) => Promise<ImMediaOperationResult>;
|
|
7616
7724
|
resume: (taskId: string) => Promise<ImMediaOperationResult>;
|
|
@@ -7622,7 +7730,9 @@ declare function defineImMediaStore(pinia: Pinia): pinia.StoreDefinition<"k2-im-
|
|
|
7622
7730
|
resumeUpload: (message: ImMessageRef, input: {
|
|
7623
7731
|
file: Blob;
|
|
7624
7732
|
}) => Promise<ImMediaOperationResult>;
|
|
7625
|
-
cancelUpload: (messageId: string
|
|
7733
|
+
cancelUpload: (messageId: string, options?: {
|
|
7734
|
+
retainCheckpoint?: boolean;
|
|
7735
|
+
}) => Promise<ImMediaOperationResult>;
|
|
7626
7736
|
cancelDownload: (message: string | ImMessageRef, itemIndex?: number) => Promise<ImMediaOperationResult>;
|
|
7627
7737
|
requestReplacement: (message: ImMessageView) => boolean;
|
|
7628
7738
|
takeReplacementRequest: () => ImMediaReplacementRequest | null;
|
|
@@ -7638,11 +7748,18 @@ declare function defineImMediaStore(pinia: Pinia): pinia.StoreDefinition<"k2-im-
|
|
|
7638
7748
|
uploadWaiting: any;
|
|
7639
7749
|
uploadFinalizing: any;
|
|
7640
7750
|
replacementRequest: any;
|
|
7751
|
+
cacheAvailability: any;
|
|
7752
|
+
cachedAvailability: (message: ImMessageView, itemIndex?: number) => boolean | undefined;
|
|
7753
|
+
cacheProbePending: any;
|
|
7754
|
+
cacheAvailabilityPending: (message: ImMessageView, itemIndex?: number) => boolean;
|
|
7641
7755
|
start: () => void;
|
|
7642
7756
|
reset: () => void;
|
|
7643
|
-
cancel: (taskId: string
|
|
7757
|
+
cancel: (taskId: string, options?: {
|
|
7758
|
+
retainCheckpoint?: boolean;
|
|
7759
|
+
}) => Promise<ImMediaOperationResult>;
|
|
7644
7760
|
retry: (taskId: string, options?: {
|
|
7645
7761
|
restartUpload?: boolean;
|
|
7762
|
+
restartDownload?: boolean;
|
|
7646
7763
|
}) => Promise<ImMediaOperationResult>;
|
|
7647
7764
|
pause: (taskId: string) => Promise<ImMediaOperationResult>;
|
|
7648
7765
|
resume: (taskId: string) => Promise<ImMediaOperationResult>;
|
|
@@ -7654,7 +7771,9 @@ declare function defineImMediaStore(pinia: Pinia): pinia.StoreDefinition<"k2-im-
|
|
|
7654
7771
|
resumeUpload: (message: ImMessageRef, input: {
|
|
7655
7772
|
file: Blob;
|
|
7656
7773
|
}) => Promise<ImMediaOperationResult>;
|
|
7657
|
-
cancelUpload: (messageId: string
|
|
7774
|
+
cancelUpload: (messageId: string, options?: {
|
|
7775
|
+
retainCheckpoint?: boolean;
|
|
7776
|
+
}) => Promise<ImMediaOperationResult>;
|
|
7658
7777
|
cancelDownload: (message: string | ImMessageRef, itemIndex?: number) => Promise<ImMediaOperationResult>;
|
|
7659
7778
|
requestReplacement: (message: ImMessageView) => boolean;
|
|
7660
7779
|
takeReplacementRequest: () => ImMediaReplacementRequest | null;
|
|
@@ -7670,11 +7789,18 @@ declare function defineImMediaStore(pinia: Pinia): pinia.StoreDefinition<"k2-im-
|
|
|
7670
7789
|
uploadWaiting: any;
|
|
7671
7790
|
uploadFinalizing: any;
|
|
7672
7791
|
replacementRequest: any;
|
|
7792
|
+
cacheAvailability: any;
|
|
7793
|
+
cachedAvailability: (message: ImMessageView, itemIndex?: number) => boolean | undefined;
|
|
7794
|
+
cacheProbePending: any;
|
|
7795
|
+
cacheAvailabilityPending: (message: ImMessageView, itemIndex?: number) => boolean;
|
|
7673
7796
|
start: () => void;
|
|
7674
7797
|
reset: () => void;
|
|
7675
|
-
cancel: (taskId: string
|
|
7798
|
+
cancel: (taskId: string, options?: {
|
|
7799
|
+
retainCheckpoint?: boolean;
|
|
7800
|
+
}) => Promise<ImMediaOperationResult>;
|
|
7676
7801
|
retry: (taskId: string, options?: {
|
|
7677
7802
|
restartUpload?: boolean;
|
|
7803
|
+
restartDownload?: boolean;
|
|
7678
7804
|
}) => Promise<ImMediaOperationResult>;
|
|
7679
7805
|
pause: (taskId: string) => Promise<ImMediaOperationResult>;
|
|
7680
7806
|
resume: (taskId: string) => Promise<ImMediaOperationResult>;
|
|
@@ -7686,7 +7812,9 @@ declare function defineImMediaStore(pinia: Pinia): pinia.StoreDefinition<"k2-im-
|
|
|
7686
7812
|
resumeUpload: (message: ImMessageRef, input: {
|
|
7687
7813
|
file: Blob;
|
|
7688
7814
|
}) => Promise<ImMediaOperationResult>;
|
|
7689
|
-
cancelUpload: (messageId: string
|
|
7815
|
+
cancelUpload: (messageId: string, options?: {
|
|
7816
|
+
retainCheckpoint?: boolean;
|
|
7817
|
+
}) => Promise<ImMediaOperationResult>;
|
|
7690
7818
|
cancelDownload: (message: string | ImMessageRef, itemIndex?: number) => Promise<ImMediaOperationResult>;
|
|
7691
7819
|
requestReplacement: (message: ImMessageView) => boolean;
|
|
7692
7820
|
takeReplacementRequest: () => ImMediaReplacementRequest | null;
|
|
@@ -8832,7 +8960,7 @@ interface ImQuotedMessageStoreActions {
|
|
|
8832
8960
|
* 声明当前这一屏需要哪些被引原消息,并按需解析尚未解析的部分。
|
|
8833
8961
|
*
|
|
8834
8962
|
* 幂等且可以高频调用:已有结论的(解析成功、确认缺失、解析失败)都不会重复查询,窗口内已有的
|
|
8835
|
-
*
|
|
8963
|
+
* 消息也不占用回源额度。同一活动线程只允许一批解析在跑,连续翻页产生的多次调用会自动合并,
|
|
8836
8964
|
* 所以在消息列表变化时无脑调一次就行,不需要宿主自己做防抖。
|
|
8837
8965
|
*
|
|
8838
8966
|
* 传入顺序就是解析顺序。默认按窗口顺序传即可;如果宿主能判断用户正在看哪一段,把那段的 id 放
|
|
@@ -9209,6 +9337,8 @@ interface ImThreadStoreState {
|
|
|
9209
9337
|
display: ConversationHandleSnapshot['display'] | null;
|
|
9210
9338
|
messages: readonly ImMessageView[];
|
|
9211
9339
|
entryUnread: ConversationEntryUnreadSnapshot;
|
|
9340
|
+
/** 本次进入前的数量与定位状态;列表清零后仍保留。 */
|
|
9341
|
+
entryUnreadNavigation: ConversationHandleSnapshot['entryUnreadNavigation'];
|
|
9212
9342
|
draft: ConversationDraft | null;
|
|
9213
9343
|
loading: boolean;
|
|
9214
9344
|
ready: boolean;
|
|
@@ -9224,6 +9354,14 @@ interface ImThreadStoreActions {
|
|
|
9224
9354
|
open: (ref: ConversationRef<ProductHandleConversationType>) => Promise<ProductConversationHandle | undefined>;
|
|
9225
9355
|
invalidatePendingOpen: () => void;
|
|
9226
9356
|
loadLatest: () => Promise<boolean>;
|
|
9357
|
+
/** 读取本次进入时冻结的首未读窗口。 */
|
|
9358
|
+
loadEntryUnread: () => Promise<boolean>;
|
|
9359
|
+
/** 页面确认可阅读后结算整会话;不会自动扩大可见消息回执。 */
|
|
9360
|
+
markConversationRead: () => Promise<void>;
|
|
9361
|
+
/** 只上报当前线程实际显示的消息集合。 */
|
|
9362
|
+
markVisibleMessages: (messageIds: readonly string[]) => Promise<void>;
|
|
9363
|
+
/** 明确业务离开;账号销毁和页面卸载仍使用无副作用的 close/reset。 */
|
|
9364
|
+
leave: () => void;
|
|
9227
9365
|
loadOlder: () => Promise<boolean>;
|
|
9228
9366
|
loadNewer: () => Promise<boolean>;
|
|
9229
9367
|
loadAround: (messageId: string) => Promise<boolean>;
|