import { Context, Element, Service } from "koishi"; import { Config } from "../../config"; import { Services, TableName } from "../../shared/constants"; import { AssetData, AssetInfo, AssetMetadata, ReadAssetOptions } from "./types"; declare module "koishi" { interface Context { [Services.Asset]: AssetService; } interface Tables { [TableName.Assets]: AssetData; } } /** * 资源管理服务 (AssetService) * 负责资源的持久化存储、去重、读取、处理和生命周期管理 */ export declare class AssetService extends Service { static readonly inject: string[]; private static readonly PROCESSED_IMAGE_CACHE_SUFFIX; private static readonly MAX_COMPRESSION_ATTEMPTS; private storage; private cacheStorage; private assetEndpoint; constructor(ctx: Context, config: Config); protected start(): Promise; /** * 同步转换消息内容,将外部资源链接持久化并替换为内部ID * 此方法会等待所有资源持久化完成 * @param source - 原始消息字符串或元素数组 * @returns 转换后的消息字符串 */ transform(source: string | Element[]): Promise; /** * 异步转换消息内容,立即返回带占位符ID的消息,并在后台进行资源持久化 * 适用于不要求立即使用资源的场景,可以提高响应速度 * @param source - 原始消息字符串或元素数组 * @returns 转换后的消息字符串 */ transformAsync(source: string | Element[]): Promise; /** * 创建一个新资源。 * @param source - 资源的来源 (Buffer, data:, file:, http(s): URL) * @param metadata - 资源的元数据 * @param options - 内部选项,如预设的ID * @returns 资源的唯一 ID */ create(source: string | Buffer, metadata?: AssetMetadata, options?: { id?: string; }): Promise; /** * 根据ID读取资源 * 支持按需进行图片处理和缓存 * @param id - 资源 ID * @param options - 读取选项,可控制是否处理图片和返回格式 * @returns 资源内容,格式由 options.format 决定 */ read(id: string, options?: ReadAssetOptions): Promise; /** * 根据 ID 获取资源的元信息 * @param id - 资源 ID * @returns 资源的元信息,若不存在则返回 null */ getInfo(id: string): Promise; /** * 获取资源的公开访问链接 * @param id - 资源 ID * @returns 资源的公开链接,若未配置 endpoint 则回退到 data URL */ getPublicUrl(id: string): Promise; /** * 将包含内部资源ID的消息元素编码为平台可发送的URL或元素 * @param source - 消息字符串或元素数组 * @returns 编码后的元素数组 */ encode(source: string | Element[]): Promise; /** * 处理 transform/transformAsync 中的单个元素 */ private _processTransformElement; private _getSourceBuffer; private _downloadResource; private _readOriginalWithRecovery; private _processImage; private _compressAndResizeImage; /** * 处理GIF第一帧提取 * @param gif - gifwrap读取的GIF对象 * @returns 处理后的图片buffer */ private _processGifFirstFrame; /** * 处理GIF动图,提取关键帧并拼接成静态图 * @param buffer * @returns */ private _processGifStitch; private _getAssetWithUpdate; private _updateLastUsed; private registerHttpEndpoint; private runAutoClear; private _clearExpiredByDatabase; private _clearOrphanedFiles; }