@nestm/storage 0.1.0-alpha.0
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/CHANGELOG.md +21 -0
- package/CONTRIBUTING.md +83 -0
- package/LICENSE +21 -0
- package/README.md +386 -0
- package/SECURITY.md +25 -0
- package/dist/files-sdk/files-sdk.driver.d.ts +36 -0
- package/dist/files-sdk/files-sdk.driver.d.ts.map +1 -0
- package/dist/files-sdk/files-sdk.driver.js +352 -0
- package/dist/files-sdk/files-sdk.driver.js.map +1 -0
- package/dist/files-sdk/index.d.ts +3 -0
- package/dist/files-sdk/index.d.ts.map +1 -0
- package/dist/files-sdk/index.js +2 -0
- package/dist/files-sdk/index.js.map +1 -0
- package/dist/gateway/index.d.ts +3 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +3 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/storage-gateway-fastify-parser.d.ts +9 -0
- package/dist/gateway/storage-gateway-fastify-parser.d.ts.map +1 -0
- package/dist/gateway/storage-gateway-fastify-parser.js +50 -0
- package/dist/gateway/storage-gateway-fastify-parser.js.map +1 -0
- package/dist/gateway/storage-gateway.controller.d.ts +31 -0
- package/dist/gateway/storage-gateway.controller.d.ts.map +1 -0
- package/dist/gateway/storage-gateway.controller.js +601 -0
- package/dist/gateway/storage-gateway.controller.js.map +1 -0
- package/dist/gateway/storage-gateway.guard.d.ts +7 -0
- package/dist/gateway/storage-gateway.guard.d.ts.map +1 -0
- package/dist/gateway/storage-gateway.guard.js +40 -0
- package/dist/gateway/storage-gateway.guard.js.map +1 -0
- package/dist/gateway/storage-gateway.module.d.ts +6 -0
- package/dist/gateway/storage-gateway.module.d.ts.map +1 -0
- package/dist/gateway/storage-gateway.module.js +98 -0
- package/dist/gateway/storage-gateway.module.js.map +1 -0
- package/dist/gateway/storage-gateway.tokens.d.ts +3 -0
- package/dist/gateway/storage-gateway.tokens.d.ts.map +1 -0
- package/dist/gateway/storage-gateway.tokens.js +3 -0
- package/dist/gateway/storage-gateway.tokens.js.map +1 -0
- package/dist/gateway/storage-gateway.types.d.ts +65 -0
- package/dist/gateway/storage-gateway.types.d.ts.map +1 -0
- package/dist/gateway/storage-gateway.types.js +13 -0
- package/dist/gateway/storage-gateway.types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/inject-storage.decorator.d.ts +2 -0
- package/dist/inject-storage.decorator.d.ts.map +1 -0
- package/dist/inject-storage.decorator.js +6 -0
- package/dist/inject-storage.decorator.js.map +1 -0
- package/dist/internal/settle-many.d.ts +7 -0
- package/dist/internal/settle-many.d.ts.map +1 -0
- package/dist/internal/settle-many.js +62 -0
- package/dist/internal/settle-many.js.map +1 -0
- package/dist/storage-module.options.d.ts +62 -0
- package/dist/storage-module.options.d.ts.map +1 -0
- package/dist/storage-module.options.js +2 -0
- package/dist/storage-module.options.js.map +1 -0
- package/dist/storage-upload-control.d.ts +22 -0
- package/dist/storage-upload-control.d.ts.map +1 -0
- package/dist/storage-upload-control.js +139 -0
- package/dist/storage-upload-control.js.map +1 -0
- package/dist/storage.client.d.ts +51 -0
- package/dist/storage.client.d.ts.map +1 -0
- package/dist/storage.client.js +395 -0
- package/dist/storage.client.js.map +1 -0
- package/dist/storage.driver.d.ts +18 -0
- package/dist/storage.driver.d.ts.map +1 -0
- package/dist/storage.driver.js +2 -0
- package/dist/storage.driver.js.map +1 -0
- package/dist/storage.error.d.ts +39 -0
- package/dist/storage.error.d.ts.map +1 -0
- package/dist/storage.error.js +49 -0
- package/dist/storage.error.js.map +1 -0
- package/dist/storage.module.d.ts +11 -0
- package/dist/storage.module.d.ts.map +1 -0
- package/dist/storage.module.js +170 -0
- package/dist/storage.module.js.map +1 -0
- package/dist/storage.service.d.ts +12 -0
- package/dist/storage.service.d.ts.map +1 -0
- package/dist/storage.service.js +246 -0
- package/dist/storage.service.js.map +1 -0
- package/dist/storage.tokens.d.ts +6 -0
- package/dist/storage.tokens.d.ts.map +1 -0
- package/dist/storage.tokens.js +13 -0
- package/dist/storage.tokens.js.map +1 -0
- package/dist/storage.types.d.ts +244 -0
- package/dist/storage.types.d.ts.map +1 -0
- package/dist/storage.types.js +2 -0
- package/dist/storage.types.js.map +1 -0
- package/dist/testing/index.d.ts +9 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import { Readable } from 'node:stream';
|
|
2
|
+
import { Files, FilesError, } from 'files-sdk';
|
|
3
|
+
import { StorageError, StorageErrorCode } from '../storage.error.js';
|
|
4
|
+
import { getFilesSdkUploadControl } from '../storage-upload-control.js';
|
|
5
|
+
function mapFilesError(error) {
|
|
6
|
+
if (error instanceof StorageError) {
|
|
7
|
+
return error;
|
|
8
|
+
}
|
|
9
|
+
if (!(error instanceof FilesError)) {
|
|
10
|
+
return new StorageError(error instanceof Error ? error.message : String(error), {
|
|
11
|
+
cause: error,
|
|
12
|
+
code: StorageErrorCode.PROVIDER,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
if (error.cause instanceof StorageError) {
|
|
16
|
+
return error.cause;
|
|
17
|
+
}
|
|
18
|
+
let code;
|
|
19
|
+
if (error.timedOut) {
|
|
20
|
+
code = StorageErrorCode.TIMEOUT;
|
|
21
|
+
}
|
|
22
|
+
else if (error.aborted) {
|
|
23
|
+
code = StorageErrorCode.ABORTED;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
switch (error.code) {
|
|
27
|
+
case 'NotFound':
|
|
28
|
+
code = StorageErrorCode.NOT_FOUND;
|
|
29
|
+
break;
|
|
30
|
+
case 'Unauthorized':
|
|
31
|
+
code = StorageErrorCode.UNAUTHORIZED;
|
|
32
|
+
break;
|
|
33
|
+
case 'Conflict':
|
|
34
|
+
code = StorageErrorCode.CONFLICT;
|
|
35
|
+
break;
|
|
36
|
+
case 'ReadOnly':
|
|
37
|
+
code = StorageErrorCode.READ_ONLY;
|
|
38
|
+
break;
|
|
39
|
+
case 'Provider':
|
|
40
|
+
code = /(?:not supported|does not support|unsupported)/iu.test(error.message)
|
|
41
|
+
? StorageErrorCode.NOT_SUPPORTED
|
|
42
|
+
: StorageErrorCode.PROVIDER;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return new StorageError(error.message, {
|
|
47
|
+
aborted: error.aborted,
|
|
48
|
+
cause: error.cause ?? error,
|
|
49
|
+
code,
|
|
50
|
+
permanent: error.permanent,
|
|
51
|
+
timedOut: error.timedOut,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function mapRetryOptions(retries) {
|
|
55
|
+
if (retries === undefined || typeof retries === 'number') {
|
|
56
|
+
return retries;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
max: retries.max,
|
|
60
|
+
...(retries.backoff !== undefined && {
|
|
61
|
+
backoff: ({ attempt, error }) => retries.backoff?.({
|
|
62
|
+
attempt,
|
|
63
|
+
error: mapFilesError(error),
|
|
64
|
+
}) ?? 0,
|
|
65
|
+
}),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function operationOptions(options) {
|
|
69
|
+
if (options === undefined) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
const retries = mapRetryOptions(options.retries);
|
|
73
|
+
return {
|
|
74
|
+
...(retries !== undefined && { retries }),
|
|
75
|
+
...(options.signal !== undefined && { signal: options.signal }),
|
|
76
|
+
...(options.timeout !== undefined && { timeout: options.timeout }),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
async function* normalizeNodeChunks(source) {
|
|
80
|
+
for await (const chunk of source) {
|
|
81
|
+
if (typeof chunk === 'string') {
|
|
82
|
+
yield new TextEncoder().encode(chunk);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (chunk instanceof Uint8Array) {
|
|
86
|
+
yield chunk;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
throw new StorageError('Node upload streams must yield strings or Uint8Array chunks.', {
|
|
90
|
+
code: StorageErrorCode.INVALID_ARGUMENT,
|
|
91
|
+
permanent: true,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function mapBody(body) {
|
|
96
|
+
if (body instanceof Readable) {
|
|
97
|
+
return Readable.toWeb(Readable.from(normalizeNodeChunks(body)));
|
|
98
|
+
}
|
|
99
|
+
return body;
|
|
100
|
+
}
|
|
101
|
+
function normalizeDownloadStream(source) {
|
|
102
|
+
let reader = source.getReader();
|
|
103
|
+
const release = () => {
|
|
104
|
+
reader?.releaseLock();
|
|
105
|
+
reader = undefined;
|
|
106
|
+
};
|
|
107
|
+
return new ReadableStream({
|
|
108
|
+
async cancel(reason) {
|
|
109
|
+
const activeReader = reader;
|
|
110
|
+
if (activeReader === undefined) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
await activeReader.cancel(reason);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
throw mapFilesError(error);
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
release();
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
async pull(controller) {
|
|
124
|
+
const activeReader = reader;
|
|
125
|
+
if (activeReader === undefined) {
|
|
126
|
+
controller.close();
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const result = await activeReader.read();
|
|
131
|
+
if (result.done) {
|
|
132
|
+
release();
|
|
133
|
+
controller.close();
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
controller.enqueue(result.value);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
release();
|
|
140
|
+
controller.error(mapFilesError(error));
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
function uploadOptions(options) {
|
|
146
|
+
if (options === undefined) {
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
...operationOptions(options),
|
|
151
|
+
...(options.cacheControl !== undefined && {
|
|
152
|
+
cacheControl: options.cacheControl,
|
|
153
|
+
}),
|
|
154
|
+
...(options.contentType !== undefined && {
|
|
155
|
+
contentType: options.contentType,
|
|
156
|
+
}),
|
|
157
|
+
...(options.control !== undefined && {
|
|
158
|
+
control: getFilesSdkUploadControl(options.control),
|
|
159
|
+
}),
|
|
160
|
+
...(options.metadata !== undefined && { metadata: options.metadata }),
|
|
161
|
+
...(options.multipart !== undefined && {
|
|
162
|
+
multipart: options.multipart,
|
|
163
|
+
}),
|
|
164
|
+
...(options.onProgress !== undefined && {
|
|
165
|
+
onProgress: options.onProgress,
|
|
166
|
+
}),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function downloadOptions(options) {
|
|
170
|
+
return {
|
|
171
|
+
...operationOptions(options),
|
|
172
|
+
as: 'stream',
|
|
173
|
+
...(options?.range !== undefined && { range: options.range }),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function listOptions(options) {
|
|
177
|
+
if (options === undefined) {
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
...operationOptions(options),
|
|
182
|
+
...(options.cursor !== undefined && { cursor: options.cursor }),
|
|
183
|
+
...(options.delimiter !== undefined && { delimiter: options.delimiter }),
|
|
184
|
+
...(options.limit !== undefined && { limit: options.limit }),
|
|
185
|
+
...(options.prefix !== undefined && { prefix: options.prefix }),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function searchOptions(options) {
|
|
189
|
+
if (options === undefined) {
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
return {
|
|
193
|
+
...operationOptions(options),
|
|
194
|
+
...(options.caseInsensitive !== undefined && {
|
|
195
|
+
caseInsensitive: options.caseInsensitive,
|
|
196
|
+
}),
|
|
197
|
+
...(options.limit !== undefined && { limit: options.limit }),
|
|
198
|
+
...(options.match !== undefined && { match: options.match }),
|
|
199
|
+
...(options.maxResults !== undefined && {
|
|
200
|
+
maxResults: options.maxResults,
|
|
201
|
+
}),
|
|
202
|
+
...(options.prefix !== undefined && { prefix: options.prefix }),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
function signedDownloadOptions(options) {
|
|
206
|
+
if (options === undefined) {
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
...operationOptions(options),
|
|
211
|
+
...(options.expiresIn !== undefined && {
|
|
212
|
+
expiresIn: options.expiresIn,
|
|
213
|
+
}),
|
|
214
|
+
...(options.responseContentDisposition !== undefined && {
|
|
215
|
+
responseContentDisposition: options.responseContentDisposition,
|
|
216
|
+
}),
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
function signedUploadOptions(options) {
|
|
220
|
+
return {
|
|
221
|
+
...operationOptions(options),
|
|
222
|
+
expiresIn: options.expiresIn,
|
|
223
|
+
...(options.contentType !== undefined && {
|
|
224
|
+
contentType: options.contentType,
|
|
225
|
+
}),
|
|
226
|
+
...(options.maxSize !== undefined && { maxSize: options.maxSize }),
|
|
227
|
+
...(options.minSize !== undefined && { minSize: options.minSize }),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
function metadataOf(file) {
|
|
231
|
+
return {
|
|
232
|
+
contentType: file.type,
|
|
233
|
+
...(file.etag !== undefined && { etag: file.etag }),
|
|
234
|
+
key: file.key,
|
|
235
|
+
...(file.lastModified !== undefined && {
|
|
236
|
+
lastModified: new Date(file.lastModified),
|
|
237
|
+
}),
|
|
238
|
+
...(file.metadata !== undefined && {
|
|
239
|
+
metadata: { ...file.metadata },
|
|
240
|
+
}),
|
|
241
|
+
name: file.name,
|
|
242
|
+
size: file.size,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
function uploadResultOf(result) {
|
|
246
|
+
return {
|
|
247
|
+
contentType: result.contentType,
|
|
248
|
+
...(result.etag !== undefined && { etag: result.etag }),
|
|
249
|
+
key: result.key,
|
|
250
|
+
...(result.lastModified !== undefined && {
|
|
251
|
+
lastModified: new Date(result.lastModified),
|
|
252
|
+
}),
|
|
253
|
+
size: result.size,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
export class FilesSdkStorageDriver {
|
|
257
|
+
#files;
|
|
258
|
+
#name;
|
|
259
|
+
constructor(options) {
|
|
260
|
+
this.#files = new Files(options);
|
|
261
|
+
this.#name = options.adapter.name;
|
|
262
|
+
}
|
|
263
|
+
get name() {
|
|
264
|
+
return this.#name;
|
|
265
|
+
}
|
|
266
|
+
get capabilities() {
|
|
267
|
+
const capabilities = this.#files.capabilities;
|
|
268
|
+
return {
|
|
269
|
+
cacheControl: capabilities.cacheControl,
|
|
270
|
+
delimiter: capabilities.delimiter,
|
|
271
|
+
metadata: capabilities.metadata,
|
|
272
|
+
rangeRead: capabilities.rangeRead,
|
|
273
|
+
resumableUpload: capabilities.multipart,
|
|
274
|
+
serverSideCopy: capabilities.serverSideCopy,
|
|
275
|
+
signedDownload: { ...capabilities.signedUrl },
|
|
276
|
+
signedUpload: 'runtime',
|
|
277
|
+
nativeUploadProgress: capabilities.uploadProgress,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
async upload(key, body, options) {
|
|
281
|
+
return this.#call(async () => uploadResultOf(await this.#files.upload(key, mapBody(body), uploadOptions(options))));
|
|
282
|
+
}
|
|
283
|
+
async download(key, options) {
|
|
284
|
+
return this.#call(async () => {
|
|
285
|
+
const file = await this.#files.download(key, downloadOptions(options));
|
|
286
|
+
return {
|
|
287
|
+
...metadataOf(file),
|
|
288
|
+
body: normalizeDownloadStream(file.stream()),
|
|
289
|
+
};
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
async head(key, options) {
|
|
293
|
+
return this.#call(async () => metadataOf(await this.#files.head(key, operationOptions(options))));
|
|
294
|
+
}
|
|
295
|
+
exists(key, options) {
|
|
296
|
+
return this.#call(() => this.#files.exists(key, operationOptions(options)));
|
|
297
|
+
}
|
|
298
|
+
delete(key, options) {
|
|
299
|
+
return this.#call(async () => {
|
|
300
|
+
await this.#files.delete(key, operationOptions(options));
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
copy(sourceKey, destinationKey, options) {
|
|
304
|
+
return this.#call(() => this.#files.copy(sourceKey, destinationKey, operationOptions(options)));
|
|
305
|
+
}
|
|
306
|
+
move(sourceKey, destinationKey, options) {
|
|
307
|
+
return this.#call(() => this.#files.move(sourceKey, destinationKey, operationOptions(options)));
|
|
308
|
+
}
|
|
309
|
+
async list(options) {
|
|
310
|
+
return this.#call(async () => {
|
|
311
|
+
const result = await this.#files.list(listOptions(options));
|
|
312
|
+
return {
|
|
313
|
+
items: result.items.map(metadataOf),
|
|
314
|
+
...(result.cursor !== undefined && { cursor: result.cursor }),
|
|
315
|
+
...(result.prefixes !== undefined && {
|
|
316
|
+
prefixes: [...result.prefixes],
|
|
317
|
+
}),
|
|
318
|
+
};
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
search(pattern, options) {
|
|
322
|
+
return this.#search(pattern, options);
|
|
323
|
+
}
|
|
324
|
+
async *#search(pattern, options) {
|
|
325
|
+
try {
|
|
326
|
+
for await (const file of this.#files.search(pattern, searchOptions(options))) {
|
|
327
|
+
yield metadataOf(file);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
throw mapFilesError(error);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
signDownload(key, options) {
|
|
335
|
+
return this.#call(() => this.#files.url(key, signedDownloadOptions(options)));
|
|
336
|
+
}
|
|
337
|
+
signUpload(key, options) {
|
|
338
|
+
return this.#call(() => this.#files.signedUploadUrl(key, signedUploadOptions(options)));
|
|
339
|
+
}
|
|
340
|
+
async #call(operation) {
|
|
341
|
+
try {
|
|
342
|
+
return await operation();
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
throw mapFilesError(error);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
export function createFilesSdkDriver(options) {
|
|
350
|
+
return new FilesSdkStorageDriver(options);
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=files-sdk.driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files-sdk.driver.js","sourceRoot":"","sources":["../../src/files-sdk/files-sdk.driver.ts"],"names":[],"mappings":"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","sourcesContent":["import { Readable } from 'node:stream';\n\nimport {\n Files,\n FilesError,\n type Adapter,\n type Body,\n type DownloadOptions,\n type FilesOptions,\n type ListOptions,\n type OperationOptions,\n type RetryOptions,\n type SearchOptions,\n type SignUploadOptions,\n type StoredFile,\n type UploadOptions,\n type UploadResult,\n type UrlOptions,\n} from 'files-sdk';\n\nimport { StorageError, StorageErrorCode } from '../storage.error.js';\nimport type { StorageDriver } from '../storage.driver.js';\nimport type {\n StorageBody,\n StorageDownloadOptions,\n StorageListOptions,\n StorageListResult,\n StorageObject,\n StorageObjectMetadata,\n StorageOperationOptions,\n StorageRetryOptions,\n StorageSearchOptions,\n StorageSignedDownloadOptions,\n StorageSignedUpload,\n StorageSignedUploadOptions,\n StorageUploadOptions,\n StorageUploadResult,\n} from '../storage.types.js';\nimport { getFilesSdkUploadControl } from '../storage-upload-control.js';\n\nexport type FilesSdkDriverOptions<AdapterType extends Adapter> =\n FilesOptions<AdapterType>;\n\nfunction mapFilesError(error: unknown): StorageError {\n if (error instanceof StorageError) {\n return error;\n }\n if (!(error instanceof FilesError)) {\n return new StorageError(\n error instanceof Error ? error.message : String(error),\n {\n cause: error,\n code: StorageErrorCode.PROVIDER,\n },\n );\n }\n\n if (error.cause instanceof StorageError) {\n return error.cause;\n }\n\n let code: StorageErrorCode;\n if (error.timedOut) {\n code = StorageErrorCode.TIMEOUT;\n } else if (error.aborted) {\n code = StorageErrorCode.ABORTED;\n } else {\n switch (error.code) {\n case 'NotFound':\n code = StorageErrorCode.NOT_FOUND;\n break;\n case 'Unauthorized':\n code = StorageErrorCode.UNAUTHORIZED;\n break;\n case 'Conflict':\n code = StorageErrorCode.CONFLICT;\n break;\n case 'ReadOnly':\n code = StorageErrorCode.READ_ONLY;\n break;\n case 'Provider':\n code = /(?:not supported|does not support|unsupported)/iu.test(\n error.message,\n )\n ? StorageErrorCode.NOT_SUPPORTED\n : StorageErrorCode.PROVIDER;\n break;\n }\n }\n\n return new StorageError(error.message, {\n aborted: error.aborted,\n cause: error.cause ?? error,\n code,\n permanent: error.permanent,\n timedOut: error.timedOut,\n });\n}\n\nfunction mapRetryOptions(\n retries: StorageRetryOptions | undefined,\n): RetryOptions | undefined {\n if (retries === undefined || typeof retries === 'number') {\n return retries;\n }\n\n return {\n max: retries.max,\n ...(retries.backoff !== undefined && {\n backoff: ({ attempt, error }) =>\n retries.backoff?.({\n attempt,\n error: mapFilesError(error),\n }) ?? 0,\n }),\n };\n}\n\nfunction operationOptions(\n options?: StorageOperationOptions,\n): OperationOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n\n const retries = mapRetryOptions(options.retries);\n return {\n ...(retries !== undefined && { retries }),\n ...(options.signal !== undefined && { signal: options.signal }),\n ...(options.timeout !== undefined && { timeout: options.timeout }),\n };\n}\n\nasync function* normalizeNodeChunks(\n source: Readable,\n): AsyncGenerator<Uint8Array> {\n for await (const chunk of source) {\n if (typeof chunk === 'string') {\n yield new TextEncoder().encode(chunk);\n continue;\n }\n if (chunk instanceof Uint8Array) {\n yield chunk;\n continue;\n }\n throw new StorageError(\n 'Node upload streams must yield strings or Uint8Array chunks.',\n {\n code: StorageErrorCode.INVALID_ARGUMENT,\n permanent: true,\n },\n );\n }\n}\n\nfunction mapBody(body: StorageBody): Body {\n if (body instanceof Readable) {\n return Readable.toWeb(\n Readable.from(normalizeNodeChunks(body)),\n ) as ReadableStream<Uint8Array>;\n }\n return body;\n}\n\nfunction normalizeDownloadStream(\n source: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined =\n source.getReader();\n\n const release = (): void => {\n reader?.releaseLock();\n reader = undefined;\n };\n\n return new ReadableStream<Uint8Array>({\n async cancel(reason) {\n const activeReader = reader;\n if (activeReader === undefined) {\n return;\n }\n try {\n await activeReader.cancel(reason);\n } catch (error) {\n throw mapFilesError(error);\n } finally {\n release();\n }\n },\n async pull(controller) {\n const activeReader = reader;\n if (activeReader === undefined) {\n controller.close();\n return;\n }\n try {\n const result = await activeReader.read();\n if (result.done) {\n release();\n controller.close();\n return;\n }\n controller.enqueue(result.value);\n } catch (error) {\n release();\n controller.error(mapFilesError(error));\n }\n },\n });\n}\n\nfunction uploadOptions(\n options?: StorageUploadOptions,\n): UploadOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.cacheControl !== undefined && {\n cacheControl: options.cacheControl,\n }),\n ...(options.contentType !== undefined && {\n contentType: options.contentType,\n }),\n ...(options.control !== undefined && {\n control: getFilesSdkUploadControl(options.control),\n }),\n ...(options.metadata !== undefined && { metadata: options.metadata }),\n ...(options.multipart !== undefined && {\n multipart: options.multipart,\n }),\n ...(options.onProgress !== undefined && {\n onProgress: options.onProgress,\n }),\n };\n}\n\nfunction downloadOptions(options?: StorageDownloadOptions): DownloadOptions {\n return {\n ...operationOptions(options),\n as: 'stream',\n ...(options?.range !== undefined && { range: options.range }),\n };\n}\n\nfunction listOptions(options?: StorageListOptions): ListOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.cursor !== undefined && { cursor: options.cursor }),\n ...(options.delimiter !== undefined && { delimiter: options.delimiter }),\n ...(options.limit !== undefined && { limit: options.limit }),\n ...(options.prefix !== undefined && { prefix: options.prefix }),\n };\n}\n\nfunction searchOptions(\n options?: StorageSearchOptions,\n): SearchOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.caseInsensitive !== undefined && {\n caseInsensitive: options.caseInsensitive,\n }),\n ...(options.limit !== undefined && { limit: options.limit }),\n ...(options.match !== undefined && { match: options.match }),\n ...(options.maxResults !== undefined && {\n maxResults: options.maxResults,\n }),\n ...(options.prefix !== undefined && { prefix: options.prefix }),\n };\n}\n\nfunction signedDownloadOptions(\n options?: StorageSignedDownloadOptions,\n): UrlOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return {\n ...operationOptions(options),\n ...(options.expiresIn !== undefined && {\n expiresIn: options.expiresIn,\n }),\n ...(options.responseContentDisposition !== undefined && {\n responseContentDisposition: options.responseContentDisposition,\n }),\n };\n}\n\nfunction signedUploadOptions(\n options: StorageSignedUploadOptions,\n): SignUploadOptions {\n return {\n ...operationOptions(options),\n expiresIn: options.expiresIn,\n ...(options.contentType !== undefined && {\n contentType: options.contentType,\n }),\n ...(options.maxSize !== undefined && { maxSize: options.maxSize }),\n ...(options.minSize !== undefined && { minSize: options.minSize }),\n };\n}\n\nfunction metadataOf(file: StoredFile): StorageObjectMetadata {\n return {\n contentType: file.type,\n ...(file.etag !== undefined && { etag: file.etag }),\n key: file.key,\n ...(file.lastModified !== undefined && {\n lastModified: new Date(file.lastModified),\n }),\n ...(file.metadata !== undefined && {\n metadata: { ...file.metadata },\n }),\n name: file.name,\n size: file.size,\n };\n}\n\nfunction uploadResultOf(result: UploadResult): StorageUploadResult {\n return {\n contentType: result.contentType,\n ...(result.etag !== undefined && { etag: result.etag }),\n key: result.key,\n ...(result.lastModified !== undefined && {\n lastModified: new Date(result.lastModified),\n }),\n size: result.size,\n };\n}\n\nexport class FilesSdkStorageDriver<\n AdapterType extends Adapter = Adapter,\n> implements StorageDriver {\n readonly #files: Files<AdapterType>;\n readonly #name: string;\n\n constructor(options: FilesSdkDriverOptions<AdapterType>) {\n this.#files = new Files(options);\n this.#name = options.adapter.name;\n }\n\n get name(): string {\n return this.#name;\n }\n\n get capabilities() {\n const capabilities = this.#files.capabilities;\n return {\n cacheControl: capabilities.cacheControl,\n delimiter: capabilities.delimiter,\n metadata: capabilities.metadata,\n rangeRead: capabilities.rangeRead,\n resumableUpload: capabilities.multipart,\n serverSideCopy: capabilities.serverSideCopy,\n signedDownload: { ...capabilities.signedUrl },\n signedUpload: 'runtime' as const,\n nativeUploadProgress: capabilities.uploadProgress,\n };\n }\n\n async upload(\n key: string,\n body: StorageBody,\n options?: StorageUploadOptions,\n ): Promise<StorageUploadResult> {\n return this.#call(async () =>\n uploadResultOf(\n await this.#files.upload(key, mapBody(body), uploadOptions(options)),\n ),\n );\n }\n\n async download(\n key: string,\n options?: StorageDownloadOptions,\n ): Promise<StorageObject> {\n return this.#call(async () => {\n const file = await this.#files.download(key, downloadOptions(options));\n return {\n ...metadataOf(file),\n body: normalizeDownloadStream(file.stream()),\n };\n });\n }\n\n async head(\n key: string,\n options?: StorageOperationOptions,\n ): Promise<StorageObjectMetadata> {\n return this.#call(async () =>\n metadataOf(await this.#files.head(key, operationOptions(options))),\n );\n }\n\n exists(key: string, options?: StorageOperationOptions): Promise<boolean> {\n return this.#call(() => this.#files.exists(key, operationOptions(options)));\n }\n\n delete(key: string, options?: StorageOperationOptions): Promise<void> {\n return this.#call(async () => {\n await this.#files.delete(key, operationOptions(options));\n });\n }\n\n copy(\n sourceKey: string,\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void> {\n return this.#call(() =>\n this.#files.copy(sourceKey, destinationKey, operationOptions(options)),\n );\n }\n\n move(\n sourceKey: string,\n destinationKey: string,\n options?: StorageOperationOptions,\n ): Promise<void> {\n return this.#call(() =>\n this.#files.move(sourceKey, destinationKey, operationOptions(options)),\n );\n }\n\n async list(options?: StorageListOptions): Promise<StorageListResult> {\n return this.#call(async () => {\n const result = await this.#files.list(listOptions(options));\n return {\n items: result.items.map(metadataOf),\n ...(result.cursor !== undefined && { cursor: result.cursor }),\n ...(result.prefixes !== undefined && {\n prefixes: [...result.prefixes],\n }),\n };\n });\n }\n\n search(\n pattern: string | RegExp,\n options?: StorageSearchOptions,\n ): AsyncIterable<StorageObjectMetadata> {\n return this.#search(pattern, options);\n }\n\n async *#search(\n pattern: string | RegExp,\n options?: StorageSearchOptions,\n ): AsyncGenerator<StorageObjectMetadata, void> {\n try {\n for await (const file of this.#files.search(\n pattern,\n searchOptions(options),\n )) {\n yield metadataOf(file);\n }\n } catch (error) {\n throw mapFilesError(error);\n }\n }\n\n signDownload(\n key: string,\n options?: StorageSignedDownloadOptions,\n ): Promise<string> {\n return this.#call(() =>\n this.#files.url(key, signedDownloadOptions(options)),\n );\n }\n\n signUpload(\n key: string,\n options: StorageSignedUploadOptions,\n ): Promise<StorageSignedUpload> {\n return this.#call(() =>\n this.#files.signedUploadUrl(key, signedUploadOptions(options)),\n );\n }\n\n async #call<Result>(operation: () => Promise<Result>): Promise<Result> {\n try {\n return await operation();\n } catch (error) {\n throw mapFilesError(error);\n }\n }\n}\n\nexport function createFilesSdkDriver<AdapterType extends Adapter>(\n options: FilesSdkDriverOptions<AdapterType>,\n): FilesSdkStorageDriver<AdapterType> {\n return new FilesSdkStorageDriver(options);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/files-sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,OAAO,IAAI,eAAe,EAC1B,UAAU,IAAI,aAAa,EAC3B,WAAW,IAAI,cAAc,GAC9B,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/files-sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,uBAAuB,CAAC","sourcesContent":["export {\n FilesSdkStorageDriver,\n createFilesSdkDriver,\n type FilesSdkDriverOptions,\n} from './files-sdk.driver.js';\n\nexport type {\n Adapter as FilesSdkAdapter,\n FilesHooks as FilesSdkHooks,\n FilesPlugin as FilesSdkPlugin,\n} from 'files-sdk';\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { StorageGatewayModule } from './storage-gateway.module.js';
|
|
2
|
+
export { StorageGatewayOperation, type StorageGatewayMode, type StorageGatewayOperation as StorageGatewayOperationName, type StorageGatewayOptions, } from './storage-gateway.types.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,IAAI,2BAA2B,EAC3D,KAAK,qBAAqB,GAC3B,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EACL,uBAAuB,GAIxB,MAAM,4BAA4B,CAAC","sourcesContent":["export { StorageGatewayModule } from './storage-gateway.module.js';\nexport {\n StorageGatewayOperation,\n type StorageGatewayMode,\n type StorageGatewayOperation as StorageGatewayOperationName,\n type StorageGatewayOptions,\n} from './storage-gateway.types.js';\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { HttpAdapterHost } from '@nestjs/core';
|
|
3
|
+
export declare const FASTIFY_STORAGE_UPLOAD_CONFIG = "nestmStorageGatewayUpload";
|
|
4
|
+
export declare class StorageGatewayFastifyParser implements OnModuleInit {
|
|
5
|
+
private readonly adapterHost;
|
|
6
|
+
constructor(adapterHost: HttpAdapterHost);
|
|
7
|
+
onModuleInit(): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=storage-gateway-fastify-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-gateway-fastify-parser.d.ts","sourceRoot":"","sources":["../../src/gateway/storage-gateway-fastify-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAqB/C,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AAqBzE,qBACa,2BAA4B,YAAW,YAAY;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,eAAe;IAEzD,YAAY,IAAI,IAAI;CAyBrB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Injectable, UnsupportedMediaTypeException, } from '@nestjs/common';
|
|
11
|
+
import { HttpAdapterHost } from '@nestjs/core';
|
|
12
|
+
export const FASTIFY_STORAGE_UPLOAD_CONFIG = 'nestmStorageGatewayUpload';
|
|
13
|
+
function unsupportedMediaType() {
|
|
14
|
+
return new UnsupportedMediaTypeException('Unsupported Media Type: application/octet-stream');
|
|
15
|
+
}
|
|
16
|
+
function isFastifyParserInstance(value) {
|
|
17
|
+
if (typeof value !== 'object' || value === null) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const candidate = value;
|
|
21
|
+
return (typeof candidate.addContentTypeParser === 'function' &&
|
|
22
|
+
typeof candidate.hasContentTypeParser === 'function');
|
|
23
|
+
}
|
|
24
|
+
let StorageGatewayFastifyParser = class StorageGatewayFastifyParser {
|
|
25
|
+
adapterHost;
|
|
26
|
+
constructor(adapterHost) {
|
|
27
|
+
this.adapterHost = adapterHost;
|
|
28
|
+
}
|
|
29
|
+
onModuleInit() {
|
|
30
|
+
const instance = this.adapterHost.httpAdapter.getInstance();
|
|
31
|
+
if (!isFastifyParserInstance(instance) ||
|
|
32
|
+
instance.hasContentTypeParser('application/octet-stream')) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
instance.addContentTypeParser('application/octet-stream', (request, payload, done) => {
|
|
36
|
+
const parserRequest = request;
|
|
37
|
+
if (parserRequest.routeOptions?.config?.[FASTIFY_STORAGE_UPLOAD_CONFIG] !== true) {
|
|
38
|
+
done(unsupportedMediaType());
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
done(null, payload);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
StorageGatewayFastifyParser = __decorate([
|
|
46
|
+
Injectable(),
|
|
47
|
+
__metadata("design:paramtypes", [HttpAdapterHost])
|
|
48
|
+
], StorageGatewayFastifyParser);
|
|
49
|
+
export { StorageGatewayFastifyParser };
|
|
50
|
+
//# sourceMappingURL=storage-gateway-fastify-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-gateway-fastify-parser.js","sourceRoot":"","sources":["../../src/gateway/storage-gateway-fastify-parser.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,UAAU,EACV,6BAA6B,GAE9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAqB/C,MAAM,CAAC,MAAM,6BAA6B,GAAG,2BAA2B,CAAC;AAEzE,SAAS,oBAAoB;IAC3B,OAAO,IAAI,6BAA6B,CACtC,kDAAkD,CACnD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAc;IAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,KAAuC,CAAC;IAC1D,OAAO,CACL,OAAO,SAAS,CAAC,oBAAoB,KAAK,UAAU;QACpD,OAAO,SAAS,CAAC,oBAAoB,KAAK,UAAU,CACrD,CAAC;AACJ,CAAC;AAGM,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACT;IAA7B,YAA6B,WAA4B;QAA5B,gBAAW,GAAX,WAAW,CAAiB;IAAG,CAAC;IAE7D,YAAY;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5D,IACE,CAAC,uBAAuB,CAAC,QAAQ,CAAC;YAClC,QAAQ,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,EACzD,CAAC;YACD,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,oBAAoB,CAC3B,0BAA0B,EAC1B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;YACzB,MAAM,aAAa,GAAG,OAA+B,CAAC;YACtD,IACE,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,CAClC,6BAA6B,CAC9B,KAAK,IAAI,EACV,CAAC;gBACD,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtB,CAAC,CACF,CAAC;IACJ,CAAC;CACF,CAAA;AA5BY,2BAA2B;IADvC,UAAU,EAAE;qCAE+B,eAAe;GAD9C,2BAA2B,CA4BvC","sourcesContent":["import {\n Injectable,\n UnsupportedMediaTypeException,\n type OnModuleInit,\n} from '@nestjs/common';\nimport { HttpAdapterHost } from '@nestjs/core';\nimport type { Readable } from 'node:stream';\n\ninterface FastifyParserInstance {\n hasContentTypeParser(contentType: string): boolean;\n addContentTypeParser(\n contentType: string,\n parser: (\n request: unknown,\n payload: Readable,\n done: (error: Error | null, body?: unknown) => void,\n ) => void,\n ): void;\n}\n\ninterface FastifyParserRequest {\n routeOptions?: {\n config?: Record<string, unknown>;\n };\n}\n\nexport const FASTIFY_STORAGE_UPLOAD_CONFIG = 'nestmStorageGatewayUpload';\n\nfunction unsupportedMediaType(): Error {\n return new UnsupportedMediaTypeException(\n 'Unsupported Media Type: application/octet-stream',\n );\n}\n\nfunction isFastifyParserInstance(\n value: unknown,\n): value is FastifyParserInstance {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const candidate = value as Partial<FastifyParserInstance>;\n return (\n typeof candidate.addContentTypeParser === 'function' &&\n typeof candidate.hasContentTypeParser === 'function'\n );\n}\n\n@Injectable()\nexport class StorageGatewayFastifyParser implements OnModuleInit {\n constructor(private readonly adapterHost: HttpAdapterHost) {}\n\n onModuleInit(): void {\n const instance = this.adapterHost.httpAdapter.getInstance();\n if (\n !isFastifyParserInstance(instance) ||\n instance.hasContentTypeParser('application/octet-stream')\n ) {\n return;\n }\n\n instance.addContentTypeParser(\n 'application/octet-stream',\n (request, payload, done) => {\n const parserRequest = request as FastifyParserRequest;\n if (\n parserRequest.routeOptions?.config?.[\n FASTIFY_STORAGE_UPLOAD_CONFIG\n ] !== true\n ) {\n done(unsupportedMediaType());\n return;\n }\n done(null, payload);\n },\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { StorageService } from '../storage.service.js';
|
|
2
|
+
import { type ResolvedStorageGatewayOptions } from './storage-gateway.types.js';
|
|
3
|
+
interface ResponseEnvelope<Result> {
|
|
4
|
+
data: Result;
|
|
5
|
+
}
|
|
6
|
+
export declare class StorageGatewayController {
|
|
7
|
+
#private;
|
|
8
|
+
private readonly storage;
|
|
9
|
+
private readonly options;
|
|
10
|
+
constructor(storage: StorageService, options: ResolvedStorageGatewayOptions);
|
|
11
|
+
download(key: string | undefined, proxy: string | undefined, rangeStart: string | undefined, rangeEnd: string | undefined, disposition: string | undefined, response: unknown): Promise<void>;
|
|
12
|
+
upload(key: string | undefined, request: unknown): Promise<ResponseEnvelope<unknown>>;
|
|
13
|
+
head(key: string | undefined, response: unknown): Promise<void>;
|
|
14
|
+
delete(key: string | undefined): Promise<ResponseEnvelope<{
|
|
15
|
+
deleted: true;
|
|
16
|
+
}>>;
|
|
17
|
+
list(prefix: string | undefined, cursor: string | undefined, limit: string | undefined, delimiter: string | undefined): Promise<ResponseEnvelope<unknown>>;
|
|
18
|
+
search(pattern: string | undefined, prefix: string | undefined, limit: string | undefined, maxResults: string | undefined, match: string | undefined, caseInsensitive: string | undefined): Promise<ResponseEnvelope<unknown>>;
|
|
19
|
+
signDownload(body: unknown): Promise<ResponseEnvelope<{
|
|
20
|
+
url: string;
|
|
21
|
+
}>>;
|
|
22
|
+
signUpload(body: unknown): Promise<ResponseEnvelope<unknown>>;
|
|
23
|
+
copy(body: unknown): Promise<ResponseEnvelope<{
|
|
24
|
+
copied: true;
|
|
25
|
+
}>>;
|
|
26
|
+
move(body: unknown): Promise<ResponseEnvelope<{
|
|
27
|
+
moved: true;
|
|
28
|
+
}>>;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=storage-gateway.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-gateway.controller.d.ts","sourceRoot":"","sources":["../../src/gateway/storage-gateway.controller.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAWvD,OAAO,EAEL,KAAK,6BAA6B,EAEnC,MAAM,4BAA4B,CAAC;AAEpC,UAAU,gBAAgB,CAAC,MAAM;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAgQD,qBAEa,wBAAwB;;IAEjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,OAAO,EAAE,cAAc,EAEvB,OAAO,EAAE,6BAA6B;IAInD,QAAQ,CACE,GAAG,EAAE,MAAM,GAAG,SAAS,EACrB,KAAK,EAAE,MAAM,GAAG,SAAS,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,EACzB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC9C,QAAQ,EAAE,OAAO,GACvB,OAAO,CAAC,IAAI,CAAC;IA0GV,MAAM,CACI,GAAG,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,OAAO,GACtB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAuD/B,IAAI,CACM,GAAG,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,OAAO,GACvB,OAAO,CAAC,IAAI,CAAC;IAcV,MAAM,CACI,GAAG,EAAE,MAAM,GAAG,SAAS,GACpC,OAAO,CAAC,gBAAgB,CAAC;QAAE,OAAO,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IASzC,IAAI,CACS,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,EACrB,SAAS,EAAE,MAAM,GAAG,SAAS,GAChD,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAqB/B,MAAM,CACQ,OAAO,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EACnC,KAAK,EAAE,MAAM,GAAG,SAAS,EACf,eAAe,EAAE,MAAM,GAAG,SAAS,GAC5D,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAuD/B,YAAY,CACR,IAAI,EAAE,OAAO,GACpB,OAAO,CAAC,gBAAgB,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAiCvC,UAAU,CAAS,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAqCrE,IAAI,CACA,IAAI,EAAE,OAAO,GACpB,OAAO,CAAC,gBAAgB,CAAC;QAAE,MAAM,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAYxC,IAAI,CACA,IAAI,EAAE,OAAO,GACpB,OAAO,CAAC,gBAAgB,CAAC;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;CAuC9C"}
|