@webiny/api-file-manager-s3 0.0.0-unstable.e6f0dc8ca7 → 0.0.0-unstable.eb81deee7e

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 (156) hide show
  1. package/FileManagerS3Feature.d.ts +9 -0
  2. package/FileManagerS3Feature.js +27 -0
  3. package/FileManagerS3Feature.js.map +1 -0
  4. package/assetDelivery/abstractions.d.ts +11 -0
  5. package/assetDelivery/abstractions.js +7 -0
  6. package/assetDelivery/abstractions.js.map +1 -0
  7. package/assetDelivery/assetDeliveryConfig.d.ts +1 -1
  8. package/assetDelivery/assetDeliveryConfig.js +10 -44
  9. package/assetDelivery/assetDeliveryConfig.js.map +1 -1
  10. package/assetDelivery/createAssetDelivery.js +5 -19
  11. package/assetDelivery/createAssetDelivery.js.map +1 -1
  12. package/assetDelivery/feature.d.ts +5 -0
  13. package/assetDelivery/feature.js +36 -0
  14. package/assetDelivery/feature.js.map +1 -0
  15. package/assetDelivery/index.js +0 -2
  16. package/assetDelivery/s3/LazySharpTransform.d.ts +34 -0
  17. package/assetDelivery/s3/LazySharpTransform.js +34 -0
  18. package/assetDelivery/s3/LazySharpTransform.js.map +1 -0
  19. package/assetDelivery/s3/S3AssetResolver.d.ts +3 -0
  20. package/assetDelivery/s3/S3AssetResolver.js +32 -22
  21. package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
  22. package/assetDelivery/s3/S3ContentsReader.js +13 -16
  23. package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
  24. package/assetDelivery/s3/S3ErrorAssetReply.js +10 -9
  25. package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
  26. package/assetDelivery/s3/S3OutputStrategy.d.ts +5 -5
  27. package/assetDelivery/s3/S3OutputStrategy.js +33 -27
  28. package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
  29. package/assetDelivery/s3/S3RedirectAssetReply.js +12 -11
  30. package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
  31. package/assetDelivery/s3/S3StreamAssetReply.js +12 -11
  32. package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -1
  33. package/assetDelivery/s3/SharpTransform.d.ts +21 -13
  34. package/assetDelivery/s3/SharpTransform.js +164 -173
  35. package/assetDelivery/s3/SharpTransform.js.map +1 -1
  36. package/assetDelivery/s3/transformation/AssetKeyGenerator.js +18 -17
  37. package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -1
  38. package/assetDelivery/s3/transformation/CallableContentsReader.js +8 -7
  39. package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -1
  40. package/assetDelivery/s3/transformation/WidthCollection.js +15 -16
  41. package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -1
  42. package/assetDelivery/s3/transformation/utils.js +24 -30
  43. package/assetDelivery/s3/transformation/utils.js.map +1 -1
  44. package/assetDelivery/threatDetection/ObjectKey.js +15 -14
  45. package/assetDelivery/threatDetection/ObjectKey.js.map +1 -1
  46. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.d.ts +21 -1
  47. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +46 -44
  48. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -1
  49. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +2 -3
  50. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -1
  51. package/assetDelivery/threatDetection/index.js +0 -2
  52. package/assetDelivery/threatDetection/processThreatScanResult.js +51 -55
  53. package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -1
  54. package/assetDelivery/threatDetection/types.js +0 -3
  55. package/assetDelivery/types.d.ts +3 -0
  56. package/assetDelivery/types.js +0 -3
  57. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.d.ts +3 -1
  58. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js +22 -13
  59. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js.map +1 -1
  60. package/enterprise/ApplyThreatScanning/feature.js +6 -5
  61. package/enterprise/ApplyThreatScanning/feature.js.map +1 -1
  62. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js +26 -27
  63. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js.map +1 -1
  64. package/features/DeleteFileFromBucket/DeleteS3FolderTask.d.ts +9 -4
  65. package/features/DeleteFileFromBucket/DeleteS3FolderTask.js +49 -53
  66. package/features/DeleteFileFromBucket/DeleteS3FolderTask.js.map +1 -1
  67. package/features/DeleteFileFromBucket/feature.js +7 -6
  68. package/features/DeleteFileFromBucket/feature.js.map +1 -1
  69. package/features/ExtractMetadata/ExtractMetadataHandler.js +18 -19
  70. package/features/ExtractMetadata/ExtractMetadataHandler.js.map +1 -1
  71. package/features/ExtractMetadata/ExtractMetadataTask.d.ts +11 -6
  72. package/features/ExtractMetadata/ExtractMetadataTask.js +86 -116
  73. package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -1
  74. package/features/ExtractMetadata/feature.js +7 -6
  75. package/features/ExtractMetadata/feature.js.map +1 -1
  76. package/features/FlushCache/FlushCacheOnFileDeleteHandler.js +20 -19
  77. package/features/FlushCache/FlushCacheOnFileDeleteHandler.js.map +1 -1
  78. package/features/FlushCache/FlushCacheOnFileUpdateHandler.js +22 -26
  79. package/features/FlushCache/FlushCacheOnFileUpdateHandler.js.map +1 -1
  80. package/features/FlushCache/InvalidateCacheTask.d.ts +11 -6
  81. package/features/FlushCache/InvalidateCacheTask.js +75 -78
  82. package/features/FlushCache/InvalidateCacheTask.js.map +1 -1
  83. package/features/FlushCache/feature.js +8 -7
  84. package/features/FlushCache/feature.js.map +1 -1
  85. package/features/GetFileContentsById/GetFileContentsByIdUseCase.d.ts +13 -0
  86. package/features/GetFileContentsById/GetFileContentsByIdUseCase.js +40 -0
  87. package/features/GetFileContentsById/GetFileContentsByIdUseCase.js.map +1 -0
  88. package/features/{GetFileContents → GetFileContentsById}/feature.d.ts +1 -1
  89. package/features/GetFileContentsById/feature.js +11 -0
  90. package/features/GetFileContentsById/feature.js.map +1 -0
  91. package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.d.ts +13 -0
  92. package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.js +40 -0
  93. package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.js.map +1 -0
  94. package/features/GetFileContentsByKey/feature.d.ts +4 -0
  95. package/features/GetFileContentsByKey/feature.js +11 -0
  96. package/features/GetFileContentsByKey/feature.js.map +1 -0
  97. package/features/WriteFileMetadata/MetadataReader.js +9 -10
  98. package/features/WriteFileMetadata/MetadataReader.js.map +1 -1
  99. package/features/WriteFileMetadata/MetadataWriter.js +25 -25
  100. package/features/WriteFileMetadata/MetadataWriter.js.map +1 -1
  101. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +14 -12
  102. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -1
  103. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +16 -12
  104. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -1
  105. package/features/WriteFileMetadata/feature.js +7 -6
  106. package/features/WriteFileMetadata/feature.js.map +1 -1
  107. package/graphql/S3GraphQLSchema.d.ts +10 -0
  108. package/graphql/S3GraphQLSchema.js +233 -0
  109. package/graphql/S3GraphQLSchema.js.map +1 -0
  110. package/graphql/checkPermissions.js +17 -32
  111. package/graphql/checkPermissions.js.map +1 -1
  112. package/index.d.ts +2 -2
  113. package/index.js +1 -25
  114. package/multiPartUpload/CompleteMultiPartUploadUseCase.js +50 -53
  115. package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -1
  116. package/multiPartUpload/CreateMultiPartUploadUseCase.js +31 -38
  117. package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -1
  118. package/package.json +27 -23
  119. package/types.d.ts +1 -1
  120. package/types.js +1 -3
  121. package/utils/CdnPathsGenerator.js +8 -4
  122. package/utils/CdnPathsGenerator.js.map +1 -1
  123. package/utils/FileExtension.js +12 -13
  124. package/utils/FileExtension.js.map +1 -1
  125. package/utils/FileKey.js +29 -21
  126. package/utils/FileKey.js.map +1 -1
  127. package/utils/FileKey.test.js +49 -49
  128. package/utils/FileKey.test.js.map +1 -1
  129. package/utils/FileNormalizer.js +31 -46
  130. package/utils/FileNormalizer.js.map +1 -1
  131. package/utils/FileUploadModifier.d.ts +8 -2
  132. package/utils/FileUploadModifier.js +35 -33
  133. package/utils/FileUploadModifier.js.map +1 -1
  134. package/utils/createFileNormalizerFromContext.js +5 -4
  135. package/utils/createFileNormalizerFromContext.js.map +1 -1
  136. package/utils/getPresignedPostPayload.js +36 -33
  137. package/utils/getPresignedPostPayload.js.map +1 -1
  138. package/utils/mimeTypes.js +6 -10
  139. package/utils/mimeTypes.js.map +1 -1
  140. package/utils/uploadFileToS3.d.ts +1 -1
  141. package/utils/uploadFileToS3.js +11 -10
  142. package/utils/uploadFileToS3.js.map +1 -1
  143. package/assetDelivery/index.js.map +0 -1
  144. package/assetDelivery/threatDetection/index.js.map +0 -1
  145. package/assetDelivery/threatDetection/types.js.map +0 -1
  146. package/assetDelivery/types.js.map +0 -1
  147. package/features/GetFileContents/GetFileContentsUseCase.d.ts +0 -13
  148. package/features/GetFileContents/GetFileContentsUseCase.js +0 -41
  149. package/features/GetFileContents/GetFileContentsUseCase.js.map +0 -1
  150. package/features/GetFileContents/feature.js +0 -10
  151. package/features/GetFileContents/feature.js.map +0 -1
  152. package/graphql/schema.d.ts +0 -1
  153. package/graphql/schema.js +0 -204
  154. package/graphql/schema.js.map +0 -1
  155. package/index.js.map +0 -1
  156. package/types.js.map +0 -1
@@ -1,19 +1,28 @@
1
1
  import { CreateFileUseCase } from "@webiny/api-file-manager/features/file/CreateFile/abstractions.js";
2
+ import { FeatureFlags } from "@webiny/api-core/features/featureFlags/abstractions.js";
2
3
  class CreateFileWithThreatScanDecoratorImpl {
3
- constructor(decoratee) {
4
- this.decoratee = decoratee;
5
- }
6
- async execute(input, meta) {
7
- const modifiedInput = {
8
- ...input,
9
- tags: [...(input.tags || []), "threatScanInProgress"]
10
- };
11
- return this.decoratee.execute(modifiedInput, meta);
12
- }
4
+ constructor(featureFlags, decoratee){
5
+ this.featureFlags = featureFlags;
6
+ this.decoratee = decoratee;
7
+ }
8
+ async execute(input, meta) {
9
+ if (!this.featureFlags.get().isEnabled("fileManager.threatDetection")) return this.decoratee.execute(input, meta);
10
+ const modifiedInput = {
11
+ ...input,
12
+ tags: [
13
+ ...input.tags || [],
14
+ "threatScanInProgress"
15
+ ]
16
+ };
17
+ return this.decoratee.execute(modifiedInput, meta);
18
+ }
13
19
  }
14
- export const CreateFileWithThreatScanDecorator = CreateFileUseCase.createDecorator({
15
- decorator: CreateFileWithThreatScanDecoratorImpl,
16
- dependencies: []
20
+ const CreateFileWithThreatScanDecorator = CreateFileUseCase.createDecorator({
21
+ decorator: CreateFileWithThreatScanDecoratorImpl,
22
+ dependencies: [
23
+ FeatureFlags
24
+ ]
17
25
  });
26
+ export { CreateFileWithThreatScanDecorator };
18
27
 
19
28
  //# sourceMappingURL=CreateFileWithThreatScanDecorator.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CreateFileUseCase","CreateFileWithThreatScanDecoratorImpl","constructor","decoratee","execute","input","meta","modifiedInput","tags","CreateFileWithThreatScanDecorator","createDecorator","decorator","dependencies"],"sources":["CreateFileWithThreatScanDecorator.ts"],"sourcesContent":["import { CreateFileUseCase } from \"@webiny/api-file-manager/features/file/CreateFile/abstractions.js\";\nimport type { CreateFileInput } from \"@webiny/api-file-manager/features/file/CreateFile/abstractions.js\";\n\nclass CreateFileWithThreatScanDecoratorImpl implements CreateFileUseCase.Interface {\n constructor(private decoratee: CreateFileUseCase.Interface) {}\n\n async execute(\n input: CreateFileInput,\n meta?: Record<string, any>\n ): ReturnType<CreateFileUseCase.Interface[\"execute\"]> {\n const modifiedInput: CreateFileInput = {\n ...input,\n tags: [...(input.tags || []), \"threatScanInProgress\"]\n };\n\n return this.decoratee.execute(modifiedInput, meta);\n }\n}\n\nexport const CreateFileWithThreatScanDecorator = CreateFileUseCase.createDecorator({\n decorator: CreateFileWithThreatScanDecoratorImpl,\n dependencies: []\n});\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,mEAAmE;AAGrG,MAAMC,qCAAqC,CAAwC;EAC/EC,WAAWA,CAASC,SAAsC,EAAE;IAAA,KAAxCA,SAAsC,GAAtCA,SAAsC;EAAG;EAE7D,MAAMC,OAAOA,CACTC,KAAsB,EACtBC,IAA0B,EACwB;IAClD,MAAMC,aAA8B,GAAG;MACnC,GAAGF,KAAK;MACRG,IAAI,EAAE,CAAC,IAAIH,KAAK,CAACG,IAAI,IAAI,EAAE,CAAC,EAAE,sBAAsB;IACxD,CAAC;IAED,OAAO,IAAI,CAACL,SAAS,CAACC,OAAO,CAACG,aAAa,EAAED,IAAI,CAAC;EACtD;AACJ;AAEA,OAAO,MAAMG,iCAAiC,GAAGT,iBAAiB,CAACU,eAAe,CAAC;EAC/EC,SAAS,EAAEV,qCAAqC;EAChDW,YAAY,EAAE;AAClB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js","sources":["../../../src/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.ts"],"sourcesContent":["import { CreateFileUseCase } from \"@webiny/api-file-manager/features/file/CreateFile/abstractions.js\";\nimport type { CreateFileInput } from \"@webiny/api-file-manager/features/file/CreateFile/abstractions.js\";\nimport { FeatureFlags } from \"@webiny/api-core/features/featureFlags/abstractions.js\";\n\nclass CreateFileWithThreatScanDecoratorImpl implements CreateFileUseCase.Interface {\n constructor(\n private featureFlags: FeatureFlags.Interface,\n private decoratee: CreateFileUseCase.Interface\n ) {}\n\n async execute(\n input: CreateFileInput,\n meta?: Record<string, any>\n ): ReturnType<CreateFileUseCase.Interface[\"execute\"]> {\n if (!this.featureFlags.get().isEnabled(\"fileManager.threatDetection\")) {\n return this.decoratee.execute(input, meta);\n }\n\n const modifiedInput: CreateFileInput = {\n ...input,\n tags: [...(input.tags || []), \"threatScanInProgress\"]\n };\n\n return this.decoratee.execute(modifiedInput, meta);\n }\n}\n\nexport const CreateFileWithThreatScanDecorator = CreateFileUseCase.createDecorator({\n decorator: CreateFileWithThreatScanDecoratorImpl,\n dependencies: [FeatureFlags]\n});\n"],"names":["CreateFileWithThreatScanDecoratorImpl","featureFlags","decoratee","input","meta","modifiedInput","CreateFileWithThreatScanDecorator","CreateFileUseCase","FeatureFlags"],"mappings":";;AAIA,MAAMA;IACF,YACYC,YAAoC,EACpCC,SAAsC,CAChD;aAFUD,YAAY,GAAZA;aACAC,SAAS,GAATA;IACT;IAEH,MAAM,QACFC,KAAsB,EACtBC,IAA0B,EACwB;QAClD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,SAAS,CAAC,gCACnC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACD,OAAOC;QAGzC,MAAMC,gBAAiC;YACnC,GAAGF,KAAK;YACR,MAAM;mBAAKA,MAAM,IAAI,IAAI,EAAE;gBAAG;aAAuB;QACzD;QAEA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACE,eAAeD;IACjD;AACJ;AAEO,MAAME,oCAAoCC,kBAAkB,eAAe,CAAC;IAC/E,WAAWP;IACX,cAAc;QAACQ;KAAa;AAChC"}
@@ -1,10 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { CreateFileWithThreatScanDecorator } from "./CreateFileWithThreatScanDecorator.js";
3
- export const ApplyThreatScanningFeature = createFeature({
4
- name: "FileManagerS3/ApplyThreatScanning",
5
- register(container) {
6
- container.registerDecorator(CreateFileWithThreatScanDecorator);
7
- }
3
+ const ApplyThreatScanningFeature = createFeature({
4
+ name: "FileManagerS3/ApplyThreatScanning",
5
+ register (container) {
6
+ container.registerDecorator(CreateFileWithThreatScanDecorator);
7
+ }
8
8
  });
9
+ export { ApplyThreatScanningFeature };
9
10
 
10
11
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","CreateFileWithThreatScanDecorator","ApplyThreatScanningFeature","name","register","container","registerDecorator"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CreateFileWithThreatScanDecorator } from \"./CreateFileWithThreatScanDecorator.js\";\n\nexport const ApplyThreatScanningFeature = createFeature({\n name: \"FileManagerS3/ApplyThreatScanning\",\n register(container) {\n container.registerDecorator(CreateFileWithThreatScanDecorator);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,iCAAiC;AAE1C,OAAO,MAAMC,0BAA0B,GAAGF,aAAa,CAAC;EACpDG,IAAI,EAAE,mCAAmC;EACzCC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACC,iBAAiB,CAACL,iCAAiC,CAAC;EAClE;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"enterprise/ApplyThreatScanning/feature.js","sources":["../../../src/enterprise/ApplyThreatScanning/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CreateFileWithThreatScanDecorator } from \"./CreateFileWithThreatScanDecorator.js\";\n\nexport const ApplyThreatScanningFeature = createFeature({\n name: \"FileManagerS3/ApplyThreatScanning\",\n register(container) {\n container.registerDecorator(CreateFileWithThreatScanDecorator);\n }\n});\n"],"names":["ApplyThreatScanningFeature","createFeature","container","CreateFileWithThreatScanDecorator"],"mappings":";;AAGO,MAAMA,6BAA6BC,cAAc;IACpD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,iBAAiB,CAACC;IAChC;AACJ"}
@@ -3,34 +3,33 @@ import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js
3
3
  import { GlobalKeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
4
4
  import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
5
5
  class DeleteFileFromBucketHandlerImpl {
6
- constructor(tenantContext, taskService, keyValueStore) {
7
- this.tenantContext = tenantContext;
8
- this.taskService = taskService;
9
- this.keyValueStore = keyValueStore;
10
- }
11
- async handle(event) {
12
- const {
13
- file
14
- } = event.payload;
15
- const tenant = this.tenantContext.getTenant();
16
-
17
- // Delete S3 folder recursively
18
- await this.taskService.trigger({
19
- definition: "fileManagerFolderDelete",
20
- input: {
21
- caller: "fm-after-delete",
22
- bucket: String(process.env.S3_BUCKET),
23
- folderKey: `tenants/${tenant.id}/files/${file.id}`
24
- }
25
- });
26
-
27
- // Delete file metadata
28
- await this.keyValueStore.delete(`FileManager/File/${file.id}/Metadata`);
29
- }
6
+ constructor(tenantContext, taskService, keyValueStore){
7
+ this.tenantContext = tenantContext;
8
+ this.taskService = taskService;
9
+ this.keyValueStore = keyValueStore;
10
+ }
11
+ async handle(event) {
12
+ const { file } = event.payload;
13
+ const tenant = this.tenantContext.getTenant();
14
+ await this.taskService.trigger({
15
+ definition: "fileManagerFolderDelete",
16
+ input: {
17
+ caller: "fm-after-delete",
18
+ bucket: String(process.env.S3_BUCKET),
19
+ folderKey: `tenants/${tenant.id}/files/${file.id}`
20
+ }
21
+ });
22
+ await this.keyValueStore.delete(`FileManager/File/${file.id}/Metadata`);
23
+ }
30
24
  }
31
- export const DeleteFileFromBucketHandler = FileAfterDeleteEventHandler.createImplementation({
32
- implementation: DeleteFileFromBucketHandlerImpl,
33
- dependencies: [TenantContext, TaskService, GlobalKeyValueStore]
25
+ const DeleteFileFromBucketHandler = FileAfterDeleteEventHandler.createImplementation({
26
+ implementation: DeleteFileFromBucketHandlerImpl,
27
+ dependencies: [
28
+ TenantContext,
29
+ TaskService,
30
+ GlobalKeyValueStore
31
+ ]
34
32
  });
33
+ export { DeleteFileFromBucketHandler };
35
34
 
36
35
  //# sourceMappingURL=DeleteFileFromBucketHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["FileAfterDeleteEventHandler","TaskService","GlobalKeyValueStore","TenantContext","DeleteFileFromBucketHandlerImpl","constructor","tenantContext","taskService","keyValueStore","handle","event","file","payload","tenant","getTenant","trigger","definition","input","caller","bucket","String","process","env","S3_BUCKET","folderKey","id","delete","DeleteFileFromBucketHandler","createImplementation","implementation","dependencies"],"sources":["DeleteFileFromBucketHandler.ts"],"sourcesContent":["import { FileAfterDeleteEventHandler } from \"@webiny/api-file-manager/features/file/DeleteFile/events.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { GlobalKeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport type { DeleteS3FolderInput } from \"~/features/DeleteFileFromBucket/DeleteS3FolderTask.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\n\nclass DeleteFileFromBucketHandlerImpl implements FileAfterDeleteEventHandler.Interface {\n constructor(\n private tenantContext: TenantContext.Interface,\n private taskService: TaskService.Interface,\n private keyValueStore: GlobalKeyValueStore.Interface\n ) {}\n\n async handle(event: FileAfterDeleteEventHandler.Event): Promise<void> {\n const { file } = event.payload;\n const tenant = this.tenantContext.getTenant();\n\n // Delete S3 folder recursively\n await this.taskService.trigger<DeleteS3FolderInput>({\n definition: \"fileManagerFolderDelete\",\n input: {\n caller: \"fm-after-delete\",\n bucket: String(process.env.S3_BUCKET),\n folderKey: `tenants/${tenant.id}/files/${file.id}`\n }\n });\n\n // Delete file metadata\n await this.keyValueStore.delete(`FileManager/File/${file.id}/Metadata`);\n }\n}\n\nexport const DeleteFileFromBucketHandler = FileAfterDeleteEventHandler.createImplementation({\n implementation: DeleteFileFromBucketHandlerImpl,\n dependencies: [TenantContext, TaskService, GlobalKeyValueStore]\n});\n"],"mappings":"AAAA,SAASA,2BAA2B,QAAQ,6DAA6D;AACzG,SAASC,WAAW,QAAQ,qDAAqD;AACjF,SAASC,mBAAmB,QAAQ,kDAAkD;AAEtF,SAASC,aAAa,QAAQ,0DAA0D;AAExF,MAAMC,+BAA+B,CAAkD;EACnFC,WAAWA,CACCC,aAAsC,EACtCC,WAAkC,EAClCC,aAA4C,EACtD;IAAA,KAHUF,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,WAAkC,GAAlCA,WAAkC;IAAA,KAClCC,aAA4C,GAA5CA,aAA4C;EACrD;EAEH,MAAMC,MAAMA,CAACC,KAAwC,EAAiB;IAClE,MAAM;MAAEC;IAAK,CAAC,GAAGD,KAAK,CAACE,OAAO;IAC9B,MAAMC,MAAM,GAAG,IAAI,CAACP,aAAa,CAACQ,SAAS,CAAC,CAAC;;IAE7C;IACA,MAAM,IAAI,CAACP,WAAW,CAACQ,OAAO,CAAsB;MAChDC,UAAU,EAAE,yBAAyB;MACrCC,KAAK,EAAE;QACHC,MAAM,EAAE,iBAAiB;QACzBC,MAAM,EAAEC,MAAM,CAACC,OAAO,CAACC,GAAG,CAACC,SAAS,CAAC;QACrCC,SAAS,EAAE,WAAWX,MAAM,CAACY,EAAE,UAAUd,IAAI,CAACc,EAAE;MACpD;IACJ,CAAC,CAAC;;IAEF;IACA,MAAM,IAAI,CAACjB,aAAa,CAACkB,MAAM,CAAC,oBAAoBf,IAAI,CAACc,EAAE,WAAW,CAAC;EAC3E;AACJ;AAEA,OAAO,MAAME,2BAA2B,GAAG3B,2BAA2B,CAAC4B,oBAAoB,CAAC;EACxFC,cAAc,EAAEzB,+BAA+B;EAC/C0B,YAAY,EAAE,CAAC3B,aAAa,EAAEF,WAAW,EAAEC,mBAAmB;AAClE,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js","sources":["../../../src/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.ts"],"sourcesContent":["import { FileAfterDeleteEventHandler } from \"@webiny/api-file-manager/features/file/DeleteFile/events.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { GlobalKeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport type { DeleteS3FolderInput } from \"~/features/DeleteFileFromBucket/DeleteS3FolderTask.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\n\nclass DeleteFileFromBucketHandlerImpl implements FileAfterDeleteEventHandler.Interface {\n constructor(\n private tenantContext: TenantContext.Interface,\n private taskService: TaskService.Interface,\n private keyValueStore: GlobalKeyValueStore.Interface\n ) {}\n\n async handle(event: FileAfterDeleteEventHandler.Event): Promise<void> {\n const { file } = event.payload;\n const tenant = this.tenantContext.getTenant();\n\n // Delete S3 folder recursively\n await this.taskService.trigger<DeleteS3FolderInput>({\n definition: \"fileManagerFolderDelete\",\n input: {\n caller: \"fm-after-delete\",\n bucket: String(process.env.S3_BUCKET),\n folderKey: `tenants/${tenant.id}/files/${file.id}`\n }\n });\n\n // Delete file metadata\n await this.keyValueStore.delete(`FileManager/File/${file.id}/Metadata`);\n }\n}\n\nexport const DeleteFileFromBucketHandler = FileAfterDeleteEventHandler.createImplementation({\n implementation: DeleteFileFromBucketHandlerImpl,\n dependencies: [TenantContext, TaskService, GlobalKeyValueStore]\n});\n"],"names":["DeleteFileFromBucketHandlerImpl","tenantContext","taskService","keyValueStore","event","file","tenant","String","process","DeleteFileFromBucketHandler","FileAfterDeleteEventHandler","TenantContext","TaskService","GlobalKeyValueStore"],"mappings":";;;;AAMA,MAAMA;IACF,YACYC,aAAsC,EACtCC,WAAkC,EAClCC,aAA4C,CACtD;aAHUF,aAAa,GAAbA;aACAC,WAAW,GAAXA;aACAC,aAAa,GAAbA;IACT;IAEH,MAAM,OAAOC,KAAwC,EAAiB;QAClE,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAM,OAAO;QAC9B,MAAME,SAAS,IAAI,CAAC,aAAa,CAAC,SAAS;QAG3C,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAsB;YAChD,YAAY;YACZ,OAAO;gBACH,QAAQ;gBACR,QAAQC,OAAOC,QAAQ,GAAG,CAAC,SAAS;gBACpC,WAAW,CAAC,QAAQ,EAAEF,OAAO,EAAE,CAAC,OAAO,EAAED,KAAK,EAAE,EAAE;YACtD;QACJ;QAGA,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAEA,KAAK,EAAE,CAAC,SAAS,CAAC;IAC1E;AACJ;AAEO,MAAMI,8BAA8BC,4BAA4B,oBAAoB,CAAC;IACxF,gBAAgBV;IAChB,cAAc;QAACW;QAAeC;QAAaC;KAAoB;AACnE"}
@@ -1,4 +1,4 @@
1
- import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
1
+ import { TaskDefinition, TaskHandler } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
2
  export interface DeleteS3FolderInput {
3
3
  /**
4
4
  * Caller of the task (e.g., `fm-after-delete`).
@@ -17,14 +17,19 @@ export interface DeleteS3FolderInput {
17
17
  */
18
18
  continuationToken?: string;
19
19
  }
20
- declare class DeleteS3FolderTask implements TaskDefinition.Interface<DeleteS3FolderInput> {
20
+ declare class DeleteS3FolderTaskHandlerImpl implements TaskHandler.Interface<DeleteS3FolderInput> {
21
+ run({ input, controller }: TaskHandler.RunParams<DeleteS3FolderInput>): Promise<TaskDefinition.Result<DeleteS3FolderInput>>;
22
+ }
23
+ declare class DeleteS3FolderTask implements TaskDefinition.Interface {
21
24
  id: string;
22
25
  title: string;
23
26
  description: string;
24
27
  maxIterations: number;
25
28
  isPrivate: boolean;
26
- readonly selfCleanup: ("onSuccess" | "onAbort")[];
27
- run({ input, controller }: TaskDefinition.RunParams<DeleteS3FolderInput>): Promise<TaskDefinition.Result<DeleteS3FolderInput>>;
29
+ readonly selfCleanup: ("onAbort" | "onSuccess")[];
30
+ handler: typeof DeleteS3FolderTaskHandlerImpl & {
31
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskHandler<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
32
+ };
28
33
  }
29
34
  export declare const DeleteS3FolderTaskDefinition: typeof DeleteS3FolderTask & {
30
35
  __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
@@ -1,61 +1,57 @@
1
1
  import { S3 } from "@webiny/aws-sdk/client-s3/index.js";
2
- import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
3
- class DeleteS3FolderTask {
4
- id = "fileManagerFolderDelete";
5
- title = "Delete folder and all of its contents from the bucket.";
6
- description = "A task to delete all files from a given folder.";
7
- maxIterations = 5;
8
- isPrivate = true;
9
- selfCleanup = ["onSuccess", "onAbort"];
10
- async run({
11
- input,
12
- controller
13
- }) {
14
- if (controller.runtime.isAborted()) {
15
- return controller.response.aborted();
16
- }
17
- if (!input.bucket) {
18
- return controller.response.error({
19
- message: `Bucket is not defined.`
20
- });
21
- }
22
- const s3 = new S3();
23
-
24
- // List objects in the folder with pagination support.
25
- const filesList = await s3.listObjectsV2({
26
- Bucket: input.bucket,
27
- Prefix: `${input.folderKey}/`,
28
- ContinuationToken: input.continuationToken
29
- });
30
-
31
- // Delete all files in the folder using batch delete.
32
- if (filesList.Contents && filesList.Contents.length > 0) {
33
- const objectsToDelete = filesList.Contents.filter(file => file.Key).map(file => ({
34
- Key: file.Key
35
- }));
36
- if (objectsToDelete.length > 0) {
37
- await s3.deleteObjects({
38
- Bucket: input.bucket,
39
- Delete: {
40
- Objects: objectsToDelete
41
- }
2
+ import { TaskDefinition, TaskHandler } from "@webiny/api-core/features/task/TaskDefinition/index.js";
3
+ class DeleteS3FolderTaskHandlerImpl {
4
+ async run({ input, controller }) {
5
+ if (controller.runtime.isAborted()) return controller.response.aborted();
6
+ if (!input.bucket) return controller.response.error({
7
+ message: "Bucket is not defined."
8
+ });
9
+ const s3 = new S3();
10
+ const filesList = await s3.listObjectsV2({
11
+ Bucket: input.bucket,
12
+ Prefix: `${input.folderKey}/`,
13
+ ContinuationToken: input.continuationToken
42
14
  });
43
- }
15
+ if (filesList.Contents && filesList.Contents.length > 0) {
16
+ const objectsToDelete = filesList.Contents.filter((file)=>file.Key).map((file)=>({
17
+ Key: file.Key
18
+ }));
19
+ if (objectsToDelete.length > 0) await s3.deleteObjects({
20
+ Bucket: input.bucket,
21
+ Delete: {
22
+ Objects: objectsToDelete
23
+ }
24
+ });
25
+ }
26
+ if (filesList.IsTruncated && filesList.NextContinuationToken) return controller.response.continue({
27
+ ...input,
28
+ continuationToken: filesList.NextContinuationToken
29
+ });
30
+ return controller.response.done();
44
31
  }
45
-
46
- // If there are more objects to delete, continue in the next iteration.
47
- if (filesList.IsTruncated && filesList.NextContinuationToken) {
48
- return controller.response.continue({
49
- ...input,
50
- continuationToken: filesList.NextContinuationToken
51
- });
32
+ }
33
+ const DeleteS3FolderTaskHandler = TaskHandler.createImplementation({
34
+ implementation: DeleteS3FolderTaskHandlerImpl,
35
+ dependencies: []
36
+ });
37
+ class DeleteS3FolderTask {
38
+ constructor(){
39
+ this.id = "fileManagerFolderDelete";
40
+ this.title = "Delete folder and all of its contents from the bucket.";
41
+ this.description = "A task to delete all files from a given folder.";
42
+ this.maxIterations = 5;
43
+ this.isPrivate = true;
44
+ this.selfCleanup = [
45
+ "onSuccess",
46
+ "onAbort"
47
+ ];
48
+ this.handler = DeleteS3FolderTaskHandler;
52
49
  }
53
- return controller.response.done();
54
- }
55
50
  }
56
- export const DeleteS3FolderTaskDefinition = TaskDefinition.createImplementation({
57
- implementation: DeleteS3FolderTask,
58
- dependencies: []
51
+ const DeleteS3FolderTaskDefinition = TaskDefinition.createImplementation({
52
+ implementation: DeleteS3FolderTask,
53
+ dependencies: []
59
54
  });
55
+ export { DeleteS3FolderTaskDefinition };
60
56
 
61
57
  //# sourceMappingURL=DeleteS3FolderTask.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["S3","TaskDefinition","DeleteS3FolderTask","id","title","description","maxIterations","isPrivate","selfCleanup","run","input","controller","runtime","isAborted","response","aborted","bucket","error","message","s3","filesList","listObjectsV2","Bucket","Prefix","folderKey","ContinuationToken","continuationToken","Contents","length","objectsToDelete","filter","file","Key","map","deleteObjects","Delete","Objects","IsTruncated","NextContinuationToken","continue","done","DeleteS3FolderTaskDefinition","createImplementation","implementation","dependencies"],"sources":["DeleteS3FolderTask.ts"],"sourcesContent":["import { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport interface DeleteS3FolderInput {\n /**\n * Caller of the task (e.g., `fm-after-delete`).\n */\n caller: string;\n /**\n * Cache paths to invalidate.\n */\n bucket: string;\n /**\n * FM file directory key to delete.\n */\n folderKey: string;\n /**\n * Continuation token for pagination.\n */\n continuationToken?: string;\n}\n\nclass DeleteS3FolderTask implements TaskDefinition.Interface<DeleteS3FolderInput> {\n id = \"fileManagerFolderDelete\";\n title = \"Delete folder and all of its contents from the bucket.\";\n description = \"A task to delete all files from a given folder.\";\n maxIterations = 5;\n isPrivate = true;\n\n public readonly selfCleanup = [\"onSuccess\" as const, \"onAbort\" as const];\n\n public async run({\n input,\n controller\n }: TaskDefinition.RunParams<DeleteS3FolderInput>): Promise<\n TaskDefinition.Result<DeleteS3FolderInput>\n > {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n if (!input.bucket) {\n return controller.response.error({ message: `Bucket is not defined.` });\n }\n\n const s3 = new S3();\n\n // List objects in the folder with pagination support.\n const filesList = await s3.listObjectsV2({\n Bucket: input.bucket,\n Prefix: `${input.folderKey}/`,\n ContinuationToken: input.continuationToken\n });\n\n // Delete all files in the folder using batch delete.\n if (filesList.Contents && filesList.Contents.length > 0) {\n const objectsToDelete = filesList.Contents.filter(file => file.Key).map(file => ({\n Key: file.Key!\n }));\n\n if (objectsToDelete.length > 0) {\n await s3.deleteObjects({\n Bucket: input.bucket,\n Delete: {\n Objects: objectsToDelete\n }\n });\n }\n }\n\n // If there are more objects to delete, continue in the next iteration.\n if (filesList.IsTruncated && filesList.NextContinuationToken) {\n return controller.response.continue({\n ...input,\n continuationToken: filesList.NextContinuationToken\n });\n }\n\n return controller.response.done();\n }\n}\n\nexport const DeleteS3FolderTaskDefinition = TaskDefinition.createImplementation({\n implementation: DeleteS3FolderTask,\n dependencies: []\n});\n"],"mappings":"AAAA,SAASA,EAAE,QAAQ,oCAAoC;AACvD,SAASC,cAAc,QAAQ,wDAAwD;AAqBvF,MAAMC,kBAAkB,CAA0D;EAC9EC,EAAE,GAAG,yBAAyB;EAC9BC,KAAK,GAAG,wDAAwD;EAChEC,WAAW,GAAG,iDAAiD;EAC/DC,aAAa,GAAG,CAAC;EACjBC,SAAS,GAAG,IAAI;EAEAC,WAAW,GAAG,CAAC,WAAW,EAAW,SAAS,CAAU;EAExE,MAAaC,GAAGA,CAAC;IACbC,KAAK;IACLC;EAC2C,CAAC,EAE9C;IACE,IAAIA,UAAU,CAACC,OAAO,CAACC,SAAS,CAAC,CAAC,EAAE;MAChC,OAAOF,UAAU,CAACG,QAAQ,CAACC,OAAO,CAAC,CAAC;IACxC;IAEA,IAAI,CAACL,KAAK,CAACM,MAAM,EAAE;MACf,OAAOL,UAAU,CAACG,QAAQ,CAACG,KAAK,CAAC;QAAEC,OAAO,EAAE;MAAyB,CAAC,CAAC;IAC3E;IAEA,MAAMC,EAAE,GAAG,IAAInB,EAAE,CAAC,CAAC;;IAEnB;IACA,MAAMoB,SAAS,GAAG,MAAMD,EAAE,CAACE,aAAa,CAAC;MACrCC,MAAM,EAAEZ,KAAK,CAACM,MAAM;MACpBO,MAAM,EAAE,GAAGb,KAAK,CAACc,SAAS,GAAG;MAC7BC,iBAAiB,EAAEf,KAAK,CAACgB;IAC7B,CAAC,CAAC;;IAEF;IACA,IAAIN,SAAS,CAACO,QAAQ,IAAIP,SAAS,CAACO,QAAQ,CAACC,MAAM,GAAG,CAAC,EAAE;MACrD,MAAMC,eAAe,GAAGT,SAAS,CAACO,QAAQ,CAACG,MAAM,CAACC,IAAI,IAAIA,IAAI,CAACC,GAAG,CAAC,CAACC,GAAG,CAACF,IAAI,KAAK;QAC7EC,GAAG,EAAED,IAAI,CAACC;MACd,CAAC,CAAC,CAAC;MAEH,IAAIH,eAAe,CAACD,MAAM,GAAG,CAAC,EAAE;QAC5B,MAAMT,EAAE,CAACe,aAAa,CAAC;UACnBZ,MAAM,EAAEZ,KAAK,CAACM,MAAM;UACpBmB,MAAM,EAAE;YACJC,OAAO,EAAEP;UACb;QACJ,CAAC,CAAC;MACN;IACJ;;IAEA;IACA,IAAIT,SAAS,CAACiB,WAAW,IAAIjB,SAAS,CAACkB,qBAAqB,EAAE;MAC1D,OAAO3B,UAAU,CAACG,QAAQ,CAACyB,QAAQ,CAAC;QAChC,GAAG7B,KAAK;QACRgB,iBAAiB,EAAEN,SAAS,CAACkB;MACjC,CAAC,CAAC;IACN;IAEA,OAAO3B,UAAU,CAACG,QAAQ,CAAC0B,IAAI,CAAC,CAAC;EACrC;AACJ;AAEA,OAAO,MAAMC,4BAA4B,GAAGxC,cAAc,CAACyC,oBAAoB,CAAC;EAC5EC,cAAc,EAAEzC,kBAAkB;EAClC0C,YAAY,EAAE;AAClB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/DeleteFileFromBucket/DeleteS3FolderTask.js","sources":["../../../src/features/DeleteFileFromBucket/DeleteS3FolderTask.ts"],"sourcesContent":["import { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport {\n TaskDefinition,\n TaskHandler\n} from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport interface DeleteS3FolderInput {\n /**\n * Caller of the task (e.g., `fm-after-delete`).\n */\n caller: string;\n /**\n * Cache paths to invalidate.\n */\n bucket: string;\n /**\n * FM file directory key to delete.\n */\n folderKey: string;\n /**\n * Continuation token for pagination.\n */\n continuationToken?: string;\n}\n\nclass DeleteS3FolderTaskHandlerImpl implements TaskHandler.Interface<DeleteS3FolderInput> {\n public async run({\n input,\n controller\n }: TaskHandler.RunParams<DeleteS3FolderInput>): Promise<\n TaskDefinition.Result<DeleteS3FolderInput>\n > {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n if (!input.bucket) {\n return controller.response.error({ message: `Bucket is not defined.` });\n }\n\n const s3 = new S3();\n\n // List objects in the folder with pagination support.\n const filesList = await s3.listObjectsV2({\n Bucket: input.bucket,\n Prefix: `${input.folderKey}/`,\n ContinuationToken: input.continuationToken\n });\n\n // Delete all files in the folder using batch delete.\n if (filesList.Contents && filesList.Contents.length > 0) {\n const objectsToDelete = filesList.Contents.filter(file => file.Key).map(file => ({\n Key: file.Key!\n }));\n\n if (objectsToDelete.length > 0) {\n await s3.deleteObjects({\n Bucket: input.bucket,\n Delete: {\n Objects: objectsToDelete\n }\n });\n }\n }\n\n // If there are more objects to delete, continue in the next iteration.\n if (filesList.IsTruncated && filesList.NextContinuationToken) {\n return controller.response.continue({\n ...input,\n continuationToken: filesList.NextContinuationToken\n });\n }\n\n return controller.response.done();\n }\n}\n\nconst DeleteS3FolderTaskHandler = TaskHandler.createImplementation({\n implementation: DeleteS3FolderTaskHandlerImpl,\n dependencies: []\n});\n\nclass DeleteS3FolderTask implements TaskDefinition.Interface {\n id = \"fileManagerFolderDelete\";\n title = \"Delete folder and all of its contents from the bucket.\";\n description = \"A task to delete all files from a given folder.\";\n maxIterations = 5;\n isPrivate = true;\n public readonly selfCleanup = [\"onSuccess\" as const, \"onAbort\" as const];\n\n handler = DeleteS3FolderTaskHandler;\n}\n\nexport const DeleteS3FolderTaskDefinition = TaskDefinition.createImplementation({\n implementation: DeleteS3FolderTask,\n dependencies: []\n});\n"],"names":["DeleteS3FolderTaskHandlerImpl","input","controller","s3","S3","filesList","objectsToDelete","file","DeleteS3FolderTaskHandler","TaskHandler","DeleteS3FolderTask","DeleteS3FolderTaskDefinition","TaskDefinition"],"mappings":";;AAyBA,MAAMA;IACF,MAAa,IAAI,EACbC,KAAK,EACLC,UAAU,EAC+B,EAE3C;QACE,IAAIA,WAAW,OAAO,CAAC,SAAS,IAC5B,OAAOA,WAAW,QAAQ,CAAC,OAAO;QAGtC,IAAI,CAACD,MAAM,MAAM,EACb,OAAOC,WAAW,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QAAyB;QAGzE,MAAMC,KAAK,IAAIC;QAGf,MAAMC,YAAY,MAAMF,GAAG,aAAa,CAAC;YACrC,QAAQF,MAAM,MAAM;YACpB,QAAQ,GAAGA,MAAM,SAAS,CAAC,CAAC,CAAC;YAC7B,mBAAmBA,MAAM,iBAAiB;QAC9C;QAGA,IAAII,UAAU,QAAQ,IAAIA,UAAU,QAAQ,CAAC,MAAM,GAAG,GAAG;YACrD,MAAMC,kBAAkBD,UAAU,QAAQ,CAAC,MAAM,CAACE,CAAAA,OAAQA,KAAK,GAAG,EAAE,GAAG,CAACA,CAAAA,OAAS;oBAC7E,KAAKA,KAAK,GAAG;gBACjB;YAEA,IAAID,gBAAgB,MAAM,GAAG,GACzB,MAAMH,GAAG,aAAa,CAAC;gBACnB,QAAQF,MAAM,MAAM;gBACpB,QAAQ;oBACJ,SAASK;gBACb;YACJ;QAER;QAGA,IAAID,UAAU,WAAW,IAAIA,UAAU,qBAAqB,EACxD,OAAOH,WAAW,QAAQ,CAAC,QAAQ,CAAC;YAChC,GAAGD,KAAK;YACR,mBAAmBI,UAAU,qBAAqB;QACtD;QAGJ,OAAOH,WAAW,QAAQ,CAAC,IAAI;IACnC;AACJ;AAEA,MAAMM,4BAA4BC,YAAY,oBAAoB,CAAC;IAC/D,gBAAgBT;IAChB,cAAc,EAAE;AACpB;AAEA,MAAMU;;aACF,EAAE,GAAG;aACL,KAAK,GAAG;aACR,WAAW,GAAG;aACd,aAAa,GAAG;aAChB,SAAS,GAAG;aACI,WAAW,GAAG;YAAC;YAAsB;SAAmB;aAExE,OAAO,GAAGF;;AACd;AAEO,MAAMG,+BAA+BC,eAAe,oBAAoB,CAAC;IAC5E,gBAAgBF;IAChB,cAAc,EAAE;AACpB"}
@@ -1,12 +1,13 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { DeleteFileFromBucketHandler } from "./DeleteFileFromBucketHandler.js";
3
3
  import { DeleteS3FolderTaskDefinition } from "./DeleteS3FolderTask.js";
4
- export const DeleteFileFromBucketFeature = createFeature({
5
- name: "FileManagerS3/DeleteFileFromBucket",
6
- register(container) {
7
- container.register(DeleteFileFromBucketHandler);
8
- container.register(DeleteS3FolderTaskDefinition);
9
- }
4
+ const DeleteFileFromBucketFeature = createFeature({
5
+ name: "FileManagerS3/DeleteFileFromBucket",
6
+ register (container) {
7
+ container.register(DeleteFileFromBucketHandler);
8
+ container.register(DeleteS3FolderTaskDefinition);
9
+ }
10
10
  });
11
+ export { DeleteFileFromBucketFeature };
11
12
 
12
13
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","DeleteFileFromBucketHandler","DeleteS3FolderTaskDefinition","DeleteFileFromBucketFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { DeleteFileFromBucketHandler } from \"./DeleteFileFromBucketHandler.js\";\nimport { DeleteS3FolderTaskDefinition } from \"./DeleteS3FolderTask.js\";\n\nexport const DeleteFileFromBucketFeature = createFeature({\n name: \"FileManagerS3/DeleteFileFromBucket\",\n register(container) {\n container.register(DeleteFileFromBucketHandler);\n container.register(DeleteS3FolderTaskDefinition);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,2BAA2B;AACpC,SAASC,4BAA4B;AAErC,OAAO,MAAMC,2BAA2B,GAAGH,aAAa,CAAC;EACrDI,IAAI,EAAE,oCAAoC;EAC1CC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACJ,2BAA2B,CAAC;IAC/CK,SAAS,CAACD,QAAQ,CAACH,4BAA4B,CAAC;EACpD;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/DeleteFileFromBucket/feature.js","sources":["../../../src/features/DeleteFileFromBucket/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { DeleteFileFromBucketHandler } from \"./DeleteFileFromBucketHandler.js\";\nimport { DeleteS3FolderTaskDefinition } from \"./DeleteS3FolderTask.js\";\n\nexport const DeleteFileFromBucketFeature = createFeature({\n name: \"FileManagerS3/DeleteFileFromBucket\",\n register(container) {\n container.register(DeleteFileFromBucketHandler);\n container.register(DeleteS3FolderTaskDefinition);\n }\n});\n"],"names":["DeleteFileFromBucketFeature","createFeature","container","DeleteFileFromBucketHandler","DeleteS3FolderTaskDefinition"],"mappings":";;;AAIO,MAAMA,8BAA8BC,cAAc;IACrD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;IACvB;AACJ"}
@@ -1,26 +1,25 @@
1
1
  import { FileAfterCreateEventHandler } from "@webiny/api-file-manager/features/file/CreateFile/events.js";
2
2
  import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
3
3
  class ExtractMetadataHandlerImpl {
4
- constructor(taskService) {
5
- this.taskService = taskService;
6
- }
7
- async handle(event) {
8
- const {
9
- file
10
- } = event.payload;
11
-
12
- // Trigger the metadata extraction task
13
- await this.taskService.trigger({
14
- definition: "fileManagerExtractMetadata",
15
- input: {
16
- fileId: file.id
17
- }
18
- });
19
- }
4
+ constructor(taskService){
5
+ this.taskService = taskService;
6
+ }
7
+ async handle(event) {
8
+ const { file } = event.payload;
9
+ await this.taskService.trigger({
10
+ definition: "fileManagerExtractMetadata",
11
+ input: {
12
+ fileId: file.id
13
+ }
14
+ });
15
+ }
20
16
  }
21
- export const ExtractMetadataHandler = FileAfterCreateEventHandler.createImplementation({
22
- implementation: ExtractMetadataHandlerImpl,
23
- dependencies: [TaskService]
17
+ const ExtractMetadataHandler = FileAfterCreateEventHandler.createImplementation({
18
+ implementation: ExtractMetadataHandlerImpl,
19
+ dependencies: [
20
+ TaskService
21
+ ]
24
22
  });
23
+ export { ExtractMetadataHandler };
25
24
 
26
25
  //# sourceMappingURL=ExtractMetadataHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["FileAfterCreateEventHandler","TaskService","ExtractMetadataHandlerImpl","constructor","taskService","handle","event","file","payload","trigger","definition","input","fileId","id","ExtractMetadataHandler","createImplementation","implementation","dependencies"],"sources":["ExtractMetadataHandler.ts"],"sourcesContent":["import { FileAfterCreateEventHandler } from \"@webiny/api-file-manager/features/file/CreateFile/events.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport type { ExtractMetadataInput } from \"./ExtractMetadataTask.js\";\n\nclass ExtractMetadataHandlerImpl implements FileAfterCreateEventHandler.Interface {\n constructor(private taskService: TaskService.Interface) {}\n\n async handle(event: FileAfterCreateEventHandler.Event): Promise<void> {\n const { file } = event.payload;\n\n // Trigger the metadata extraction task\n await this.taskService.trigger<ExtractMetadataInput>({\n definition: \"fileManagerExtractMetadata\",\n input: {\n fileId: file.id\n }\n });\n }\n}\n\nexport const ExtractMetadataHandler = FileAfterCreateEventHandler.createImplementation({\n implementation: ExtractMetadataHandlerImpl,\n dependencies: [TaskService]\n});\n"],"mappings":"AAAA,SAASA,2BAA2B,QAAQ,6DAA6D;AACzG,SAASC,WAAW,QAAQ,qDAAqD;AAGjF,MAAMC,0BAA0B,CAAkD;EAC9EC,WAAWA,CAASC,WAAkC,EAAE;IAAA,KAApCA,WAAkC,GAAlCA,WAAkC;EAAG;EAEzD,MAAMC,MAAMA,CAACC,KAAwC,EAAiB;IAClE,MAAM;MAAEC;IAAK,CAAC,GAAGD,KAAK,CAACE,OAAO;;IAE9B;IACA,MAAM,IAAI,CAACJ,WAAW,CAACK,OAAO,CAAuB;MACjDC,UAAU,EAAE,4BAA4B;MACxCC,KAAK,EAAE;QACHC,MAAM,EAAEL,IAAI,CAACM;MACjB;IACJ,CAAC,CAAC;EACN;AACJ;AAEA,OAAO,MAAMC,sBAAsB,GAAGd,2BAA2B,CAACe,oBAAoB,CAAC;EACnFC,cAAc,EAAEd,0BAA0B;EAC1Ce,YAAY,EAAE,CAAChB,WAAW;AAC9B,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/ExtractMetadata/ExtractMetadataHandler.js","sources":["../../../src/features/ExtractMetadata/ExtractMetadataHandler.ts"],"sourcesContent":["import { FileAfterCreateEventHandler } from \"@webiny/api-file-manager/features/file/CreateFile/events.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport type { ExtractMetadataInput } from \"./ExtractMetadataTask.js\";\n\nclass ExtractMetadataHandlerImpl implements FileAfterCreateEventHandler.Interface {\n constructor(private taskService: TaskService.Interface) {}\n\n async handle(event: FileAfterCreateEventHandler.Event): Promise<void> {\n const { file } = event.payload;\n\n // Trigger the metadata extraction task\n await this.taskService.trigger<ExtractMetadataInput>({\n definition: \"fileManagerExtractMetadata\",\n input: {\n fileId: file.id\n }\n });\n }\n}\n\nexport const ExtractMetadataHandler = FileAfterCreateEventHandler.createImplementation({\n implementation: ExtractMetadataHandlerImpl,\n dependencies: [TaskService]\n});\n"],"names":["ExtractMetadataHandlerImpl","taskService","event","file","ExtractMetadataHandler","FileAfterCreateEventHandler","TaskService"],"mappings":";;AAIA,MAAMA;IACF,YAAoBC,WAAkC,CAAE;aAApCA,WAAW,GAAXA;IAAqC;IAEzD,MAAM,OAAOC,KAAwC,EAAiB;QAClE,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAM,OAAO;QAG9B,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAuB;YACjD,YAAY;YACZ,OAAO;gBACH,QAAQC,KAAK,EAAE;YACnB;QACJ;IACJ;AACJ;AAEO,MAAMC,yBAAyBC,4BAA4B,oBAAoB,CAAC;IACnF,gBAAgBL;IAChB,cAAc;QAACM;KAAY;AAC/B"}
@@ -1,22 +1,27 @@
1
- import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
1
+ import { TaskDefinition, TaskHandler } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
2
  import { GlobalKeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
3
3
  import { UpdateFileUseCase } from "@webiny/api-file-manager/features/file/UpdateFile/index.js";
4
4
  export interface ExtractMetadataInput {
5
5
  fileId: string;
6
6
  }
7
- declare class ExtractMetadataTask implements TaskDefinition.Interface<ExtractMetadataInput> {
7
+ declare class ExtractMetadataTaskHandlerImpl implements TaskHandler.Interface<ExtractMetadataInput> {
8
8
  private keyValueStore;
9
9
  private updateFileUseCase;
10
+ constructor(keyValueStore: GlobalKeyValueStore.Interface, updateFileUseCase: UpdateFileUseCase.Interface);
11
+ run({ input, controller }: TaskHandler.RunParams<ExtractMetadataInput>): Promise<TaskDefinition.Result<ExtractMetadataInput>>;
12
+ private cleanValues;
13
+ }
14
+ declare class ExtractMetadataTask implements TaskDefinition.Interface {
10
15
  id: string;
11
16
  title: string;
12
17
  description: string;
13
18
  maxIterations: number;
14
19
  isPrivate: boolean;
15
20
  databaseLogs: boolean;
16
- selfCleanup: ("onSuccess" | "onAbort")[];
17
- constructor(keyValueStore: GlobalKeyValueStore.Interface, updateFileUseCase: UpdateFileUseCase.Interface);
18
- run({ input, controller }: TaskDefinition.RunParams<ExtractMetadataInput>): Promise<TaskDefinition.Result<ExtractMetadataInput>>;
19
- private cleanValues;
21
+ selfCleanup: ("onAbort" | "onSuccess")[];
22
+ handler: typeof ExtractMetadataTaskHandlerImpl & {
23
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskHandler<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskOutput>>;
24
+ };
20
25
  }
21
26
  export declare const ExtractMetadataTaskDefinition: typeof ExtractMetadataTask & {
22
27
  __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskOutput>>;