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.
package/dist/browser.js CHANGED
@@ -1 +1 @@
1
- export{A as createLazyBrowserApiProtocolClient}from'./chunk-MYXIQBZ4.js';import'./chunk-PY2CC436.js';import'./chunk-WOT6VMZA.js';
1
+ export{A as createLazyBrowserApiProtocolClient}from'./chunk-TKWU3IO7.js';import'./chunk-XICYFDN4.js';import'./chunk-WOT6VMZA.js';
@@ -42,8 +42,8 @@ interface ConversationDraft$1 {
42
42
  attachments: readonly [];
43
43
  updatedAt: number;
44
44
  }
45
- /** 消息内容类型。sticker=表情/贴图(BMessage contentType=7);call=单聊通话记录(contentType=10);transfer=转账(contentType=16);miniProgram=小程序分享卡(contentType=22);redPacket=红包卡(contentType=25);game=小游戏(contentType=27);未知 wire 正文统一归一为 unknown。 */
46
- type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'call' | 'redPacket' | 'mediaAlbum' | 'unknown';
45
+ /** 消息内容类型。sticker=表情/贴图(BMessage contentType=7);call=单聊通话记录(contentType=10);transfer=转账(contentType=16);robot=机器人卡片(contentType=18);miniProgram=小程序分享卡(contentType=22);redPacket=红包卡(contentType=25);game=小游戏(contentType=27);未知 wire 正文统一归一为 unknown。 */
46
+ type MessageContentType = 'text' | 'system' | 'image' | 'video' | 'voice' | 'file' | 'sticker' | 'contact' | 'miniProgram' | 'game' | 'transfer' | 'call' | 'redPacket' | 'mediaAlbum' | 'robot' | 'unknown';
47
47
  /**
48
48
  * 发送态(客户端态):消息从本地创建到服务端确认的生命周期。
49
49
  * `uploading` 仅媒体消息使用:文件上传阶段(uploading→pending→sending→sent);
@@ -105,6 +105,8 @@ type LastMessageSummary = {
105
105
  kind: 'contact';
106
106
  } | {
107
107
  kind: 'miniProgram';
108
+ } | {
109
+ kind: 'robot';
108
110
  } | {
109
111
  kind: 'game';
110
112
  gameType: ImGameType;
@@ -139,6 +141,13 @@ type LastMessageSummary = {
139
141
  firstItemKind?: 'image' | 'video';
140
142
  } | {
141
143
  kind: 'encrypted';
144
+ }
145
+ /**
146
+ * 密文解密失败/缺密钥占位。必须独立于 `encrypted`:后者只表示「还是密文」,
147
+ * 前者要对齐 iOS 解密失败长文案,不能再伪装成「[加密消息]」。
148
+ */
149
+ | {
150
+ kind: 'decrypt-failed';
142
151
  } | {
143
152
  kind: 'recalled';
144
153
  by: string;
@@ -185,14 +194,20 @@ interface ImVideoBody {
185
194
  width: number;
186
195
  /** 视频像素高(BMessage.height)。 */
187
196
  height: number;
188
- /** 时长(秒,BMessage.duration;proto 单位秒,contentType=3|4 有效)。 */
197
+ /** 时长(秒,可含小数);移动端旧消息的毫秒值由 SDK 转换,宿主不得猜单位。 */
189
198
  duration?: number;
199
+ /** SDK 已确认时长为秒的标记;兼容旧缓存时防止重复转换。缺省仍按公开 API 的秒约定传入。 */
200
+ durationUnit?: 'seconds';
190
201
  /** 封面帧原始字节(本地首帧截图,内嵌不单传,对应 BMessage.thumbData bytes)。UI 转 blob 渲染,无需下载即可展示封面。 */
191
202
  thumbData?: Uint8Array;
192
203
  /** 视频文件 MD5(BMessage.MD5;Android 当前未赋值,保留可选)。 */
193
204
  md5?: string;
194
- /** 文件大小(字节;协议 BMessage.fileLength 单位 KB,mapping 层换算)。 */
205
+ /** 已确认的视频大小(字节),来自本地文件或合集;历史单视频的大小单位不明确时省略,下载总量由 HTTP 响应确定。 */
195
206
  size?: number;
207
+ /** SDK 本地字节值标记,供持久化读取区分旧版本曾按 KB 换算的记录。 */
208
+ sizeUnit?: 'bytes';
209
+ /** 未确认单位的历史大小,十进制无符号整数;SDK 仅用于原样转发,宿主不得将它用于显示大小或规划下载。 */
210
+ unverifiedFileLength?: string;
196
211
  /** 视频描述(BMessage.describe,可选)。 */
197
212
  describe?: string;
198
213
  /** 文件解密 TEA key 原始字节(仅密文视频有;接收端解 BContent 后从 BMessage.teaKey 得,用于解下载到的原视频文件)。 */
@@ -327,6 +342,53 @@ interface ImMiniProgramBody {
327
342
  /** 多语言子游戏名 JSON 字符串,例如 `{"ch":"...","en":"..."}`。 */
328
343
  subGameName?: string;
329
344
  }
345
+ /**
346
+ * 机器人卡片文本模块(wire `section`)。
347
+ *
348
+ * `content` 保留原文,可含 Markdown 链接与裸 URL;宿主负责展示层解析,不在 Core 拆成富文本树。
349
+ */
350
+ interface ImRobotTextModule {
351
+ type: 'section';
352
+ textType: string;
353
+ content: string;
354
+ }
355
+ /** 机器人卡片图片组;`src` 是明文 http(s),不走消息 TEA 文件通道。 */
356
+ interface ImRobotImageGroupModule {
357
+ type: 'image-group';
358
+ images: readonly string[];
359
+ }
360
+ /**
361
+ * 机器人卡片倒计时。
362
+ *
363
+ * `endTimeMs` 已归一为 epoch 毫秒;wire 秒/毫秒混用只在 mapper 转换,宿主不要再猜单位。
364
+ */
365
+ interface ImRobotCountdownModule {
366
+ type: 'countdown';
367
+ endTimeMs: number;
368
+ }
369
+ type ImRobotModule = ImRobotTextModule | ImRobotImageGroupModule | ImRobotCountdownModule;
370
+ /** 机器人卡片底部指令;`miniProgram` 仅打开小程序时存在。 */
371
+ interface ImRobotCommand {
372
+ menuName: string;
373
+ menuId?: string;
374
+ /** wire `msg_type`;`2` 表示打开小程序,其它走固定话术。第一期宿主可只展示。 */
375
+ messageType?: string;
376
+ miniProgram?: {
377
+ path?: string;
378
+ appId?: string;
379
+ domain?: string;
380
+ };
381
+ }
382
+ /**
383
+ * 机器人卡片正文(contentType==='robot',协议 BMessage.contentType=18)。
384
+ *
385
+ * @remarks 排版数据在 `BMessage.content` JSON。解析失败仍保留 robot 类型与空模块,
386
+ * 不能退化成 unknown——iOS 此时仍画出卡片头。divider 与未识别 module 在 mapper 丢弃。
387
+ */
388
+ interface ImRobotBody {
389
+ modules: readonly ImRobotModule[];
390
+ commands: readonly (readonly ImRobotCommand[])[];
391
+ }
330
392
  /** 转账状态。0 待领取 / 1 已收款 / 2 已退还 / 3 已过期(对齐 iOS IMTranferBody,过期 3 以客户端为准)。 */
331
393
  type ImTransferStatus = 0 | 1 | 2 | 3;
332
394
  /** 转账会话类型。1 个人 / 2 群(BMessage.sessionType)。 */
@@ -521,6 +583,8 @@ interface ImMessageBody {
521
583
  redPacket?: ImRedPacketBody;
522
584
  /** contentType==='mediaAlbum' 时的媒体合集正文(配文 + 1~9 个图片/视频项)。 */
523
585
  mediaAlbum?: ImMediaAlbumBody;
586
+ /** contentType==='robot' 时的机器人卡片。 */
587
+ robot?: ImRobotBody;
524
588
  /** contentType==='unknown' 时的稳定未知正文,不含原始 wire type。 */
525
589
  unknown?: UnknownMessageBody;
526
590
  }
@@ -597,7 +661,7 @@ interface ImMessageEncryption {
597
661
  encrypted: boolean;
598
662
  /** 扩展:加密方案标识,默认 'rsa-tea'。 */
599
663
  scheme?: 'rsa-tea';
600
- /** true=密文但解密失败/缺密钥(占位,非真实空正文):供 UI 显式「无法解密」提示,与明文空消息区分。 */
664
+ /** true=密文但解密失败/缺密钥(占位,非真实空正文):供 UI 显式渲染解密失败提示,与明文空消息、普通密文区分。 */
601
665
  decryptFailed?: boolean;
602
666
  }
603
667
  /** 单条消息领域模型(§4.1)。主键为客户端生成的 id(无 serverId)。 */
@@ -2698,17 +2762,24 @@ interface MediaTransferAdapterConfig {
2698
2762
  /** 是否启用 S3 Transfer Acceleration(默认 true;`cn-` 分区没有加速端点,会强制关闭)。 */
2699
2763
  useAccelerateEndpoint?: boolean;
2700
2764
  /**
2701
- * 是否允许超过分片阈值(16MiB)的上传使用 S3 分片上传(默认 true)。
2765
+ * 统一允许 S3 分片上传和 Range 分段下载,默认 false(单次 PUT / 普通 GET)。
2766
+ * 显式 true 后仍按 16MiB 阈值及已确认下载大小选择策略,小资源不分片。
2767
+ * 开启前各桶须支持分片请求方法,并暴露上传 ETag、下载 Content-Range 与强 ETag。
2768
+ * @example { multipartTransfer: true } 同时允许大资源分片上传、下载。
2769
+ */
2770
+ multipartTransfer?: boolean;
2771
+ /**
2772
+ * 总开关开启后,是否允许超过分片阈值(16MiB)的上传使用 S3 分片上传。
2702
2773
  *
2703
2774
  * 分片相比单次 PUT 需要各物理桶的 CORS 额外放行 POST(Create/CompleteMultipartUpload)、
2704
2775
  * DELETE(AbortMultipartUpload)并 `ExposeHeaders: ETag`;未配齐时分片会直接失败。
2705
- * 部署可置 false 立即退回全量单次 PutObject(大文件回到单连接与整包内存的旧行为),无需发版。
2776
+ * @deprecated 优先使用 multipartTransfer 统一控制;本字段 false 仅进一步关闭上传,true 不能单独开启。
2706
2777
  */
2707
2778
  multipartUpload?: boolean;
2708
2779
  /**
2709
- * 大于 16MiB 的明文/simple 文件是否尝试 Range 并发下载(默认 true)。
2780
+ * 总开关开启后,大于 16MiB 的明文/simple 文件是否尝试 Range 并发下载。
2710
2781
  * 需要下载域名支持 Range,并暴露 Content-Range 与强 ETag;返回 200 时消费完整响应并记录诊断。
2711
- * 置 false 使用单次 GET。此开关不改变上传或整文件 TEA 的行为。
2782
+ * @deprecated 优先使用 multipartTransfer 统一控制;本字段 false 仅进一步关闭下载,true 不能单独开启。
2712
2783
  */
2713
2784
  rangeDownload?: boolean;
2714
2785
  /**
@@ -4044,6 +4115,8 @@ type ConversationLastMessageSummary = {
4044
4115
  kind: 'contact';
4045
4116
  } | {
4046
4117
  kind: 'miniProgram';
4118
+ } | {
4119
+ kind: 'robot';
4047
4120
  } | {
4048
4121
  kind: 'transfer';
4049
4122
  } | {
@@ -4074,6 +4147,10 @@ type ConversationLastMessageSummary = {
4074
4147
  firstItemKind?: 'image' | 'video';
4075
4148
  } | {
4076
4149
  kind: 'encrypted';
4150
+ }
4151
+ /** 密文解密失败占位;与 `encrypted` 分开,列表走独立 iOS 长文案。 */
4152
+ | {
4153
+ kind: 'decrypt-failed';
4077
4154
  } | {
4078
4155
  kind: 'recalled';
4079
4156
  by: string;
@@ -4525,7 +4602,7 @@ interface ConversationMessageApi {
4525
4602
  sendText: (text: string, options?: TextMessageOptions) => Promise<SendMessageResult>;
4526
4603
  /** 分享个人、普通群或社群名片;发送目标仍由当前 handle 的精确会话身份决定。 */
4527
4604
  sendContact: (contact: ContactCardInput, options?: ContactMessageOptions) => Promise<SendMessageResult>;
4528
- /** 读取图片 Blob 并进入既有图片上传/加密/Outbox 链路;图片 caption 当前显式 unsupported。 */
4605
+ /** 发送 JPEG、PNG 或 WebP 原图;核对文件头和 MIME,不支持的格式返回 IM_SDK_IMAGE_FORMAT_UNSUPPORTED。图片 caption 当前显式 unsupported。 */
4529
4606
  sendImage: (file: File | Blob, options?: ImageMessageOptions) => Promise<SendMessageResult>;
4530
4607
  /** 读取视频 Blob 并发送;caption 使用已验证的 BMessage.describe。 */
4531
4608
  sendVideo: (file: File | Blob, options?: VideoMessageOptions) => Promise<SendMessageResult>;
@@ -4542,7 +4619,8 @@ interface ConversationMessageApi {
4542
4619
  * SDK 内部回落成普通图片/视频消息(三端一致)。**校验是整条的**——某一项超限会拒绝整条,
4543
4620
  * 因为协议上它就是一条消息,没有「发一半」这种状态。
4544
4621
  *
4545
- * GIF 不能进合集(三端一致),调用方要先按 MIME 把它拆出去走 `sendGif`。
4622
+ * 图片仅支持 JPEG、PNG、WebP,任一项格式不支持时整批返回 IM_SDK_IMAGE_FORMAT_UNSUPPORTED。
4623
+ * GIF 不能进合集,调用方应先用 Chat Kit 分类工具拆出去走 `sendGif`。
4546
4624
  */
4547
4625
  sendMediaAlbum: (items: readonly MediaAlbumItemInput[], options?: MediaAlbumMessageOptions) => Promise<SendMessageResult>;
4548
4626
  /** 发送已经托管在远端的静态贴图;资源和贴图包身份均为必填合同。 */
@@ -4994,6 +5072,19 @@ interface ImMediaTasksApi {
4994
5072
  file: Blob;
4995
5073
  signal?: AbortSignal;
4996
5074
  }) => Promise<(TKind extends 'video' ? VideoPreviewMetadata : ImagePreviewMetadata) | null>;
5075
+ /**
5076
+ * 从本地视频提取仅供页面展示的高清 JPEG 封面,不上传、不下载、不写缓存。
5077
+ *
5078
+ * 长边最多 960px 且不放大原视频;与发送预读共用同一解码执行器。返回 Blob 由宿主创建和释放
5079
+ * object URL,不能作为 localPreviewMetadata 发进消息正文。读取失败返回 null 并记录诊断;
5080
+ * 宿主取消抛 AbortError,运行时失效或未装配能力时抛与 prepareLocalPreview 相同的明确错误。
5081
+ * @param input.file 本地或已解密的完整视频 Blob。
5082
+ * @param input.signal 页面卸载、换源或切会话时取消这次抽帧。
5083
+ */
5084
+ prepareLocalVideoPoster: (input: {
5085
+ file: Blob;
5086
+ signal?: AbortSignal;
5087
+ }) => Promise<Blob | null>;
4997
5088
  }
4998
5089
 
4999
5090
  /**
@@ -5546,15 +5637,16 @@ interface ImSettingsApi {
5546
5637
  *
5547
5638
  * 形状 = im-browser `MediaTransferAdapterConfig`:必填 `getUploadCredentials`(按逻辑桶名向宿主自己的 BFF 申请
5548
5639
  * STS 临时凭证)+ 各 `MediaKind`(image/video/voice/file/sticker)的**逻辑桶名** + 可选 `channelBuckets`(社群会话
5549
- * 按类型覆盖)、`avatarBucket`、`useAccelerateEndpoint`、`multipartUpload`、`maxConcurrentUploads`。
5640
+ * 按类型覆盖)、`avatarBucket`、`useAccelerateEndpoint`、`multipartTransfer`、`maxConcurrentUploads`。
5550
5641
  *
5551
5642
  * 上传凭证由业务后端按登录态签发(与 iOS、prod H5 同一个接口),回包同时给出**物理桶**、区域、`key_prefix` 和
5552
5643
  * 公开访问域名;SDK 据此拼 object key 与消息体 URL,宿主 env 里配的只是申请凭证用的逻辑桶名。凭证缓存(本地
5553
5644
  * 1 小时、按服务端过期时间提前 5 分钟失效)、同桶单飞与失败重签由 SDK 负责,宿主只需提供「打一次接口」的纯函数。
5554
5645
  *
5555
- * ⚠ 各 bucket 需在对象存储侧配置 CORS 允许本站 origin 的 PUT + GET;超过 16MiB 的上传走 S3 分片,另需放行
5646
+ * 默认单次 PUT/GET;仅 multipartTransfer=true 才允许大资源分片上传、下载。
5647
+ * 各 bucket 需在对象存储侧配置 CORS 允许本站 origin 的 PUT + GET;开启分片后,超过 16MiB 的上传另需放行
5556
5648
  * POST(Create/CompleteMultipartUpload)、DELETE(AbortMultipartUpload)并 ExposeHeaders: ETag。CORS 未配齐时
5557
- * 可用 `multipartUpload: false` 退回全量单次 PutObject。
5649
+ * 下载还需暴露 Content-Range 与强 ETag;multipartTransfer=false 统一关闭分片上传和下载。
5558
5650
  * ⚠ 并发字段只由 SDK core 的媒体编排消费;adapter 会忽略该字段。高内存设备可设置 5-6,低内存设备建议 2-3。
5559
5651
  */
5560
5652
  type ImMediaConfig = MediaTransferAdapterConfig;
@@ -6197,7 +6289,7 @@ declare function useImApplicationsStore(pinia?: Pinia): ImApplicationsStore;
6197
6289
  * 二期收敛:kit 框架无关层不再直接产中文,改产本联合里的码 + 参数(如 {reason}/{label}/{size}),由宿主经 im-i18n 渲染。
6198
6290
  * 动态原始报错(error.message)作为 `{reason}` 参数拼接,不入 catalog(属诊断,不翻译)。
6199
6291
  */
6200
- 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';
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.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';
6201
6293
 
6202
6294
  /**
6203
6295
  * 本文件管理图片和视频本地预览地址的完整生命周期。