@lhy-meta-server/meta-oss 0.0.0-stage → 0.0.2

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.
Files changed (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +378 -3
  3. package/dist/ali-oss/client.d.ts +185 -0
  4. package/dist/ali-oss/client.d.ts.map +1 -0
  5. package/dist/ali-oss/driver.d.ts +156 -0
  6. package/dist/ali-oss/driver.d.ts.map +1 -0
  7. package/dist/ali-oss/index.d.ts +11 -0
  8. package/dist/ali-oss/index.d.ts.map +1 -0
  9. package/dist/ali-oss/index.js +3 -0
  10. package/dist/ali-oss/index.js.map +11 -0
  11. package/dist/ali-oss/mapping.d.ts +25 -0
  12. package/dist/ali-oss/mapping.d.ts.map +1 -0
  13. package/dist/core/driver.d.ts +194 -0
  14. package/dist/core/driver.d.ts.map +1 -0
  15. package/dist/core/errors.d.ts +106 -0
  16. package/dist/core/errors.d.ts.map +1 -0
  17. package/dist/core/execution.d.ts +130 -0
  18. package/dist/core/execution.d.ts.map +1 -0
  19. package/dist/core/keys.d.ts +34 -0
  20. package/dist/core/keys.d.ts.map +1 -0
  21. package/dist/core/mime.d.ts +35 -0
  22. package/dist/core/mime.d.ts.map +1 -0
  23. package/dist/core/observability.d.ts +224 -0
  24. package/dist/core/observability.d.ts.map +1 -0
  25. package/dist/core/payload.d.ts +81 -0
  26. package/dist/core/payload.d.ts.map +1 -0
  27. package/dist/core/policy.d.ts +31 -0
  28. package/dist/core/policy.d.ts.map +1 -0
  29. package/dist/core/storage.d.ts +344 -0
  30. package/dist/core/storage.d.ts.map +1 -0
  31. package/dist/core/types.d.ts +301 -0
  32. package/dist/core/types.d.ts.map +1 -0
  33. package/dist/core/validation.d.ts +73 -0
  34. package/dist/core/validation.d.ts.map +1 -0
  35. package/dist/elysia/index.d.ts +81 -0
  36. package/dist/elysia/index.d.ts.map +1 -0
  37. package/dist/elysia/index.js +3 -0
  38. package/dist/elysia/index.js.map +10 -0
  39. package/dist/filesystem/driver.d.ts +242 -0
  40. package/dist/filesystem/driver.d.ts.map +1 -0
  41. package/dist/filesystem/durability.d.ts +28 -0
  42. package/dist/filesystem/durability.d.ts.map +1 -0
  43. package/dist/filesystem/index.d.ts +11 -0
  44. package/dist/filesystem/index.d.ts.map +1 -0
  45. package/dist/filesystem/index.js +4 -0
  46. package/dist/filesystem/index.js.map +14 -0
  47. package/dist/filesystem/metadata.d.ts +56 -0
  48. package/dist/filesystem/metadata.d.ts.map +1 -0
  49. package/dist/filesystem/paths.d.ts +48 -0
  50. package/dist/filesystem/paths.d.ts.map +1 -0
  51. package/dist/filesystem/signer.d.ts +58 -0
  52. package/dist/filesystem/signer.d.ts.map +1 -0
  53. package/dist/index-5w45sfp6.js +4 -0
  54. package/dist/index-5w45sfp6.js.map +10 -0
  55. package/dist/index-7dpmhwry.js +4 -0
  56. package/dist/index-7dpmhwry.js.map +11 -0
  57. package/dist/index.d.ts +22 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +3 -0
  60. package/dist/index.js.map +16 -0
  61. package/package.json +81 -6
@@ -0,0 +1,344 @@
1
+ import type { StorageDriver } from './driver';
2
+ import { type StorageRetryOptions } from './execution';
3
+ import { StorageMetrics, type StorageMetricsSnapshot, type StorageObserver } from './observability';
4
+ import { type UploadPolicy } from './policy';
5
+ import type { DeleteObjectsResult, GetObjectOptions, ListObjectsOptions, ListObjectsResult, MultipartUpload, MultipartUploadOptions, MultipartUploadPart, ObjectBody, ObjectInfo, ObjectStream, PutObjectOptions, SignedUrlOptions, StorageOperationOptions, VerifiedUrl, VerifyUrlRequest } from './types';
6
+ /**
7
+ * 对象存储服务配置。
8
+ */
9
+ export interface ObjectStorageOptions {
10
+ /**
11
+ * 实际执行存储操作的适配器。
12
+ */
13
+ driver: StorageDriver;
14
+ /**
15
+ * 自动添加到所有对象键前的目录前缀,例如 `tenant-a`;对业务透明。
16
+ */
17
+ prefix?: string;
18
+ /**
19
+ * 单次尝试的默认超时毫秒数,默认为 30000;`0` 表示不限制。
20
+ */
21
+ timeout?: number;
22
+ /**
23
+ * 重试退避配置。只会重试幂等或可重复读取内容的操作。
24
+ */
25
+ retry?: StorageRetryOptions;
26
+ /**
27
+ * 对后端的最大并发请求数,默认为 32。
28
+ *
29
+ * 超时或取消后,许可会一直占用到适配器的底层操作真正结束(最长 `abortGrace`),
30
+ * 因此该值能够限制实际在途的后端请求数。
31
+ */
32
+ concurrency?: number;
33
+ /**
34
+ * 超时或取消后等待适配器底层操作结束的最长毫秒数,默认为 5000;`0` 表示不等待。
35
+ *
36
+ * 适配器应响应 `signal` 尽快结束;超过宽限期仍未结束的操作会被放弃追踪并释放许可,
37
+ * 防止不响应取消的 SDK 永久占用并发额度。
38
+ */
39
+ abortGrace?: number;
40
+ /**
41
+ * 上传限制策略。
42
+ */
43
+ upload?: UploadPolicy;
44
+ /**
45
+ * 单次 `put` 的内容超过该字节数时自动改用分片上传,默认为 64 MiB;
46
+ * 仅在适配器支持分片上传时生效,设为 `0` 可禁用。
47
+ *
48
+ * 自动分片以流方式切片,内存占用约为 `partSize × partConcurrency`。
49
+ */
50
+ multipartThreshold?: number;
51
+ /**
52
+ * 同名对象存在时是否默认覆盖,默认为 `true`。
53
+ */
54
+ overwrite?: boolean;
55
+ /**
56
+ * 自定义扩展名到 MIME 类型的映射,键为不含点号的小写扩展名。
57
+ */
58
+ contentTypes?: Readonly<Record<string, string>>;
59
+ /**
60
+ * 分片上传默认分片字节数,默认为 8 MiB,不得小于 100 KiB。
61
+ */
62
+ partSize?: number;
63
+ /**
64
+ * 分片上传默认并行数,默认为 4。
65
+ */
66
+ partConcurrency?: number;
67
+ /**
68
+ * 结构化事件观察器。
69
+ */
70
+ observer?: StorageObserver;
71
+ /**
72
+ * 指标收集器,可在多个实例间共享;默认创建私有实例。
73
+ */
74
+ metrics?: StorageMetrics;
75
+ }
76
+ /**
77
+ * 与框架和具体后端无关的对象存储服务。
78
+ *
79
+ * 服务统一负责对象键校验、前缀隔离、上传限制、MIME 推断、超时、取消、
80
+ * 指数退避重试、并发控制与可观测性;适配器只需实现 {@link StorageDriver}。
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * import { ObjectStorage } from '@lhy-meta-server/meta-oss'
85
+ * import { FileSystemDriver } from '@lhy-meta-server/meta-oss/filesystem'
86
+ *
87
+ * const storage = new ObjectStorage({
88
+ * driver: new FileSystemDriver({ root: './storage' }),
89
+ * upload: { maxSize: 10 * 1024 * 1024, allowedContentTypes: ['image/*'] },
90
+ * })
91
+ * await storage.put('avatars/1.png', file)
92
+ * ```
93
+ */
94
+ export declare class ObjectStorage {
95
+ /**
96
+ * 当前使用的适配器名称。
97
+ */
98
+ readonly driverName: string;
99
+ private readonly driver;
100
+ private readonly prefix;
101
+ private readonly timeout;
102
+ private readonly retries;
103
+ private readonly baseDelay;
104
+ private readonly maxDelay;
105
+ private readonly jitter;
106
+ private readonly shouldRetry;
107
+ private readonly semaphore;
108
+ private readonly concurrency;
109
+ private readonly policy;
110
+ private readonly maxSize;
111
+ private readonly overwrite;
112
+ private readonly contentTypes;
113
+ private readonly partSize;
114
+ private readonly partConcurrency;
115
+ private readonly abortGrace;
116
+ private readonly multipartThreshold;
117
+ private readonly observer?;
118
+ private readonly metrics;
119
+ private closing?;
120
+ /**
121
+ * 创建对象存储服务并校验全部配置。
122
+ *
123
+ * @param options 适配器、可靠性、上传策略与可观测性配置。
124
+ * @throws {@link StorageError} 配置非法时抛出 `INVALID_OPTION`。
125
+ */
126
+ constructor(options: ObjectStorageOptions);
127
+ /**
128
+ * 写入对象。
129
+ *
130
+ * 可重复读取的内容(字符串、二进制、`Blob`)在可重试错误时会自动重试;
131
+ * 流式内容只尝试一次。已知大小超过 `multipartThreshold` 且适配器支持分片上传时,
132
+ * 自动改用流式分片上传,避免把大文件整体读入内存。
133
+ *
134
+ * @param key 业务对象键。
135
+ * @param body 对象内容。
136
+ * @param options HTTP 属性、元数据、覆盖策略与执行控制。
137
+ * @returns 写入后的对象描述信息。
138
+ * @throws {@link StorageError} `INVALID_KEY`、`UPLOAD_REJECTED`、`ALREADY_EXISTS` 等。
139
+ */
140
+ put(key: string, body: ObjectBody, options?: PutObjectOptions): Promise<ObjectInfo>;
141
+ /**
142
+ * 以流方式读取对象。
143
+ *
144
+ * 超时与重试只作用于“打开对象”阶段;返回的流由调用方负责消费或取消。
145
+ *
146
+ * @param key 业务对象键。
147
+ * @param options 读取范围与执行控制。
148
+ * @returns 对象描述信息与 Web 可读流。
149
+ * @throws {@link StorageError} 对象不存在时抛出 `NOT_FOUND`。
150
+ */
151
+ get(key: string, options?: GetObjectOptions): Promise<ObjectStream>;
152
+ /**
153
+ * 读取对象全部内容为字节数组。
154
+ *
155
+ * @param key 业务对象键。
156
+ * @param options 读取范围与执行控制。
157
+ * @returns 对象内容。
158
+ */
159
+ getBytes(key: string, options?: GetObjectOptions): Promise<Uint8Array>;
160
+ /**
161
+ * 以 UTF-8 解码读取对象全部内容。
162
+ *
163
+ * @param key 业务对象键。
164
+ * @param options 读取范围与执行控制。
165
+ * @returns 对象文本内容。
166
+ */
167
+ getText(key: string, options?: GetObjectOptions): Promise<string>;
168
+ /**
169
+ * 读取对象描述信息。
170
+ *
171
+ * @param key 业务对象键。
172
+ * @param options 执行控制。
173
+ * @returns 对象描述信息。
174
+ * @throws {@link StorageError} 对象不存在时抛出 `NOT_FOUND`。
175
+ */
176
+ head(key: string, options?: StorageOperationOptions): Promise<ObjectInfo>;
177
+ /**
178
+ * 判断对象是否存在。
179
+ *
180
+ * @param key 业务对象键。
181
+ * @param options 执行控制。
182
+ * @returns 对象是否存在。
183
+ */
184
+ exists(key: string, options?: StorageOperationOptions): Promise<boolean>;
185
+ /**
186
+ * 删除对象;对象不存在时静默成功。
187
+ *
188
+ * @param key 业务对象键。
189
+ * @param options 执行控制。
190
+ */
191
+ delete(key: string, options?: StorageOperationOptions): Promise<void>;
192
+ /**
193
+ * 批量删除对象。
194
+ *
195
+ * 适配器支持原生批量删除时一次提交(每批最多 1000 个),否则以受控并发逐个删除。
196
+ * 单个对象失败不会中断其他对象,失败项记录在结果的 `failed` 中;降级路径下结果
197
+ * 顺序与输入顺序一致。
198
+ *
199
+ * @param keys 业务对象键列表,重复键会被去重。
200
+ * @param options 执行控制。
201
+ * @returns 成功与失败的对象键。
202
+ * @throws {@link StorageError} 任一键非法时抛出 `INVALID_KEY`,此时不会删除任何对象。
203
+ */
204
+ deleteMany(keys: readonly string[], options?: StorageOperationOptions): Promise<DeleteObjectsResult>;
205
+ /**
206
+ * 分页列举对象。
207
+ *
208
+ * @param options 前缀、分隔符、游标与页大小。
209
+ * @returns 当前页对象、公共前缀与下一页游标。
210
+ * @throws {@link StorageError} 适配器不支持列举时抛出 `UNSUPPORTED`。
211
+ */
212
+ list(options?: ListObjectsOptions): Promise<ListObjectsResult>;
213
+ /**
214
+ * 遍历前缀下的全部对象,自动处理分页。
215
+ *
216
+ * @param options 前缀与页大小;游标与分隔符会被忽略。
217
+ * @returns 逐个产生对象描述信息的异步迭代器。
218
+ */
219
+ listAll(options?: Omit<ListObjectsOptions, 'cursor' | 'delimiter'>): AsyncGenerator<ObjectInfo>;
220
+ /**
221
+ * 复制对象。
222
+ *
223
+ * 适配器支持服务端复制时直接使用,否则读取源对象后流式写入目标,并保留
224
+ * HTTP 属性与元数据。
225
+ *
226
+ * @param source 源对象键。
227
+ * @param destination 目标对象键。
228
+ * @param options 覆盖策略与执行控制。
229
+ * @returns 目标对象描述信息。
230
+ */
231
+ copy(source: string, destination: string, options?: StorageOperationOptions & {
232
+ overwrite?: boolean;
233
+ }): Promise<ObjectInfo>;
234
+ /**
235
+ * 移动对象:先复制到目标,成功后删除源对象。
236
+ *
237
+ * @param source 源对象键。
238
+ * @param destination 目标对象键。
239
+ * @param options 覆盖策略与执行控制。
240
+ * @returns 目标对象描述信息。
241
+ */
242
+ move(source: string, destination: string, options?: StorageOperationOptions & {
243
+ overwrite?: boolean;
244
+ }): Promise<ObjectInfo>;
245
+ private copyObject;
246
+ /**
247
+ * 生成限时签名 URL,供客户端直接下载或上传。
248
+ *
249
+ * `PUT` 签名会校验扩展名与 MIME 策略,但无法在服务端限制客户端上传的字节数。
250
+ * 签名 URL 属于凭据,不会出现在可观测事件中。
251
+ *
252
+ * @param key 业务对象键。
253
+ * @param options HTTP 方法、有效期与响应头覆盖。
254
+ * @returns 签名 URL。
255
+ * @throws {@link StorageError} 适配器不支持签名时抛出 `UNSUPPORTED`。
256
+ */
257
+ signUrl(key: string, options?: SignedUrlOptions): Promise<string>;
258
+ /**
259
+ * 校验由本服务签发的签名 URL,供业务自建的下载或上传路由鉴权使用。
260
+ *
261
+ * 第三方 OSS 的签名由其服务端校验,因此通常只有自签名后端支持该方法。
262
+ * 返回的 `key` 已去除服务级前缀;签名对象不属于当前前缀时视为拒绝。
263
+ *
264
+ * @param request 请求 URL、方法与 `Content-Type`。
265
+ * @returns 授权信息。
266
+ * @throws {@link StorageError} 校验失败时抛出 `ACCESS_DENIED`;适配器不支持时抛出 `UNSUPPORTED`。
267
+ */
268
+ verifyUrl(request: VerifyUrlRequest): VerifiedUrl;
269
+ /**
270
+ * 创建分片上传会话,适用于断点续传或客户端分片场景。
271
+ *
272
+ * @param key 业务对象键。
273
+ * @param options HTTP 属性、元数据与执行控制。
274
+ * @returns 上传会话。
275
+ * @throws {@link StorageError} 适配器不支持分片上传时抛出 `UNSUPPORTED`。
276
+ */
277
+ createMultipart(key: string, options?: PutObjectOptions): Promise<MultipartUpload>;
278
+ /**
279
+ * 上传单个分片;分片内容会先读入内存,以便失败时安全重试。
280
+ *
281
+ * @param upload 上传会话。
282
+ * @param partNumber 分片序号,1 到 10000。
283
+ * @param body 分片内容。
284
+ * @param options 执行控制。
285
+ * @returns 已上传分片。
286
+ */
287
+ uploadPart(upload: MultipartUpload, partNumber: number, body: ObjectBody, options?: StorageOperationOptions): Promise<MultipartUploadPart>;
288
+ /**
289
+ * 合并分片完成上传;分片会按序号排序,重复序号以最后一次为准。
290
+ *
291
+ * @param upload 上传会话。
292
+ * @param parts 已上传分片。
293
+ * @param options 执行控制。
294
+ * @returns 合并后的对象描述信息。
295
+ */
296
+ completeMultipart(upload: MultipartUpload, parts: readonly MultipartUploadPart[], options?: StorageOperationOptions): Promise<ObjectInfo>;
297
+ /**
298
+ * 放弃分片上传并清理已上传的分片。
299
+ *
300
+ * @param upload 上传会话。
301
+ * @param options 执行控制。
302
+ */
303
+ abortMultipart(upload: MultipartUpload, options?: StorageOperationOptions): Promise<void>;
304
+ /**
305
+ * 自动分片上传大对象。
306
+ *
307
+ * 内容以流方式切片,内存占用约为 `partSize × concurrency`;任一分片失败时会
308
+ * 中止会话并清理已上传分片。空内容会退化为普通写入。
309
+ *
310
+ * @param key 业务对象键。
311
+ * @param body 对象内容。
312
+ * @param options 分片大小、并行数、HTTP 属性与执行控制。
313
+ * @returns 合并后的对象描述信息。
314
+ */
315
+ uploadMultipart(key: string, body: ObjectBody, options?: MultipartUploadOptions): Promise<ObjectInfo>;
316
+ private shouldUseMultipart;
317
+ private uploadMultipartPayload;
318
+ /**
319
+ * 返回累计指标的冻结快照。
320
+ *
321
+ * @returns 指标快照。
322
+ */
323
+ getMetrics(): StorageMetricsSnapshot;
324
+ /**
325
+ * 将累计指标清零。
326
+ */
327
+ resetMetrics(): void;
328
+ /**
329
+ * 关闭服务并释放适配器资源;重复调用返回同一结果。关闭后的所有操作都会抛出 `CLOSED`。
330
+ */
331
+ close(): Promise<void>;
332
+ private putOptions;
333
+ private capability;
334
+ private multipartDriver;
335
+ private assertUpload;
336
+ private driverUpload;
337
+ private fullKey;
338
+ private publicKey;
339
+ private publicInfo;
340
+ private run;
341
+ private emit;
342
+ private notify;
343
+ }
344
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/core/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,301 @@
1
+ import type { Readable } from 'node:stream';
2
+ /**
3
+ * 可作为对象内容写入的数据来源。
4
+ *
5
+ * 同时兼容 Web 标准、Bun 与 Node.js:`Bun.file()` 与 `File` 都属于 `Blob`,
6
+ * Node.js `Buffer` 属于 `Uint8Array`。
7
+ */
8
+ export type ObjectBody = string | ArrayBuffer | ArrayBufferView | Blob | ReadableStream<Uint8Array> | Readable | AsyncIterable<Uint8Array | string>;
9
+ /**
10
+ * 对象自定义元数据。
11
+ *
12
+ * 键仅允许小写字母、数字与连字符;值不允许包含控制字符。
13
+ */
14
+ export type ObjectMetadata = Record<string, string>;
15
+ /**
16
+ * 对象的 HTTP 语义属性。
17
+ */
18
+ export interface ObjectHttpOptions {
19
+ /**
20
+ * 内容 MIME 类型;省略时按对象键扩展名推断。
21
+ */
22
+ contentType?: string;
23
+ /**
24
+ * HTTP `Cache-Control` 值。
25
+ */
26
+ cacheControl?: string;
27
+ /**
28
+ * HTTP `Content-Disposition` 值。
29
+ */
30
+ contentDisposition?: string;
31
+ /**
32
+ * 自定义元数据。
33
+ */
34
+ metadata?: ObjectMetadata;
35
+ }
36
+ /**
37
+ * 对象描述信息。
38
+ */
39
+ export interface ObjectInfo {
40
+ /**
41
+ * 对业务可见的对象键,不包含服务级前缀。
42
+ */
43
+ key: string;
44
+ /**
45
+ * 对象字节数。
46
+ */
47
+ size: number;
48
+ /**
49
+ * 后端提供的实体标签,已去除两侧引号。
50
+ */
51
+ etag?: string;
52
+ /**
53
+ * 最后修改时间。
54
+ */
55
+ lastModified?: Date;
56
+ /**
57
+ * 内容 MIME 类型。
58
+ */
59
+ contentType?: string;
60
+ /**
61
+ * HTTP `Cache-Control` 值。
62
+ */
63
+ cacheControl?: string;
64
+ /**
65
+ * HTTP `Content-Disposition` 值。
66
+ */
67
+ contentDisposition?: string;
68
+ /**
69
+ * 自定义元数据。
70
+ */
71
+ metadata: ObjectMetadata;
72
+ }
73
+ /**
74
+ * 所有操作共享的执行控制选项。
75
+ */
76
+ export interface StorageOperationOptions {
77
+ /**
78
+ * 调用方取消信号。
79
+ */
80
+ signal?: AbortSignal;
81
+ /**
82
+ * 单次尝试的超时毫秒数,覆盖服务默认值;`0` 表示不限制。
83
+ */
84
+ timeout?: number;
85
+ /**
86
+ * 最大重试次数,覆盖服务默认值。
87
+ */
88
+ retries?: number;
89
+ }
90
+ /**
91
+ * 写入对象的选项。
92
+ */
93
+ export interface PutObjectOptions extends ObjectHttpOptions, StorageOperationOptions {
94
+ /**
95
+ * 同名对象存在时是否覆盖,覆盖服务默认值。
96
+ */
97
+ overwrite?: boolean;
98
+ }
99
+ /**
100
+ * 读取范围,`start` 与 `end` 均为包含在内的字节偏移。
101
+ */
102
+ export interface ObjectRange {
103
+ /**
104
+ * 起始字节偏移,从 `0` 开始。
105
+ */
106
+ start: number;
107
+ /**
108
+ * 结束字节偏移;省略时读取到对象末尾。
109
+ */
110
+ end?: number;
111
+ }
112
+ /**
113
+ * 读取对象的选项。
114
+ */
115
+ export interface GetObjectOptions extends StorageOperationOptions {
116
+ /**
117
+ * 只读取指定字节范围。
118
+ */
119
+ range?: ObjectRange;
120
+ }
121
+ /**
122
+ * 流式读取结果。
123
+ */
124
+ export interface ObjectStream {
125
+ /**
126
+ * 对象描述信息。
127
+ */
128
+ info: ObjectInfo;
129
+ /**
130
+ * 对象内容的 Web 标准可读流。
131
+ */
132
+ body: ReadableStream<Uint8Array>;
133
+ /**
134
+ * 实际返回的字节范围(均包含在内);完整读取时省略。
135
+ */
136
+ range?: {
137
+ start: number;
138
+ end: number;
139
+ };
140
+ }
141
+ /**
142
+ * 列举对象的选项。
143
+ */
144
+ export interface ListObjectsOptions extends StorageOperationOptions {
145
+ /**
146
+ * 只返回以该前缀开头的对象。
147
+ */
148
+ prefix?: string;
149
+ /**
150
+ * 目录分隔符;设置后,分隔符之后的层级会合并到 `prefixes`。
151
+ */
152
+ delimiter?: string;
153
+ /**
154
+ * 上一页返回的游标。
155
+ */
156
+ cursor?: string;
157
+ /**
158
+ * 单页最大条目数,取值范围 1 到 1000,默认为 1000。
159
+ */
160
+ limit?: number;
161
+ }
162
+ /**
163
+ * 分页列举结果。
164
+ */
165
+ export interface ListObjectsResult {
166
+ /**
167
+ * 当前页对象。
168
+ */
169
+ objects: ObjectInfo[];
170
+ /**
171
+ * 按分隔符折叠出的公共前缀。
172
+ */
173
+ prefixes: string[];
174
+ /**
175
+ * 下一页游标;不存在时表示已到最后一页。
176
+ */
177
+ cursor?: string;
178
+ }
179
+ /**
180
+ * 批量删除结果。
181
+ */
182
+ export interface DeleteObjectsResult {
183
+ /**
184
+ * 删除成功的对象键。
185
+ */
186
+ deleted: string[];
187
+ /**
188
+ * 删除失败的对象键及原因。
189
+ */
190
+ failed: Array<{
191
+ key: string;
192
+ error: unknown;
193
+ }>;
194
+ }
195
+ /**
196
+ * 签名 URL 的 HTTP 方法。
197
+ */
198
+ export type SignedUrlMethod = 'GET' | 'PUT';
199
+ /**
200
+ * 生成签名 URL 的选项。
201
+ */
202
+ export interface SignedUrlOptions extends StorageOperationOptions {
203
+ /**
204
+ * 允许的 HTTP 方法,默认为 `GET`。
205
+ */
206
+ method?: SignedUrlMethod;
207
+ /**
208
+ * 有效期秒数,取值范围 1 到 604800,默认为 900。
209
+ */
210
+ expiresIn?: number;
211
+ /**
212
+ * `PUT` 签名要求客户端使用的 MIME 类型。
213
+ */
214
+ contentType?: string;
215
+ /**
216
+ * `GET` 下载时覆盖的 `Content-Disposition` 响应头。
217
+ */
218
+ responseContentDisposition?: string;
219
+ }
220
+ /**
221
+ * 分片上传会话。
222
+ */
223
+ export interface MultipartUpload {
224
+ /**
225
+ * 对业务可见的对象键。
226
+ */
227
+ key: string;
228
+ /**
229
+ * 后端分配的上传会话标识。
230
+ */
231
+ uploadId: string;
232
+ }
233
+ /**
234
+ * 已上传的分片。
235
+ */
236
+ export interface MultipartUploadPart {
237
+ /**
238
+ * 分片序号,取值范围 1 到 10000。
239
+ */
240
+ partNumber: number;
241
+ /**
242
+ * 分片实体标签。
243
+ */
244
+ etag: string;
245
+ }
246
+ /**
247
+ * 自动分片上传的选项。
248
+ */
249
+ export interface MultipartUploadOptions extends PutObjectOptions {
250
+ /**
251
+ * 分片字节数,不得小于 100 KiB,默认为服务配置。
252
+ */
253
+ partSize?: number;
254
+ /**
255
+ * 并行上传的分片数,默认为服务配置。
256
+ */
257
+ concurrency?: number;
258
+ }
259
+ /**
260
+ * 校验签名 URL 时提供的请求信息。
261
+ */
262
+ export interface VerifyUrlRequest {
263
+ /**
264
+ * 完整请求 URL。
265
+ */
266
+ url: string | URL;
267
+ /**
268
+ * 实际请求的 HTTP 方法,默认为 `GET`。
269
+ */
270
+ method?: string;
271
+ /**
272
+ * 实际请求的 `Content-Type`,用于校验 `PUT` 签名。
273
+ */
274
+ contentType?: string;
275
+ }
276
+ /**
277
+ * 签名 URL 校验通过后的授权信息。
278
+ */
279
+ export interface VerifiedUrl {
280
+ /**
281
+ * 签名所授权的对象键。
282
+ */
283
+ key: string;
284
+ /**
285
+ * 签名所授权的 HTTP 方法。
286
+ */
287
+ method: SignedUrlMethod;
288
+ /**
289
+ * 过期时间的 Unix 秒时间戳。
290
+ */
291
+ expires: number;
292
+ /**
293
+ * 签名要求的 PUT `Content-Type`。
294
+ */
295
+ contentType?: string;
296
+ /**
297
+ * 签名要求的 `Content-Disposition` 响应头。
298
+ */
299
+ responseContentDisposition?: string;
300
+ }
301
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}