/** * S3/COS PersistenceProvider 实现 * * 复用 @fefeding/common/dist/utils/s3 的 S3 能力(基于 @aws-sdk), * 与沙箱内 context.storage 使用同一套 S3 驱动和配置。 * * 设计要点: * - 宿主侧通过 createRequire 解析 @fefeding/common 路径(与 node-task-runtime.ts 一致) * - 配置来源与沙箱 __storageConfig 保持一致(env 变量优先级相同) * - 沙箱内 S3 仍直接加载 lib(独立进程),宿主侧通过此 Provider 统一管理 */ import type { PersistenceProvider, FileMeta, DataMeta, PersistedFile, PersistedData, S3ProviderConfig } from '../../spi/persistence-interfaces.js'; /** S3 上传结果 */ interface S3UploadResult { bucket: string; region: string; key: string; url: string; etag?: string; } export declare class S3Provider implements PersistenceProvider { readonly name: string; private config; private s3Lib; private client; private resolvedConfig; constructor(config: S3ProviderConfig, name?: string); saveFile(key: string, content: Buffer | NodeJS.ReadableStream, meta?: FileMeta): Promise; saveData(key: string, data: unknown, meta?: DataMeta): Promise; /** * 获取已解析配置的只读快照(供 duckdb 等外部读取器复用凭证) * 配置不完整时返回 null。 */ getResolvedConfig(): { bucket: string; region: string; accessKeyId: string; secretAccessKey: string; sessionToken?: string; endpoint?: string; forcePathStyle?: boolean; } | null; /** 将业务 key 解析为实际对象 key(含配置的 keyPrefix),供外部读取器拼接 s3:// 路径 */ getObjectKey(key: string): string; readFile(key: string): Promise; readData(key: string): Promise; delete(key: string): Promise; exists(key: string): Promise; getAccessibleUrl(key: string, _expirySec?: number): Promise; /** 获取上传结果(兼容沙箱 __storage 接口) */ uploadFile(filePath: string, options?: { key?: string; contentType?: string; metadata?: Record; }): Promise; private loadS3Lib; private resolveConfig; private ensureReady; /** 将 S3 NoSuchKey / 404 错误转换为带 statusCode=404 的 NotFound 错误,其余原样抛出 */ private toNotFound; private normalizeKey; } export {}; //# sourceMappingURL=s3.provider.d.ts.map