@adonis-agora/media 0.1.1 → 0.2.1
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 +87 -0
- package/dist/configure.d.ts +2 -2
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +3 -2
- package/dist/configure.js.map +1 -1
- package/dist/providers/media_provider.d.ts +15 -0
- package/dist/providers/media_provider.d.ts.map +1 -1
- package/dist/providers/media_provider.js +224 -12
- package/dist/providers/media_provider.js.map +1 -1
- package/dist/src/attachment.d.ts +1 -0
- package/dist/src/attachment.d.ts.map +1 -1
- package/dist/src/attachment.js +57 -21
- package/dist/src/attachment.js.map +1 -1
- package/dist/src/define_config.d.ts +83 -5
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js +3 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/diagnostics.d.ts +32 -1
- package/dist/src/diagnostics.d.ts.map +1 -1
- package/dist/src/diagnostics.js.map +1 -1
- package/dist/src/disks/factory.d.ts +62 -0
- package/dist/src/disks/factory.d.ts.map +1 -0
- package/dist/src/disks/factory.js +57 -0
- package/dist/src/disks/factory.js.map +1 -0
- package/dist/src/disks/s3.d.ts +76 -0
- package/dist/src/disks/s3.d.ts.map +1 -0
- package/dist/src/disks/s3.js +357 -0
- package/dist/src/disks/s3.js.map +1 -0
- package/dist/src/disks/xml_fallback.d.ts +29 -0
- package/dist/src/disks/xml_fallback.d.ts.map +1 -0
- package/dist/src/disks/xml_fallback.js +68 -0
- package/dist/src/disks/xml_fallback.js.map +1 -0
- package/dist/src/errors.d.ts +34 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +60 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/extended_disk.d.ts +10 -0
- package/dist/src/extended_disk.d.ts.map +1 -0
- package/dist/src/extended_disk.js +19 -0
- package/dist/src/extended_disk.js.map +1 -0
- package/dist/src/index.d.ts +17 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +11 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/media_library.d.ts +4 -2
- package/dist/src/media_library.d.ts.map +1 -1
- package/dist/src/media_library.js +83 -32
- package/dist/src/media_library.js.map +1 -1
- package/dist/src/media_manager.d.ts +48 -0
- package/dist/src/media_manager.d.ts.map +1 -1
- package/dist/src/media_manager.js +68 -0
- package/dist/src/media_manager.js.map +1 -1
- package/dist/src/media_store.d.ts +40 -0
- package/dist/src/media_store.d.ts.map +1 -1
- package/dist/src/media_store.js +28 -1
- package/dist/src/media_store.js.map +1 -1
- package/dist/src/multipart.d.ts +10 -0
- package/dist/src/multipart.d.ts.map +1 -0
- package/dist/src/multipart.js +16 -0
- package/dist/src/multipart.js.map +1 -0
- package/dist/src/resumable_upload.d.ts +131 -0
- package/dist/src/resumable_upload.d.ts.map +1 -0
- package/dist/src/resumable_upload.js +177 -0
- package/dist/src/resumable_upload.js.map +1 -0
- package/dist/src/services/main.d.ts +14 -0
- package/dist/src/services/main.d.ts.map +1 -0
- package/dist/src/services/main.js +18 -0
- package/dist/src/services/main.js.map +1 -0
- package/dist/src/stores/factory.d.ts +12 -4
- package/dist/src/stores/factory.d.ts.map +1 -1
- package/dist/src/stores/factory.js +20 -1
- package/dist/src/stores/factory.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +2 -1
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +42 -7
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/telescope/dashboard.d.ts +19 -0
- package/dist/src/telescope/dashboard.d.ts.map +1 -0
- package/dist/src/telescope/dashboard.js +116 -0
- package/dist/src/telescope/dashboard.js.map +1 -0
- package/dist/src/telescope/data-providers.d.ts +36 -0
- package/dist/src/telescope/data-providers.d.ts.map +1 -0
- package/dist/src/telescope/data-providers.js +286 -0
- package/dist/src/telescope/data-providers.js.map +1 -0
- package/dist/src/telescope/extension.d.ts +26 -0
- package/dist/src/telescope/extension.d.ts.map +1 -0
- package/dist/src/telescope/extension.js +42 -0
- package/dist/src/telescope/extension.js.map +1 -0
- package/dist/src/telescope/index.d.ts +5 -0
- package/dist/src/telescope/index.d.ts.map +1 -0
- package/dist/src/telescope/index.js +4 -0
- package/dist/src/telescope/index.js.map +1 -0
- package/dist/src/telescope/telescope-sdk.d.ts +125 -0
- package/dist/src/telescope/telescope-sdk.d.ts.map +1 -0
- package/dist/src/telescope/telescope-sdk.js +14 -0
- package/dist/src/telescope/telescope-sdk.js.map +1 -0
- package/dist/src/testing/in_memory_disk.d.ts +10 -0
- package/dist/src/testing/in_memory_disk.d.ts.map +1 -1
- package/dist/src/testing/in_memory_disk.js +11 -0
- package/dist/src/testing/in_memory_disk.js.map +1 -1
- package/dist/src/testing/in_memory_media_store.d.ts +2 -1
- package/dist/src/testing/in_memory_media_store.d.ts.map +1 -1
- package/dist/src/testing/in_memory_media_store.js +28 -0
- package/dist/src/testing/in_memory_media_store.js.map +1 -1
- package/dist/src/testing/in_memory_upload_session_store.d.ts +18 -0
- package/dist/src/testing/in_memory_upload_session_store.d.ts.map +1 -0
- package/dist/src/testing/in_memory_upload_session_store.js +40 -0
- package/dist/src/testing/in_memory_upload_session_store.js.map +1 -0
- package/dist/src/testing/index.d.ts +1 -0
- package/dist/src/testing/index.d.ts.map +1 -1
- package/dist/src/testing/index.js +1 -0
- package/dist/src/testing/index.js.map +1 -1
- package/dist/src/tus.d.ts +57 -0
- package/dist/src/tus.d.ts.map +1 -0
- package/dist/src/tus.js +143 -0
- package/dist/src/tus.js.map +1 -0
- package/dist/src/types.d.ts +125 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/upload_manager.d.ts +127 -0
- package/dist/src/upload_manager.d.ts.map +1 -0
- package/dist/src/upload_manager.js +152 -0
- package/dist/src/upload_manager.js.map +1 -0
- package/dist/src/upload_mode.d.ts +27 -0
- package/dist/src/upload_mode.d.ts.map +1 -0
- package/dist/src/upload_mode.js +22 -0
- package/dist/src/upload_mode.js.map +1 -0
- package/dist/src/upload_sessions/factory.d.ts +62 -0
- package/dist/src/upload_sessions/factory.d.ts.map +1 -0
- package/dist/src/upload_sessions/factory.js +60 -0
- package/dist/src/upload_sessions/factory.js.map +1 -0
- package/dist/src/upload_sessions/lucid.d.ts +35 -0
- package/dist/src/upload_sessions/lucid.d.ts.map +1 -0
- package/dist/src/upload_sessions/lucid.js +105 -0
- package/dist/src/upload_sessions/lucid.js.map +1 -0
- package/dist/stubs/config/media.stub +16 -1
- package/dist/stubs/database/migrations/create_media_upload_sessions_table.stub +45 -0
- package/package.json +37 -1
|
@@ -1,9 +1,77 @@
|
|
|
1
|
+
import { disks } from './disks/factory.js';
|
|
2
|
+
import type { DiskFactory, S3Credentials, S3DiskConfig } from './disks/factory.js';
|
|
1
3
|
import type { ImageProcessor } from './image_processor.js';
|
|
2
4
|
import type { MediaCollectionConfig } from './media_collection.js';
|
|
3
5
|
import { processors } from './processors/factory.js';
|
|
4
6
|
import type { ImageProcessorFactory } from './processors/factory.js';
|
|
5
7
|
import { stores } from './stores/factory.js';
|
|
6
|
-
import type { LucidStoreConfig,
|
|
8
|
+
import type { LucidStoreConfig, StoreContext, StoreFactory } from './stores/factory.js';
|
|
9
|
+
import type { UploadMode } from './upload_mode.js';
|
|
10
|
+
import { uploadSessions } from './upload_sessions/factory.js';
|
|
11
|
+
import type { LucidUploadSessionStoreConfig, UploadSessionStoreContext, UploadSessionStoreFactory } from './upload_sessions/factory.js';
|
|
12
|
+
/**
|
|
13
|
+
* Direct-S3 upload configuration. Governs the `proxy`/`direct` multipart upload modes and, when
|
|
14
|
+
* `routes.enabled`, the HTTP endpoints the provider mounts to drive them (idiomatic AdonisJS routes,
|
|
15
|
+
* NOT controllers).
|
|
16
|
+
*/
|
|
17
|
+
export interface MediaUploadsConfig {
|
|
18
|
+
/**
|
|
19
|
+
* Default upload mode. `direct` presigns multipart parts for the client to upload straight to S3;
|
|
20
|
+
* `proxy` streams bytes through the app; `auto` picks `direct` on a multipart-capable disk, else
|
|
21
|
+
* `proxy`. Default `auto`.
|
|
22
|
+
*/
|
|
23
|
+
mode?: UploadMode;
|
|
24
|
+
/** Multipart part size in bytes for direct uploads. Default 8 MiB (S3's part minimum is 5 MiB). */
|
|
25
|
+
partSize?: number;
|
|
26
|
+
/** Lifetime of presigned part URLs, in seconds. Default 3600. */
|
|
27
|
+
presignTtlSeconds?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Mount the built-in upload HTTP routes. Opt-in — omit or set `enabled: false` to expose the
|
|
30
|
+
* upload API only through the `MediaManager` methods and wire your own routes.
|
|
31
|
+
*/
|
|
32
|
+
routes?: {
|
|
33
|
+
/** Register the routes. Default false. */
|
|
34
|
+
enabled?: boolean;
|
|
35
|
+
/** Path prefix for the routes. Default `/media/uploads`. */
|
|
36
|
+
prefix?: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Resumable (TUS) upload settings. Present ⇒ `media.resumable` is available; when
|
|
40
|
+
* `routes.enabled`, the provider mounts the TUS protocol endpoints. Absent ⇒ resumable uploads are
|
|
41
|
+
* disabled and no session store is built.
|
|
42
|
+
*/
|
|
43
|
+
resumable?: MediaResumableConfig;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resumable (TUS) upload configuration. The session store persists offset/length/metadata/expiry so
|
|
47
|
+
* a dropped connection resumes; pick it by name from `stores` (built with the {@link uploadSessions}
|
|
48
|
+
* factory so each peer is imported lazily). When `routes.enabled`, the provider mounts the TUS
|
|
49
|
+
* protocol under `routes.prefix` (idiomatic AdonisJS routes, NOT controllers).
|
|
50
|
+
*/
|
|
51
|
+
export interface MediaResumableConfig {
|
|
52
|
+
/**
|
|
53
|
+
* Name of the session store (a key of {@link stores} below). Omit to use the in-memory store
|
|
54
|
+
* (single-process, non-durable).
|
|
55
|
+
*/
|
|
56
|
+
store?: string;
|
|
57
|
+
/** Named session stores, built with the {@link uploadSessions} factory (lazy peers). */
|
|
58
|
+
stores?: Record<string, UploadSessionStoreFactory>;
|
|
59
|
+
/** Prefix for temporary chunk parts on the target disk (buffered path). Default `.uploads`. */
|
|
60
|
+
tmpPrefix?: string;
|
|
61
|
+
/** Session lifetime in seconds (TUS `expiration`). Omit for sessions that never expire. */
|
|
62
|
+
sessionTtlSeconds?: number;
|
|
63
|
+
/** Mount the built-in TUS HTTP routes. Opt-in. */
|
|
64
|
+
routes?: {
|
|
65
|
+
/** Register the routes. Default false. */
|
|
66
|
+
enabled?: boolean;
|
|
67
|
+
/** Path prefix for the TUS routes. Default `/media/uploads/tus`. */
|
|
68
|
+
prefix?: string;
|
|
69
|
+
/** Disk resumable uploads land on. Defaults to the media default disk. */
|
|
70
|
+
disk?: string;
|
|
71
|
+
/** Reject creations whose `Upload-Length` exceeds this many bytes. */
|
|
72
|
+
maxSize?: number;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
7
75
|
/**
|
|
8
76
|
* Shape of `config/media.ts`. Storage is delegated to `@adonisjs/drive` — the `disk` is the name of a
|
|
9
77
|
* disk in your `config/drive.ts`; omit it to use Drive's default disk. Pick a `store` by name from the
|
|
@@ -30,10 +98,18 @@ import type { LucidStoreConfig, MemoryStoreConfig, StoreContext, StoreFactory }
|
|
|
30
98
|
*/
|
|
31
99
|
export interface MediaConfig {
|
|
32
100
|
/**
|
|
33
|
-
* Name of the
|
|
34
|
-
*
|
|
101
|
+
* Name of the disk media is written to. Resolved first from the {@link disks} map (e.g. an
|
|
102
|
+
* `disks.s3()` driver bundled with this package), then from your `@adonisjs/drive` config. Omit
|
|
103
|
+
* to use Drive's default disk. A collection may override it per-collection, and each `attach`
|
|
104
|
+
* call may override it per-call.
|
|
35
105
|
*/
|
|
36
106
|
disk?: string;
|
|
107
|
+
/**
|
|
108
|
+
* Named disks built with the {@link disks} factory (e.g. `disks.s3({ bucket, region })`). Each
|
|
109
|
+
* factory lazily imports its peer (the AWS SDK for S3) so it only loads when selected. Names here
|
|
110
|
+
* take precedence over `@adonisjs/drive` disks of the same name.
|
|
111
|
+
*/
|
|
112
|
+
disks?: Record<string, DiskFactory>;
|
|
37
113
|
/** Name of the media store (a key of {@link stores}). Defaults to `memory` (single-process). */
|
|
38
114
|
store?: string;
|
|
39
115
|
/** Named media stores, built with the {@link stores} factory. */
|
|
@@ -50,9 +126,11 @@ export interface MediaConfig {
|
|
|
50
126
|
attachmentKeyPrefix?: string;
|
|
51
127
|
/** Emit `agora:media:*` diagnostics events (default true). */
|
|
52
128
|
emitDiagnostics?: boolean;
|
|
129
|
+
/** Direct-S3 upload settings (default mode, part size, presign TTL, optional HTTP routes). */
|
|
130
|
+
uploads?: MediaUploadsConfig;
|
|
53
131
|
}
|
|
54
132
|
/** Identity helper giving `config/media.ts` full type-checking. */
|
|
55
133
|
export declare function defineConfig(config?: MediaConfig): MediaConfig;
|
|
56
|
-
export { stores, processors };
|
|
57
|
-
export type { StoreContext, StoreFactory, LucidStoreConfig,
|
|
134
|
+
export { stores, processors, disks, uploadSessions };
|
|
135
|
+
export type { StoreContext, StoreFactory, LucidStoreConfig, ImageProcessorFactory, DiskFactory, S3DiskConfig, S3Credentials, UploadMode, UploadSessionStoreContext, UploadSessionStoreFactory, LucidUploadSessionStoreConfig, };
|
|
58
136
|
//# sourceMappingURL=define_config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define_config.d.ts","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"define_config.d.ts","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { disks } from './disks/factory.js';
|
|
1
2
|
import { processors } from './processors/factory.js';
|
|
2
3
|
import { stores } from './stores/factory.js';
|
|
4
|
+
import { uploadSessions } from './upload_sessions/factory.js';
|
|
3
5
|
/** Identity helper giving `config/media.ts` full type-checking. */
|
|
4
6
|
export function defineConfig(config = {}) {
|
|
5
7
|
return config;
|
|
6
8
|
}
|
|
7
|
-
export { stores, processors };
|
|
9
|
+
export { stores, processors, disks, uploadSessions };
|
|
8
10
|
//# sourceMappingURL=define_config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define_config.js","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"define_config.js","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAI3C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAkI9D,mEAAmE;AACnE,MAAM,UAAU,YAAY,CAAC,SAAsB,EAAE;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type MediaDiagnosticEvent = 'attach' | 'delete' | 'conversion' | 'attachment.create' | 'attachment.delete';
|
|
1
|
+
export type MediaDiagnosticEvent = 'attach' | 'delete' | 'conversion' | 'attachment.create' | 'attachment.delete' | 'upload.start' | 'upload.progress' | 'upload.complete' | 'upload.abort';
|
|
2
2
|
export interface AttachPayload {
|
|
3
3
|
id: string;
|
|
4
4
|
ownerType: string;
|
|
@@ -32,6 +32,33 @@ export interface AttachmentDeletePayload {
|
|
|
32
32
|
path: string;
|
|
33
33
|
variants: string[];
|
|
34
34
|
}
|
|
35
|
+
export interface UploadStartPayload {
|
|
36
|
+
id: string;
|
|
37
|
+
disk: string;
|
|
38
|
+
key: string;
|
|
39
|
+
mode: 'proxy' | 'direct';
|
|
40
|
+
size?: number | undefined;
|
|
41
|
+
contentType?: string | undefined;
|
|
42
|
+
}
|
|
43
|
+
export interface UploadProgressPayload {
|
|
44
|
+
id: string;
|
|
45
|
+
/** Bytes received so far (the resume offset). */
|
|
46
|
+
offset: number;
|
|
47
|
+
/** Number of chunk parts written so far. */
|
|
48
|
+
parts: number;
|
|
49
|
+
/** Total expected size in bytes, when known up front. */
|
|
50
|
+
size?: number | undefined;
|
|
51
|
+
}
|
|
52
|
+
export interface UploadCompletePayload {
|
|
53
|
+
id: string;
|
|
54
|
+
disk: string;
|
|
55
|
+
key: string;
|
|
56
|
+
}
|
|
57
|
+
export interface UploadAbortPayload {
|
|
58
|
+
id: string;
|
|
59
|
+
disk: string;
|
|
60
|
+
key: string;
|
|
61
|
+
}
|
|
35
62
|
/** Maps each event to its payload type, so {@link publishMedia} is checked at the call site. */
|
|
36
63
|
export interface MediaDiagnosticPayloads {
|
|
37
64
|
attach: AttachPayload;
|
|
@@ -39,6 +66,10 @@ export interface MediaDiagnosticPayloads {
|
|
|
39
66
|
conversion: ConversionPayload;
|
|
40
67
|
'attachment.create': AttachmentCreatePayload;
|
|
41
68
|
'attachment.delete': AttachmentDeletePayload;
|
|
69
|
+
'upload.start': UploadStartPayload;
|
|
70
|
+
'upload.progress': UploadProgressPayload;
|
|
71
|
+
'upload.complete': UploadCompletePayload;
|
|
72
|
+
'upload.abort': UploadAbortPayload;
|
|
42
73
|
}
|
|
43
74
|
/**
|
|
44
75
|
* Publish a media event on `agora:media:<event>` via the structural diagnostics slot.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,mBAAmB,GACnB,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,mBAAmB,GACnB,mBAAmB,GACnB,cAAc,GACd,iBAAiB,GACjB,iBAAiB,GACjB,cAAc,CAAC;AAEnB,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AACD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AACD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AACD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AACD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AACD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,gGAAgG;AAChG,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,cAAc,EAAE,kBAAkB,CAAC;IACnC,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,cAAc,EAAE,kBAAkB,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,oBAAoB,EACzD,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAClC,IAAI,CASN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAwFxD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAQ,EACR,OAAmC;IAEnC,MAAM,IAAI,GAAI,UAAsC,CAAC,SAAS,CAAuB,CAAC;IACtF,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;QACnD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Disk } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* A configured disk: a lazy thunk the media provider calls at boot to build a {@link Disk}. Each
|
|
4
|
+
* factory imports its peer dependency (e.g. `@aws-sdk/client-s3`) inside the thunk, so the driver
|
|
5
|
+
* is only loaded when it is actually selected — keeping that package optional.
|
|
6
|
+
*/
|
|
7
|
+
export type DiskFactory = () => Promise<Disk>;
|
|
8
|
+
/** Static AWS credentials for the S3 disk. Omit to let the SDK's default provider chain resolve them. */
|
|
9
|
+
export interface S3Credentials {
|
|
10
|
+
accessKeyId: string;
|
|
11
|
+
secretAccessKey: string;
|
|
12
|
+
sessionToken?: string;
|
|
13
|
+
}
|
|
14
|
+
/** Options for the S3-backed disk. Mirrors the common `@aws-sdk/client-s3` `S3ClientConfig` knobs. */
|
|
15
|
+
export interface S3DiskConfig {
|
|
16
|
+
/** Target bucket (required). */
|
|
17
|
+
bucket: string;
|
|
18
|
+
/** AWS region, e.g. `us-east-1`. */
|
|
19
|
+
region?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Static credentials. Omit to use the AWS SDK default provider chain (env vars, shared config,
|
|
22
|
+
* IAM role, etc.).
|
|
23
|
+
*/
|
|
24
|
+
credentials?: S3Credentials;
|
|
25
|
+
/** Custom endpoint for S3-compatible services (MinIO, R2, DigitalOcean Spaces, …). */
|
|
26
|
+
endpoint?: string;
|
|
27
|
+
/** Use path-style addressing (`endpoint/bucket/key`) — required by most S3-compatible services. */
|
|
28
|
+
forcePathStyle?: boolean;
|
|
29
|
+
/** Prefix prepended to every key (e.g. `uploads`). */
|
|
30
|
+
keyPrefix?: string;
|
|
31
|
+
/** Base URL for stable public URLs (a CDN or the bucket website), used by `getUrl`. */
|
|
32
|
+
publicBaseUrl?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The disk factory namespace used in `config/media.ts`, parallel to `stores` and `processors`:
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* import { defineConfig, disks } from '@adonis-agora/media'
|
|
39
|
+
*
|
|
40
|
+
* export default defineConfig({
|
|
41
|
+
* disk: 's3',
|
|
42
|
+
* disks: {
|
|
43
|
+
* s3: disks.s3({ bucket: 'my-bucket', region: 'us-east-1', publicBaseUrl: 'https://cdn.example.com' }),
|
|
44
|
+
* },
|
|
45
|
+
* })
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* Each factory returns a {@link DiskFactory} — a lazy thunk. Calling it in the config file costs
|
|
49
|
+
* nothing; `@aws-sdk/client-s3` (and `@aws-sdk/s3-request-presigner`) are only imported when the
|
|
50
|
+
* provider builds the selected disk at boot, keeping the AWS SDK an optional peer.
|
|
51
|
+
*/
|
|
52
|
+
export declare const disks: {
|
|
53
|
+
/** S3 (or S3-compatible) disk — needs the optional `@aws-sdk/client-s3` + `@aws-sdk/s3-request-presigner` peers. */
|
|
54
|
+
s3(config: S3DiskConfig): DiskFactory;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Build every disk named in `config.disks` into a concrete {@link Disk} map. The media provider
|
|
58
|
+
* calls this once at boot (each factory lazily loads its peer), then serves the resulting disks
|
|
59
|
+
* from a synchronous resolver, falling back to Drive for any name not defined here.
|
|
60
|
+
*/
|
|
61
|
+
export declare function resolveConfiguredDisks(factories: Record<string, DiskFactory> | undefined): Promise<Record<string, Disk>>;
|
|
62
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/disks/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9C,yGAAyG;AACzG,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,sGAAsG;AACtG,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mGAAmG;IACnG,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,KAAK;IAChB,oHAAoH;eACzG,YAAY,GAAG,WAAW;CAqBtC,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAQ/B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The disk factory namespace used in `config/media.ts`, parallel to `stores` and `processors`:
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* import { defineConfig, disks } from '@adonis-agora/media'
|
|
6
|
+
*
|
|
7
|
+
* export default defineConfig({
|
|
8
|
+
* disk: 's3',
|
|
9
|
+
* disks: {
|
|
10
|
+
* s3: disks.s3({ bucket: 'my-bucket', region: 'us-east-1', publicBaseUrl: 'https://cdn.example.com' }),
|
|
11
|
+
* },
|
|
12
|
+
* })
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* Each factory returns a {@link DiskFactory} — a lazy thunk. Calling it in the config file costs
|
|
16
|
+
* nothing; `@aws-sdk/client-s3` (and `@aws-sdk/s3-request-presigner`) are only imported when the
|
|
17
|
+
* provider builds the selected disk at boot, keeping the AWS SDK an optional peer.
|
|
18
|
+
*/
|
|
19
|
+
export const disks = {
|
|
20
|
+
/** S3 (or S3-compatible) disk — needs the optional `@aws-sdk/client-s3` + `@aws-sdk/s3-request-presigner` peers. */
|
|
21
|
+
s3(config) {
|
|
22
|
+
return async () => {
|
|
23
|
+
const { S3Client } = await import('@aws-sdk/client-s3');
|
|
24
|
+
const { S3Disk } = await import('./s3.js');
|
|
25
|
+
const client = new S3Client({
|
|
26
|
+
...(config.region !== undefined ? { region: config.region } : {}),
|
|
27
|
+
...(config.credentials !== undefined ? { credentials: config.credentials } : {}),
|
|
28
|
+
...(config.endpoint !== undefined ? { endpoint: config.endpoint } : {}),
|
|
29
|
+
...(config.forcePathStyle !== undefined ? { forcePathStyle: config.forcePathStyle } : {}),
|
|
30
|
+
});
|
|
31
|
+
return new S3Disk({
|
|
32
|
+
client,
|
|
33
|
+
bucket: config.bucket,
|
|
34
|
+
...(config.keyPrefix !== undefined ? { keyPrefix: config.keyPrefix } : {}),
|
|
35
|
+
...(config.publicBaseUrl !== undefined ? { publicBaseUrl: config.publicBaseUrl } : {}),
|
|
36
|
+
...(config.region !== undefined ? { region: config.region } : {}),
|
|
37
|
+
...(config.endpoint !== undefined ? { endpoint: config.endpoint } : {}),
|
|
38
|
+
...(config.forcePathStyle !== undefined ? { forcePathStyle: config.forcePathStyle } : {}),
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Build every disk named in `config.disks` into a concrete {@link Disk} map. The media provider
|
|
45
|
+
* calls this once at boot (each factory lazily loads its peer), then serves the resulting disks
|
|
46
|
+
* from a synchronous resolver, falling back to Drive for any name not defined here.
|
|
47
|
+
*/
|
|
48
|
+
export async function resolveConfiguredDisks(factories) {
|
|
49
|
+
const built = {};
|
|
50
|
+
if (factories) {
|
|
51
|
+
for (const [name, factory] of Object.entries(factories)) {
|
|
52
|
+
built[name] = await factory();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return built;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/disks/factory.ts"],"names":[],"mappings":"AAqCA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,oHAAoH;IACpH,EAAE,CAAC,MAAoB;QACrB,OAAO,KAAK,IAAI,EAAE;YAChB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACxD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC;gBAC1B,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1F,CAAC,CAAC;YACH,OAAO,IAAI,MAAM,CAAC;gBAChB,MAAM;gBACN,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtF,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1F,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAAkD;IAElD,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { Readable } from 'node:stream';
|
|
2
|
+
import { type S3Client } from '@aws-sdk/client-s3';
|
|
3
|
+
import type { CopyOptions, Disk, DiskCapabilities, DiskMetaData, DiskStat, DiskWriteOptions, ExtendedDisk, ListOptions, ListResult, MultipartPart, MultipartUploadDisk, SignedUrlOptions } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Construction options for {@link S3Disk}. The {@link S3Client} is built and injected by the
|
|
6
|
+
* `disks.s3()` factory (which lazily imports `@aws-sdk/client-s3`), so this module — and the heavy
|
|
7
|
+
* AWS SDK it pulls in — is only ever loaded when an S3 disk is actually selected.
|
|
8
|
+
*/
|
|
9
|
+
export interface S3DiskOptions {
|
|
10
|
+
/** A configured `@aws-sdk/client-s3` client. */
|
|
11
|
+
client: S3Client;
|
|
12
|
+
/** Target bucket. */
|
|
13
|
+
bucket: string;
|
|
14
|
+
/** Prefix prepended to every key (e.g. `uploads`). Leading/trailing slashes are trimmed. */
|
|
15
|
+
keyPrefix?: string;
|
|
16
|
+
/** Base URL for stable public URLs (CDN or bucket website). When set, {@link S3Disk.getUrl} uses it. */
|
|
17
|
+
publicBaseUrl?: string;
|
|
18
|
+
/** Region — used only to synthesise a virtual-hosted URL when no `publicBaseUrl` is set. */
|
|
19
|
+
region?: string;
|
|
20
|
+
/** Custom endpoint (S3-compatible services). Used for URL synthesis when no `publicBaseUrl` is set. */
|
|
21
|
+
endpoint?: string;
|
|
22
|
+
/** Emit path-style URLs (`endpoint/bucket/key`) instead of virtual-hosted-style. */
|
|
23
|
+
forcePathStyle?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* S3-backed {@link Disk} satisfying the same structural contract as an `@adonisjs/drive` disk, so it
|
|
27
|
+
* is a drop-in for the media-library and attachment layers. Backed by `@aws-sdk/client-s3` (an
|
|
28
|
+
* optional peer). Beyond the base {@link Disk} surface it also implements {@link MultipartUploadDisk}
|
|
29
|
+
* — native S3 multipart, powering the `proxy` and `direct` upload modes — which the upload layer
|
|
30
|
+
* detects structurally (`isMultipartCapable`) rather than through the base contract. It also
|
|
31
|
+
* implements the optional {@link ExtendedDisk} surface (copy/move, batched delete, list, size/stat,
|
|
32
|
+
* plus a {@link DiskCapabilities} descriptor), detected structurally via `isExtendedDisk`.
|
|
33
|
+
*/
|
|
34
|
+
export declare class S3Disk implements Disk, MultipartUploadDisk, ExtendedDisk {
|
|
35
|
+
/** Coarse feature descriptor — S3 supports presign, native multipart, and prefix listing. */
|
|
36
|
+
readonly capabilities: DiskCapabilities;
|
|
37
|
+
private readonly client;
|
|
38
|
+
private readonly bucket;
|
|
39
|
+
private readonly keyPrefix;
|
|
40
|
+
private readonly publicBaseUrl;
|
|
41
|
+
private readonly region;
|
|
42
|
+
private readonly endpoint;
|
|
43
|
+
private readonly forcePathStyle;
|
|
44
|
+
constructor(options: S3DiskOptions);
|
|
45
|
+
/** Map a logical key to a fully-qualified S3 key, applying the configured prefix. */
|
|
46
|
+
key(path: string): string;
|
|
47
|
+
put(key: string, contents: Uint8Array, options?: DiskWriteOptions): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* `ContentLength` is required, not an optimization: S3 cannot size a stream, so the SDK
|
|
50
|
+
* derives `x-amz-decoded-content-length` from it and throws
|
|
51
|
+
* `Invalid value "undefined" for header "x-amz-decoded-content-length"` when it is absent.
|
|
52
|
+
* Callers that reach this path already know the size (it is what makes streaming eligible).
|
|
53
|
+
*/
|
|
54
|
+
putStream(key: string, contents: Readable, options?: DiskWriteOptions): Promise<void>;
|
|
55
|
+
getBytes(key: string): Promise<Uint8Array>;
|
|
56
|
+
getStream(key: string): Promise<Readable>;
|
|
57
|
+
exists(key: string): Promise<boolean>;
|
|
58
|
+
delete(key: string): Promise<void>;
|
|
59
|
+
getUrl(key: string): Promise<string>;
|
|
60
|
+
getSignedUrl(key: string, options?: SignedUrlOptions): Promise<string>;
|
|
61
|
+
getMetaData(key: string): Promise<DiskMetaData>;
|
|
62
|
+
size(key: string): Promise<number>;
|
|
63
|
+
stat(key: string): Promise<DiskStat>;
|
|
64
|
+
copy(from: string, to: string, options?: CopyOptions): Promise<void>;
|
|
65
|
+
move(from: string, to: string, options?: CopyOptions): Promise<void>;
|
|
66
|
+
deleteMany(keys: string[]): Promise<void>;
|
|
67
|
+
list(prefix: string, options?: ListOptions): Promise<ListResult>;
|
|
68
|
+
createMultipartUpload(key: string, options?: DiskWriteOptions): Promise<{
|
|
69
|
+
uploadId: string;
|
|
70
|
+
}>;
|
|
71
|
+
uploadPart(key: string, uploadId: string, partNumber: number, body: Uint8Array): Promise<MultipartPart>;
|
|
72
|
+
presignUploadPart(key: string, uploadId: string, partNumber: number, expiresInSeconds: number): Promise<string>;
|
|
73
|
+
completeMultipartUpload(key: string, uploadId: string, parts: MultipartPart[]): Promise<void>;
|
|
74
|
+
abortMultipartUpload(key: string, uploadId: string): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=s3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../../../src/disks/s3.ts"],"names":[],"mappings":"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"}
|