@webiny/api-file-manager-s3 0.0.0-unstable.eb196ccd2f → 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 (232) hide show
  1. package/FileManagerS3Feature.d.ts +9 -0
  2. package/FileManagerS3Feature.js +27 -0
  3. package/FileManagerS3Feature.js.map +1 -0
  4. package/README.md +11 -1
  5. package/assetDelivery/abstractions.d.ts +11 -0
  6. package/assetDelivery/abstractions.js +7 -0
  7. package/assetDelivery/abstractions.js.map +1 -0
  8. package/assetDelivery/assetDeliveryConfig.d.ts +2 -2
  9. package/assetDelivery/assetDeliveryConfig.js +10 -49
  10. package/assetDelivery/assetDeliveryConfig.js.map +1 -1
  11. package/assetDelivery/createAssetDelivery.d.ts +3 -3
  12. package/assetDelivery/createAssetDelivery.js +7 -28
  13. package/assetDelivery/createAssetDelivery.js.map +1 -1
  14. package/assetDelivery/feature.d.ts +5 -0
  15. package/assetDelivery/feature.js +36 -0
  16. package/assetDelivery/feature.js.map +1 -0
  17. package/assetDelivery/index.d.ts +8 -9
  18. package/assetDelivery/index.js +8 -70
  19. package/assetDelivery/s3/LazySharpTransform.d.ts +34 -0
  20. package/assetDelivery/s3/LazySharpTransform.js +34 -0
  21. package/assetDelivery/s3/LazySharpTransform.js.map +1 -0
  22. package/assetDelivery/s3/S3AssetResolver.d.ts +9 -4
  23. package/assetDelivery/s3/S3AssetResolver.js +34 -32
  24. package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
  25. package/assetDelivery/s3/S3ContentsReader.d.ts +1 -3
  26. package/assetDelivery/s3/S3ContentsReader.js +12 -22
  27. package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
  28. package/assetDelivery/s3/S3ErrorAssetReply.js +11 -17
  29. package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
  30. package/assetDelivery/s3/S3OutputStrategy.d.ts +6 -6
  31. package/assetDelivery/s3/S3OutputStrategy.js +35 -35
  32. package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
  33. package/assetDelivery/s3/S3RedirectAssetReply.js +14 -20
  34. package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
  35. package/assetDelivery/s3/S3StreamAssetReply.js +14 -20
  36. package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -1
  37. package/assetDelivery/s3/SharpTransform.d.ts +22 -14
  38. package/assetDelivery/s3/SharpTransform.js +163 -182
  39. package/assetDelivery/s3/SharpTransform.js.map +1 -1
  40. package/assetDelivery/s3/transformation/AssetKeyGenerator.js +17 -25
  41. package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -1
  42. package/assetDelivery/s3/transformation/CallableContentsReader.d.ts +0 -2
  43. package/assetDelivery/s3/transformation/CallableContentsReader.js +7 -13
  44. package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -1
  45. package/assetDelivery/s3/transformation/WidthCollection.js +14 -22
  46. package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -1
  47. package/assetDelivery/s3/transformation/utils.d.ts +1 -3
  48. package/assetDelivery/s3/transformation/utils.js +26 -28
  49. package/assetDelivery/s3/transformation/utils.js.map +1 -1
  50. package/assetDelivery/threatDetection/ObjectKey.d.ts +7 -0
  51. package/assetDelivery/threatDetection/ObjectKey.js +18 -0
  52. package/assetDelivery/threatDetection/ObjectKey.js.map +1 -0
  53. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.d.ts +22 -2
  54. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +49 -58
  55. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -1
  56. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.d.ts +1 -1
  57. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +3 -11
  58. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -1
  59. package/assetDelivery/threatDetection/index.d.ts +2 -2
  60. package/assetDelivery/threatDetection/index.js +2 -29
  61. package/assetDelivery/threatDetection/processThreatScanResult.d.ts +3 -2
  62. package/assetDelivery/threatDetection/processThreatScanResult.js +56 -61
  63. package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -1
  64. package/assetDelivery/threatDetection/types.d.ts +0 -4
  65. package/assetDelivery/threatDetection/types.js +0 -7
  66. package/assetDelivery/types.d.ts +4 -2
  67. package/assetDelivery/types.js +0 -7
  68. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.d.ts +13 -0
  69. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js +28 -0
  70. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js.map +1 -0
  71. package/enterprise/ApplyThreatScanning/feature.d.ts +4 -0
  72. package/enterprise/ApplyThreatScanning/feature.js +11 -0
  73. package/enterprise/ApplyThreatScanning/feature.js.map +1 -0
  74. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.d.ts +15 -0
  75. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js +35 -0
  76. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js.map +1 -0
  77. package/features/DeleteFileFromBucket/DeleteS3FolderTask.d.ts +37 -0
  78. package/features/DeleteFileFromBucket/DeleteS3FolderTask.js +57 -0
  79. package/features/DeleteFileFromBucket/DeleteS3FolderTask.js.map +1 -0
  80. package/features/DeleteFileFromBucket/feature.d.ts +4 -0
  81. package/features/DeleteFileFromBucket/feature.js +13 -0
  82. package/features/DeleteFileFromBucket/feature.js.map +1 -0
  83. package/features/ExtractMetadata/ExtractMetadataHandler.d.ts +11 -0
  84. package/features/ExtractMetadata/ExtractMetadataHandler.js +25 -0
  85. package/features/ExtractMetadata/ExtractMetadataHandler.js.map +1 -0
  86. package/features/ExtractMetadata/ExtractMetadataTask.d.ts +29 -0
  87. package/features/ExtractMetadata/ExtractMetadataTask.js +99 -0
  88. package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -0
  89. package/features/ExtractMetadata/feature.d.ts +4 -0
  90. package/features/ExtractMetadata/feature.js +13 -0
  91. package/features/ExtractMetadata/feature.js.map +1 -0
  92. package/features/FlushCache/FlushCacheOnFileDeleteHandler.d.ts +12 -0
  93. package/features/FlushCache/FlushCacheOnFileDeleteHandler.js +28 -0
  94. package/features/FlushCache/FlushCacheOnFileDeleteHandler.js.map +1 -0
  95. package/features/FlushCache/FlushCacheOnFileUpdateHandler.d.ts +12 -0
  96. package/features/FlushCache/FlushCacheOnFileUpdateHandler.js +31 -0
  97. package/features/FlushCache/FlushCacheOnFileUpdateHandler.js.map +1 -0
  98. package/features/FlushCache/InvalidateCacheTask.d.ts +31 -0
  99. package/features/FlushCache/InvalidateCacheTask.js +84 -0
  100. package/features/FlushCache/InvalidateCacheTask.js.map +1 -0
  101. package/features/FlushCache/feature.d.ts +4 -0
  102. package/features/FlushCache/feature.js +15 -0
  103. package/features/FlushCache/feature.js.map +1 -0
  104. package/features/GetFileContentsById/GetFileContentsByIdUseCase.d.ts +13 -0
  105. package/features/GetFileContentsById/GetFileContentsByIdUseCase.js +40 -0
  106. package/features/GetFileContentsById/GetFileContentsByIdUseCase.js.map +1 -0
  107. package/features/GetFileContentsById/feature.d.ts +4 -0
  108. package/features/GetFileContentsById/feature.js +11 -0
  109. package/features/GetFileContentsById/feature.js.map +1 -0
  110. package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.d.ts +13 -0
  111. package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.js +40 -0
  112. package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.js.map +1 -0
  113. package/features/GetFileContentsByKey/feature.d.ts +4 -0
  114. package/features/GetFileContentsByKey/feature.js +11 -0
  115. package/features/GetFileContentsByKey/feature.js.map +1 -0
  116. package/features/WriteFileMetadata/MetadataReader.d.ts +14 -0
  117. package/features/WriteFileMetadata/MetadataReader.js +13 -0
  118. package/features/WriteFileMetadata/MetadataReader.js.map +1 -0
  119. package/features/WriteFileMetadata/MetadataWriter.d.ts +10 -0
  120. package/features/WriteFileMetadata/MetadataWriter.js +28 -0
  121. package/features/WriteFileMetadata/MetadataWriter.js.map +1 -0
  122. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +12 -0
  123. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +23 -0
  124. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -0
  125. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +12 -0
  126. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +25 -0
  127. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -0
  128. package/features/WriteFileMetadata/feature.d.ts +4 -0
  129. package/features/WriteFileMetadata/feature.js +13 -0
  130. package/features/WriteFileMetadata/feature.js.map +1 -0
  131. package/graphql/S3GraphQLSchema.d.ts +10 -0
  132. package/graphql/S3GraphQLSchema.js +233 -0
  133. package/graphql/S3GraphQLSchema.js.map +1 -0
  134. package/graphql/checkPermissions.d.ts +5 -0
  135. package/graphql/checkPermissions.js +22 -0
  136. package/graphql/checkPermissions.js.map +1 -0
  137. package/index.d.ts +4 -5
  138. package/index.js +3 -36
  139. package/multiPartUpload/CompleteMultiPartUploadUseCase.d.ts +1 -1
  140. package/multiPartUpload/CompleteMultiPartUploadUseCase.js +49 -59
  141. package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -1
  142. package/multiPartUpload/CreateMultiPartUploadUseCase.d.ts +2 -2
  143. package/multiPartUpload/CreateMultiPartUploadUseCase.js +30 -44
  144. package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -1
  145. package/package.json +36 -34
  146. package/types.d.ts +2 -1
  147. package/types.js +1 -7
  148. package/utils/CdnPathsGenerator.d.ts +3 -0
  149. package/utils/CdnPathsGenerator.js +11 -0
  150. package/utils/CdnPathsGenerator.js.map +1 -0
  151. package/utils/FileExtension.d.ts +1 -1
  152. package/utils/FileExtension.js +11 -19
  153. package/utils/FileExtension.js.map +1 -1
  154. package/utils/FileKey.d.ts +1 -1
  155. package/utils/FileKey.js +29 -29
  156. package/utils/FileKey.js.map +1 -1
  157. package/utils/FileKey.test.js +50 -51
  158. package/utils/FileKey.test.js.map +1 -1
  159. package/utils/FileNormalizer.d.ts +2 -2
  160. package/utils/FileNormalizer.js +35 -43
  161. package/utils/FileNormalizer.js.map +1 -1
  162. package/utils/FileUploadModifier.d.ts +9 -3
  163. package/utils/FileUploadModifier.js +36 -44
  164. package/utils/FileUploadModifier.js.map +1 -1
  165. package/utils/createFileNormalizerFromContext.d.ts +2 -2
  166. package/utils/createFileNormalizerFromContext.js +6 -12
  167. package/utils/createFileNormalizerFromContext.js.map +1 -1
  168. package/utils/getPresignedPostPayload.d.ts +4 -3
  169. package/utils/getPresignedPostPayload.js +38 -40
  170. package/utils/getPresignedPostPayload.js.map +1 -1
  171. package/utils/mimeTypes.js +6 -20
  172. package/utils/mimeTypes.js.map +1 -1
  173. package/utils/uploadFileToS3.d.ts +2 -5
  174. package/utils/uploadFileToS3.js +11 -23
  175. package/utils/uploadFileToS3.js.map +1 -1
  176. package/assetDelivery/createCustomAssetDelivery.d.ts +0 -12
  177. package/assetDelivery/createCustomAssetDelivery.js +0 -28
  178. package/assetDelivery/createCustomAssetDelivery.js.map +0 -1
  179. package/assetDelivery/customAssets/CustomAsset.d.ts +0 -6
  180. package/assetDelivery/customAssets/CustomAsset.js +0 -14
  181. package/assetDelivery/customAssets/CustomAsset.js.map +0 -1
  182. package/assetDelivery/customAssets/CustomAssetProcessor.d.ts +0 -10
  183. package/assetDelivery/customAssets/CustomAssetProcessor.js +0 -25
  184. package/assetDelivery/customAssets/CustomAssetProcessor.js.map +0 -1
  185. package/assetDelivery/customAssets/S3CustomAssetResolver.d.ts +0 -15
  186. package/assetDelivery/customAssets/S3CustomAssetResolver.js +0 -90
  187. package/assetDelivery/customAssets/S3CustomAssetResolver.js.map +0 -1
  188. package/assetDelivery/customAssets/customAssetDeliveryConfig.d.ts +0 -1
  189. package/assetDelivery/customAssets/customAssetDeliveryConfig.js +0 -30
  190. package/assetDelivery/customAssets/customAssetDeliveryConfig.js.map +0 -1
  191. package/assetDelivery/index.js.map +0 -1
  192. package/assetDelivery/s3/S3AssetMetadataReader.d.ts +0 -15
  193. package/assetDelivery/s3/S3AssetMetadataReader.js +0 -36
  194. package/assetDelivery/s3/S3AssetMetadataReader.js.map +0 -1
  195. package/assetDelivery/s3/transformation/legacyUtils.d.ts +0 -12
  196. package/assetDelivery/s3/transformation/legacyUtils.js +0 -34
  197. package/assetDelivery/s3/transformation/legacyUtils.js.map +0 -1
  198. package/assetDelivery/threatDetection/index.js.map +0 -1
  199. package/assetDelivery/threatDetection/types.js.map +0 -1
  200. package/assetDelivery/types.js.map +0 -1
  201. package/flushCdnCache/CdnPathsGenerator.d.ts +0 -4
  202. package/flushCdnCache/CdnPathsGenerator.js +0 -14
  203. package/flushCdnCache/CdnPathsGenerator.js.map +0 -1
  204. package/flushCdnCache/InvalidateCacheTask.d.ts +0 -18
  205. package/flushCdnCache/InvalidateCacheTask.js +0 -78
  206. package/flushCdnCache/InvalidateCacheTask.js.map +0 -1
  207. package/flushCdnCache/flushCacheOnFileDelete.d.ts +0 -3
  208. package/flushCdnCache/flushCacheOnFileDelete.js +0 -34
  209. package/flushCdnCache/flushCacheOnFileDelete.js.map +0 -1
  210. package/flushCdnCache/flushCacheOnFileUpdate.d.ts +0 -3
  211. package/flushCdnCache/flushCacheOnFileUpdate.js +0 -40
  212. package/flushCdnCache/flushCacheOnFileUpdate.js.map +0 -1
  213. package/flushCdnCache/index.d.ts +0 -1
  214. package/flushCdnCache/index.js +0 -15
  215. package/flushCdnCache/index.js.map +0 -1
  216. package/flushCdnCache/invalidateCacheTaskDefinition.d.ts +0 -2
  217. package/flushCdnCache/invalidateCacheTaskDefinition.js +0 -22
  218. package/flushCdnCache/invalidateCacheTaskDefinition.js.map +0 -1
  219. package/index.js.map +0 -1
  220. package/plugins/addFileMetadata.d.ts +0 -10
  221. package/plugins/addFileMetadata.js +0 -67
  222. package/plugins/addFileMetadata.js.map +0 -1
  223. package/plugins/checkPermissions.d.ts +0 -4
  224. package/plugins/checkPermissions.js +0 -44
  225. package/plugins/checkPermissions.js.map +0 -1
  226. package/plugins/fileStorageS3.d.ts +0 -3
  227. package/plugins/fileStorageS3.js +0 -60
  228. package/plugins/fileStorageS3.js.map +0 -1
  229. package/plugins/graphqlFileStorageS3.d.ts +0 -4
  230. package/plugins/graphqlFileStorageS3.js +0 -213
  231. package/plugins/graphqlFileStorageS3.js.map +0 -1
  232. package/types.js.map +0 -1
@@ -1,33 +1,31 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.getOptimizedTransformedImageKeyPrefix = exports.getOptimizedImageKeyPrefix = exports.getImageKey = exports.SUPPORTED_TRANSFORMABLE_IMAGES = exports.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = exports.OPTIMIZED_IMAGE_PREFIX = void 0;
8
- var _objectHash = _interopRequireDefault(require("object-hash"));
9
- const SUPPORTED_TRANSFORMABLE_IMAGES = exports.SUPPORTED_TRANSFORMABLE_IMAGES = ["jpg", "jpeg", "png", "webp"];
10
- const OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = exports.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = "img-o-t-";
11
- const OPTIMIZED_IMAGE_PREFIX = exports.OPTIMIZED_IMAGE_PREFIX = "img-o-";
12
- const getOptimizedImageKeyPrefix = key => {
13
- const [id, name] = key.split("/");
14
- return `${id}/${OPTIMIZED_IMAGE_PREFIX}${name}`;
1
+ import object_hash from "object-hash";
2
+ import node_path from "node:path";
3
+ const SUPPORTED_TRANSFORMABLE_IMAGES = [
4
+ "jpg",
5
+ "jpeg",
6
+ "png",
7
+ "webp"
8
+ ];
9
+ const parseKey = (key)=>{
10
+ const filename = node_path.basename(key);
11
+ const dirname = node_path.dirname(key);
12
+ return {
13
+ filename,
14
+ dirname
15
+ };
16
+ };
17
+ const getOptimizedImageKeyPrefix = (key)=>{
18
+ const { filename, dirname } = parseKey(key);
19
+ return `${dirname}/optimized/${filename}`;
15
20
  };
16
- exports.getOptimizedImageKeyPrefix = getOptimizedImageKeyPrefix;
17
- const getOptimizedTransformedImageKeyPrefix = (key, transformationsHash) => {
18
- const [id, name] = key.split("/");
19
- return `${id}/${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${transformationsHash}-${name}`;
21
+ const getOptimizedTransformedImageKeyPrefix = (key, transformationsHash)=>{
22
+ const { filename, dirname } = parseKey(key);
23
+ return `${dirname}/optimized/${transformationsHash}-${filename}`;
20
24
  };
21
- exports.getOptimizedTransformedImageKeyPrefix = getOptimizedTransformedImageKeyPrefix;
22
- const getImageKey = ({
23
- key,
24
- transformations
25
- }) => {
26
- if (!transformations) {
27
- return getOptimizedImageKeyPrefix(key);
28
- }
29
- return getOptimizedTransformedImageKeyPrefix(key, (0, _objectHash.default)(transformations));
25
+ const getImageKey = ({ key, transformations })=>{
26
+ if (!transformations) return getOptimizedImageKeyPrefix(key);
27
+ return getOptimizedTransformedImageKeyPrefix(key, object_hash(transformations));
30
28
  };
31
- exports.getImageKey = getImageKey;
29
+ export { SUPPORTED_TRANSFORMABLE_IMAGES, getImageKey, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix };
32
30
 
33
31
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_objectHash","_interopRequireDefault","require","SUPPORTED_TRANSFORMABLE_IMAGES","exports","OPTIMIZED_TRANSFORMED_IMAGE_PREFIX","OPTIMIZED_IMAGE_PREFIX","getOptimizedImageKeyPrefix","key","id","name","split","getOptimizedTransformedImageKeyPrefix","transformationsHash","getImageKey","transformations","objectHash"],"sources":["utils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\n\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\"jpg\", \"jpeg\", \"png\", \"webp\"];\nconst OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = \"img-o-t-\";\nconst OPTIMIZED_IMAGE_PREFIX = \"img-o-\";\n\nconst getOptimizedImageKeyPrefix = (key: string): string => {\n const [id, name] = key.split(\"/\");\n return `${id}/${OPTIMIZED_IMAGE_PREFIX}${name}`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (\n key: string,\n transformationsHash: string\n): string => {\n const [id, name] = key.split(\"/\");\n return `${id}/${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${transformationsHash}-${name}`;\n};\n\ninterface GetImageKeyParams {\n key: string;\n transformations?: any;\n}\n\nconst getImageKey = ({ key, transformations }: GetImageKeyParams): string => {\n if (!transformations) {\n return getOptimizedImageKeyPrefix(key);\n }\n\n return getOptimizedTransformedImageKeyPrefix(key, objectHash(transformations));\n};\n\nexport {\n SUPPORTED_TRANSFORMABLE_IMAGES,\n OPTIMIZED_TRANSFORMED_IMAGE_PREFIX,\n OPTIMIZED_IMAGE_PREFIX,\n getImageKey,\n getOptimizedImageKeyPrefix,\n getOptimizedTransformedImageKeyPrefix\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,MAAMC,8BAA8B,GAAAC,OAAA,CAAAD,8BAAA,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;AACrE,MAAME,kCAAkC,GAAAD,OAAA,CAAAC,kCAAA,GAAG,UAAU;AACrD,MAAMC,sBAAsB,GAAAF,OAAA,CAAAE,sBAAA,GAAG,QAAQ;AAEvC,MAAMC,0BAA0B,GAAIC,GAAW,IAAa;EACxD,MAAM,CAACC,EAAE,EAAEC,IAAI,CAAC,GAAGF,GAAG,CAACG,KAAK,CAAC,GAAG,CAAC;EACjC,OAAO,GAAGF,EAAE,IAAIH,sBAAsB,GAAGI,IAAI,EAAE;AACnD,CAAC;AAACN,OAAA,CAAAG,0BAAA,GAAAA,0BAAA;AAEF,MAAMK,qCAAqC,GAAGA,CAC1CJ,GAAW,EACXK,mBAA2B,KAClB;EACT,MAAM,CAACJ,EAAE,EAAEC,IAAI,CAAC,GAAGF,GAAG,CAACG,KAAK,CAAC,GAAG,CAAC;EACjC,OAAO,GAAGF,EAAE,IAAIJ,kCAAkC,GAAGQ,mBAAmB,IAAIH,IAAI,EAAE;AACtF,CAAC;AAACN,OAAA,CAAAQ,qCAAA,GAAAA,qCAAA;AAOF,MAAME,WAAW,GAAGA,CAAC;EAAEN,GAAG;EAAEO;AAAmC,CAAC,KAAa;EACzE,IAAI,CAACA,eAAe,EAAE;IAClB,OAAOR,0BAA0B,CAACC,GAAG,CAAC;EAC1C;EAEA,OAAOI,qCAAqC,CAACJ,GAAG,EAAE,IAAAQ,mBAAU,EAACD,eAAe,CAAC,CAAC;AAClF,CAAC;AAACX,OAAA,CAAAU,WAAA,GAAAA,WAAA","ignoreList":[]}
1
+ {"version":3,"file":"assetDelivery/s3/transformation/utils.js","sources":["../../../../src/assetDelivery/s3/transformation/utils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\nimport path from \"node:path\";\n\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\"jpg\", \"jpeg\", \"png\", \"webp\"];\n\nconst parseKey = (key: string) => {\n const filename = path.basename(key);\n const dirname = path.dirname(key);\n\n return { filename, dirname };\n};\n\nconst getOptimizedImageKeyPrefix = (key: string): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${filename}`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (\n key: string,\n transformationsHash: string\n): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${transformationsHash}-${filename}`;\n};\n\ninterface GetImageKeyParams {\n key: string;\n transformations?: any;\n}\n\nconst getImageKey = ({ key, transformations }: GetImageKeyParams): string => {\n if (!transformations) {\n return getOptimizedImageKeyPrefix(key);\n }\n\n return getOptimizedTransformedImageKeyPrefix(key, objectHash(transformations));\n};\n\nexport {\n SUPPORTED_TRANSFORMABLE_IMAGES,\n getImageKey,\n getOptimizedImageKeyPrefix,\n getOptimizedTransformedImageKeyPrefix\n};\n"],"names":["SUPPORTED_TRANSFORMABLE_IMAGES","parseKey","key","filename","path","dirname","getOptimizedImageKeyPrefix","getOptimizedTransformedImageKeyPrefix","transformationsHash","getImageKey","transformations","objectHash"],"mappings":";;AAGA,MAAMA,iCAAiC;IAAC;IAAO;IAAQ;IAAO;CAAO;AAErE,MAAMC,WAAW,CAACC;IACd,MAAMC,WAAWC,UAAAA,QAAa,CAACF;IAC/B,MAAMG,UAAUD,UAAAA,OAAY,CAACF;IAE7B,OAAO;QAAEC;QAAUE;IAAQ;AAC/B;AAEA,MAAMC,6BAA6B,CAACJ;IAChC,MAAM,EAAEC,QAAQ,EAAEE,OAAO,EAAE,GAAGJ,SAASC;IAEvC,OAAO,GAAGG,QAAQ,WAAW,EAAEF,UAAU;AAC7C;AAEA,MAAMI,wCAAwC,CAC1CL,KACAM;IAEA,MAAM,EAAEL,QAAQ,EAAEE,OAAO,EAAE,GAAGJ,SAASC;IAEvC,OAAO,GAAGG,QAAQ,WAAW,EAAEG,oBAAoB,CAAC,EAAEL,UAAU;AACpE;AAOA,MAAMM,cAAc,CAAC,EAAEP,GAAG,EAAEQ,eAAe,EAAqB;IAC5D,IAAI,CAACA,iBACD,OAAOJ,2BAA2BJ;IAGtC,OAAOK,sCAAsCL,KAAKS,YAAWD;AACjE"}
@@ -0,0 +1,7 @@
1
+ export declare class ObjectKey {
2
+ private bucketKey;
3
+ static from(key: string): ObjectKey;
4
+ private constructor();
5
+ id(): string;
6
+ relativeKey(): string;
7
+ }
@@ -0,0 +1,18 @@
1
+ class ObjectKey {
2
+ static from(key) {
3
+ return new ObjectKey(key);
4
+ }
5
+ constructor(key){
6
+ this.bucketKey = key;
7
+ }
8
+ id() {
9
+ const [id] = this.relativeKey().split("/");
10
+ return id;
11
+ }
12
+ relativeKey() {
13
+ return this.bucketKey.replace(/^tenants\/[^/]+\/files\//, "");
14
+ }
15
+ }
16
+ export { ObjectKey };
17
+
18
+ //# sourceMappingURL=ObjectKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetDelivery/threatDetection/ObjectKey.js","sources":["../../../src/assetDelivery/threatDetection/ObjectKey.ts"],"sourcesContent":["export class ObjectKey {\n private bucketKey: string;\n\n static from(key: string) {\n return new ObjectKey(key);\n }\n\n private constructor(key: string) {\n this.bucketKey = key;\n }\n\n id() {\n const [id] = this.relativeKey().split(\"/\");\n return id;\n }\n\n relativeKey() {\n return this.bucketKey.replace(/^tenants\\/[^/]+\\/files\\//, \"\");\n }\n}\n"],"names":["ObjectKey","key","id"],"mappings":"AAAO,MAAMA;IAGT,OAAO,KAAKC,GAAW,EAAE;QACrB,OAAO,IAAID,UAAUC;IACzB;IAEA,YAAoBA,GAAW,CAAE;QAC7B,IAAI,CAAC,SAAS,GAAGA;IACrB;IAEA,KAAK;QACD,MAAM,CAACC,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACtC,OAAOA;IACX;IAEA,cAAc;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4BAA4B;IAC9D;AACJ"}
@@ -1,2 +1,22 @@
1
- import type { GuardDutyEvent } from "./types";
2
- export declare const createThreatDetectionEventHandler: () => (import("@webiny/handler").HandlerOnRequestPlugin<import("@webiny/handler/types").Context> | import("@webiny/handler-aws").EventBridgeEventHandler<"GuardDuty Malware Protection Object Scan Result", GuardDutyEvent, any>)[];
1
+ import type { Container } from "@webiny/feature/api";
2
+ import type { EventBridgeEvent } from "@webiny/aws-sdk/types/index.js";
3
+ import { EventBridgeEventHandler, type EventBridgeResult } from "@webiny/event-handler-aws/abstractions/handlers/EventBridgeEventHandler.js";
4
+ import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js";
5
+ import type { IGetTenantByIdUseCase } from "@webiny/api-core/features/tenancy/GetTenantById/abstractions.js";
6
+ import type { EventContext, NextFunction } from "@webiny/event-handler-core";
7
+ import type { GuardDutyEvent } from "./types.js";
8
+ declare class ThreatDetectionEventBridgeLambdaHandlerImpl implements EventBridgeEventHandler.Interface {
9
+ private container;
10
+ private tenantCtx;
11
+ private getTenantById;
12
+ constructor(container: Container, tenantCtx: ITenantContext, getTenantById: IGetTenantByIdUseCase);
13
+ execute(eventCtx: EventContext<EventBridgeEvent<string, GuardDutyEvent>>, _next: NextFunction): Promise<EventBridgeResult>;
14
+ }
15
+ export declare const ThreatDetectionEventBridgeLambdaHandler: typeof ThreatDetectionEventBridgeLambdaHandlerImpl & {
16
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/event-handler-aws/abstractions/handlers/EventBridgeEventHandler.js").IEventBridgeEventHandler>;
17
+ };
18
+ /**
19
+ * @deprecated Use ThreatDetectionEventBridgeLambdaHandler instead.
20
+ */
21
+ export declare const createThreatDetectionEventHandler: () => never[];
22
+ export {};
@@ -1,62 +1,53 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createThreatDetectionEventHandler = void 0;
7
- var _clientS = require("@webiny/aws-sdk/client-s3");
8
- var _handlerAws = require("@webiny/handler-aws");
9
- var _handler = require("@webiny/handler");
10
- var _processThreatScanResult = require("./processThreatScanResult");
11
- var _S3AssetMetadataReader = require("../s3/S3AssetMetadataReader");
12
- const detailType = "GuardDuty Malware Protection Object Scan Result";
13
- const bucket = process.env.S3_BUCKET;
14
- const region = process.env.AWS_REGION;
15
- const createThreatDetectionEventHandler = () => {
16
- const s3 = new _clientS.S3({
17
- region
18
- });
19
- const handlerOnRequest = (0, _handler.createHandlerOnRequest)(async request => {
20
- const payload = request.body;
21
- if (payload["detail-type"] !== detailType) {
22
- return;
23
- }
24
- const objectKey = payload.detail.s3ObjectDetails.objectKey;
25
- if (objectKey.endsWith(".metadata")) {
26
- return;
1
+ import { EventBridgeEventHandler } from "@webiny/event-handler-aws/abstractions/handlers/EventBridgeEventHandler.js";
2
+ import { RequestContainer } from "@webiny/event-handler-core";
3
+ import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
4
+ import { GetTenantByIdUseCase } from "@webiny/api-core/features/tenancy/GetTenantById/index.js";
5
+ import { FeatureFlags } from "@webiny/api-core/features/featureFlags/abstractions.js";
6
+ import { GlobalKeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
7
+ import { processThreatScanResult } from "./processThreatScanResult.js";
8
+ import { ObjectKey } from "./ObjectKey.js";
9
+ const DETAIL_TYPE = "GuardDuty Malware Protection Object Scan Result";
10
+ class ThreatDetectionEventBridgeLambdaHandlerImpl {
11
+ constructor(container, tenantCtx, getTenantById){
12
+ this.container = container;
13
+ this.tenantCtx = tenantCtx;
14
+ this.getTenantById = getTenantById;
27
15
  }
28
- try {
29
- const s3Metadata = new _S3AssetMetadataReader.S3AssetMetadataReader(s3, bucket);
30
- const metadata = await s3Metadata.getMetadata(payload.detail.s3ObjectDetails.objectKey);
31
- request.headers = {
32
- ...request.headers,
33
- "x-tenant": metadata.tenant,
34
- "x-i18n-locale": `default:${metadata.locale};content:${metadata.locale};`
35
- };
36
- } catch {
37
- // If metadata can't be loaded, we ignore the file.
38
- // Most likely it's because the file is a rendition of the original file,
39
- // so we don't need to do anything with it.
16
+ async execute(eventCtx, _next) {
17
+ const payload = eventCtx.event;
18
+ if (payload["detail-type"] !== DETAIL_TYPE) return {
19
+ success: true
20
+ };
21
+ if (!this.container.resolve(FeatureFlags).get().isEnabled("fileManager.threatDetection")) return {
22
+ success: true
23
+ };
24
+ const objectKey = payload.detail.s3ObjectDetails.objectKey;
25
+ const keyValueStore = this.container.resolve(GlobalKeyValueStore);
26
+ try {
27
+ const fileId = ObjectKey.from(objectKey).id();
28
+ const result = await keyValueStore.get(`FileManager/File/${fileId}/Metadata`);
29
+ if (result.isOk()) {
30
+ const tenantResult = await this.getTenantById.execute(result.value.tenant);
31
+ if (tenantResult.isOk()) this.tenantCtx.setTenant(tenantResult.value);
32
+ }
33
+ } catch {}
34
+ await processThreatScanResult({
35
+ container: this.container
36
+ }, payload.detail);
37
+ return {
38
+ success: true
39
+ };
40
40
  }
41
- });
42
- // Guard Duty event handler.
43
- const threatScanEventHandler = (0, _handlerAws.createEventBridgeEventHandler)(async ({
44
- payload,
45
- next,
46
- ...rest
47
- }) => {
48
- const context = rest.context;
49
- const threatDetectionEnabled = context.wcp.canUseFileManagerThreatDetection();
50
- if (!threatDetectionEnabled || payload["detail-type"] !== detailType) {
51
- return next();
52
- }
53
- await (0, _processThreatScanResult.processThreatScanResult)(context, payload.detail);
54
- });
55
-
56
- // Assign a human-readable name for easier debugging.
57
- threatScanEventHandler.name = threatScanEventHandler.type + ".threatDetectionEventHandler";
58
- return [handlerOnRequest, threatScanEventHandler];
59
- };
60
- exports.createThreatDetectionEventHandler = createThreatDetectionEventHandler;
41
+ }
42
+ const ThreatDetectionEventBridgeLambdaHandler = EventBridgeEventHandler.createImplementation({
43
+ implementation: ThreatDetectionEventBridgeLambdaHandlerImpl,
44
+ dependencies: [
45
+ RequestContainer,
46
+ TenantContext,
47
+ GetTenantByIdUseCase
48
+ ]
49
+ });
50
+ const createThreatDetectionEventHandler = ()=>[];
51
+ export { ThreatDetectionEventBridgeLambdaHandler, createThreatDetectionEventHandler };
61
52
 
62
53
  //# sourceMappingURL=createThreatDetectionEventHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_clientS","require","_handlerAws","_handler","_processThreatScanResult","_S3AssetMetadataReader","detailType","bucket","process","env","S3_BUCKET","region","AWS_REGION","createThreatDetectionEventHandler","s3","S3","handlerOnRequest","createHandlerOnRequest","request","payload","body","objectKey","detail","s3ObjectDetails","endsWith","s3Metadata","S3AssetMetadataReader","metadata","getMetadata","headers","tenant","locale","threatScanEventHandler","createEventBridgeEventHandler","next","rest","context","threatDetectionEnabled","wcp","canUseFileManagerThreatDetection","processThreatScanResult","name","type","exports"],"sources":["createThreatDetectionEventHandler.ts"],"sourcesContent":["import { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { createEventBridgeEventHandler } from \"@webiny/handler-aws\";\nimport { createHandlerOnRequest } from \"@webiny/handler\";\nimport type { GuardDutyEvent, ThreatDetectionContext } from \"./types\";\nimport { processThreatScanResult } from \"./processThreatScanResult\";\nimport { S3AssetMetadataReader } from \"~/assetDelivery/s3/S3AssetMetadataReader\";\nimport type { EventBridgeEvent } from \"@webiny/aws-sdk/types\";\n\nconst detailType = \"GuardDuty Malware Protection Object Scan Result\";\n\nconst bucket = process.env.S3_BUCKET as string;\nconst region = process.env.AWS_REGION as string;\n\nexport const createThreatDetectionEventHandler = () => {\n const s3 = new S3({ region });\n\n const handlerOnRequest = createHandlerOnRequest(async request => {\n const payload = request.body as EventBridgeEvent<string, GuardDutyEvent>;\n\n if (payload[\"detail-type\"] !== detailType) {\n return;\n }\n\n const objectKey = payload.detail.s3ObjectDetails.objectKey;\n if (objectKey.endsWith(\".metadata\")) {\n return;\n }\n\n try {\n const s3Metadata = new S3AssetMetadataReader(s3, bucket);\n const metadata = await s3Metadata.getMetadata(payload.detail.s3ObjectDetails.objectKey);\n\n request.headers = {\n ...request.headers,\n \"x-tenant\": metadata.tenant,\n \"x-i18n-locale\": `default:${metadata.locale};content:${metadata.locale};`\n };\n } catch {\n // If metadata can't be loaded, we ignore the file.\n // Most likely it's because the file is a rendition of the original file,\n // so we don't need to do anything with it.\n }\n });\n // Guard Duty event handler.\n const threatScanEventHandler = createEventBridgeEventHandler<typeof detailType, GuardDutyEvent>(\n async ({ payload, next, ...rest }) => {\n const context = rest.context as ThreatDetectionContext;\n\n const threatDetectionEnabled = context.wcp.canUseFileManagerThreatDetection();\n\n if (!threatDetectionEnabled || payload[\"detail-type\"] !== detailType) {\n return next();\n }\n\n await processThreatScanResult(context, payload.detail);\n }\n );\n\n // Assign a human-readable name for easier debugging.\n threatScanEventHandler.name = threatScanEventHandler.type + \".threatDetectionEventHandler\";\n\n return [handlerOnRequest, threatScanEventHandler];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA,IAAAG,wBAAA,GAAAH,OAAA;AACA,IAAAI,sBAAA,GAAAJ,OAAA;AAGA,MAAMK,UAAU,GAAG,iDAAiD;AAEpE,MAAMC,MAAM,GAAGC,OAAO,CAACC,GAAG,CAACC,SAAmB;AAC9C,MAAMC,MAAM,GAAGH,OAAO,CAACC,GAAG,CAACG,UAAoB;AAExC,MAAMC,iCAAiC,GAAGA,CAAA,KAAM;EACnD,MAAMC,EAAE,GAAG,IAAIC,WAAE,CAAC;IAAEJ;EAAO,CAAC,CAAC;EAE7B,MAAMK,gBAAgB,GAAG,IAAAC,+BAAsB,EAAC,MAAMC,OAAO,IAAI;IAC7D,MAAMC,OAAO,GAAGD,OAAO,CAACE,IAAgD;IAExE,IAAID,OAAO,CAAC,aAAa,CAAC,KAAKb,UAAU,EAAE;MACvC;IACJ;IAEA,MAAMe,SAAS,GAAGF,OAAO,CAACG,MAAM,CAACC,eAAe,CAACF,SAAS;IAC1D,IAAIA,SAAS,CAACG,QAAQ,CAAC,WAAW,CAAC,EAAE;MACjC;IACJ;IAEA,IAAI;MACA,MAAMC,UAAU,GAAG,IAAIC,4CAAqB,CAACZ,EAAE,EAAEP,MAAM,CAAC;MACxD,MAAMoB,QAAQ,GAAG,MAAMF,UAAU,CAACG,WAAW,CAACT,OAAO,CAACG,MAAM,CAACC,eAAe,CAACF,SAAS,CAAC;MAEvFH,OAAO,CAACW,OAAO,GAAG;QACd,GAAGX,OAAO,CAACW,OAAO;QAClB,UAAU,EAAEF,QAAQ,CAACG,MAAM;QAC3B,eAAe,EAAE,WAAWH,QAAQ,CAACI,MAAM,YAAYJ,QAAQ,CAACI,MAAM;MAC1E,CAAC;IACL,CAAC,CAAC,MAAM;MACJ;MACA;MACA;IAAA;EAER,CAAC,CAAC;EACF;EACA,MAAMC,sBAAsB,GAAG,IAAAC,yCAA6B,EACxD,OAAO;IAAEd,OAAO;IAAEe,IAAI;IAAE,GAAGC;EAAK,CAAC,KAAK;IAClC,MAAMC,OAAO,GAAGD,IAAI,CAACC,OAAiC;IAEtD,MAAMC,sBAAsB,GAAGD,OAAO,CAACE,GAAG,CAACC,gCAAgC,CAAC,CAAC;IAE7E,IAAI,CAACF,sBAAsB,IAAIlB,OAAO,CAAC,aAAa,CAAC,KAAKb,UAAU,EAAE;MAClE,OAAO4B,IAAI,CAAC,CAAC;IACjB;IAEA,MAAM,IAAAM,gDAAuB,EAACJ,OAAO,EAAEjB,OAAO,CAACG,MAAM,CAAC;EAC1D,CACJ,CAAC;;EAED;EACAU,sBAAsB,CAACS,IAAI,GAAGT,sBAAsB,CAACU,IAAI,GAAG,8BAA8B;EAE1F,OAAO,CAAC1B,gBAAgB,EAAEgB,sBAAsB,CAAC;AACrD,CAAC;AAACW,OAAA,CAAA9B,iCAAA,GAAAA,iCAAA","ignoreList":[]}
1
+ {"version":3,"file":"assetDelivery/threatDetection/createThreatDetectionEventHandler.js","sources":["../../../src/assetDelivery/threatDetection/createThreatDetectionEventHandler.ts"],"sourcesContent":["import type { Container } from \"@webiny/feature/api\";\nimport type { EventBridgeEvent } from \"@webiny/aws-sdk/types/index.js\";\nimport {\n EventBridgeEventHandler,\n type EventBridgeResult\n} from \"@webiny/event-handler-aws/abstractions/handlers/EventBridgeEventHandler.js\";\nimport { RequestContainer } from \"@webiny/event-handler-core\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { GetTenantByIdUseCase } from \"@webiny/api-core/features/tenancy/GetTenantById/index.js\";\nimport type { ITenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/abstractions.js\";\nimport type { IGetTenantByIdUseCase } from \"@webiny/api-core/features/tenancy/GetTenantById/abstractions.js\";\nimport type { EventContext, NextFunction } from \"@webiny/event-handler-core\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { FeatureFlags } from \"@webiny/api-core/features/featureFlags/abstractions.js\";\nimport { GlobalKeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { processThreatScanResult } from \"./processThreatScanResult.js\";\nimport { ObjectKey } from \"./ObjectKey.js\";\nimport type { GuardDutyEvent } from \"./types.js\";\n\nconst DETAIL_TYPE = \"GuardDuty Malware Protection Object Scan Result\";\n\nclass ThreatDetectionEventBridgeLambdaHandlerImpl implements EventBridgeEventHandler.Interface {\n constructor(\n private container: Container,\n private tenantCtx: ITenantContext,\n private getTenantById: IGetTenantByIdUseCase\n ) {}\n\n async execute(\n eventCtx: EventContext<EventBridgeEvent<string, GuardDutyEvent>>,\n _next: NextFunction\n ): Promise<EventBridgeResult> {\n const payload = eventCtx.event;\n if (payload[\"detail-type\"] !== DETAIL_TYPE) {\n return { success: true };\n }\n\n if (!this.container.resolve(FeatureFlags).get().isEnabled(\"fileManager.threatDetection\")) {\n return { success: true };\n }\n\n const objectKey = payload.detail.s3ObjectDetails.objectKey;\n const keyValueStore = this.container.resolve(GlobalKeyValueStore);\n\n try {\n const fileId = ObjectKey.from(objectKey).id();\n const result = await keyValueStore.get<{ tenant: string }>(\n `FileManager/File/${fileId}/Metadata`\n );\n\n if (result.isOk()) {\n const tenantResult = await this.getTenantById.execute(result.value.tenant);\n if (tenantResult.isOk()) {\n this.tenantCtx.setTenant(tenantResult.value);\n }\n }\n } catch {\n // If metadata can't be loaded, ignore — likely a rendition file.\n }\n\n await processThreatScanResult(\n { container: this.container } as unknown as ApiCoreContext,\n payload.detail\n );\n return { success: true };\n }\n}\n\nexport const ThreatDetectionEventBridgeLambdaHandler = EventBridgeEventHandler.createImplementation(\n {\n implementation: ThreatDetectionEventBridgeLambdaHandlerImpl,\n dependencies: [RequestContainer, TenantContext, GetTenantByIdUseCase]\n }\n);\n\n/**\n * @deprecated Use ThreatDetectionEventBridgeLambdaHandler instead.\n */\nexport const createThreatDetectionEventHandler = () => {\n return [];\n};\n"],"names":["DETAIL_TYPE","ThreatDetectionEventBridgeLambdaHandlerImpl","container","tenantCtx","getTenantById","eventCtx","_next","payload","FeatureFlags","objectKey","keyValueStore","GlobalKeyValueStore","fileId","ObjectKey","result","tenantResult","processThreatScanResult","ThreatDetectionEventBridgeLambdaHandler","EventBridgeEventHandler","RequestContainer","TenantContext","GetTenantByIdUseCase","createThreatDetectionEventHandler"],"mappings":";;;;;;;;AAmBA,MAAMA,cAAc;AAEpB,MAAMC;IACF,YACYC,SAAoB,EACpBC,SAAyB,EACzBC,aAAoC,CAC9C;aAHUF,SAAS,GAATA;aACAC,SAAS,GAATA;aACAC,aAAa,GAAbA;IACT;IAEH,MAAM,QACFC,QAAgE,EAChEC,KAAmB,EACO;QAC1B,MAAMC,UAAUF,SAAS,KAAK;QAC9B,IAAIE,OAAO,CAAC,cAAc,KAAKP,aAC3B,OAAO;YAAE,SAAS;QAAK;QAG3B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAACQ,cAAc,GAAG,GAAG,SAAS,CAAC,gCACtD,OAAO;YAAE,SAAS;QAAK;QAG3B,MAAMC,YAAYF,QAAQ,MAAM,CAAC,eAAe,CAAC,SAAS;QAC1D,MAAMG,gBAAgB,IAAI,CAAC,SAAS,CAAC,OAAO,CAACC;QAE7C,IAAI;YACA,MAAMC,SAASC,UAAU,IAAI,CAACJ,WAAW,EAAE;YAC3C,MAAMK,SAAS,MAAMJ,cAAc,GAAG,CAClC,CAAC,iBAAiB,EAAEE,OAAO,SAAS,CAAC;YAGzC,IAAIE,OAAO,IAAI,IAAI;gBACf,MAAMC,eAAe,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAACD,OAAO,KAAK,CAAC,MAAM;gBACzE,IAAIC,aAAa,IAAI,IACjB,IAAI,CAAC,SAAS,CAAC,SAAS,CAACA,aAAa,KAAK;YAEnD;QACJ,EAAE,OAAM,CAER;QAEA,MAAMC,wBACF;YAAE,WAAW,IAAI,CAAC,SAAS;QAAC,GAC5BT,QAAQ,MAAM;QAElB,OAAO;YAAE,SAAS;QAAK;IAC3B;AACJ;AAEO,MAAMU,0CAA0CC,wBAAwB,oBAAoB,CAC/F;IACI,gBAAgBjB;IAChB,cAAc;QAACkB;QAAkBC;QAAeC;KAAqB;AACzE;AAMG,MAAMC,oCAAoC,IACtC,EAAE"}
@@ -1,2 +1,2 @@
1
- import type { PluginFactory } from "@webiny/plugins/types";
1
+ import type { PluginFactory } from "@webiny/plugins/types.js";
2
2
  export declare const createThreatDetectionPluginLoader: (cb: PluginFactory) => PluginFactory;
@@ -1,13 +1,5 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createThreatDetectionPluginLoader = void 0;
7
- var _api = require("@webiny/api");
8
- const createThreatDetectionPluginLoader = cb => {
9
- return (0, _api.createConditionalPluginFactory)(() => process.env.WEBINY_FUNCTION_TYPE === "threat-detection-event-handler", cb);
10
- };
11
- exports.createThreatDetectionPluginLoader = createThreatDetectionPluginLoader;
1
+ import { createConditionalPluginFactory } from "@webiny/api";
2
+ const createThreatDetectionPluginLoader = (cb)=>createConditionalPluginFactory(()=>"threat-detection-event-handler" === process.env.WEBINY_FUNCTION_TYPE, cb);
3
+ export { createThreatDetectionPluginLoader };
12
4
 
13
5
  //# sourceMappingURL=createThreatDetectionPluginLoader.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_api","require","createThreatDetectionPluginLoader","cb","createConditionalPluginFactory","process","env","WEBINY_FUNCTION_TYPE","exports"],"sources":["createThreatDetectionPluginLoader.ts"],"sourcesContent":["import type { PluginFactory } from \"@webiny/plugins/types\";\nimport { createConditionalPluginFactory } from \"@webiny/api\";\n\nexport const createThreatDetectionPluginLoader = (cb: PluginFactory) => {\n return createConditionalPluginFactory(\n () => process.env.WEBINY_FUNCTION_TYPE === \"threat-detection-event-handler\",\n cb\n );\n};\n"],"mappings":";;;;;;AACA,IAAAA,IAAA,GAAAC,OAAA;AAEO,MAAMC,iCAAiC,GAAIC,EAAiB,IAAK;EACpE,OAAO,IAAAC,mCAA8B,EACjC,MAAMC,OAAO,CAACC,GAAG,CAACC,oBAAoB,KAAK,gCAAgC,EAC3EJ,EACJ,CAAC;AACL,CAAC;AAACK,OAAA,CAAAN,iCAAA,GAAAA,iCAAA","ignoreList":[]}
1
+ {"version":3,"file":"assetDelivery/threatDetection/createThreatDetectionPluginLoader.js","sources":["../../../src/assetDelivery/threatDetection/createThreatDetectionPluginLoader.ts"],"sourcesContent":["import type { PluginFactory } from \"@webiny/plugins/types.js\";\nimport { createConditionalPluginFactory } from \"@webiny/api\";\n\nexport const createThreatDetectionPluginLoader = (cb: PluginFactory) => {\n return createConditionalPluginFactory(\n () => process.env.WEBINY_FUNCTION_TYPE === \"threat-detection-event-handler\",\n cb\n );\n};\n"],"names":["createThreatDetectionPluginLoader","cb","createConditionalPluginFactory","process"],"mappings":";AAGO,MAAMA,oCAAoC,CAACC,KACvCC,+BACH,IAAMC,AAAqC,qCAArCA,QAAQ,GAAG,CAAC,oBAAoB,EACtCF"}
@@ -1,2 +1,2 @@
1
- export * from "./createThreatDetectionEventHandler";
2
- export * from "./createThreatDetectionPluginLoader";
1
+ export * from "./createThreatDetectionEventHandler.js";
2
+ export * from "./createThreatDetectionPluginLoader.js";
@@ -1,29 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- var _createThreatDetectionEventHandler = require("./createThreatDetectionEventHandler");
7
- Object.keys(_createThreatDetectionEventHandler).forEach(function (key) {
8
- if (key === "default" || key === "__esModule") return;
9
- if (key in exports && exports[key] === _createThreatDetectionEventHandler[key]) return;
10
- Object.defineProperty(exports, key, {
11
- enumerable: true,
12
- get: function () {
13
- return _createThreatDetectionEventHandler[key];
14
- }
15
- });
16
- });
17
- var _createThreatDetectionPluginLoader = require("./createThreatDetectionPluginLoader");
18
- Object.keys(_createThreatDetectionPluginLoader).forEach(function (key) {
19
- if (key === "default" || key === "__esModule") return;
20
- if (key in exports && exports[key] === _createThreatDetectionPluginLoader[key]) return;
21
- Object.defineProperty(exports, key, {
22
- enumerable: true,
23
- get: function () {
24
- return _createThreatDetectionPluginLoader[key];
25
- }
26
- });
27
- });
28
-
29
- //# sourceMappingURL=index.js.map
1
+ export * from "./createThreatDetectionEventHandler.js";
2
+ export * from "./createThreatDetectionPluginLoader.js";
@@ -1,2 +1,3 @@
1
- import type { GuardDutyEvent, ThreatDetectionContext } from "./types";
2
- export declare const processThreatScanResult: (context: ThreatDetectionContext, eventDetail: GuardDutyEvent) => Promise<void>;
1
+ import type { ApiCoreContext } from "@webiny/api-core/types/core.js";
2
+ import type { GuardDutyEvent } from "./types.js";
3
+ export declare const processThreatScanResult: (context: ApiCoreContext, eventDetail: GuardDutyEvent) => Promise<void>;
@@ -1,66 +1,61 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.processThreatScanResult = void 0;
7
- const processThreatScanResult = async (context, eventDetail) => {
8
- await context.security.withoutAuthorization(async () => {
9
- try {
10
- const scanStatus = eventDetail.scanResultDetails.scanResultStatus;
11
- const s3Object = eventDetail.s3ObjectDetails;
12
- const [[file]] = await context.fileManager.listFiles({
13
- limit: 1,
14
- where: {
15
- key: s3Object.objectKey
1
+ import { UpdateFileUseCase } from "@webiny/api-file-manager/features/file/UpdateFile/index.js";
2
+ import { DeleteFileUseCase } from "@webiny/api-file-manager/features/file/DeleteFile/index.js";
3
+ import { WebsocketsListConnectionsUseCase, WebsocketsSendToConnectionsUseCase } from "@webiny/api-websockets/exports/api.js";
4
+ import { ObjectKey } from "./ObjectKey.js";
5
+ import { GetFileUseCase } from "@webiny/api-file-manager/features/file/GetFile/index.js";
6
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
7
+ const processThreatScanResult = async (context, eventDetail)=>{
8
+ const listConnections = context.container.resolve(WebsocketsListConnectionsUseCase);
9
+ const sendToConnections = context.container.resolve(WebsocketsSendToConnectionsUseCase);
10
+ const getFile = context.container.resolve(GetFileUseCase);
11
+ const updateFile = context.container.resolve(UpdateFileUseCase);
12
+ const deleteFile = context.container.resolve(DeleteFileUseCase);
13
+ await context.container.resolve(IdentityContext).withoutAuthorization(async ()=>{
14
+ const scanStatus = eventDetail.scanResultDetails.scanResultStatus;
15
+ const s3Object = eventDetail.s3ObjectDetails;
16
+ const fileId = ObjectKey.from(s3Object.objectKey).id();
17
+ const fileResult = await getFile.execute(fileId);
18
+ if (fileResult.isFail()) return;
19
+ const file = fileResult.value;
20
+ let allConnections = [];
21
+ const connectionsResult = await listConnections.execute();
22
+ if (connectionsResult.isOk()) allConnections = connectionsResult.value;
23
+ if ("NO_THREATS_FOUND" === scanStatus) {
24
+ const newTags = file.tags.filter((tag)=>"threatScanInProgress" !== tag);
25
+ await updateFile.execute({
26
+ id: file.id,
27
+ tags: newTags
28
+ });
29
+ await sendToConnections.execute(allConnections, {
30
+ action: "fm.threatScan.noThreatFound",
31
+ data: {
32
+ id: file.id,
33
+ tags: newTags
34
+ }
35
+ });
36
+ return;
16
37
  }
17
- });
18
- if (!file) {
19
- return;
20
- }
21
- const allConnections = await context.websockets.listConnections();
22
- if (scanStatus === "NO_THREATS_FOUND") {
23
- const newTags = file.tags.filter(tag => tag !== "threatScanInProgress");
24
- await context.fileManager.updateFile(file.id, {
25
- tags: newTags,
26
- savedBy: file.savedBy
27
- });
28
- await context.websockets.sendToConnections(allConnections, {
29
- action: "fm.threatScan.noThreatFound",
30
- data: {
31
- id: file.id,
32
- tags: newTags
33
- }
34
- });
35
- return;
36
- }
37
- if (scanStatus === "THREATS_FOUND") {
38
- // Delete infected file.
39
- await context.fileManager.deleteFile(file.id);
40
- await context.websockets.sendToConnections(allConnections, {
41
- action: "fm.threatScan.threatDetected",
42
- data: {
43
- id: file.id,
44
- name: file.name
45
- }
46
- });
47
- return;
48
- }
49
-
50
- // For all other outcomes, we delete the file, until better logic is implemented.
51
- await context.fileManager.deleteFile(file.id);
52
- await context.websockets.sendToConnections(allConnections, {
53
- action: "fm.threatScan.unsupported",
54
- data: {
55
- id: file.id,
56
- name: file.name
38
+ if ("THREATS_FOUND" === scanStatus) {
39
+ await deleteFile.execute(file.id);
40
+ await sendToConnections.execute(allConnections, {
41
+ action: "fm.threatScan.threatDetected",
42
+ data: {
43
+ id: file.id,
44
+ name: file.name
45
+ }
46
+ });
47
+ return;
57
48
  }
58
- });
59
- } catch (e) {
60
- console.log(e.message);
61
- }
62
- });
49
+ await deleteFile.execute(file.id);
50
+ await sendToConnections.execute(allConnections, {
51
+ action: "fm.threatScan.unsupported",
52
+ data: {
53
+ id: file.id,
54
+ name: file.name
55
+ }
56
+ });
57
+ });
63
58
  };
64
- exports.processThreatScanResult = processThreatScanResult;
59
+ export { processThreatScanResult };
65
60
 
66
61
  //# sourceMappingURL=processThreatScanResult.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["processThreatScanResult","context","eventDetail","security","withoutAuthorization","scanStatus","scanResultDetails","scanResultStatus","s3Object","s3ObjectDetails","file","fileManager","listFiles","limit","where","key","objectKey","allConnections","websockets","listConnections","newTags","tags","filter","tag","updateFile","id","savedBy","sendToConnections","action","data","deleteFile","name","e","console","log","message","exports"],"sources":["processThreatScanResult.ts"],"sourcesContent":["import type { GuardDutyEvent, ThreatDetectionContext } from \"./types\";\n\nexport const processThreatScanResult = async (\n context: ThreatDetectionContext,\n eventDetail: GuardDutyEvent\n) => {\n await context.security.withoutAuthorization(async () => {\n try {\n const scanStatus = eventDetail.scanResultDetails.scanResultStatus;\n const s3Object = eventDetail.s3ObjectDetails;\n\n const [[file]] = await context.fileManager.listFiles({\n limit: 1,\n where: {\n key: s3Object.objectKey\n }\n });\n\n if (!file) {\n return;\n }\n\n const allConnections = await context.websockets.listConnections();\n\n if (scanStatus === \"NO_THREATS_FOUND\") {\n const newTags = file.tags.filter(tag => tag !== \"threatScanInProgress\");\n await context.fileManager.updateFile(file.id, {\n tags: newTags,\n savedBy: file.savedBy\n });\n\n await context.websockets.sendToConnections(allConnections, {\n action: \"fm.threatScan.noThreatFound\",\n data: {\n id: file.id,\n tags: newTags\n }\n });\n\n return;\n }\n\n if (scanStatus === \"THREATS_FOUND\") {\n // Delete infected file.\n await context.fileManager.deleteFile(file.id);\n\n await context.websockets.sendToConnections(allConnections, {\n action: \"fm.threatScan.threatDetected\",\n data: {\n id: file.id,\n name: file.name\n }\n });\n\n return;\n }\n\n // For all other outcomes, we delete the file, until better logic is implemented.\n await context.fileManager.deleteFile(file.id);\n\n await context.websockets.sendToConnections(allConnections, {\n action: \"fm.threatScan.unsupported\",\n data: {\n id: file.id,\n name: file.name\n }\n });\n } catch (e) {\n console.log(e.message);\n }\n });\n};\n"],"mappings":";;;;;;AAEO,MAAMA,uBAAuB,GAAG,MAAAA,CACnCC,OAA+B,EAC/BC,WAA2B,KAC1B;EACD,MAAMD,OAAO,CAACE,QAAQ,CAACC,oBAAoB,CAAC,YAAY;IACpD,IAAI;MACA,MAAMC,UAAU,GAAGH,WAAW,CAACI,iBAAiB,CAACC,gBAAgB;MACjE,MAAMC,QAAQ,GAAGN,WAAW,CAACO,eAAe;MAE5C,MAAM,CAAC,CAACC,IAAI,CAAC,CAAC,GAAG,MAAMT,OAAO,CAACU,WAAW,CAACC,SAAS,CAAC;QACjDC,KAAK,EAAE,CAAC;QACRC,KAAK,EAAE;UACHC,GAAG,EAAEP,QAAQ,CAACQ;QAClB;MACJ,CAAC,CAAC;MAEF,IAAI,CAACN,IAAI,EAAE;QACP;MACJ;MAEA,MAAMO,cAAc,GAAG,MAAMhB,OAAO,CAACiB,UAAU,CAACC,eAAe,CAAC,CAAC;MAEjE,IAAId,UAAU,KAAK,kBAAkB,EAAE;QACnC,MAAMe,OAAO,GAAGV,IAAI,CAACW,IAAI,CAACC,MAAM,CAACC,GAAG,IAAIA,GAAG,KAAK,sBAAsB,CAAC;QACvE,MAAMtB,OAAO,CAACU,WAAW,CAACa,UAAU,CAACd,IAAI,CAACe,EAAE,EAAE;UAC1CJ,IAAI,EAAED,OAAO;UACbM,OAAO,EAAEhB,IAAI,CAACgB;QAClB,CAAC,CAAC;QAEF,MAAMzB,OAAO,CAACiB,UAAU,CAACS,iBAAiB,CAACV,cAAc,EAAE;UACvDW,MAAM,EAAE,6BAA6B;UACrCC,IAAI,EAAE;YACFJ,EAAE,EAAEf,IAAI,CAACe,EAAE;YACXJ,IAAI,EAAED;UACV;QACJ,CAAC,CAAC;QAEF;MACJ;MAEA,IAAIf,UAAU,KAAK,eAAe,EAAE;QAChC;QACA,MAAMJ,OAAO,CAACU,WAAW,CAACmB,UAAU,CAACpB,IAAI,CAACe,EAAE,CAAC;QAE7C,MAAMxB,OAAO,CAACiB,UAAU,CAACS,iBAAiB,CAACV,cAAc,EAAE;UACvDW,MAAM,EAAE,8BAA8B;UACtCC,IAAI,EAAE;YACFJ,EAAE,EAAEf,IAAI,CAACe,EAAE;YACXM,IAAI,EAAErB,IAAI,CAACqB;UACf;QACJ,CAAC,CAAC;QAEF;MACJ;;MAEA;MACA,MAAM9B,OAAO,CAACU,WAAW,CAACmB,UAAU,CAACpB,IAAI,CAACe,EAAE,CAAC;MAE7C,MAAMxB,OAAO,CAACiB,UAAU,CAACS,iBAAiB,CAACV,cAAc,EAAE;QACvDW,MAAM,EAAE,2BAA2B;QACnCC,IAAI,EAAE;UACFJ,EAAE,EAAEf,IAAI,CAACe,EAAE;UACXM,IAAI,EAAErB,IAAI,CAACqB;QACf;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOC,CAAC,EAAE;MACRC,OAAO,CAACC,GAAG,CAACF,CAAC,CAACG,OAAO,CAAC;IAC1B;EACJ,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAApC,uBAAA,GAAAA,uBAAA","ignoreList":[]}
1
+ {"version":3,"file":"assetDelivery/threatDetection/processThreatScanResult.js","sources":["../../../src/assetDelivery/threatDetection/processThreatScanResult.ts"],"sourcesContent":["import type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { UpdateFileUseCase } from \"@webiny/api-file-manager/features/file/UpdateFile/index.js\";\nimport { DeleteFileUseCase } from \"@webiny/api-file-manager/features/file/DeleteFile/index.js\";\nimport {\n WebsocketsListConnectionsUseCase,\n WebsocketsSendToConnectionsUseCase,\n ConnectionRegistry\n} from \"@webiny/api-websockets/exports/api.js\";\nimport type { GuardDutyEvent } from \"./types.js\";\nimport { ObjectKey } from \"./ObjectKey.js\";\nimport { GetFileUseCase } from \"@webiny/api-file-manager/features/file/GetFile/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/abstractions.js\";\n\nexport const processThreatScanResult = async (\n context: ApiCoreContext,\n eventDetail: GuardDutyEvent\n) => {\n const listConnections = context.container.resolve(WebsocketsListConnectionsUseCase);\n const sendToConnections = context.container.resolve(WebsocketsSendToConnectionsUseCase);\n const getFile = context.container.resolve(GetFileUseCase);\n const updateFile = context.container.resolve(UpdateFileUseCase);\n const deleteFile = context.container.resolve(DeleteFileUseCase);\n\n await context.container.resolve(IdentityContext).withoutAuthorization(async () => {\n const scanStatus = eventDetail.scanResultDetails.scanResultStatus;\n const s3Object = eventDetail.s3ObjectDetails;\n\n const fileId = ObjectKey.from(s3Object.objectKey).id();\n const fileResult = await getFile.execute(fileId);\n\n if (fileResult.isFail()) {\n return;\n }\n\n const file = fileResult.value;\n\n let allConnections: ConnectionRegistry.Data[] = [];\n const connectionsResult = await listConnections.execute();\n if (connectionsResult.isOk()) {\n allConnections = connectionsResult.value;\n }\n\n if (scanStatus === \"NO_THREATS_FOUND\") {\n const newTags = file.tags.filter(tag => tag !== \"threatScanInProgress\");\n await updateFile.execute({\n id: file.id,\n tags: newTags\n });\n\n await sendToConnections.execute(allConnections, {\n action: \"fm.threatScan.noThreatFound\",\n data: {\n id: file.id,\n tags: newTags\n }\n });\n\n return;\n }\n\n if (scanStatus === \"THREATS_FOUND\") {\n // Delete the infected file.\n await deleteFile.execute(file.id);\n\n await sendToConnections.execute(allConnections, {\n action: \"fm.threatScan.threatDetected\",\n data: {\n id: file.id,\n name: file.name\n }\n });\n\n return;\n }\n\n // For all other outcomes, we delete the file, until better logic is implemented.\n await deleteFile.execute(file.id);\n\n await sendToConnections.execute(allConnections, {\n action: \"fm.threatScan.unsupported\",\n data: {\n id: file.id,\n name: file.name\n }\n });\n });\n};\n"],"names":["processThreatScanResult","context","eventDetail","listConnections","WebsocketsListConnectionsUseCase","sendToConnections","WebsocketsSendToConnectionsUseCase","getFile","GetFileUseCase","updateFile","UpdateFileUseCase","deleteFile","DeleteFileUseCase","IdentityContext","scanStatus","s3Object","fileId","ObjectKey","fileResult","file","allConnections","connectionsResult","newTags","tag"],"mappings":";;;;;;AAaO,MAAMA,0BAA0B,OACnCC,SACAC;IAEA,MAAMC,kBAAkBF,QAAQ,SAAS,CAAC,OAAO,CAACG;IAClD,MAAMC,oBAAoBJ,QAAQ,SAAS,CAAC,OAAO,CAACK;IACpD,MAAMC,UAAUN,QAAQ,SAAS,CAAC,OAAO,CAACO;IAC1C,MAAMC,aAAaR,QAAQ,SAAS,CAAC,OAAO,CAACS;IAC7C,MAAMC,aAAaV,QAAQ,SAAS,CAAC,OAAO,CAACW;IAE7C,MAAMX,QAAQ,SAAS,CAAC,OAAO,CAACY,iBAAiB,oBAAoB,CAAC;QAClE,MAAMC,aAAaZ,YAAY,iBAAiB,CAAC,gBAAgB;QACjE,MAAMa,WAAWb,YAAY,eAAe;QAE5C,MAAMc,SAASC,UAAU,IAAI,CAACF,SAAS,SAAS,EAAE,EAAE;QACpD,MAAMG,aAAa,MAAMX,QAAQ,OAAO,CAACS;QAEzC,IAAIE,WAAW,MAAM,IACjB;QAGJ,MAAMC,OAAOD,WAAW,KAAK;QAE7B,IAAIE,iBAA4C,EAAE;QAClD,MAAMC,oBAAoB,MAAMlB,gBAAgB,OAAO;QACvD,IAAIkB,kBAAkB,IAAI,IACtBD,iBAAiBC,kBAAkB,KAAK;QAG5C,IAAIP,AAAe,uBAAfA,YAAmC;YACnC,MAAMQ,UAAUH,KAAK,IAAI,CAAC,MAAM,CAACI,CAAAA,MAAOA,AAAQ,2BAARA;YACxC,MAAMd,WAAW,OAAO,CAAC;gBACrB,IAAIU,KAAK,EAAE;gBACX,MAAMG;YACV;YAEA,MAAMjB,kBAAkB,OAAO,CAACe,gBAAgB;gBAC5C,QAAQ;gBACR,MAAM;oBACF,IAAID,KAAK,EAAE;oBACX,MAAMG;gBACV;YACJ;YAEA;QACJ;QAEA,IAAIR,AAAe,oBAAfA,YAAgC;YAEhC,MAAMH,WAAW,OAAO,CAACQ,KAAK,EAAE;YAEhC,MAAMd,kBAAkB,OAAO,CAACe,gBAAgB;gBAC5C,QAAQ;gBACR,MAAM;oBACF,IAAID,KAAK,EAAE;oBACX,MAAMA,KAAK,IAAI;gBACnB;YACJ;YAEA;QACJ;QAGA,MAAMR,WAAW,OAAO,CAACQ,KAAK,EAAE;QAEhC,MAAMd,kBAAkB,OAAO,CAACe,gBAAgB;YAC5C,QAAQ;YACR,MAAM;gBACF,IAAID,KAAK,EAAE;gBACX,MAAMA,KAAK,IAAI;YACnB;QACJ;IACJ;AACJ"}
@@ -1,7 +1,3 @@
1
- import type { Context as IWebsocketsContext } from "@webiny/api-websockets";
2
- import type { WcpContext } from "@webiny/api-wcp/types";
3
- import type { FileManagerContext } from "@webiny/api-file-manager/types";
4
- export type ThreatDetectionContext = FileManagerContext & IWebsocketsContext & WcpContext;
5
1
  export type GuardDutyEvent = {
6
2
  scanResultDetails: {
7
3
  scanResultStatus: "UNSUPPORTED" | "FAILED" | "ACCESS_DENIED" | "THREATS_FOUND" | "NO_THREATS_FOUND";
@@ -1,7 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
-
7
- //# sourceMappingURL=types.js.map
@@ -1,6 +1,8 @@
1
- import type { createAssetDelivery as createBaseAssetDelivery } from "@webiny/api-file-manager";
2
- export type AssetDeliveryParams = Parameters<typeof createBaseAssetDelivery>[0] & {
1
+ import type { ImageFormat } from "@webiny/api-file-manager/features/assetDelivery/transformation/index.js";
2
+ export type AssetDeliveryParams = {
3
3
  imageResizeWidths?: number[];
4
+ /** Per-format encoder quality (1-100). Merged over the built-in defaults. */
5
+ imageQuality?: Partial<Record<ImageFormat, number>>;
4
6
  /**
5
7
  * BE CAREFUL!
6
8
  * Setting this to more than 1 hour may cause your URLs to still expire before the desired expiration time.
@@ -1,7 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
-
7
- //# sourceMappingURL=types.js.map
@@ -0,0 +1,13 @@
1
+ import { CreateFileUseCase } from "@webiny/api-file-manager/features/file/CreateFile/abstractions.js";
2
+ import type { CreateFileInput } from "@webiny/api-file-manager/features/file/CreateFile/abstractions.js";
3
+ import { FeatureFlags } from "@webiny/api-core/features/featureFlags/abstractions.js";
4
+ declare class CreateFileWithThreatScanDecoratorImpl implements CreateFileUseCase.Interface {
5
+ private featureFlags;
6
+ private decoratee;
7
+ constructor(featureFlags: FeatureFlags.Interface, decoratee: CreateFileUseCase.Interface);
8
+ execute(input: CreateFileInput, meta?: Record<string, any>): ReturnType<CreateFileUseCase.Interface["execute"]>;
9
+ }
10
+ export declare const CreateFileWithThreatScanDecorator: typeof CreateFileWithThreatScanDecoratorImpl & {
11
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-file-manager/features/file/CreateFile/abstractions.js").ICreateFileUseCase>;
12
+ };
13
+ export {};