@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.
Files changed (137) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/dist/configure.d.ts +2 -2
  3. package/dist/configure.d.ts.map +1 -1
  4. package/dist/configure.js +3 -2
  5. package/dist/configure.js.map +1 -1
  6. package/dist/providers/media_provider.d.ts +15 -0
  7. package/dist/providers/media_provider.d.ts.map +1 -1
  8. package/dist/providers/media_provider.js +224 -12
  9. package/dist/providers/media_provider.js.map +1 -1
  10. package/dist/src/attachment.d.ts +1 -0
  11. package/dist/src/attachment.d.ts.map +1 -1
  12. package/dist/src/attachment.js +57 -21
  13. package/dist/src/attachment.js.map +1 -1
  14. package/dist/src/define_config.d.ts +83 -5
  15. package/dist/src/define_config.d.ts.map +1 -1
  16. package/dist/src/define_config.js +3 -1
  17. package/dist/src/define_config.js.map +1 -1
  18. package/dist/src/diagnostics.d.ts +32 -1
  19. package/dist/src/diagnostics.d.ts.map +1 -1
  20. package/dist/src/diagnostics.js.map +1 -1
  21. package/dist/src/disks/factory.d.ts +62 -0
  22. package/dist/src/disks/factory.d.ts.map +1 -0
  23. package/dist/src/disks/factory.js +57 -0
  24. package/dist/src/disks/factory.js.map +1 -0
  25. package/dist/src/disks/s3.d.ts +76 -0
  26. package/dist/src/disks/s3.d.ts.map +1 -0
  27. package/dist/src/disks/s3.js +357 -0
  28. package/dist/src/disks/s3.js.map +1 -0
  29. package/dist/src/disks/xml_fallback.d.ts +29 -0
  30. package/dist/src/disks/xml_fallback.d.ts.map +1 -0
  31. package/dist/src/disks/xml_fallback.js +68 -0
  32. package/dist/src/disks/xml_fallback.js.map +1 -0
  33. package/dist/src/errors.d.ts +34 -0
  34. package/dist/src/errors.d.ts.map +1 -1
  35. package/dist/src/errors.js +60 -0
  36. package/dist/src/errors.js.map +1 -1
  37. package/dist/src/extended_disk.d.ts +10 -0
  38. package/dist/src/extended_disk.d.ts.map +1 -0
  39. package/dist/src/extended_disk.js +19 -0
  40. package/dist/src/extended_disk.js.map +1 -0
  41. package/dist/src/index.d.ts +17 -7
  42. package/dist/src/index.d.ts.map +1 -1
  43. package/dist/src/index.js +11 -4
  44. package/dist/src/index.js.map +1 -1
  45. package/dist/src/media_library.d.ts +4 -2
  46. package/dist/src/media_library.d.ts.map +1 -1
  47. package/dist/src/media_library.js +83 -32
  48. package/dist/src/media_library.js.map +1 -1
  49. package/dist/src/media_manager.d.ts +48 -0
  50. package/dist/src/media_manager.d.ts.map +1 -1
  51. package/dist/src/media_manager.js +68 -0
  52. package/dist/src/media_manager.js.map +1 -1
  53. package/dist/src/media_store.d.ts +40 -0
  54. package/dist/src/media_store.d.ts.map +1 -1
  55. package/dist/src/media_store.js +28 -1
  56. package/dist/src/media_store.js.map +1 -1
  57. package/dist/src/multipart.d.ts +10 -0
  58. package/dist/src/multipart.d.ts.map +1 -0
  59. package/dist/src/multipart.js +16 -0
  60. package/dist/src/multipart.js.map +1 -0
  61. package/dist/src/resumable_upload.d.ts +131 -0
  62. package/dist/src/resumable_upload.d.ts.map +1 -0
  63. package/dist/src/resumable_upload.js +177 -0
  64. package/dist/src/resumable_upload.js.map +1 -0
  65. package/dist/src/services/main.d.ts +14 -0
  66. package/dist/src/services/main.d.ts.map +1 -0
  67. package/dist/src/services/main.js +18 -0
  68. package/dist/src/services/main.js.map +1 -0
  69. package/dist/src/stores/factory.d.ts +12 -4
  70. package/dist/src/stores/factory.d.ts.map +1 -1
  71. package/dist/src/stores/factory.js +20 -1
  72. package/dist/src/stores/factory.js.map +1 -1
  73. package/dist/src/stores/lucid.d.ts +2 -1
  74. package/dist/src/stores/lucid.d.ts.map +1 -1
  75. package/dist/src/stores/lucid.js +42 -7
  76. package/dist/src/stores/lucid.js.map +1 -1
  77. package/dist/src/telescope/dashboard.d.ts +19 -0
  78. package/dist/src/telescope/dashboard.d.ts.map +1 -0
  79. package/dist/src/telescope/dashboard.js +116 -0
  80. package/dist/src/telescope/dashboard.js.map +1 -0
  81. package/dist/src/telescope/data-providers.d.ts +36 -0
  82. package/dist/src/telescope/data-providers.d.ts.map +1 -0
  83. package/dist/src/telescope/data-providers.js +286 -0
  84. package/dist/src/telescope/data-providers.js.map +1 -0
  85. package/dist/src/telescope/extension.d.ts +26 -0
  86. package/dist/src/telescope/extension.d.ts.map +1 -0
  87. package/dist/src/telescope/extension.js +42 -0
  88. package/dist/src/telescope/extension.js.map +1 -0
  89. package/dist/src/telescope/index.d.ts +5 -0
  90. package/dist/src/telescope/index.d.ts.map +1 -0
  91. package/dist/src/telescope/index.js +4 -0
  92. package/dist/src/telescope/index.js.map +1 -0
  93. package/dist/src/telescope/telescope-sdk.d.ts +125 -0
  94. package/dist/src/telescope/telescope-sdk.d.ts.map +1 -0
  95. package/dist/src/telescope/telescope-sdk.js +14 -0
  96. package/dist/src/telescope/telescope-sdk.js.map +1 -0
  97. package/dist/src/testing/in_memory_disk.d.ts +10 -0
  98. package/dist/src/testing/in_memory_disk.d.ts.map +1 -1
  99. package/dist/src/testing/in_memory_disk.js +11 -0
  100. package/dist/src/testing/in_memory_disk.js.map +1 -1
  101. package/dist/src/testing/in_memory_media_store.d.ts +2 -1
  102. package/dist/src/testing/in_memory_media_store.d.ts.map +1 -1
  103. package/dist/src/testing/in_memory_media_store.js +28 -0
  104. package/dist/src/testing/in_memory_media_store.js.map +1 -1
  105. package/dist/src/testing/in_memory_upload_session_store.d.ts +18 -0
  106. package/dist/src/testing/in_memory_upload_session_store.d.ts.map +1 -0
  107. package/dist/src/testing/in_memory_upload_session_store.js +40 -0
  108. package/dist/src/testing/in_memory_upload_session_store.js.map +1 -0
  109. package/dist/src/testing/index.d.ts +1 -0
  110. package/dist/src/testing/index.d.ts.map +1 -1
  111. package/dist/src/testing/index.js +1 -0
  112. package/dist/src/testing/index.js.map +1 -1
  113. package/dist/src/tus.d.ts +57 -0
  114. package/dist/src/tus.d.ts.map +1 -0
  115. package/dist/src/tus.js +143 -0
  116. package/dist/src/tus.js.map +1 -0
  117. package/dist/src/types.d.ts +125 -0
  118. package/dist/src/types.d.ts.map +1 -1
  119. package/dist/src/upload_manager.d.ts +127 -0
  120. package/dist/src/upload_manager.d.ts.map +1 -0
  121. package/dist/src/upload_manager.js +152 -0
  122. package/dist/src/upload_manager.js.map +1 -0
  123. package/dist/src/upload_mode.d.ts +27 -0
  124. package/dist/src/upload_mode.d.ts.map +1 -0
  125. package/dist/src/upload_mode.js +22 -0
  126. package/dist/src/upload_mode.js.map +1 -0
  127. package/dist/src/upload_sessions/factory.d.ts +62 -0
  128. package/dist/src/upload_sessions/factory.d.ts.map +1 -0
  129. package/dist/src/upload_sessions/factory.js +60 -0
  130. package/dist/src/upload_sessions/factory.js.map +1 -0
  131. package/dist/src/upload_sessions/lucid.d.ts +35 -0
  132. package/dist/src/upload_sessions/lucid.d.ts.map +1 -0
  133. package/dist/src/upload_sessions/lucid.js +105 -0
  134. package/dist/src/upload_sessions/lucid.js.map +1 -0
  135. package/dist/stubs/config/media.stub +16 -1
  136. package/dist/stubs/database/migrations/create_media_upload_sessions_table.stub +45 -0
  137. package/package.json +37 -1
@@ -1,7 +1,17 @@
1
- export { defineConfig, stores, processors } from './define_config.js';
2
- export type { MediaConfig, StoreContext, StoreFactory, LucidStoreConfig, MemoryStoreConfig, ImageProcessorFactory, } from './define_config.js';
1
+ export { defineConfig, stores, processors, disks, uploadSessions } from './define_config.js';
2
+ export type { MediaConfig, MediaUploadsConfig, MediaResumableConfig, StoreContext, StoreFactory, LucidStoreConfig, ImageProcessorFactory, DiskFactory, S3DiskConfig, S3Credentials, UploadMode, UploadSessionStoreContext, UploadSessionStoreFactory, LucidUploadSessionStoreConfig, } from './define_config.js';
3
3
  export { MediaManager } from './media_manager.js';
4
4
  export type { MediaManagerOptions } from './media_manager.js';
5
+ export { UploadManager } from './upload_manager.js';
6
+ export type { UploadManagerOptions, InitiateDirectUploadInput, DirectUploadCreated, PresignPartInput, CompleteDirectUploadInput, AbortDirectUploadInput, ProxyUploadInput, } from './upload_manager.js';
7
+ export { resolveUploadMode } from './upload_mode.js';
8
+ export type { ResolvedUploadMode, UploadModeLevels } from './upload_mode.js';
9
+ export { ResumableUploadManager } from './resumable_upload.js';
10
+ export type { ResumableUploadManagerOptions, UploadSession, UploadSessionStore, UploadSessionListFilter, CreateUploadInput, } from './resumable_upload.js';
11
+ export { TusUploadHandler, parseTusMetadata, TUS_VERSION } from './tus.js';
12
+ export type { TusRequest, TusResponse, TusUploadHandlerOptions } from './tus.js';
13
+ export { isMultipartCapable } from './multipart.js';
14
+ export { isExtendedDisk } from './extended_disk.js';
5
15
  export { MediaLibrary } from './media_library.js';
6
16
  export type { MediaLibraryOptions, AttachInput, OwnerMediaBinding } from './media_library.js';
7
17
  export { Attachment, AttachmentManager, } from './attachment.js';
@@ -9,12 +19,12 @@ export type { AttachmentData, AttachmentVariant, AttachmentManagerOptions, Creat
9
19
  export { StorageManager } from './storage_manager.js';
10
20
  export type { StorageManagerOptions } from './storage_manager.js';
11
21
  export type { MediaRecord, MediaConversion } from './media_record.js';
12
- export type { MediaStore } from './media_store.js';
22
+ export type { MediaStore, MediaListOptions, MediaListPage, MediaCursor } from './media_store.js';
23
+ export { DEFAULT_MEDIA_LIST_LIMIT, MAX_MEDIA_LIST_LIMIT, encodeMediaCursor, decodeMediaCursor, clampMediaListLimit, } from './media_store.js';
13
24
  export { MediaCollectionRegistry } from './media_collection.js';
14
25
  export type { MediaCollectionConfig } from './media_collection.js';
15
26
  export type { ConversionPreset, ConversionResult, ImageProcessor } from './image_processor.js';
16
- export type { Disk, DiskResolver, DiskWriteOptions, DiskMetaData, SignedUrlOptions, } from './types.js';
17
- export { publishMedia } from './diagnostics.js';
18
- export type { MediaDiagnosticEvent, MediaDiagnosticPayloads, AttachPayload, DeletePayload, ConversionPayload, AttachmentCreatePayload, AttachmentDeletePayload, } from './diagnostics.js';
19
- export { MimeNotAllowedError, MediaNotFoundError, ConversionNotDefinedError, ImageProcessorMissingError, } from './errors.js';
27
+ export type { Disk, DiskResolver, DiskWriteOptions, DiskMetaData, SignedUrlOptions, MultipartPart, MultipartUploadDisk, ExtendedDisk, DiskCapabilities, DiskStat, CopyOptions, ListOptions, ListEntry, ListResult, } from './types.js';
28
+ export type { MediaDiagnosticEvent, MediaDiagnosticPayloads, AttachPayload, DeletePayload, ConversionPayload, AttachmentCreatePayload, AttachmentDeletePayload, UploadStartPayload, UploadProgressPayload, UploadCompletePayload, UploadAbortPayload, } from './diagnostics.js';
29
+ export { MimeNotAllowedError, MediaNotFoundError, ConversionNotDefinedError, ImageProcessorMissingError, VariantNotFoundError, StoreNotConfiguredError, UploadNotSupportedError, UploadSessionNotFoundError, UploadOffsetConflictError, UploadSessionExpiredError, UploadSessionStoreNotConfiguredError, ResumableUploadsNotConfiguredError, } from './errors.js';
20
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EACL,UAAU,EACV,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGlE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/F,YAAY,EACV,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EACV,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -1,13 +1,20 @@
1
1
  // Config idiom
2
- export { defineConfig, stores, processors } from './define_config.js';
2
+ export { defineConfig, stores, processors, disks, uploadSessions } from './define_config.js';
3
3
  // Manager + layers
4
4
  export { MediaManager } from './media_manager.js';
5
+ // Direct-S3 upload modes (proxy + direct multipart)
6
+ export { UploadManager } from './upload_manager.js';
7
+ export { resolveUploadMode } from './upload_mode.js';
8
+ // Resumable (TUS) uploads
9
+ export { ResumableUploadManager } from './resumable_upload.js';
10
+ export { TusUploadHandler, parseTusMetadata, TUS_VERSION } from './tus.js';
11
+ export { isMultipartCapable } from './multipart.js';
12
+ export { isExtendedDisk } from './extended_disk.js';
5
13
  export { MediaLibrary } from './media_library.js';
6
14
  export { Attachment, AttachmentManager, } from './attachment.js';
7
15
  export { StorageManager } from './storage_manager.js';
16
+ export { DEFAULT_MEDIA_LIST_LIMIT, MAX_MEDIA_LIST_LIMIT, encodeMediaCursor, decodeMediaCursor, clampMediaListLimit, } from './media_store.js';
8
17
  export { MediaCollectionRegistry } from './media_collection.js';
9
- // Diagnostics
10
- export { publishMedia } from './diagnostics.js';
11
18
  // Errors
12
- export { MimeNotAllowedError, MediaNotFoundError, ConversionNotDefinedError, ImageProcessorMissingError, } from './errors.js';
19
+ export { MimeNotAllowedError, MediaNotFoundError, ConversionNotDefinedError, ImageProcessorMissingError, VariantNotFoundError, StoreNotConfiguredError, UploadNotSupportedError, UploadSessionNotFoundError, UploadOffsetConflictError, UploadSessionExpiredError, UploadSessionStoreNotConfiguredError, ResumableUploadsNotConfiguredError, } from './errors.js';
13
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAUtE,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EACL,UAAU,EACV,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAMtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAWhE,cAAc;AACd,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAWhD,SAAS;AACT,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAkB7F,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,oDAAoD;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,0BAA0B;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAQ/D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EACL,UAAU,EACV,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAMtD,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAmChE,SAAS;AACT,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,oCAAoC,EACpC,kCAAkC,GACnC,MAAM,aAAa,CAAC"}
@@ -19,7 +19,8 @@ export interface MediaLibraryOptions {
19
19
  }
20
20
  export interface AttachInput {
21
21
  ownerType: string;
22
- ownerId: string;
22
+ /** Owner primary key; a numeric Lucid id is accepted and coerced to a string internally. */
23
+ ownerId: string | number;
23
24
  collection: string;
24
25
  fileName: string;
25
26
  mimeType: string;
@@ -40,6 +41,7 @@ export interface OwnerMediaBinding {
40
41
  list(collection?: string): Promise<MediaRecord[]>;
41
42
  }
42
43
  export declare class MediaLibrary {
44
+ #private;
43
45
  private readonly storage;
44
46
  private readonly store;
45
47
  private readonly collections;
@@ -52,7 +54,7 @@ export declare class MediaLibrary {
52
54
  attach(input: AttachInput): Promise<MediaRecord>;
53
55
  /** Generate (if absent) and persist a named conversion; returns the updated record. Lazy entry point. */
54
56
  ensureConversion(id: string, conversionName: string): Promise<MediaRecord>;
55
- list(ownerType: string, ownerId: string, collection?: string): Promise<MediaRecord[]>;
57
+ list(ownerType: string, ownerId: string | number, collection?: string): Promise<MediaRecord[]>;
56
58
  find(id: string): Promise<MediaRecord | null>;
57
59
  /**
58
60
  * Bind an owning entity so collection operations don't repeat its type/id:
@@ -1 +1 @@
1
- {"version":3,"file":"media_library.d.ts","sourceRoot":"","sources":["../../src/media_library.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media_library.d.ts","sourceRoot":"","sources":["../../src/media_library.ts"],"names":[],"mappings":"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"}
@@ -26,40 +26,74 @@ export class MediaLibrary {
26
26
  }
27
27
  async attach(input) {
28
28
  const config = this.collections.get(input.collection);
29
+ const ownerId = String(input.ownerId);
29
30
  if (config.acceptsMimeTypes && !config.acceptsMimeTypes.includes(input.mimeType)) {
30
31
  throw new MimeNotAllowedError(input.collection, input.mimeType);
31
32
  }
32
- // A single-file collection replaces whatever is already there.
33
- if (config.single) {
34
- const existing = await this.store.listByOwner(input.ownerType, input.ownerId, input.collection);
35
- for (const record of existing)
36
- await this.delete(record.id);
37
- }
33
+ // A single-file collection replaces whatever is already there — but only AFTER the new file is
34
+ // safely written and persisted, so a failed write leaves the old media intact. Capture the
35
+ // records to replace up front; delete them once the new record commits.
36
+ const previous = config.single
37
+ ? await this.store.listByOwner(input.ownerType, ownerId, input.collection)
38
+ : [];
38
39
  const disk = input.disk ?? config.disk ?? this.storage.defaultDisk;
39
40
  const id = this.newId();
40
- const path = `${input.ownerType}/${input.ownerId}/${input.collection}/${id}/${input.fileName}`;
41
- const bytes = await toBytes(input.contents);
42
- await this.storage.disk(disk).put(path, bytes, { contentType: input.mimeType });
43
- const size = input.size ?? (await this.storage.disk(disk).getMetaData(path)).contentLength;
44
- const order = await this.store.nextOrder(input.ownerType, input.ownerId, input.collection);
45
- const timestamp = this.now();
46
- const saved = await this.store.save({
47
- id,
48
- ownerType: input.ownerType,
49
- ownerId: input.ownerId,
50
- collection: input.collection,
51
- name: input.name ?? stripExtension(input.fileName),
52
- fileName: input.fileName,
53
- mimeType: input.mimeType,
54
- size,
55
- disk,
56
- path,
57
- order,
58
- customProperties: input.customProperties ?? {},
59
- conversions: {},
60
- createdAt: timestamp,
61
- updatedAt: timestamp,
62
- });
41
+ const path = `${input.ownerType}/${ownerId}/${input.collection}/${id}/${input.fileName}`;
42
+ const target = this.storage.disk(disk);
43
+ const hasConversions = (config.conversions ?? []).length > 0;
44
+ // Stream large uploads straight through (no in-memory buffer) when we can: a Readable with a
45
+ // known size, no conversions to generate off the buffered bytes, and a disk that supports it.
46
+ const canStream = !Buffer.isBuffer(input.contents) &&
47
+ input.size !== undefined &&
48
+ !hasConversions &&
49
+ typeof target.putStream === 'function';
50
+ if (canStream) {
51
+ // `input.size` is forwarded, not dropped: it is the very thing that makes this path
52
+ // eligible (see `canStream`), and S3's putStream cannot write without it.
53
+ await target.putStream?.(path, input.contents, {
54
+ contentType: input.mimeType,
55
+ contentLength: input.size,
56
+ });
57
+ }
58
+ else {
59
+ const bytes = await toBytes(input.contents);
60
+ await target.put(path, bytes, { contentType: input.mimeType });
61
+ }
62
+ let saved;
63
+ try {
64
+ const size = input.size ?? (await target.getMetaData(path)).contentLength;
65
+ // A single-file collection holds exactly one item, so its order resets to 0 on replace.
66
+ const order = config.single
67
+ ? 0
68
+ : await this.store.nextOrder(input.ownerType, ownerId, input.collection);
69
+ const timestamp = this.now();
70
+ saved = await this.store.save({
71
+ id,
72
+ ownerType: input.ownerType,
73
+ ownerId,
74
+ collection: input.collection,
75
+ name: input.name ?? stripExtension(input.fileName),
76
+ fileName: input.fileName,
77
+ mimeType: input.mimeType,
78
+ size,
79
+ disk,
80
+ path,
81
+ order,
82
+ customProperties: input.customProperties ?? {},
83
+ conversions: {},
84
+ createdAt: timestamp,
85
+ updatedAt: timestamp,
86
+ });
87
+ }
88
+ catch (error) {
89
+ // Compensation (disk + store aren't a single transaction): the bytes landed but the record
90
+ // didn't persist — best-effort remove the orphaned object before rethrowing.
91
+ await this.#safeDelete(disk, path);
92
+ throw error;
93
+ }
94
+ // The new record is committed; now it's safe to drop what a single-file collection replaced.
95
+ for (const record of previous)
96
+ await this.#deleteRecord(record);
63
97
  this.emit('attach', {
64
98
  id: saved.id,
65
99
  ownerType: saved.ownerType,
@@ -110,7 +144,7 @@ export class MediaLibrary {
110
144
  return updated;
111
145
  }
112
146
  list(ownerType, ownerId, collection) {
113
- return this.store.listByOwner(ownerType, ownerId, collection);
147
+ return this.store.listByOwner(ownerType, String(ownerId), collection);
114
148
  }
115
149
  find(id) {
116
150
  return this.store.find(id);
@@ -130,12 +164,29 @@ export class MediaLibrary {
130
164
  const record = await this.store.find(id);
131
165
  if (!record)
132
166
  return;
167
+ await this.#deleteRecord(record);
168
+ }
169
+ /** Remove a record we already hold (disk bytes + conversions + store row) and emit `delete`. */
170
+ async #deleteRecord(record) {
133
171
  await this.storage.disk(record.disk).delete(record.path);
134
172
  for (const conversion of Object.values(record.conversions)) {
135
173
  await this.storage.disk(conversion.disk).delete(conversion.path);
136
174
  }
137
- await this.store.delete(id);
138
- this.emit('delete', { id, ownerType: record.ownerType, ownerId: record.ownerId });
175
+ await this.store.delete(record.id);
176
+ this.emit('delete', {
177
+ id: record.id,
178
+ ownerType: record.ownerType,
179
+ ownerId: record.ownerId,
180
+ });
181
+ }
182
+ /** Best-effort disk cleanup for the orphan-compensation path; never masks the original error. */
183
+ async #safeDelete(disk, path) {
184
+ try {
185
+ await this.storage.disk(disk).delete(path);
186
+ }
187
+ catch {
188
+ // swallow: this is compensation for a failed write; the original error is what matters
189
+ }
139
190
  }
140
191
  /**
141
192
  * Public URL for a media record or one of its conversions. When a conversion is
@@ -1 +1 @@
1
- {"version":3,"file":"media_library.js","sourceRoot":"","sources":["../../src/media_library.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media_library.js","sourceRoot":"","sources":["../../src/media_library.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,12 @@ import type { ImageProcessor } from './image_processor.js';
3
3
  import type { MediaCollectionConfig } from './media_collection.js';
4
4
  import { MediaLibrary } from './media_library.js';
5
5
  import type { MediaStore } from './media_store.js';
6
+ import { ResumableUploadManager } from './resumable_upload.js';
7
+ import type { UploadSessionStore } from './resumable_upload.js';
6
8
  import { StorageManager } from './storage_manager.js';
7
9
  import type { DiskResolver } from './types.js';
10
+ import { type AbortDirectUploadInput, type CompleteDirectUploadInput, type DirectUploadCreated, type InitiateDirectUploadInput, type ProxyUploadInput, UploadManager } from './upload_manager.js';
11
+ import type { UploadMode } from './upload_mode.js';
8
12
  export interface MediaManagerOptions {
9
13
  /** Default disk name (resolved by `resolve`). */
10
14
  defaultDisk: string;
@@ -15,6 +19,21 @@ export interface MediaManagerOptions {
15
19
  collections?: MediaCollectionConfig[];
16
20
  attachmentKeyPrefix?: string;
17
21
  emitDiagnostics?: boolean;
22
+ /** Default upload mode for direct-S3 uploads (`auto`/`proxy`/`direct`). Default `auto`. */
23
+ uploadMode?: UploadMode;
24
+ /** Default multipart part size in bytes (direct mode). Default 8 MiB. */
25
+ uploadPartSize?: number;
26
+ /** Presigned part-URL TTL in seconds (direct mode). Default 3600. */
27
+ uploadPresignTtlSeconds?: number;
28
+ /**
29
+ * Session store for resumable (TUS) uploads. When provided, `media.resumable` exposes a
30
+ * {@link ResumableUploadManager}; when omitted, accessing `media.resumable` throws a helpful error.
31
+ */
32
+ uploadSessions?: UploadSessionStore;
33
+ /** Prefix for temporary resumable chunk parts on the target disk. Default `.uploads`. */
34
+ resumableTmpPrefix?: string;
35
+ /** Resumable session lifetime in seconds (TUS `expiration`). Omit for never-expiring sessions. */
36
+ resumableSessionTtlSeconds?: number;
18
37
  }
19
38
  /**
20
39
  * The singleton bound into the AdonisJS container as `MediaManager`. Composes the two layers over a
@@ -28,11 +47,40 @@ export interface MediaManagerOptions {
28
47
  * ```
29
48
  */
30
49
  export declare class MediaManager {
50
+ #private;
31
51
  readonly storage: StorageManager;
32
52
  readonly library: MediaLibrary;
33
53
  readonly attachments: AttachmentManager;
54
+ /**
55
+ * The configured persistence SPI. Exposed for management/console reads (e.g. the cross-owner
56
+ * {@link MediaStore.list}); day-to-day writes go through {@link MediaManager.library}.
57
+ */
58
+ readonly store: MediaStore;
59
+ /** Direct-S3 upload coordinator (proxy + direct multipart modes). */
60
+ readonly uploads: UploadManager;
34
61
  constructor(options: MediaManagerOptions);
62
+ /**
63
+ * The resumable (TUS) upload coordinator. Throws {@link ResumableUploadsNotConfiguredError} unless
64
+ * a session store was configured via `uploads.resumable` in `config/media.ts`.
65
+ */
66
+ get resumable(): ResumableUploadManager;
67
+ /** Whether resumable (TUS) uploads are configured (a session store is present). */
68
+ get hasResumable(): boolean;
35
69
  /** Resolve a raw disk by name (escape hatch to the underlying Drive disk). */
36
70
  disk(name?: string): import("./types.js").Disk;
71
+ /** Begin a direct-S3 multipart upload — returns presigned part URLs for the client. */
72
+ initiateDirectUpload(input: InitiateDirectUploadInput): Promise<DirectUploadCreated>;
73
+ /** Assemble the client-uploaded parts into the final object. */
74
+ completeDirectUpload(input: CompleteDirectUploadInput): Promise<{
75
+ key: string;
76
+ disk: string;
77
+ }>;
78
+ /** Abort an in-flight direct-S3 multipart upload. */
79
+ abortDirectUpload(input: AbortDirectUploadInput): Promise<void>;
80
+ /** Proxy upload: stream bytes through the app to the disk (works on any disk). */
81
+ proxyUpload(input: ProxyUploadInput): Promise<{
82
+ key: string;
83
+ disk: string;
84
+ }>;
37
85
  }
38
86
  //# sourceMappingURL=media_manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media_manager.d.ts","sourceRoot":"","sources":["../../src/media_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,YAAY;IACvB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;gBAE5B,OAAO,EAAE,mBAAmB;IAuBxC,8EAA8E;IAC9E,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM;CAGnB"}
1
+ {"version":3,"file":"media_manager.d.ts","sourceRoot":"","sources":["../../src/media_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,aAAa,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2FAA2F;IAC3F,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kGAAkG;IAClG,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,YAAY;;IACvB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;gBAIpB,OAAO,EAAE,mBAAmB;IAkDxC;;;OAGG;IACH,IAAI,SAAS,IAAI,sBAAsB,CAGtC;IAED,mFAAmF;IACnF,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,8EAA8E;IAC9E,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM;IAIlB,uFAAuF;IACvF,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIpF,gEAAgE;IAChE,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAI9F,qDAAqD;IACrD,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,kFAAkF;IAClF,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAG7E"}
@@ -1,6 +1,9 @@
1
1
  import { AttachmentManager } from './attachment.js';
2
+ import { ResumableUploadsNotConfiguredError } from './errors.js';
2
3
  import { MediaLibrary } from './media_library.js';
4
+ import { ResumableUploadManager } from './resumable_upload.js';
3
5
  import { StorageManager } from './storage_manager.js';
6
+ import { UploadManager, } from './upload_manager.js';
4
7
  /**
5
8
  * The singleton bound into the AdonisJS container as `MediaManager`. Composes the two layers over a
6
9
  * shared {@link StorageManager}: {@link MediaLibrary} (owner collections + conversions) and
@@ -16,7 +19,17 @@ export class MediaManager {
16
19
  storage;
17
20
  library;
18
21
  attachments;
22
+ /**
23
+ * The configured persistence SPI. Exposed for management/console reads (e.g. the cross-owner
24
+ * {@link MediaStore.list}); day-to-day writes go through {@link MediaManager.library}.
25
+ */
26
+ store;
27
+ /** Direct-S3 upload coordinator (proxy + direct multipart modes). */
28
+ uploads;
29
+ /** Resumable (TUS) upload coordinator — present only when a session store is configured. */
30
+ #resumable;
19
31
  constructor(options) {
32
+ this.store = options.store;
20
33
  this.storage = new StorageManager({ default: options.defaultDisk, resolve: options.resolve });
21
34
  this.library = new MediaLibrary({
22
35
  storage: this.storage,
@@ -37,10 +50,65 @@ export class MediaManager {
37
50
  ? { emitDiagnostics: options.emitDiagnostics }
38
51
  : {}),
39
52
  });
53
+ this.uploads = new UploadManager({
54
+ storage: this.storage,
55
+ ...(options.uploadMode !== undefined ? { mode: options.uploadMode } : {}),
56
+ ...(options.uploadPartSize !== undefined ? { partSize: options.uploadPartSize } : {}),
57
+ ...(options.uploadPresignTtlSeconds !== undefined
58
+ ? { presignTtlSeconds: options.uploadPresignTtlSeconds }
59
+ : {}),
60
+ ...(options.emitDiagnostics !== undefined
61
+ ? { emitDiagnostics: options.emitDiagnostics }
62
+ : {}),
63
+ });
64
+ if (options.uploadSessions !== undefined) {
65
+ this.#resumable = new ResumableUploadManager({
66
+ storage: this.storage,
67
+ sessions: options.uploadSessions,
68
+ ...(options.resumableTmpPrefix !== undefined
69
+ ? { tmpPrefix: options.resumableTmpPrefix }
70
+ : {}),
71
+ ...(options.resumableSessionTtlSeconds !== undefined
72
+ ? { sessionTtlSeconds: options.resumableSessionTtlSeconds }
73
+ : {}),
74
+ ...(options.emitDiagnostics !== undefined
75
+ ? { emitDiagnostics: options.emitDiagnostics }
76
+ : {}),
77
+ });
78
+ }
79
+ }
80
+ /**
81
+ * The resumable (TUS) upload coordinator. Throws {@link ResumableUploadsNotConfiguredError} unless
82
+ * a session store was configured via `uploads.resumable` in `config/media.ts`.
83
+ */
84
+ get resumable() {
85
+ if (!this.#resumable)
86
+ throw new ResumableUploadsNotConfiguredError();
87
+ return this.#resumable;
88
+ }
89
+ /** Whether resumable (TUS) uploads are configured (a session store is present). */
90
+ get hasResumable() {
91
+ return this.#resumable !== undefined;
40
92
  }
41
93
  /** Resolve a raw disk by name (escape hatch to the underlying Drive disk). */
42
94
  disk(name) {
43
95
  return this.storage.disk(name);
44
96
  }
97
+ /** Begin a direct-S3 multipart upload — returns presigned part URLs for the client. */
98
+ initiateDirectUpload(input) {
99
+ return this.uploads.initiateDirect(input);
100
+ }
101
+ /** Assemble the client-uploaded parts into the final object. */
102
+ completeDirectUpload(input) {
103
+ return this.uploads.completeDirect(input);
104
+ }
105
+ /** Abort an in-flight direct-S3 multipart upload. */
106
+ abortDirectUpload(input) {
107
+ return this.uploads.abortDirect(input);
108
+ }
109
+ /** Proxy upload: stream bytes through the app to the disk (works on any disk). */
110
+ proxyUpload(input) {
111
+ return this.uploads.proxyUpload(input);
112
+ }
45
113
  }
46
114
  //# sourceMappingURL=media_manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"media_manager.js","sourceRoot":"","sources":["../../src/media_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAetD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,YAAY;IACd,OAAO,CAAiB;IACxB,OAAO,CAAe;IACtB,WAAW,CAAoB;IAExC,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3F,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS;gBACvC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE;gBAC9C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,IAAI,iBAAiB,CAAC;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3F,GAAG,CAAC,OAAO,CAAC,mBAAmB,KAAK,SAAS;gBAC3C,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,mBAAmB,EAAE;gBAC5C,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS;gBACvC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE;gBAC9C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,IAAI,CAAC,IAAa;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACF"}
1
+ {"version":3,"file":"media_manager.js","sourceRoot":"","sources":["../../src/media_manager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,28 @@
1
1
  import type { MediaRecord } from './media_record.js';
2
+ /** Default page size for {@link MediaStore.list} when `limit` is omitted. */
3
+ export declare const DEFAULT_MEDIA_LIST_LIMIT = 50;
4
+ /** Hard cap on {@link MediaStore.list} page size, so a caller can't request an unbounded scan. */
5
+ export declare const MAX_MEDIA_LIST_LIMIT = 200;
6
+ /** Filters + cursor for a cross-owner {@link MediaStore.list} page. Every filter is optional (`AND`ed). */
7
+ export interface MediaListOptions {
8
+ /** Restrict to a single collection. */
9
+ collection?: string;
10
+ /** Restrict to a single owner type. */
11
+ ownerType?: string;
12
+ /** Restrict to a single owner id (usually paired with `ownerType`). */
13
+ ownerId?: string;
14
+ /** Restrict to records whose `path` starts with this prefix. */
15
+ prefix?: string;
16
+ /** Opaque cursor from a previous page's `nextCursor` (see {@link encodeMediaCursor}). */
17
+ cursor?: string;
18
+ /** Page size (clamped to {@link MAX_MEDIA_LIST_LIMIT}). Defaults to {@link DEFAULT_MEDIA_LIST_LIMIT}. */
19
+ limit?: number;
20
+ }
21
+ /** One page of a cross-owner {@link MediaStore.list}. `nextCursor` is null when the page is the last. */
22
+ export interface MediaListPage {
23
+ items: MediaRecord[];
24
+ nextCursor: string | null;
25
+ }
2
26
  /**
3
27
  * Persistence SPI for media records. Implemented per backend as a POJO that receives
4
28
  * its connection in the constructor. Ships with an in-memory driver (`@adonis-agora/media/testing`)
@@ -9,8 +33,24 @@ export interface MediaStore {
9
33
  find(id: string): Promise<MediaRecord | null>;
10
34
  /** Records for an owner, optionally a single collection, ordered by `order` asc. */
11
35
  listByOwner(ownerType: string, ownerId: string, collection?: string): Promise<MediaRecord[]>;
36
+ /**
37
+ * Cross-owner, cursor-paginated listing (newest first), for management/console views. Ordered by
38
+ * `createdAt` desc then `id` desc — a stable keyset — so paging is consistent under concurrent writes.
39
+ */
40
+ list(options?: MediaListOptions): Promise<MediaListPage>;
12
41
  delete(id: string): Promise<void>;
13
42
  /** Next `order` value for appending to a collection (0-based). */
14
43
  nextOrder(ownerType: string, ownerId: string, collection: string): Promise<number>;
15
44
  }
45
+ /** The keyset a {@link MediaListPage} cursor carries: the last row's `createdAt` (epoch-ms) and `id`. */
46
+ export interface MediaCursor {
47
+ createdAt: number;
48
+ id: string;
49
+ }
50
+ /** Encode a keyset into the opaque `nextCursor` string handed back to callers (URL-safe base64). */
51
+ export declare function encodeMediaCursor(cursor: MediaCursor): string;
52
+ /** Decode a `cursor` produced by {@link encodeMediaCursor}; returns null when malformed. */
53
+ export declare function decodeMediaCursor(cursor: string | undefined): MediaCursor | null;
54
+ /** Clamp a requested page size to `[1, MAX_MEDIA_LIST_LIMIT]`, defaulting when omitted. */
55
+ export declare function clampMediaListLimit(limit: number | undefined): number;
16
56
  //# sourceMappingURL=media_store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media_store.d.ts","sourceRoot":"","sources":["../../src/media_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9C,oFAAoF;IACpF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7F,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,kEAAkE;IAClE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpF"}
1
+ {"version":3,"file":"media_store.d.ts","sourceRoot":"","sources":["../../src/media_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,kGAAkG;AAClG,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,2GAA2G;AAC3G,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yGAAyG;IACzG,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,yGAAyG;AACzG,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9C,oFAAoF;IACpF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7F;;;OAGG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,kEAAkE;IAClE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpF;AAED,yGAAyG;AACzG,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,oGAAoG;AACpG,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAE7D;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,IAAI,CAShF;AAED,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGrE"}
@@ -1,2 +1,29 @@
1
- export {};
1
+ /** Default page size for {@link MediaStore.list} when `limit` is omitted. */
2
+ export const DEFAULT_MEDIA_LIST_LIMIT = 50;
3
+ /** Hard cap on {@link MediaStore.list} page size, so a caller can't request an unbounded scan. */
4
+ export const MAX_MEDIA_LIST_LIMIT = 200;
5
+ /** Encode a keyset into the opaque `nextCursor` string handed back to callers (URL-safe base64). */
6
+ export function encodeMediaCursor(cursor) {
7
+ return Buffer.from(JSON.stringify(cursor), 'utf8').toString('base64url');
8
+ }
9
+ /** Decode a `cursor` produced by {@link encodeMediaCursor}; returns null when malformed. */
10
+ export function decodeMediaCursor(cursor) {
11
+ if (!cursor)
12
+ return null;
13
+ try {
14
+ const parsed = JSON.parse(Buffer.from(cursor, 'base64url').toString('utf8'));
15
+ if (typeof parsed.createdAt !== 'number' || typeof parsed.id !== 'string')
16
+ return null;
17
+ return { createdAt: parsed.createdAt, id: parsed.id };
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ /** Clamp a requested page size to `[1, MAX_MEDIA_LIST_LIMIT]`, defaulting when omitted. */
24
+ export function clampMediaListLimit(limit) {
25
+ if (limit === undefined || !Number.isFinite(limit))
26
+ return DEFAULT_MEDIA_LIST_LIMIT;
27
+ return Math.max(1, Math.min(MAX_MEDIA_LIST_LIMIT, Math.floor(limit)));
28
+ }
2
29
  //# sourceMappingURL=media_store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"media_store.js","sourceRoot":"","sources":["../../src/media_store.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"media_store.js","sourceRoot":"","sources":["../../src/media_store.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAC3C,kGAAkG;AAClG,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAkDxC,oGAAoG;AACpG,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3E,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,iBAAiB,CAAC,MAA0B;IAC1D,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAgB,CAAC;QAC5F,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACvF,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,mBAAmB,CAAC,KAAyB;IAC3D,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,wBAAwB,CAAC;IACpF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Disk, MultipartUploadDisk } from './types.js';
2
+ /**
3
+ * Structural guard: does this disk implement the optional {@link MultipartUploadDisk} surface?
4
+ * The base {@link Disk} contract deliberately omits multipart, so the upload layer detects it here
5
+ * at runtime (the bundled `disks.s3()` disk provides it; the in-memory/Drive disks do not) rather
6
+ * than depending on it statically. A disk is treated as multipart-capable when it exposes the whole
7
+ * create/upload/presign/complete/abort surface.
8
+ */
9
+ export declare function isMultipartCapable(disk: Disk): disk is Disk & MultipartUploadDisk;
10
+ //# sourceMappingURL=multipart.d.ts.map