k2-im 0.2.15 → 0.2.17
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/chat-kit-pinia.d.ts +77 -18
- package/dist/chat-kit-vue.d.ts +7 -5
- package/dist/chat-kit.d.ts +138 -23
- package/dist/index.d.ts +142 -26
- package/dist/modules/api-protocol-client/src/client.js +1 -1
- package/dist/modules/api-protocol-client/src/nonce.js +1 -1
- package/dist/modules/crypto/browser.js +1 -1
- package/dist/modules/crypto/driver.js +1 -1
- package/dist/modules/crypto/vendor/crypto/index_bg.js +1 -1
- package/dist/modules/im-browser/src/http/cm-http-adapter.js +1 -1
- package/dist/modules/im-browser/src/http/request-timeout.js +1 -0
- package/dist/modules/im-browser/src/http/requests/core-json-request.js +1 -1
- package/dist/modules/im-browser/src/http/requests/get-conversation-background-presets.js +1 -1
- package/dist/modules/im-browser/src/http/requests/pull-offline-channel.js +1 -1
- package/dist/modules/im-browser/src/http/session-favorite-http-adapter.js +1 -1
- package/dist/modules/im-browser/src/media/media-download-request.js +1 -0
- package/dist/modules/im-browser/src/media/media-downloader.js +1 -1
- package/dist/modules/im-browser/src/media/media-preview-adapter.js +1 -1
- package/dist/modules/im-browser/src/media/media-preview-preparation-executor.js +1 -1
- package/dist/modules/im-browser/src/media/media-transfer-adapter.js +1 -1
- package/dist/modules/im-browser/src/media/media-transfer-policy.js +1 -1
- package/dist/modules/im-browser/src/media/webp-encoder.js +1 -0
- package/dist/modules/im-browser/src/media/webp-worker-factory.js +1 -0
- package/dist/modules/im-browser/src/network/browser-connection-ownership.js +1 -1
- package/dist/modules/im-browser/src/storage/indexed-db-storage-adapter.js +1 -1
- package/dist/modules/im-chat-kit/src/pinia/composer.store.js +1 -1
- package/dist/modules/im-chat-kit/src/pinia/expression.store.js +1 -1
- package/dist/modules/im-chat-kit/src/runtime/chat-runtime.js +1 -1
- package/dist/modules/im-chat-kit/src/runtime/media-object-url-registry.js +1 -1
- package/dist/modules/im-chat-kit/src/services/media.service.js +1 -1
- package/dist/modules/im-chat-kit/src/utils/emoji/unicode.js +1 -1
- package/dist/modules/im-chat-kit/src/utils/media-transfer-presentation.js +1 -1
- package/dist/modules/im-chat-kit/src/vue/thread/thread-visibility-target-group.js +1 -1
- package/dist/modules/im-chat-kit/src/vue/thread/thread-visibility-targets.js +1 -1
- package/dist/modules/im-core/src/abort.js +1 -1
- package/dist/modules/im-core/src/mapping/group-offline-mapper.js +1 -1
- package/dist/modules/im-core/src/mapping/message-id.js +1 -1
- package/dist/modules/im-core/src/media-thumbnail-policy.js +1 -1
- package/dist/modules/im-core/src/media-thumbnail.js +1 -1
- package/dist/modules/im-core/src/message-flow/media/media-sender.js +1 -1
- package/dist/modules/im-core/src/state/domain-state.js +1 -1
- package/dist/modules/im-sdk/src/create-im-client.js +1 -1
- package/dist/modules/im-sdk/src/product/conversation-handle.js +1 -1
- package/dist/modules/im-sdk/src/product/diagnostic-memory-buffer.js +1 -1
- package/dist/modules/im-sdk/src/product/media.js +1 -1
- package/dist/modules/im-sdk/src/runtime/history-page-size.js +1 -0
- package/dist/modules/im-sdk/src/runtime/local-media-preview.js +1 -1
- package/dist/modules/im-sdk/src/runtime/recent-history-fetcher.js +1 -1
- package/dist/modules/im-sdk/src/runtime/recent-history-prefetch.js +1 -1
- package/dist/modules/im-sdk/src/runtime/session-runtime.js +1 -1
- package/dist/request-crypto.d.ts +3 -2
- package/dist/sdk.d.ts +75 -21
- package/dist/vendor/crypto/index_bg.wasm +0 -0
- package/dist/vendor/webp/LICENSE.jsquash +201 -0
- package/dist/vendor/webp/LICENSE.libwebp +29 -0
- package/dist/vendor/webp/NOTICE +3 -0
- package/dist/webp.worker.js +3 -0
- package/package.json +1 -1
package/dist/chat-kit-pinia.d.ts
CHANGED
|
@@ -1943,7 +1943,7 @@ interface ImHttpPort {
|
|
|
1943
1943
|
}
|
|
1944
1944
|
|
|
1945
1945
|
/** 可持久化的媒体资产类型;未注册类型必须跳过缓存,不能回退到其它类型。 */
|
|
1946
|
-
type MediaAssetKind = 'image' | 'video' | 'file';
|
|
1946
|
+
type MediaAssetKind = 'image' | 'image-display' | 'video-poster' | 'video' | 'file';
|
|
1947
1947
|
/** 持久媒体资产的稳定键。resourceVersion 由远端资源标识派生,避免同消息替换资源后误命中旧缓存。 */
|
|
1948
1948
|
interface MediaAssetCacheKey {
|
|
1949
1949
|
kind: MediaAssetKind;
|
|
@@ -1992,7 +1992,10 @@ interface MediaAssetCachePort {
|
|
|
1992
1992
|
get: (key: MediaAssetCacheKey) => Promise<MediaAssetCacheEntry | null>;
|
|
1993
1993
|
/** 按输入顺序检查完整资源是否存在且未过期;不读取 Blob、不延长闲置期限,存储故障必须抛出。 */
|
|
1994
1994
|
hasMany?: (keys: readonly MediaAssetCacheKey[]) => Promise<readonly boolean[]>;
|
|
1995
|
-
|
|
1995
|
+
/** isCurrent 在排队结束和写事务开始前复核;已失效的生成结果返回 skipped,已开始的事务不撤销。 */
|
|
1996
|
+
put: (entry: MediaAssetCacheEntry, options?: {
|
|
1997
|
+
isCurrent?: () => boolean;
|
|
1998
|
+
}) => Promise<'stored' | 'skipped'>;
|
|
1996
1999
|
clear: () => Promise<void>;
|
|
1997
2000
|
/** 删除超过闲置期限的完整持久副本;不撤销已经返回的 Blob 或宿主持有的播放地址。 */
|
|
1998
2001
|
prune?: () => Promise<void>;
|
|
@@ -3036,13 +3039,13 @@ interface MediaTransferAdapterConfig {
|
|
|
3036
3039
|
useAccelerateEndpoint?: boolean;
|
|
3037
3040
|
/**
|
|
3038
3041
|
* 统一允许 S3 分片上传和 Range 分段下载,默认 false(单次 PUT / 普通 GET)。
|
|
3039
|
-
* 显式 true
|
|
3042
|
+
* 显式 true 后,上传对象达到 8 MiB 使用 Multipart;上传片长与下载段长均为 16 MiB。
|
|
3040
3043
|
* 开启前各桶须支持分片请求方法,并暴露上传 ETag、下载 Content-Range 与强 ETag。
|
|
3041
3044
|
* @example { multipartTransfer: true } 同时允许大资源分片上传、下载。
|
|
3042
3045
|
*/
|
|
3043
3046
|
multipartTransfer?: boolean;
|
|
3044
3047
|
/**
|
|
3045
|
-
*
|
|
3048
|
+
* 总开关开启后,是否允许达到分片阈值(8 MiB)的上传使用 S3 分片上传。
|
|
3046
3049
|
*
|
|
3047
3050
|
* 分片相比单次 PUT 需要各物理桶的 CORS 额外放行 POST(Create/CompleteMultipartUpload)、
|
|
3048
3051
|
* DELETE(AbortMultipartUpload)并 `ExposeHeaders: ETag`;未配齐时分片会直接失败。
|
|
@@ -3058,8 +3061,8 @@ interface MediaTransferAdapterConfig {
|
|
|
3058
3061
|
/**
|
|
3059
3062
|
* 媒体发送阶段的并发上限;由 im-core 消费,限制媒体任务数而非分片请求数。
|
|
3060
3063
|
*
|
|
3061
|
-
*
|
|
3062
|
-
* 缺省 5
|
|
3064
|
+
* 并发按媒体体积分两档:小于分片阈值(8 MiB)的非视频媒体走小文件档,
|
|
3065
|
+
* 缺省 5;视频与达到阈值(或字节数未知)的内容走大文件档,缺省 3。
|
|
3063
3066
|
* 分档只限制媒体任务数;实际 PUT/UploadPart 另受 adapter 的六路数据请求限制。
|
|
3064
3067
|
* 两档都只接受 1-6 的整数,超出范围由 core 显式报错。
|
|
3065
3068
|
* - 传一个数字:所有媒体共用这一个并发数,与分档前的语义一致。
|
|
@@ -3358,13 +3361,13 @@ interface MediaAlbumMessageOptions {
|
|
|
3358
3361
|
* 本地视频的固有尺寸、时长与首帧封面。
|
|
3359
3362
|
*
|
|
3360
3363
|
* @remarks 宿主可从本地 object URL 解码首个可展示帧,使上传占位从首次渲染就使用真实比例和主图。
|
|
3361
|
-
* `posterData`
|
|
3364
|
+
* `posterData` 是等比缩放后的静态 WebP(兼容已有 JPEG/PNG);存在时会作为消息 `thumbData` 随正文发送。宽高必须是有限正数,
|
|
3362
3365
|
* duration 存在时必须是有限正数,posterData 必须是非空且不超过共享单项消息容量的 Uint8Array;合集发送会按项数复核容量。
|
|
3363
3366
|
*/
|
|
3364
3367
|
interface VideoPreviewMetadata extends ImagePreviewMetadata {
|
|
3365
3368
|
/** 秒。 */
|
|
3366
3369
|
duration?: number;
|
|
3367
|
-
/** 本地首个可展示帧生成的
|
|
3370
|
+
/** 本地首个可展示帧生成的 WebP 或已有 JPEG/PNG 字节。 */
|
|
3368
3371
|
posterData?: Uint8Array;
|
|
3369
3372
|
}
|
|
3370
3373
|
/**
|
|
@@ -5397,6 +5400,17 @@ interface ImMessageRef {
|
|
|
5397
5400
|
*/
|
|
5398
5401
|
itemIndex?: number;
|
|
5399
5402
|
}
|
|
5403
|
+
/** 单次媒体下载的等待与调度选项;相同精确消息引用仍共用一次实际下载。 */
|
|
5404
|
+
interface ImMediaDownloadOptions {
|
|
5405
|
+
/**
|
|
5406
|
+
* 只取消本次调用;其它调用者仍需要结果时保留共享下载。
|
|
5407
|
+
* 最后一个可取消调用者退出且没有无 signal 调用者时,才中止底层任务。
|
|
5408
|
+
* 取消以 IM_SDK_MEDIA_DOWNLOAD_CANCELED 拒绝本次 Promise,不返回部分文件。
|
|
5409
|
+
*/
|
|
5410
|
+
signal?: AbortSignal;
|
|
5411
|
+
/** 默认 interactive;background 在空闲名额中排在交互下载之后,不能抢占已发请求。 */
|
|
5412
|
+
priority?: 'background' | 'interactive';
|
|
5413
|
+
}
|
|
5400
5414
|
/**
|
|
5401
5415
|
* 可观察媒体上传/下载任务的只读产品投影。
|
|
5402
5416
|
*
|
|
@@ -5495,7 +5509,8 @@ interface ImMediaTasksApi {
|
|
|
5495
5509
|
*/
|
|
5496
5510
|
subscribe: (listener: (tasks: readonly ImMediaTask[]) => void) => () => void;
|
|
5497
5511
|
/**
|
|
5498
|
-
* 取消 queued/running 任务;上传委托 core
|
|
5512
|
+
* 取消 queued/running 任务;上传委托 core,下载中止共享任务并取消所有调用者。
|
|
5513
|
+
* 只需结束某次下载等待时,应使用 download 的 signal。
|
|
5499
5514
|
* @throws 未知任务、非法状态或底层未受理时以稳定 `IM_SDK_MEDIA_TASK_*` 错误拒绝。
|
|
5500
5515
|
*/
|
|
5501
5516
|
cancel: (taskId: string, options?: {
|
|
@@ -5530,10 +5545,13 @@ interface ImMediaTasksApi {
|
|
|
5530
5545
|
restartDownload?: boolean;
|
|
5531
5546
|
}) => Promise<void>;
|
|
5532
5547
|
/**
|
|
5533
|
-
*
|
|
5548
|
+
* 下载并按消息正文合同解密,同一精确消息引用共用实际下载,成功返回 Blob。
|
|
5549
|
+
* 不带 signal 的并发调用保留共享 Promise;带 signal 的调用独立等待和取消,不影响其它调用者。
|
|
5550
|
+
* 后加入的交互调用会提高共享下载优先级;prioritizeDownload 指定的最近预览仍优先于其它任务。
|
|
5534
5551
|
* @throws 消息不存在/非媒体/无远端 URL/未装配 capability、传输失败、取消或 teardown 均以稳定错误拒绝,不返回空 Blob。
|
|
5552
|
+
* @example const blob = await client.media.download(messageRef, { signal: controller.signal, priority: 'background' })
|
|
5535
5553
|
*/
|
|
5536
|
-
download: (message: ImMessageRef) => Promise<Blob>;
|
|
5554
|
+
download: (message: ImMessageRef, options?: ImMediaDownloadOptions) => Promise<Blob>;
|
|
5537
5555
|
/**
|
|
5538
5556
|
* 将最近预览的精确媒体项设为最高下载优先级,不新建或取消任务。
|
|
5539
5557
|
* 下一空闲任务/分片请求名额优先给该项;已发请求不中断,关闭播放器不撤销优先级。
|
|
@@ -5549,7 +5567,7 @@ interface ImMediaTasksApi {
|
|
|
5549
5567
|
*/
|
|
5550
5568
|
getCached: (message: ImMessageRef) => Promise<Blob | null>;
|
|
5551
5569
|
/**
|
|
5552
|
-
* 为宿主手里的**本地**图片/视频文件预读展示元信息:尺寸、视频时长、视频首帧封面的
|
|
5570
|
+
* 为宿主手里的**本地**图片/视频文件预读展示元信息:尺寸、视频时长、视频首帧封面的 WebP 字节。
|
|
5553
5571
|
*
|
|
5554
5572
|
* 给「发送前预览」这类场景用:宿主要在用户还没点发送时就把缩略图画出来,而浏览器读不出视频的
|
|
5555
5573
|
* 首帧——`<video preload="metadata">` 在 iOS Safari 上只加载元信息、**不解码任何一帧**,
|
|
@@ -5557,7 +5575,7 @@ interface ImMediaTasksApi {
|
|
|
5557
5575
|
*
|
|
5558
5576
|
* 返回的对象可以**原样**作为 `localPreviewMetadata` 交给 `sendImage` / `sendVideo` /
|
|
5559
5577
|
* `sendMediaAlbum`:发送链路会复用可用元信息;合集项超出其可用消息空间时重新生成封面。
|
|
5560
|
-
* posterData 使用共享自适应发送规格(视频
|
|
5578
|
+
* posterData 使用共享自适应发送规格(视频 WebP,长边最多 1440px,目标 16 KiB、硬上限 32 KiB);includeDisplayPoster 可在同一次解码中额外生成
|
|
5561
5579
|
* 仅供页面显示的高清 displayPoster(长边最多 960),不得绕过发送校验直接用它替换 posterData。
|
|
5562
5580
|
*
|
|
5563
5581
|
* @param input.kind 按文件类型选解码路径;`'video'` 才会抽首帧与读时长。
|
|
@@ -5577,16 +5595,26 @@ interface ImMediaTasksApi {
|
|
|
5577
5595
|
includeDisplayPoster?: boolean;
|
|
5578
5596
|
}) => Promise<(TKind extends 'video' ? LocalVideoPreviewMetadata : ImagePreviewMetadata) | null>;
|
|
5579
5597
|
/**
|
|
5580
|
-
*
|
|
5598
|
+
* 从本地视频或已有截图生成气泡封面;传入消息身份时复用独立持久缓存,不下载或上传。
|
|
5581
5599
|
*
|
|
5582
5600
|
* 长边最多 960px 且不放大原视频;与发送预读共用同一解码执行器。返回 Blob 由宿主创建和释放
|
|
5583
5601
|
* object URL,不能作为 localPreviewMetadata 发进消息正文。读取失败返回 null 并记录诊断;
|
|
5584
5602
|
* 宿主取消抛 AbortError,运行时失效或未装配能力时抛与 prepareLocalPreview 相同的明确错误。
|
|
5585
|
-
* @param input.file 本地或已解密的完整视频 Blob
|
|
5603
|
+
* @param input.file 本地或已解密的完整视频 Blob;已有 poster 时可以不传。
|
|
5604
|
+
* @param input.poster 发送前已经提取的截图,避免重新加载视频抽帧。
|
|
5605
|
+
* @param input.message 可选消息身份,用于持久保存封面。
|
|
5606
|
+
* @param input.expectedResourceUrl 取得源文件前的资源地址,防止换图后的旧结果污染缓存。
|
|
5586
5607
|
* @param input.signal 页面卸载、换源或切会话时取消这次抽帧。
|
|
5587
5608
|
*/
|
|
5588
5609
|
prepareLocalVideoPoster: (input: {
|
|
5589
|
-
file
|
|
5610
|
+
file?: Blob;
|
|
5611
|
+
poster?: Blob;
|
|
5612
|
+
message?: ImMessageRef;
|
|
5613
|
+
expectedResourceUrl?: string;
|
|
5614
|
+
signal?: AbortSignal;
|
|
5615
|
+
}) => Promise<Blob | null>;
|
|
5616
|
+
/** 只读视频气泡封面缓存;不下载、不抽帧,未命中返回 null。 */
|
|
5617
|
+
getCachedVideoPoster: (message: ImMessageRef, options?: {
|
|
5590
5618
|
signal?: AbortSignal;
|
|
5591
5619
|
}) => Promise<Blob | null>;
|
|
5592
5620
|
/**
|
|
@@ -5602,6 +5630,34 @@ interface ImMediaTasksApi {
|
|
|
5602
5630
|
file: Blob;
|
|
5603
5631
|
signal?: AbortSignal;
|
|
5604
5632
|
}) => Promise<Blob | null>;
|
|
5633
|
+
/**
|
|
5634
|
+
* 从本机原图生成独立的静态显示图,供 PC/H5 气泡使用;不下载、不上传、不改原图与消息尺寸。
|
|
5635
|
+
* 传入消息引用时先查独立的显示图缓存;稳定远端资源的结果可持久保存,本地待上传资源只生成。
|
|
5636
|
+
* 所有浏览器可解码格式均处理;最长边不超过 maxSize 且不放大,透明图优先保留透明度。
|
|
5637
|
+
* WebP 质量 0.85,最低 0.82,目标 256 KiB、最多 512 KiB;超过字节预算时可继续缩小,失败返回 null 并记录诊断。
|
|
5638
|
+
* 取消、账号失效、能力缺失和非法参数明确拒绝;返回 Blob 的 object URL 由宿主管理。
|
|
5639
|
+
* @param input.file 原始或已解密的完整图片 Blob,不会被修改。
|
|
5640
|
+
* @param input.maxSize 显示图最长边上限,必须是 1 到 2048 的整数。
|
|
5641
|
+
* @param input.signal 页面退出、资源失效时取消准备。
|
|
5642
|
+
* @param input.message 可选的精确消息引用,用于按消息、合集项、资源版本和尺寸隔离显示图缓存。
|
|
5643
|
+
* @param input.expectedResourceUrl 取得 file 前记录的消息资源地址;与 message 配合使用,不匹配时返回 null,防止旧文件写入新资源缓存。
|
|
5644
|
+
* @example const display = await client.media.prepareLocalImageDisplay({ file: original, maxSize: 1440 })
|
|
5645
|
+
*/
|
|
5646
|
+
prepareLocalImageDisplay: (input: {
|
|
5647
|
+
file: Blob;
|
|
5648
|
+
maxSize: number;
|
|
5649
|
+
message?: ImMessageRef;
|
|
5650
|
+
expectedResourceUrl?: string;
|
|
5651
|
+
signal?: AbortSignal;
|
|
5652
|
+
}) => Promise<Blob | null>;
|
|
5653
|
+
/**
|
|
5654
|
+
* 仅读取指定消息和尺寸的持久显示图,不下载原图、不编码;未命中或读取期间资源失效返回 null。
|
|
5655
|
+
* maxSize 必须是 1 到 2048 的整数;取消、账号失效、存储读取失败明确拒绝。
|
|
5656
|
+
*/
|
|
5657
|
+
getCachedImageDisplay: (message: ImMessageRef, options: {
|
|
5658
|
+
maxSize: number;
|
|
5659
|
+
signal?: AbortSignal;
|
|
5660
|
+
}) => Promise<Blob | null>;
|
|
5605
5661
|
}
|
|
5606
5662
|
|
|
5607
5663
|
/**
|
|
@@ -6281,7 +6337,7 @@ interface ImSettingsApi {
|
|
|
6281
6337
|
* 1 小时、按服务端过期时间提前 5 分钟失效)、同桶并发请求复用和失败后重新签发由 SDK 负责,宿主只需提供「打一次接口」的纯函数。
|
|
6282
6338
|
*
|
|
6283
6339
|
* 默认单次 PUT/GET;仅 multipartTransfer=true 才允许大资源分片上传、下载。
|
|
6284
|
-
* 各 bucket 需在对象存储侧配置 CORS 允许本站 origin 的 PUT + GET
|
|
6340
|
+
* 各 bucket 需在对象存储侧配置 CORS 允许本站 origin 的 PUT + GET;开启分片后,达到 8 MiB 的上传另需放行
|
|
6285
6341
|
* POST(Create/CompleteMultipartUpload)、DELETE(AbortMultipartUpload)并 ExposeHeaders: ETag。CORS 未配齐时
|
|
6286
6342
|
* 下载还需暴露 Content-Range 与强 ETag;multipartTransfer=false 统一关闭分片上传和下载。
|
|
6287
6343
|
* ⚠ 并发字段只由 SDK core 的媒体编排消费;adapter 会忽略该字段。高内存设备可设置 5-6,低内存设备建议 2-3。
|
|
@@ -7140,6 +7196,8 @@ interface ChatMediaMessageRef {
|
|
|
7140
7196
|
* 后绑定的一格把先绑定的挤掉并撤销其地址。单媒体消息不传这个字段。
|
|
7141
7197
|
*/
|
|
7142
7198
|
itemIndex?: number;
|
|
7199
|
+
/** 查询时校验当前正文资源地址;不匹配即未命中,不根据页面历史推断租约身份。 */
|
|
7200
|
+
resourceUrl?: string;
|
|
7143
7201
|
}
|
|
7144
7202
|
/**
|
|
7145
7203
|
* Chat Kit 提供给共享 Store 和业务 Service 的账号运行接口。
|
|
@@ -7332,8 +7390,9 @@ interface ChatRuntime {
|
|
|
7332
7390
|
* 媒体上传成功并获得远端资源后,结束本地预览的“上传源”职责。
|
|
7333
7391
|
*
|
|
7334
7392
|
* 图片和视频保留为可淘汰本地缓存,使发送者短时间内查看无需重新下载;GIF 直接释放。
|
|
7393
|
+
* resourceUrl 指定上传完成后的正文地址,用于绑定源文件身份;后续换地址会移除旧缓存。
|
|
7335
7394
|
*/
|
|
7336
|
-
resolveMediaPreviewToRemote: (ref: ChatMediaMessageRef, contentType: 'image' | 'video' | 'sticker', byteSize?: number) => void;
|
|
7395
|
+
resolveMediaPreviewToRemote: (ref: ChatMediaMessageRef, contentType: 'image' | 'video' | 'sticker', byteSize?: number, resourceUrl?: string) => void;
|
|
7337
7396
|
/** 为指定消息取得本地媒体播放租约;没有本地缓存时返回 `undefined`,调用方应改用远端资源。 */
|
|
7338
7397
|
acquireMediaBlob: (ref: ChatMediaMessageRef) => MediaObjectUrlLease | undefined;
|
|
7339
7398
|
/** 只读检查完整本地媒体是否可用,不取得租约、不改变缓存淘汰顺序。 */
|
package/dist/chat-kit-vue.d.ts
CHANGED
|
@@ -1272,13 +1272,13 @@ interface MediaTransferAdapterConfig {
|
|
|
1272
1272
|
useAccelerateEndpoint?: boolean;
|
|
1273
1273
|
/**
|
|
1274
1274
|
* 统一允许 S3 分片上传和 Range 分段下载,默认 false(单次 PUT / 普通 GET)。
|
|
1275
|
-
* 显式 true
|
|
1275
|
+
* 显式 true 后,上传对象达到 8 MiB 使用 Multipart;上传片长与下载段长均为 16 MiB。
|
|
1276
1276
|
* 开启前各桶须支持分片请求方法,并暴露上传 ETag、下载 Content-Range 与强 ETag。
|
|
1277
1277
|
* @example { multipartTransfer: true } 同时允许大资源分片上传、下载。
|
|
1278
1278
|
*/
|
|
1279
1279
|
multipartTransfer?: boolean;
|
|
1280
1280
|
/**
|
|
1281
|
-
*
|
|
1281
|
+
* 总开关开启后,是否允许达到分片阈值(8 MiB)的上传使用 S3 分片上传。
|
|
1282
1282
|
*
|
|
1283
1283
|
* 分片相比单次 PUT 需要各物理桶的 CORS 额外放行 POST(Create/CompleteMultipartUpload)、
|
|
1284
1284
|
* DELETE(AbortMultipartUpload)并 `ExposeHeaders: ETag`;未配齐时分片会直接失败。
|
|
@@ -1294,8 +1294,8 @@ interface MediaTransferAdapterConfig {
|
|
|
1294
1294
|
/**
|
|
1295
1295
|
* 媒体发送阶段的并发上限;由 im-core 消费,限制媒体任务数而非分片请求数。
|
|
1296
1296
|
*
|
|
1297
|
-
*
|
|
1298
|
-
* 缺省 5
|
|
1297
|
+
* 并发按媒体体积分两档:小于分片阈值(8 MiB)的非视频媒体走小文件档,
|
|
1298
|
+
* 缺省 5;视频与达到阈值(或字节数未知)的内容走大文件档,缺省 3。
|
|
1299
1299
|
* 分档只限制媒体任务数;实际 PUT/UploadPart 另受 adapter 的六路数据请求限制。
|
|
1300
1300
|
* 两档都只接受 1-6 的整数,超出范围由 core 显式报错。
|
|
1301
1301
|
* - 传一个数字:所有媒体共用这一个并发数,与分档前的语义一致。
|
|
@@ -1581,7 +1581,7 @@ type ImRequestErrorHandler = (issue: ImRequestError) => void | Promise<void>;
|
|
|
1581
1581
|
* 1 小时、按服务端过期时间提前 5 分钟失效)、同桶并发请求复用和失败后重新签发由 SDK 负责,宿主只需提供「打一次接口」的纯函数。
|
|
1582
1582
|
*
|
|
1583
1583
|
* 默认单次 PUT/GET;仅 multipartTransfer=true 才允许大资源分片上传、下载。
|
|
1584
|
-
* 各 bucket 需在对象存储侧配置 CORS 允许本站 origin 的 PUT + GET
|
|
1584
|
+
* 各 bucket 需在对象存储侧配置 CORS 允许本站 origin 的 PUT + GET;开启分片后,达到 8 MiB 的上传另需放行
|
|
1585
1585
|
* POST(Create/CompleteMultipartUpload)、DELETE(AbortMultipartUpload)并 ExposeHeaders: ETag。CORS 未配齐时
|
|
1586
1586
|
* 下载还需暴露 Content-Range 与强 ETag;multipartTransfer=false 统一关闭分片上传和下载。
|
|
1587
1587
|
* ⚠ 并发字段只由 SDK core 的媒体编排消费;adapter 会忽略该字段。高内存设备可设置 5-6,低内存设备建议 2-3。
|
|
@@ -2079,6 +2079,8 @@ interface ThreadVisibilityTargetsOptions<TItem> {
|
|
|
2079
2079
|
onScrollingChange?: (scrolling: boolean) => void;
|
|
2080
2080
|
/** 节点在滚动停止后仍可见时首次触发,适合安排 cache-only 读取。 */
|
|
2081
2081
|
onActivated?: (item: TItem) => void;
|
|
2082
|
+
/** 当前与滚动根有实际交集的目标;滚动中仍更新,不受驻留、近邻范围或稳定数量限制。 */
|
|
2083
|
+
onViewportVisibleChange?: (items: readonly TItem[]) => void;
|
|
2082
2084
|
/** 每次稳定可见集合变化时触发,顺序按节点距离滚动根中心由近到远。 */
|
|
2083
2085
|
onSettledVisibleChange?: (items: readonly TItem[]) => void;
|
|
2084
2086
|
/** 激活和稳定集合要求的最小可见比例;默认只要有交集即可。 */
|
package/dist/chat-kit.d.ts
CHANGED
|
@@ -1940,7 +1940,7 @@ interface ImHttpPort {
|
|
|
1940
1940
|
}
|
|
1941
1941
|
|
|
1942
1942
|
/** 可持久化的媒体资产类型;未注册类型必须跳过缓存,不能回退到其它类型。 */
|
|
1943
|
-
type MediaAssetKind = 'image' | 'video' | 'file';
|
|
1943
|
+
type MediaAssetKind = 'image' | 'image-display' | 'video-poster' | 'video' | 'file';
|
|
1944
1944
|
/** 持久媒体资产的稳定键。resourceVersion 由远端资源标识派生,避免同消息替换资源后误命中旧缓存。 */
|
|
1945
1945
|
interface MediaAssetCacheKey {
|
|
1946
1946
|
kind: MediaAssetKind;
|
|
@@ -1989,7 +1989,10 @@ interface MediaAssetCachePort {
|
|
|
1989
1989
|
get: (key: MediaAssetCacheKey) => Promise<MediaAssetCacheEntry | null>;
|
|
1990
1990
|
/** 按输入顺序检查完整资源是否存在且未过期;不读取 Blob、不延长闲置期限,存储故障必须抛出。 */
|
|
1991
1991
|
hasMany?: (keys: readonly MediaAssetCacheKey[]) => Promise<readonly boolean[]>;
|
|
1992
|
-
|
|
1992
|
+
/** isCurrent 在排队结束和写事务开始前复核;已失效的生成结果返回 skipped,已开始的事务不撤销。 */
|
|
1993
|
+
put: (entry: MediaAssetCacheEntry, options?: {
|
|
1994
|
+
isCurrent?: () => boolean;
|
|
1995
|
+
}) => Promise<'stored' | 'skipped'>;
|
|
1993
1996
|
clear: () => Promise<void>;
|
|
1994
1997
|
/** 删除超过闲置期限的完整持久副本;不撤销已经返回的 Blob 或宿主持有的播放地址。 */
|
|
1995
1998
|
prune?: () => Promise<void>;
|
|
@@ -2853,12 +2856,12 @@ declare function canTransmit(message: ForwardCandidateMessage): boolean;
|
|
|
2853
2856
|
type RecallFailReason = 'not-found' | 'not-own' | 'pinned' | 'not-sent' | 'expired' | 'unsupported' | 'timeout' | 'server-expired' | 'failed' | 'disconnected';
|
|
2854
2857
|
|
|
2855
2858
|
/**
|
|
2856
|
-
* 根据缩略图签名选择 PNG 或 JPEG 的显示类型,供 SDK 和 PC/H5 创建 Blob、data URL。
|
|
2857
|
-
* 输入是消息中的原始字节或纯 base64;旧消息没有独立 MIME
|
|
2859
|
+
* 根据缩略图签名选择 PNG、WebP 或 JPEG 的显示类型,供 SDK 和 PC/H5 创建 Blob、data URL。
|
|
2860
|
+
* 输入是消息中的原始字节或纯 base64;旧消息没有独立 MIME 字段,未知格式沿用 JPEG 解码,
|
|
2858
2861
|
* 损坏数据仍交给图片解码器报告失败。本函数不修改字节,也不将历史 JPEG 转码为 PNG。
|
|
2859
2862
|
* @example resolveMediaThumbnailMimeType(new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10])) // 'image/png'
|
|
2860
2863
|
*/
|
|
2861
|
-
declare function resolveMediaThumbnailMimeType(source: Uint8Array | string): 'image/png' | 'image/jpeg';
|
|
2864
|
+
declare function resolveMediaThumbnailMimeType(source: Uint8Array | string): 'image/png' | 'image/webp' | 'image/jpeg';
|
|
2862
2865
|
|
|
2863
2866
|
/** 浏览器 PushSubscription.toJSON() 的可移植数据;不依赖 DOM 或浏览器全局。 */
|
|
2864
2867
|
interface ImWebPushSubscription {
|
|
@@ -3145,13 +3148,13 @@ interface MediaTransferAdapterConfig {
|
|
|
3145
3148
|
useAccelerateEndpoint?: boolean;
|
|
3146
3149
|
/**
|
|
3147
3150
|
* 统一允许 S3 分片上传和 Range 分段下载,默认 false(单次 PUT / 普通 GET)。
|
|
3148
|
-
* 显式 true
|
|
3151
|
+
* 显式 true 后,上传对象达到 8 MiB 使用 Multipart;上传片长与下载段长均为 16 MiB。
|
|
3149
3152
|
* 开启前各桶须支持分片请求方法,并暴露上传 ETag、下载 Content-Range 与强 ETag。
|
|
3150
3153
|
* @example { multipartTransfer: true } 同时允许大资源分片上传、下载。
|
|
3151
3154
|
*/
|
|
3152
3155
|
multipartTransfer?: boolean;
|
|
3153
3156
|
/**
|
|
3154
|
-
*
|
|
3157
|
+
* 总开关开启后,是否允许达到分片阈值(8 MiB)的上传使用 S3 分片上传。
|
|
3155
3158
|
*
|
|
3156
3159
|
* 分片相比单次 PUT 需要各物理桶的 CORS 额外放行 POST(Create/CompleteMultipartUpload)、
|
|
3157
3160
|
* DELETE(AbortMultipartUpload)并 `ExposeHeaders: ETag`;未配齐时分片会直接失败。
|
|
@@ -3167,8 +3170,8 @@ interface MediaTransferAdapterConfig {
|
|
|
3167
3170
|
/**
|
|
3168
3171
|
* 媒体发送阶段的并发上限;由 im-core 消费,限制媒体任务数而非分片请求数。
|
|
3169
3172
|
*
|
|
3170
|
-
*
|
|
3171
|
-
* 缺省 5
|
|
3173
|
+
* 并发按媒体体积分两档:小于分片阈值(8 MiB)的非视频媒体走小文件档,
|
|
3174
|
+
* 缺省 5;视频与达到阈值(或字节数未知)的内容走大文件档,缺省 3。
|
|
3172
3175
|
* 分档只限制媒体任务数;实际 PUT/UploadPart 另受 adapter 的六路数据请求限制。
|
|
3173
3176
|
* 两档都只接受 1-6 的整数,超出范围由 core 显式报错。
|
|
3174
3177
|
* - 传一个数字:所有媒体共用这一个并发数,与分档前的语义一致。
|
|
@@ -3467,13 +3470,13 @@ interface MediaAlbumMessageOptions {
|
|
|
3467
3470
|
* 本地视频的固有尺寸、时长与首帧封面。
|
|
3468
3471
|
*
|
|
3469
3472
|
* @remarks 宿主可从本地 object URL 解码首个可展示帧,使上传占位从首次渲染就使用真实比例和主图。
|
|
3470
|
-
* `posterData`
|
|
3473
|
+
* `posterData` 是等比缩放后的静态 WebP(兼容已有 JPEG/PNG);存在时会作为消息 `thumbData` 随正文发送。宽高必须是有限正数,
|
|
3471
3474
|
* duration 存在时必须是有限正数,posterData 必须是非空且不超过共享单项消息容量的 Uint8Array;合集发送会按项数复核容量。
|
|
3472
3475
|
*/
|
|
3473
3476
|
interface VideoPreviewMetadata extends ImagePreviewMetadata {
|
|
3474
3477
|
/** 秒。 */
|
|
3475
3478
|
duration?: number;
|
|
3476
|
-
/** 本地首个可展示帧生成的
|
|
3479
|
+
/** 本地首个可展示帧生成的 WebP 或已有 JPEG/PNG 字节。 */
|
|
3477
3480
|
posterData?: Uint8Array;
|
|
3478
3481
|
}
|
|
3479
3482
|
/**
|
|
@@ -5508,6 +5511,17 @@ interface ImMessageRef {
|
|
|
5508
5511
|
*/
|
|
5509
5512
|
itemIndex?: number;
|
|
5510
5513
|
}
|
|
5514
|
+
/** 单次媒体下载的等待与调度选项;相同精确消息引用仍共用一次实际下载。 */
|
|
5515
|
+
interface ImMediaDownloadOptions {
|
|
5516
|
+
/**
|
|
5517
|
+
* 只取消本次调用;其它调用者仍需要结果时保留共享下载。
|
|
5518
|
+
* 最后一个可取消调用者退出且没有无 signal 调用者时,才中止底层任务。
|
|
5519
|
+
* 取消以 IM_SDK_MEDIA_DOWNLOAD_CANCELED 拒绝本次 Promise,不返回部分文件。
|
|
5520
|
+
*/
|
|
5521
|
+
signal?: AbortSignal;
|
|
5522
|
+
/** 默认 interactive;background 在空闲名额中排在交互下载之后,不能抢占已发请求。 */
|
|
5523
|
+
priority?: 'background' | 'interactive';
|
|
5524
|
+
}
|
|
5511
5525
|
/**
|
|
5512
5526
|
* 可观察媒体上传/下载任务的只读产品投影。
|
|
5513
5527
|
*
|
|
@@ -5606,7 +5620,8 @@ interface ImMediaTasksApi {
|
|
|
5606
5620
|
*/
|
|
5607
5621
|
subscribe: (listener: (tasks: readonly ImMediaTask[]) => void) => () => void;
|
|
5608
5622
|
/**
|
|
5609
|
-
* 取消 queued/running 任务;上传委托 core
|
|
5623
|
+
* 取消 queued/running 任务;上传委托 core,下载中止共享任务并取消所有调用者。
|
|
5624
|
+
* 只需结束某次下载等待时,应使用 download 的 signal。
|
|
5610
5625
|
* @throws 未知任务、非法状态或底层未受理时以稳定 `IM_SDK_MEDIA_TASK_*` 错误拒绝。
|
|
5611
5626
|
*/
|
|
5612
5627
|
cancel: (taskId: string, options?: {
|
|
@@ -5641,10 +5656,13 @@ interface ImMediaTasksApi {
|
|
|
5641
5656
|
restartDownload?: boolean;
|
|
5642
5657
|
}) => Promise<void>;
|
|
5643
5658
|
/**
|
|
5644
|
-
*
|
|
5659
|
+
* 下载并按消息正文合同解密,同一精确消息引用共用实际下载,成功返回 Blob。
|
|
5660
|
+
* 不带 signal 的并发调用保留共享 Promise;带 signal 的调用独立等待和取消,不影响其它调用者。
|
|
5661
|
+
* 后加入的交互调用会提高共享下载优先级;prioritizeDownload 指定的最近预览仍优先于其它任务。
|
|
5645
5662
|
* @throws 消息不存在/非媒体/无远端 URL/未装配 capability、传输失败、取消或 teardown 均以稳定错误拒绝,不返回空 Blob。
|
|
5663
|
+
* @example const blob = await client.media.download(messageRef, { signal: controller.signal, priority: 'background' })
|
|
5646
5664
|
*/
|
|
5647
|
-
download: (message: ImMessageRef) => Promise<Blob>;
|
|
5665
|
+
download: (message: ImMessageRef, options?: ImMediaDownloadOptions) => Promise<Blob>;
|
|
5648
5666
|
/**
|
|
5649
5667
|
* 将最近预览的精确媒体项设为最高下载优先级,不新建或取消任务。
|
|
5650
5668
|
* 下一空闲任务/分片请求名额优先给该项;已发请求不中断,关闭播放器不撤销优先级。
|
|
@@ -5660,7 +5678,7 @@ interface ImMediaTasksApi {
|
|
|
5660
5678
|
*/
|
|
5661
5679
|
getCached: (message: ImMessageRef) => Promise<Blob | null>;
|
|
5662
5680
|
/**
|
|
5663
|
-
* 为宿主手里的**本地**图片/视频文件预读展示元信息:尺寸、视频时长、视频首帧封面的
|
|
5681
|
+
* 为宿主手里的**本地**图片/视频文件预读展示元信息:尺寸、视频时长、视频首帧封面的 WebP 字节。
|
|
5664
5682
|
*
|
|
5665
5683
|
* 给「发送前预览」这类场景用:宿主要在用户还没点发送时就把缩略图画出来,而浏览器读不出视频的
|
|
5666
5684
|
* 首帧——`<video preload="metadata">` 在 iOS Safari 上只加载元信息、**不解码任何一帧**,
|
|
@@ -5668,7 +5686,7 @@ interface ImMediaTasksApi {
|
|
|
5668
5686
|
*
|
|
5669
5687
|
* 返回的对象可以**原样**作为 `localPreviewMetadata` 交给 `sendImage` / `sendVideo` /
|
|
5670
5688
|
* `sendMediaAlbum`:发送链路会复用可用元信息;合集项超出其可用消息空间时重新生成封面。
|
|
5671
|
-
* posterData 使用共享自适应发送规格(视频
|
|
5689
|
+
* posterData 使用共享自适应发送规格(视频 WebP,长边最多 1440px,目标 16 KiB、硬上限 32 KiB);includeDisplayPoster 可在同一次解码中额外生成
|
|
5672
5690
|
* 仅供页面显示的高清 displayPoster(长边最多 960),不得绕过发送校验直接用它替换 posterData。
|
|
5673
5691
|
*
|
|
5674
5692
|
* @param input.kind 按文件类型选解码路径;`'video'` 才会抽首帧与读时长。
|
|
@@ -5688,16 +5706,26 @@ interface ImMediaTasksApi {
|
|
|
5688
5706
|
includeDisplayPoster?: boolean;
|
|
5689
5707
|
}) => Promise<(TKind extends 'video' ? LocalVideoPreviewMetadata : ImagePreviewMetadata) | null>;
|
|
5690
5708
|
/**
|
|
5691
|
-
*
|
|
5709
|
+
* 从本地视频或已有截图生成气泡封面;传入消息身份时复用独立持久缓存,不下载或上传。
|
|
5692
5710
|
*
|
|
5693
5711
|
* 长边最多 960px 且不放大原视频;与发送预读共用同一解码执行器。返回 Blob 由宿主创建和释放
|
|
5694
5712
|
* object URL,不能作为 localPreviewMetadata 发进消息正文。读取失败返回 null 并记录诊断;
|
|
5695
5713
|
* 宿主取消抛 AbortError,运行时失效或未装配能力时抛与 prepareLocalPreview 相同的明确错误。
|
|
5696
|
-
* @param input.file 本地或已解密的完整视频 Blob
|
|
5714
|
+
* @param input.file 本地或已解密的完整视频 Blob;已有 poster 时可以不传。
|
|
5715
|
+
* @param input.poster 发送前已经提取的截图,避免重新加载视频抽帧。
|
|
5716
|
+
* @param input.message 可选消息身份,用于持久保存封面。
|
|
5717
|
+
* @param input.expectedResourceUrl 取得源文件前的资源地址,防止换图后的旧结果污染缓存。
|
|
5697
5718
|
* @param input.signal 页面卸载、换源或切会话时取消这次抽帧。
|
|
5698
5719
|
*/
|
|
5699
5720
|
prepareLocalVideoPoster: (input: {
|
|
5700
|
-
file
|
|
5721
|
+
file?: Blob;
|
|
5722
|
+
poster?: Blob;
|
|
5723
|
+
message?: ImMessageRef;
|
|
5724
|
+
expectedResourceUrl?: string;
|
|
5725
|
+
signal?: AbortSignal;
|
|
5726
|
+
}) => Promise<Blob | null>;
|
|
5727
|
+
/** 只读视频气泡封面缓存;不下载、不抽帧,未命中返回 null。 */
|
|
5728
|
+
getCachedVideoPoster: (message: ImMessageRef, options?: {
|
|
5701
5729
|
signal?: AbortSignal;
|
|
5702
5730
|
}) => Promise<Blob | null>;
|
|
5703
5731
|
/**
|
|
@@ -5713,6 +5741,34 @@ interface ImMediaTasksApi {
|
|
|
5713
5741
|
file: Blob;
|
|
5714
5742
|
signal?: AbortSignal;
|
|
5715
5743
|
}) => Promise<Blob | null>;
|
|
5744
|
+
/**
|
|
5745
|
+
* 从本机原图生成独立的静态显示图,供 PC/H5 气泡使用;不下载、不上传、不改原图与消息尺寸。
|
|
5746
|
+
* 传入消息引用时先查独立的显示图缓存;稳定远端资源的结果可持久保存,本地待上传资源只生成。
|
|
5747
|
+
* 所有浏览器可解码格式均处理;最长边不超过 maxSize 且不放大,透明图优先保留透明度。
|
|
5748
|
+
* WebP 质量 0.85,最低 0.82,目标 256 KiB、最多 512 KiB;超过字节预算时可继续缩小,失败返回 null 并记录诊断。
|
|
5749
|
+
* 取消、账号失效、能力缺失和非法参数明确拒绝;返回 Blob 的 object URL 由宿主管理。
|
|
5750
|
+
* @param input.file 原始或已解密的完整图片 Blob,不会被修改。
|
|
5751
|
+
* @param input.maxSize 显示图最长边上限,必须是 1 到 2048 的整数。
|
|
5752
|
+
* @param input.signal 页面退出、资源失效时取消准备。
|
|
5753
|
+
* @param input.message 可选的精确消息引用,用于按消息、合集项、资源版本和尺寸隔离显示图缓存。
|
|
5754
|
+
* @param input.expectedResourceUrl 取得 file 前记录的消息资源地址;与 message 配合使用,不匹配时返回 null,防止旧文件写入新资源缓存。
|
|
5755
|
+
* @example const display = await client.media.prepareLocalImageDisplay({ file: original, maxSize: 1440 })
|
|
5756
|
+
*/
|
|
5757
|
+
prepareLocalImageDisplay: (input: {
|
|
5758
|
+
file: Blob;
|
|
5759
|
+
maxSize: number;
|
|
5760
|
+
message?: ImMessageRef;
|
|
5761
|
+
expectedResourceUrl?: string;
|
|
5762
|
+
signal?: AbortSignal;
|
|
5763
|
+
}) => Promise<Blob | null>;
|
|
5764
|
+
/**
|
|
5765
|
+
* 仅读取指定消息和尺寸的持久显示图,不下载原图、不编码;未命中或读取期间资源失效返回 null。
|
|
5766
|
+
* maxSize 必须是 1 到 2048 的整数;取消、账号失效、存储读取失败明确拒绝。
|
|
5767
|
+
*/
|
|
5768
|
+
getCachedImageDisplay: (message: ImMessageRef, options: {
|
|
5769
|
+
maxSize: number;
|
|
5770
|
+
signal?: AbortSignal;
|
|
5771
|
+
}) => Promise<Blob | null>;
|
|
5716
5772
|
}
|
|
5717
5773
|
|
|
5718
5774
|
/**
|
|
@@ -6399,7 +6455,7 @@ interface ImEmojiCatalogEntry {
|
|
|
6399
6455
|
* 1 小时、按服务端过期时间提前 5 分钟失效)、同桶并发请求复用和失败后重新签发由 SDK 负责,宿主只需提供「打一次接口」的纯函数。
|
|
6400
6456
|
*
|
|
6401
6457
|
* 默认单次 PUT/GET;仅 multipartTransfer=true 才允许大资源分片上传、下载。
|
|
6402
|
-
* 各 bucket 需在对象存储侧配置 CORS 允许本站 origin 的 PUT + GET
|
|
6458
|
+
* 各 bucket 需在对象存储侧配置 CORS 允许本站 origin 的 PUT + GET;开启分片后,达到 8 MiB 的上传另需放行
|
|
6403
6459
|
* POST(Create/CompleteMultipartUpload)、DELETE(AbortMultipartUpload)并 ExposeHeaders: ETag。CORS 未配齐时
|
|
6404
6460
|
* 下载还需暴露 Content-Range 与强 ETag;multipartTransfer=false 统一关闭分片上传和下载。
|
|
6405
6461
|
* ⚠ 并发字段只由 SDK core 的媒体编排消费;adapter 会忽略该字段。高内存设备可设置 5-6,低内存设备建议 2-3。
|
|
@@ -7687,6 +7743,8 @@ interface ChatMediaMessageRef {
|
|
|
7687
7743
|
* 后绑定的一格把先绑定的挤掉并撤销其地址。单媒体消息不传这个字段。
|
|
7688
7744
|
*/
|
|
7689
7745
|
itemIndex?: number;
|
|
7746
|
+
/** 查询时校验当前正文资源地址;不匹配即未命中,不根据页面历史推断租约身份。 */
|
|
7747
|
+
resourceUrl?: string;
|
|
7690
7748
|
}
|
|
7691
7749
|
/**
|
|
7692
7750
|
* Chat Kit 提供给共享 Store 和业务 Service 的账号运行接口。
|
|
@@ -7879,8 +7937,9 @@ interface ChatRuntime {
|
|
|
7879
7937
|
* 媒体上传成功并获得远端资源后,结束本地预览的“上传源”职责。
|
|
7880
7938
|
*
|
|
7881
7939
|
* 图片和视频保留为可淘汰本地缓存,使发送者短时间内查看无需重新下载;GIF 直接释放。
|
|
7940
|
+
* resourceUrl 指定上传完成后的正文地址,用于绑定源文件身份;后续换地址会移除旧缓存。
|
|
7882
7941
|
*/
|
|
7883
|
-
resolveMediaPreviewToRemote: (ref: ChatMediaMessageRef, contentType: 'image' | 'video' | 'sticker', byteSize?: number) => void;
|
|
7942
|
+
resolveMediaPreviewToRemote: (ref: ChatMediaMessageRef, contentType: 'image' | 'video' | 'sticker', byteSize?: number, resourceUrl?: string) => void;
|
|
7884
7943
|
/** 为指定消息取得本地媒体播放租约;没有本地缓存时返回 `undefined`,调用方应改用远端资源。 */
|
|
7885
7944
|
acquireMediaBlob: (ref: ChatMediaMessageRef) => MediaObjectUrlLease | undefined;
|
|
7886
7945
|
/** 只读检查完整本地媒体是否可用,不取得租约、不改变缓存淘汰顺序。 */
|
|
@@ -8269,6 +8328,38 @@ type GifFileClassification = 'gif' | 'not-gif' | 'invalid-gif';
|
|
|
8269
8328
|
declare function classifyGifFile(file: Blob): Promise<GifFileClassification>;
|
|
8270
8329
|
declare function isGifFile(file: Blob): Promise<boolean>;
|
|
8271
8330
|
|
|
8331
|
+
/** 气泡显示图的像素规格;两端共用,完整原图和消息内嵌缩略图不使用此预算。 */
|
|
8332
|
+
declare function resolveImageDisplayMaxSize(message: ImMessageView, itemIndex?: number): number;
|
|
8333
|
+
/**
|
|
8334
|
+
* 从借用的本机原图生成独立气泡地址。不会撤销输入 URL,也不会触发远端下载。
|
|
8335
|
+
* identity 让 SDK 按完整资源身份复用持久显示缓存;调用方负责撤销返回的 URL。
|
|
8336
|
+
* 预览必须继续使用原图,不能使用此方法的返回值。
|
|
8337
|
+
*/
|
|
8338
|
+
declare function prepareImageDisplayObjectUrl(runtime: ChatRuntime, url: string, maxSize: number, signal?: AbortSignal, identity?: {
|
|
8339
|
+
message: ImMessageView;
|
|
8340
|
+
itemIndex?: number;
|
|
8341
|
+
}): Promise<string | null>;
|
|
8342
|
+
/**
|
|
8343
|
+
* 气泡优先读持久显示图;未命中才用已缓存的原图生成,不发起网络下载。
|
|
8344
|
+
* 仅产生一个由调用方拥有的显示 URL,整个过程不创建或持有原图 URL。
|
|
8345
|
+
*/
|
|
8346
|
+
declare function loadCachedImageDisplayObjectUrl(runtime: ChatRuntime, message: ImMessageView, itemIndex?: number, signal?: AbortSignal): Promise<string | null>;
|
|
8347
|
+
/**
|
|
8348
|
+
* 自动加载气泡显示图:优先恢复派生缓存或本机原图,均未命中才下载。
|
|
8349
|
+
* 原图地址只在生成期间持有并始终释放;返回的独立显示地址归宿主。
|
|
8350
|
+
* 显示缓存命中即可满足气泡,完整原件已被淘汰时留待用户预览再下载。
|
|
8351
|
+
*/
|
|
8352
|
+
declare function loadImageDisplayObjectUrl(runtime: ChatRuntime, message: ImMessageView, hooks: ServiceNoteHooks, options: ImMediaDownloadOptions, itemIndex?: number): Promise<string | null>;
|
|
8353
|
+
/**
|
|
8354
|
+
* 借用本机视频地址或发送前截图生成气泡封面,优先命中持久缓存。
|
|
8355
|
+
* 不触发远端下载;输入地址仍归调用方,返回的封面地址由调用方释放。
|
|
8356
|
+
*/
|
|
8357
|
+
declare function prepareVideoPosterObjectUrl(runtime: ChatRuntime, url: string, signal?: AbortSignal, identity?: {
|
|
8358
|
+
message: ImMessageView;
|
|
8359
|
+
itemIndex?: number;
|
|
8360
|
+
}, poster?: Blob): Promise<string | null>;
|
|
8361
|
+
/** 只恢复本机视频封面:先读派生缓存,未命中才读完整视频并抽帧;不触发视频下载。 */
|
|
8362
|
+
declare function loadCachedVideoPosterObjectUrl(runtime: ChatRuntime, message: ImMessageView, itemIndex?: number, signal?: AbortSignal): Promise<string | null>;
|
|
8272
8363
|
/**
|
|
8273
8364
|
* 将用户最后预览的媒体项交给 SDK 提高下载优先级,不创建任务或持有页面资源。
|
|
8274
8365
|
* 在异步查缓存、加载 URL 之前调用,重复打开已有下载也会更新优先级。
|
|
@@ -8342,8 +8433,14 @@ declare function loadCachedVideoObjectUrl(runtime: ChatRuntime, message: ImMessa
|
|
|
8342
8433
|
* 返回 `null` 表示下标越界、正文不是合集、内容非法或下载失败,失败原因经 `setNote` 反馈。
|
|
8343
8434
|
* **唯一不反馈的失败是用户自己取消**(点击停止按钮取消这一项的在途下载):同样返回 `null`,但不提示。
|
|
8344
8435
|
* **调用方在不再使用地址时必须 `URL.revokeObjectURL`。**
|
|
8436
|
+
* @param runtime 当前账号的运行时,用于访问 SDK 并阻止切账号后交付旧资源。
|
|
8437
|
+
* @param message 包含媒体合集正文与精确会话身份的消息。
|
|
8438
|
+
* @param itemIndex 要下载的合集项下标,从 0 开始。
|
|
8439
|
+
* @param hooks 失败文案及提示入口;取消不提示失败。
|
|
8440
|
+
* @param onProgress 可选的当前项下载进度回调,范围为 0–100。
|
|
8441
|
+
* @param options 可选的下载优先级与本次调用取消信号;取消不影响同一资源的其它消费者,也不交付迟到的地址。
|
|
8345
8442
|
*/
|
|
8346
|
-
declare function loadMediaAlbumItemObjectUrl(runtime: ChatRuntime, message: ImMessageView, itemIndex: number, hooks: ServiceNoteHooks, onProgress?: (percent: number) => void): Promise<string | null>;
|
|
8443
|
+
declare function loadMediaAlbumItemObjectUrl(runtime: ChatRuntime, message: ImMessageView, itemIndex: number, hooks: ServiceNoteHooks, onProgress?: (percent: number) => void, options?: ImMediaDownloadOptions): Promise<string | null>;
|
|
8347
8444
|
/**
|
|
8348
8445
|
* 只读取合集某一项已持久化的明文资产并创建 object URL。
|
|
8349
8446
|
*
|
|
@@ -8357,8 +8454,12 @@ declare function loadCachedMediaAlbumItemObjectUrl(runtime: ChatRuntime, message
|
|
|
8357
8454
|
*
|
|
8358
8455
|
* 解密结果不是已支持图片、内容为空或下载失败时返回 `null` 并显示明确提示,不把无效二进制交给
|
|
8359
8456
|
* `<img>`。调用方关闭大图后必须撤销成功返回的地址。
|
|
8457
|
+
* @param runtime 当前账号的运行时,用于访问 SDK 并阻止切账号后交付旧资源。
|
|
8458
|
+
* @param message 包含原图正文与精确会话身份的消息。
|
|
8459
|
+
* @param hooks 失败文案及提示入口;取消不提示失败。
|
|
8460
|
+
* @param options 可选的下载优先级与本次调用取消信号;取消只结束本次等待并返回 null,不提示失败。
|
|
8360
8461
|
*/
|
|
8361
|
-
declare function loadImageObjectUrl(runtime: ChatRuntime, message: ImMessageView, hooks: ServiceNoteHooks): Promise<string | null>;
|
|
8462
|
+
declare function loadImageObjectUrl(runtime: ChatRuntime, message: ImMessageView, hooks: ServiceNoteHooks, options?: ImMediaDownloadOptions): Promise<string | null>;
|
|
8362
8463
|
/**
|
|
8363
8464
|
* 仅读取 SDK 已持久化的图片明文资产并创建 object URL。
|
|
8364
8465
|
*
|
|
@@ -8376,31 +8477,43 @@ declare function loadFileObjectUrl(runtime: ChatRuntime, message: ImMessageView,
|
|
|
8376
8477
|
declare const media_service_acquireMediaBlob: typeof acquireMediaBlob;
|
|
8377
8478
|
declare const media_service_detectImageMime: typeof detectImageMime;
|
|
8378
8479
|
declare const media_service_detectVideoMime: typeof detectVideoMime;
|
|
8480
|
+
declare const media_service_loadCachedImageDisplayObjectUrl: typeof loadCachedImageDisplayObjectUrl;
|
|
8379
8481
|
declare const media_service_loadCachedImageObjectUrl: typeof loadCachedImageObjectUrl;
|
|
8380
8482
|
declare const media_service_loadCachedMediaAlbumItemObjectUrl: typeof loadCachedMediaAlbumItemObjectUrl;
|
|
8381
8483
|
declare const media_service_loadCachedVideoObjectUrl: typeof loadCachedVideoObjectUrl;
|
|
8484
|
+
declare const media_service_loadCachedVideoPosterObjectUrl: typeof loadCachedVideoPosterObjectUrl;
|
|
8382
8485
|
declare const media_service_loadFileObjectUrl: typeof loadFileObjectUrl;
|
|
8486
|
+
declare const media_service_loadImageDisplayObjectUrl: typeof loadImageDisplayObjectUrl;
|
|
8383
8487
|
declare const media_service_loadImageObjectUrl: typeof loadImageObjectUrl;
|
|
8384
8488
|
declare const media_service_loadMediaAlbumItemObjectUrl: typeof loadMediaAlbumItemObjectUrl;
|
|
8385
8489
|
declare const media_service_loadVideoObjectUrl: typeof loadVideoObjectUrl;
|
|
8386
8490
|
declare const media_service_loadVoiceBytes: typeof loadVoiceBytes;
|
|
8491
|
+
declare const media_service_prepareImageDisplayObjectUrl: typeof prepareImageDisplayObjectUrl;
|
|
8387
8492
|
declare const media_service_prepareLocalMediaPreview: typeof prepareLocalMediaPreview;
|
|
8493
|
+
declare const media_service_prepareVideoPosterObjectUrl: typeof prepareVideoPosterObjectUrl;
|
|
8388
8494
|
declare const media_service_prioritizeMediaDownload: typeof prioritizeMediaDownload;
|
|
8495
|
+
declare const media_service_resolveImageDisplayMaxSize: typeof resolveImageDisplayMaxSize;
|
|
8389
8496
|
declare namespace media_service {
|
|
8390
8497
|
export {
|
|
8391
8498
|
media_service_acquireMediaBlob as acquireMediaBlob,
|
|
8392
8499
|
media_service_detectImageMime as detectImageMime,
|
|
8393
8500
|
media_service_detectVideoMime as detectVideoMime,
|
|
8501
|
+
media_service_loadCachedImageDisplayObjectUrl as loadCachedImageDisplayObjectUrl,
|
|
8394
8502
|
media_service_loadCachedImageObjectUrl as loadCachedImageObjectUrl,
|
|
8395
8503
|
media_service_loadCachedMediaAlbumItemObjectUrl as loadCachedMediaAlbumItemObjectUrl,
|
|
8396
8504
|
media_service_loadCachedVideoObjectUrl as loadCachedVideoObjectUrl,
|
|
8505
|
+
media_service_loadCachedVideoPosterObjectUrl as loadCachedVideoPosterObjectUrl,
|
|
8397
8506
|
media_service_loadFileObjectUrl as loadFileObjectUrl,
|
|
8507
|
+
media_service_loadImageDisplayObjectUrl as loadImageDisplayObjectUrl,
|
|
8398
8508
|
media_service_loadImageObjectUrl as loadImageObjectUrl,
|
|
8399
8509
|
media_service_loadMediaAlbumItemObjectUrl as loadMediaAlbumItemObjectUrl,
|
|
8400
8510
|
media_service_loadVideoObjectUrl as loadVideoObjectUrl,
|
|
8401
8511
|
media_service_loadVoiceBytes as loadVoiceBytes,
|
|
8512
|
+
media_service_prepareImageDisplayObjectUrl as prepareImageDisplayObjectUrl,
|
|
8402
8513
|
media_service_prepareLocalMediaPreview as prepareLocalMediaPreview,
|
|
8514
|
+
media_service_prepareVideoPosterObjectUrl as prepareVideoPosterObjectUrl,
|
|
8403
8515
|
media_service_prioritizeMediaDownload as prioritizeMediaDownload,
|
|
8516
|
+
media_service_resolveImageDisplayMaxSize as resolveImageDisplayMaxSize,
|
|
8404
8517
|
};
|
|
8405
8518
|
}
|
|
8406
8519
|
|
|
@@ -9617,6 +9730,8 @@ declare function resolveMediaTransferPresentation(input: {
|
|
|
9617
9730
|
aggregateFrom?: number;
|
|
9618
9731
|
/** 宿主确实持有的完整本地资源;单条媒体以 undefined 表示,缩略图不属于完整资源。 */
|
|
9619
9732
|
availableItemIndices?: readonly (number | undefined)[];
|
|
9733
|
+
/** 仅气泡传入:已有清晰显示图或完整本机资源的项不显示下载胶囊;不能用作预览可用性证据。 */
|
|
9734
|
+
displayAvailableItemIndices?: readonly (number | undefined)[];
|
|
9620
9735
|
/** SDK 明确查到完整缓存已不存在;历史 completed 任务不能替代当前资源证据。 */
|
|
9621
9736
|
unavailableItemIndices?: readonly (number | undefined)[];
|
|
9622
9737
|
/** 当前窗口正在查询的媒体项,不表示未下载。 */
|