@webiny/api-file-manager-s3 6.0.0-beta.0 → 6.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +11 -1
  2. package/assetDelivery/assetDeliveryConfig.d.ts +2 -6
  3. package/assetDelivery/assetDeliveryConfig.js +24 -23
  4. package/assetDelivery/assetDeliveryConfig.js.map +1 -1
  5. package/assetDelivery/createAssetDelivery.d.ts +3 -3
  6. package/assetDelivery/createAssetDelivery.js +15 -12
  7. package/assetDelivery/createAssetDelivery.js.map +1 -1
  8. package/assetDelivery/index.d.ts +8 -9
  9. package/assetDelivery/index.js +8 -68
  10. package/assetDelivery/index.js.map +1 -1
  11. package/assetDelivery/s3/S3AssetResolver.d.ts +8 -5
  12. package/assetDelivery/s3/S3AssetResolver.js +19 -27
  13. package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
  14. package/assetDelivery/s3/S3ContentsReader.d.ts +2 -3
  15. package/assetDelivery/s3/S3ContentsReader.js +1 -8
  16. package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
  17. package/assetDelivery/s3/S3ErrorAssetReply.js +2 -9
  18. package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
  19. package/assetDelivery/s3/S3OutputStrategy.d.ts +4 -3
  20. package/assetDelivery/s3/S3OutputStrategy.js +12 -17
  21. package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
  22. package/assetDelivery/s3/S3RedirectAssetReply.js +4 -11
  23. package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
  24. package/assetDelivery/s3/S3StreamAssetReply.d.ts +2 -1
  25. package/assetDelivery/s3/S3StreamAssetReply.js +4 -11
  26. package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -1
  27. package/assetDelivery/s3/SharpTransform.d.ts +2 -2
  28. package/assetDelivery/s3/SharpTransform.js +63 -37
  29. package/assetDelivery/s3/SharpTransform.js.map +1 -1
  30. package/assetDelivery/s3/transformation/AssetKeyGenerator.d.ts +1 -1
  31. package/assetDelivery/s3/transformation/AssetKeyGenerator.js +3 -12
  32. package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -1
  33. package/assetDelivery/s3/transformation/CallableContentsReader.d.ts +1 -2
  34. package/assetDelivery/s3/transformation/CallableContentsReader.js +1 -8
  35. package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -1
  36. package/assetDelivery/s3/transformation/WidthCollection.js +1 -8
  37. package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -1
  38. package/assetDelivery/s3/transformation/utils.d.ts +1 -3
  39. package/assetDelivery/s3/transformation/utils.js +23 -19
  40. package/assetDelivery/s3/transformation/utils.js.map +1 -1
  41. package/assetDelivery/threatDetection/ObjectKey.d.ts +7 -0
  42. package/assetDelivery/threatDetection/ObjectKey.js +17 -0
  43. package/assetDelivery/threatDetection/ObjectKey.js.map +1 -0
  44. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.d.ts +2 -0
  45. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +51 -0
  46. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -0
  47. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.d.ts +2 -0
  48. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +6 -0
  49. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -0
  50. package/assetDelivery/threatDetection/index.d.ts +2 -0
  51. package/assetDelivery/threatDetection/index.js +4 -0
  52. package/assetDelivery/threatDetection/index.js.map +1 -0
  53. package/assetDelivery/threatDetection/processThreatScanResult.d.ts +3 -0
  54. package/assetDelivery/threatDetection/processThreatScanResult.js +65 -0
  55. package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -0
  56. package/assetDelivery/threatDetection/types.d.ts +9 -0
  57. package/assetDelivery/threatDetection/types.js +3 -0
  58. package/assetDelivery/threatDetection/types.js.map +1 -0
  59. package/assetDelivery/types.d.ts +10 -0
  60. package/assetDelivery/types.js +3 -0
  61. package/assetDelivery/types.js.map +1 -0
  62. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.d.ts +11 -0
  63. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js +19 -0
  64. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js.map +1 -0
  65. package/enterprise/ApplyThreatScanning/feature.d.ts +1 -0
  66. package/enterprise/ApplyThreatScanning/feature.js +10 -0
  67. package/enterprise/ApplyThreatScanning/feature.js.map +1 -0
  68. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.d.ts +15 -0
  69. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js +36 -0
  70. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js.map +1 -0
  71. package/features/DeleteFileFromBucket/DeleteS3FolderTask.d.ts +31 -0
  72. package/features/DeleteFileFromBucket/DeleteS3FolderTask.js +60 -0
  73. package/features/DeleteFileFromBucket/DeleteS3FolderTask.js.map +1 -0
  74. package/features/DeleteFileFromBucket/feature.d.ts +1 -0
  75. package/features/DeleteFileFromBucket/feature.js +12 -0
  76. package/features/DeleteFileFromBucket/feature.js.map +1 -0
  77. package/features/ExtractMetadata/ExtractMetadataHandler.d.ts +11 -0
  78. package/features/ExtractMetadata/ExtractMetadataHandler.js +26 -0
  79. package/features/ExtractMetadata/ExtractMetadataHandler.js.map +1 -0
  80. package/features/ExtractMetadata/ExtractMetadataTask.d.ts +23 -0
  81. package/features/ExtractMetadata/ExtractMetadataTask.js +128 -0
  82. package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -0
  83. package/features/ExtractMetadata/feature.d.ts +1 -0
  84. package/features/ExtractMetadata/feature.js +12 -0
  85. package/features/ExtractMetadata/feature.js.map +1 -0
  86. package/features/FlushCache/FlushCacheOnFileDeleteHandler.d.ts +12 -0
  87. package/features/FlushCache/FlushCacheOnFileDeleteHandler.js +27 -0
  88. package/features/FlushCache/FlushCacheOnFileDeleteHandler.js.map +1 -0
  89. package/features/FlushCache/FlushCacheOnFileUpdateHandler.d.ts +12 -0
  90. package/features/FlushCache/FlushCacheOnFileUpdateHandler.js +35 -0
  91. package/features/FlushCache/FlushCacheOnFileUpdateHandler.js.map +1 -0
  92. package/features/FlushCache/InvalidateCacheTask.d.ts +25 -0
  93. package/features/FlushCache/InvalidateCacheTask.js +86 -0
  94. package/features/FlushCache/InvalidateCacheTask.js.map +1 -0
  95. package/features/FlushCache/feature.d.ts +1 -0
  96. package/features/FlushCache/feature.js +14 -0
  97. package/features/FlushCache/feature.js.map +1 -0
  98. package/features/WriteFileMetadata/MetadataReader.d.ts +14 -0
  99. package/features/WriteFileMetadata/MetadataReader.js +14 -0
  100. package/features/WriteFileMetadata/MetadataReader.js.map +1 -0
  101. package/features/WriteFileMetadata/MetadataWriter.d.ts +10 -0
  102. package/features/WriteFileMetadata/MetadataWriter.js +28 -0
  103. package/features/WriteFileMetadata/MetadataWriter.js.map +1 -0
  104. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +12 -0
  105. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +21 -0
  106. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -0
  107. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +12 -0
  108. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +21 -0
  109. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -0
  110. package/features/WriteFileMetadata/feature.d.ts +1 -0
  111. package/features/WriteFileMetadata/feature.js +12 -0
  112. package/features/WriteFileMetadata/feature.js.map +1 -0
  113. package/graphql/checkPermissions.d.ts +5 -0
  114. package/{plugins → graphql}/checkPermissions.js +4 -11
  115. package/graphql/checkPermissions.js.map +1 -0
  116. package/graphql/schema.d.ts +1 -0
  117. package/{plugins/graphqlFileStorageS3.js → graphql/schema.js} +49 -57
  118. package/graphql/schema.js.map +1 -0
  119. package/index.d.ts +4 -5
  120. package/index.js +21 -32
  121. package/index.js.map +1 -1
  122. package/multiPartUpload/CompleteMultiPartUploadUseCase.d.ts +1 -1
  123. package/multiPartUpload/CompleteMultiPartUploadUseCase.js +4 -11
  124. package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -1
  125. package/multiPartUpload/CreateMultiPartUploadUseCase.d.ts +2 -2
  126. package/multiPartUpload/CreateMultiPartUploadUseCase.js +3 -10
  127. package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -1
  128. package/package.json +23 -29
  129. package/types.d.ts +1 -1
  130. package/types.js +1 -5
  131. package/types.js.map +1 -1
  132. package/utils/CdnPathsGenerator.d.ts +3 -0
  133. package/utils/CdnPathsGenerator.js +7 -0
  134. package/utils/CdnPathsGenerator.js.map +1 -0
  135. package/utils/FileExtension.d.ts +1 -1
  136. package/utils/FileExtension.js +3 -10
  137. package/utils/FileExtension.js.map +1 -1
  138. package/utils/FileKey.d.ts +1 -1
  139. package/utils/FileKey.js +5 -13
  140. package/utils/FileKey.js.map +1 -1
  141. package/utils/FileKey.test.js +8 -9
  142. package/utils/FileKey.test.js.map +1 -1
  143. package/utils/FileNormalizer.d.ts +2 -2
  144. package/utils/FileNormalizer.js +5 -12
  145. package/utils/FileNormalizer.js.map +1 -1
  146. package/utils/FileUploadModifier.d.ts +1 -1
  147. package/utils/FileUploadModifier.js +6 -16
  148. package/utils/FileUploadModifier.js.map +1 -1
  149. package/utils/createFileNormalizerFromContext.d.ts +2 -2
  150. package/utils/createFileNormalizerFromContext.js +5 -12
  151. package/utils/createFileNormalizerFromContext.js.map +1 -1
  152. package/utils/getPresignedPostPayload.d.ts +4 -3
  153. package/utils/getPresignedPostPayload.js +10 -15
  154. package/utils/getPresignedPostPayload.js.map +1 -1
  155. package/utils/mimeTypes.js +5 -13
  156. package/utils/mimeTypes.js.map +1 -1
  157. package/utils/uploadFileToS3.d.ts +1 -3
  158. package/utils/uploadFileToS3.js +7 -20
  159. package/utils/uploadFileToS3.js.map +1 -1
  160. package/assetDelivery/createCustomAssetDelivery.d.ts +0 -12
  161. package/assetDelivery/createCustomAssetDelivery.js +0 -28
  162. package/assetDelivery/createCustomAssetDelivery.js.map +0 -1
  163. package/assetDelivery/customAssets/CustomAsset.d.ts +0 -6
  164. package/assetDelivery/customAssets/CustomAsset.js +0 -14
  165. package/assetDelivery/customAssets/CustomAsset.js.map +0 -1
  166. package/assetDelivery/customAssets/CustomAssetProcessor.d.ts +0 -10
  167. package/assetDelivery/customAssets/CustomAssetProcessor.js +0 -25
  168. package/assetDelivery/customAssets/CustomAssetProcessor.js.map +0 -1
  169. package/assetDelivery/customAssets/S3CustomAssetResolver.d.ts +0 -15
  170. package/assetDelivery/customAssets/S3CustomAssetResolver.js +0 -90
  171. package/assetDelivery/customAssets/S3CustomAssetResolver.js.map +0 -1
  172. package/assetDelivery/customAssets/customAssetDeliveryConfig.d.ts +0 -1
  173. package/assetDelivery/customAssets/customAssetDeliveryConfig.js +0 -30
  174. package/assetDelivery/customAssets/customAssetDeliveryConfig.js.map +0 -1
  175. package/assetDelivery/s3/S3AssetMetadataReader.d.ts +0 -15
  176. package/assetDelivery/s3/S3AssetMetadataReader.js +0 -36
  177. package/assetDelivery/s3/S3AssetMetadataReader.js.map +0 -1
  178. package/assetDelivery/s3/transformation/legacyUtils.d.ts +0 -12
  179. package/assetDelivery/s3/transformation/legacyUtils.js +0 -34
  180. package/assetDelivery/s3/transformation/legacyUtils.js.map +0 -1
  181. package/flushCdnCache/CdnPathsGenerator.d.ts +0 -4
  182. package/flushCdnCache/CdnPathsGenerator.js +0 -14
  183. package/flushCdnCache/CdnPathsGenerator.js.map +0 -1
  184. package/flushCdnCache/InvalidateCacheTask.d.ts +0 -18
  185. package/flushCdnCache/InvalidateCacheTask.js +0 -78
  186. package/flushCdnCache/InvalidateCacheTask.js.map +0 -1
  187. package/flushCdnCache/flushCacheOnFileDelete.d.ts +0 -3
  188. package/flushCdnCache/flushCacheOnFileDelete.js +0 -34
  189. package/flushCdnCache/flushCacheOnFileDelete.js.map +0 -1
  190. package/flushCdnCache/flushCacheOnFileUpdate.d.ts +0 -3
  191. package/flushCdnCache/flushCacheOnFileUpdate.js +0 -40
  192. package/flushCdnCache/flushCacheOnFileUpdate.js.map +0 -1
  193. package/flushCdnCache/index.d.ts +0 -1
  194. package/flushCdnCache/index.js +0 -15
  195. package/flushCdnCache/index.js.map +0 -1
  196. package/flushCdnCache/invalidateCacheTaskDefinition.d.ts +0 -2
  197. package/flushCdnCache/invalidateCacheTaskDefinition.js +0 -22
  198. package/flushCdnCache/invalidateCacheTaskDefinition.js.map +0 -1
  199. package/plugins/addFileMetadata.d.ts +0 -10
  200. package/plugins/addFileMetadata.js +0 -67
  201. package/plugins/addFileMetadata.js.map +0 -1
  202. package/plugins/checkPermissions.d.ts +0 -4
  203. package/plugins/checkPermissions.js.map +0 -1
  204. package/plugins/fileStorageS3.d.ts +0 -3
  205. package/plugins/fileStorageS3.js +0 -60
  206. package/plugins/fileStorageS3.js.map +0 -1
  207. package/plugins/graphqlFileStorageS3.d.ts +0 -4
  208. package/plugins/graphqlFileStorageS3.js.map +0 -1
package/README.md CHANGED
@@ -1 +1,11 @@
1
- # @webiny/api-file-manager-s3
1
+ # @webiny/api-file-manager-s3
2
+
3
+ > [!NOTE]
4
+ > This package is part of the [Webiny](https://www.webiny.com) monorepo.
5
+ > It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
6
+
7
+ 📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
8
+
9
+ ---
10
+
11
+ _This README file is automatically generated during the publish process._
@@ -1,6 +1,2 @@
1
- import { createAssetDelivery as createBaseAssetDelivery } from "@webiny/api-file-manager";
2
- export declare type AssetDeliveryParams = Parameters<typeof createBaseAssetDelivery>[0] & {
3
- imageResizeWidths?: number[];
4
- presignedUrlTtl?: number;
5
- };
6
- export declare const assetDeliveryConfig: (params: AssetDeliveryParams) => (import("@webiny/api-file-manager").AssetDeliveryConfigModifierPlugin | (import("@webiny/api-file-manager").AssetDeliveryConfigModifierPlugin | import("@webiny/handler").ModifyFastifyPlugin)[])[];
1
+ import type { AssetDeliveryParams } from "../assetDelivery/types.js";
2
+ export declare const assetDeliveryConfig: (params: AssetDeliveryParams) => (import("@webiny/api-file-manager").AssetDeliveryConfigModifierPlugin | (import("@webiny/api-file-manager").AssetDeliveryConfigModifierPlugin | import("@webiny/handler/index").ModifyFastifyPlugin)[])[];
@@ -1,39 +1,41 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.assetDeliveryConfig = void 0;
7
- var _apiFileManager = require("@webiny/api-file-manager");
8
- var _clientS = require("@webiny/aws-sdk/client-s3");
9
- var _S3AssetResolver = require("./s3/S3AssetResolver");
10
- var _S3OutputStrategy = require("./s3/S3OutputStrategy");
11
- var _SharpTransform = require("./s3/SharpTransform");
12
- const assetDeliveryConfig = params => {
1
+ import { createAssetDelivery as createBaseAssetDelivery, createAssetDeliveryConfig } from "@webiny/api-file-manager";
2
+ import { S3 } from "@webiny/aws-sdk/client-s3/index.js";
3
+ import { S3AssetResolver } from "./s3/S3AssetResolver.js";
4
+ import { S3OutputStrategy } from "./s3/S3OutputStrategy.js";
5
+ import { SharpTransform } from "./s3/SharpTransform.js";
6
+ import { GlobalKeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
7
+ export const assetDeliveryConfig = params => {
13
8
  const bucket = process.env.S3_BUCKET;
14
9
  const region = process.env.AWS_REGION;
15
10
  const {
16
- presignedUrlTtl = 900,
17
- imageResizeWidths = [100, 300, 500, 750, 1000, 1500, 2500],
18
- ...baseParams
11
+ // Presigned URLs last 1 hour
12
+ presignedUrlTtl = 3600,
13
+ imageResizeWidths = [128, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840],
14
+ /**
15
+ * Even though Lambda's response payload limit is 6,291,556 bytes, we leave some room for the response envelope.
16
+ * We had situations where a 4.7MB file would cause the payload to go over the limit, so let's be on the safe side.
17
+ */
18
+ assetStreamingMaxSize = 4718592
19
19
  } = params;
20
20
  return [
21
21
  // Base asset delivery
22
- (0, _apiFileManager.createAssetDelivery)(baseParams),
22
+ createBaseAssetDelivery(),
23
23
  // S3 plugins
24
- (0, _apiFileManager.createAssetDeliveryConfig)(config => {
25
- const s3 = new _clientS.S3({
24
+ createAssetDeliveryConfig(config => {
25
+ const s3 = new S3({
26
26
  region
27
27
  });
28
- config.decorateAssetResolver(() => {
28
+ config.decorateAssetResolver(({
29
+ container
30
+ }) => {
29
31
  // This resolver loads file information from the `.metadata` file.
30
- return new _S3AssetResolver.S3AssetResolver(s3, bucket);
32
+ return new S3AssetResolver(container.resolve(GlobalKeyValueStore), s3, bucket);
31
33
  });
32
34
  config.decorateAssetOutputStrategy(() => {
33
- return new _S3OutputStrategy.S3OutputStrategy(s3, bucket, presignedUrlTtl);
35
+ return new S3OutputStrategy(s3, bucket, presignedUrlTtl, assetStreamingMaxSize);
34
36
  });
35
37
  config.decorateAssetTransformationStrategy(() => {
36
- return new _SharpTransform.SharpTransform({
38
+ return new SharpTransform({
37
39
  s3,
38
40
  bucket,
39
41
  imageResizeWidths
@@ -41,6 +43,5 @@ const assetDeliveryConfig = params => {
41
43
  });
42
44
  })];
43
45
  };
44
- exports.assetDeliveryConfig = assetDeliveryConfig;
45
46
 
46
47
  //# sourceMappingURL=assetDeliveryConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_apiFileManager","require","_clientS","_S3AssetResolver","_S3OutputStrategy","_SharpTransform","assetDeliveryConfig","params","bucket","process","env","S3_BUCKET","region","AWS_REGION","presignedUrlTtl","imageResizeWidths","baseParams","createBaseAssetDelivery","createAssetDeliveryConfig","config","s3","S3","decorateAssetResolver","S3AssetResolver","decorateAssetOutputStrategy","S3OutputStrategy","decorateAssetTransformationStrategy","SharpTransform","exports"],"sources":["assetDeliveryConfig.ts"],"sourcesContent":["import {\n createAssetDelivery as createBaseAssetDelivery,\n createAssetDeliveryConfig\n} from \"@webiny/api-file-manager\";\nimport { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { S3AssetResolver } from \"~/assetDelivery/s3/S3AssetResolver\";\nimport { S3OutputStrategy } from \"~/assetDelivery/s3/S3OutputStrategy\";\nimport { SharpTransform } from \"~/assetDelivery/s3/SharpTransform\";\n\nexport type AssetDeliveryParams = Parameters<typeof createBaseAssetDelivery>[0] & {\n imageResizeWidths?: number[];\n presignedUrlTtl?: number;\n};\n\nexport const assetDeliveryConfig = (params: AssetDeliveryParams) => {\n const bucket = process.env.S3_BUCKET as string;\n const region = process.env.AWS_REGION as string;\n\n const {\n presignedUrlTtl = 900,\n imageResizeWidths = [100, 300, 500, 750, 1000, 1500, 2500],\n ...baseParams\n } = params;\n\n return [\n // Base asset delivery\n createBaseAssetDelivery(baseParams),\n // S3 plugins\n createAssetDeliveryConfig(config => {\n const s3 = new S3({ region });\n\n config.decorateAssetResolver(() => {\n // This resolver loads file information from the `.metadata` file.\n return new S3AssetResolver(s3, bucket);\n });\n\n config.decorateAssetOutputStrategy(() => {\n return new S3OutputStrategy(s3, bucket, presignedUrlTtl);\n });\n\n config.decorateAssetTransformationStrategy(() => {\n return new SharpTransform({ s3, bucket, imageResizeWidths });\n });\n })\n ];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAIA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AAOO,MAAMK,mBAAmB,GAAIC,MAA2B,IAAK;EAChE,MAAMC,MAAM,GAAGC,OAAO,CAACC,GAAG,CAACC,SAAmB;EAC9C,MAAMC,MAAM,GAAGH,OAAO,CAACC,GAAG,CAACG,UAAoB;EAE/C,MAAM;IACFC,eAAe,GAAG,GAAG;IACrBC,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC1D,GAAGC;EACP,CAAC,GAAGT,MAAM;EAEV,OAAO;EACH;EACA,IAAAU,mCAAuB,EAACD,UAAU,CAAC;EACnC;EACA,IAAAE,yCAAyB,EAACC,MAAM,IAAI;IAChC,MAAMC,EAAE,GAAG,IAAIC,WAAE,CAAC;MAAET;IAAO,CAAC,CAAC;IAE7BO,MAAM,CAACG,qBAAqB,CAAC,MAAM;MAC/B;MACA,OAAO,IAAIC,gCAAe,CAACH,EAAE,EAAEZ,MAAM,CAAC;IAC1C,CAAC,CAAC;IAEFW,MAAM,CAACK,2BAA2B,CAAC,MAAM;MACrC,OAAO,IAAIC,kCAAgB,CAACL,EAAE,EAAEZ,MAAM,EAAEM,eAAe,CAAC;IAC5D,CAAC,CAAC;IAEFK,MAAM,CAACO,mCAAmC,CAAC,MAAM;MAC7C,OAAO,IAAIC,8BAAc,CAAC;QAAEP,EAAE;QAAEZ,MAAM;QAAEO;MAAkB,CAAC,CAAC;IAChE,CAAC,CAAC;EACN,CAAC,CAAC,CACL;AACL,CAAC;AAACa,OAAA,CAAAtB,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"names":["createAssetDelivery","createBaseAssetDelivery","createAssetDeliveryConfig","S3","S3AssetResolver","S3OutputStrategy","SharpTransform","GlobalKeyValueStore","assetDeliveryConfig","params","bucket","process","env","S3_BUCKET","region","AWS_REGION","presignedUrlTtl","imageResizeWidths","assetStreamingMaxSize","config","s3","decorateAssetResolver","container","resolve","decorateAssetOutputStrategy","decorateAssetTransformationStrategy"],"sources":["assetDeliveryConfig.ts"],"sourcesContent":["import {\n createAssetDelivery as createBaseAssetDelivery,\n createAssetDeliveryConfig\n} from \"@webiny/api-file-manager\";\nimport { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { S3AssetResolver } from \"~/assetDelivery/s3/S3AssetResolver.js\";\nimport { S3OutputStrategy } from \"~/assetDelivery/s3/S3OutputStrategy.js\";\nimport { SharpTransform } from \"~/assetDelivery/s3/SharpTransform.js\";\nimport type { AssetDeliveryParams } from \"~/assetDelivery/types.js\";\nimport { GlobalKeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\n\nexport const assetDeliveryConfig = (params: AssetDeliveryParams) => {\n const bucket = process.env.S3_BUCKET as string;\n const region = process.env.AWS_REGION as string;\n\n const {\n // Presigned URLs last 1 hour\n presignedUrlTtl = 3600,\n imageResizeWidths = [128, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840],\n /**\n * Even though Lambda's response payload limit is 6,291,556 bytes, we leave some room for the response envelope.\n * We had situations where a 4.7MB file would cause the payload to go over the limit, so let's be on the safe side.\n */\n assetStreamingMaxSize = 4718592\n } = params;\n\n return [\n // Base asset delivery\n createBaseAssetDelivery(),\n // S3 plugins\n createAssetDeliveryConfig(config => {\n const s3 = new S3({ region });\n\n config.decorateAssetResolver(({ container }) => {\n // This resolver loads file information from the `.metadata` file.\n return new S3AssetResolver(container.resolve(GlobalKeyValueStore), s3, bucket);\n });\n\n config.decorateAssetOutputStrategy(() => {\n return new S3OutputStrategy(s3, bucket, presignedUrlTtl, assetStreamingMaxSize);\n });\n\n config.decorateAssetTransformationStrategy(() => {\n return new SharpTransform({ s3, bucket, imageResizeWidths });\n });\n })\n ];\n};\n"],"mappings":"AAAA,SACIA,mBAAmB,IAAIC,uBAAuB,EAC9CC,yBAAyB,QACtB,0BAA0B;AACjC,SAASC,EAAE,QAAQ,oCAAoC;AACvD,SAASC,eAAe;AACxB,SAASC,gBAAgB;AACzB,SAASC,cAAc;AAEvB,SAASC,mBAAmB,QAAQ,kDAAkD;AAEtF,OAAO,MAAMC,mBAAmB,GAAIC,MAA2B,IAAK;EAChE,MAAMC,MAAM,GAAGC,OAAO,CAACC,GAAG,CAACC,SAAmB;EAC9C,MAAMC,MAAM,GAAGH,OAAO,CAACC,GAAG,CAACG,UAAoB;EAE/C,MAAM;IACF;IACAC,eAAe,GAAG,IAAI;IACtBC,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC3E;AACR;AACA;AACA;IACQC,qBAAqB,GAAG;EAC5B,CAAC,GAAGT,MAAM;EAEV,OAAO;EACH;EACAR,uBAAuB,CAAC,CAAC;EACzB;EACAC,yBAAyB,CAACiB,MAAM,IAAI;IAChC,MAAMC,EAAE,GAAG,IAAIjB,EAAE,CAAC;MAAEW;IAAO,CAAC,CAAC;IAE7BK,MAAM,CAACE,qBAAqB,CAAC,CAAC;MAAEC;IAAU,CAAC,KAAK;MAC5C;MACA,OAAO,IAAIlB,eAAe,CAACkB,SAAS,CAACC,OAAO,CAAChB,mBAAmB,CAAC,EAAEa,EAAE,EAAEV,MAAM,CAAC;IAClF,CAAC,CAAC;IAEFS,MAAM,CAACK,2BAA2B,CAAC,MAAM;MACrC,OAAO,IAAInB,gBAAgB,CAACe,EAAE,EAAEV,MAAM,EAAEM,eAAe,EAAEE,qBAAqB,CAAC;IACnF,CAAC,CAAC;IAEFC,MAAM,CAACM,mCAAmC,CAAC,MAAM;MAC7C,OAAO,IAAInB,cAAc,CAAC;QAAEc,EAAE;QAAEV,MAAM;QAAEO;MAAkB,CAAC,CAAC;IAChE,CAAC,CAAC;EACN,CAAC,CAAC,CACL;AACL,CAAC","ignoreList":[]}
@@ -1,3 +1,3 @@
1
- import { PluginFactory } from "@webiny/plugins/types";
2
- import type { AssetDeliveryParams } from "./assetDeliveryConfig";
3
- export declare const createAssetDelivery: (params: AssetDeliveryParams) => PluginFactory;
1
+ import type { PluginFactory } from "@webiny/plugins/types.js";
2
+ import type { AssetDeliveryParams } from "../assetDelivery/types.js";
3
+ export declare const createAssetDelivery: (params?: AssetDeliveryParams) => PluginFactory[];
@@ -1,20 +1,23 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createAssetDelivery = void 0;
7
- var _apiFileManager = require("@webiny/api-file-manager");
8
- const createAssetDelivery = params => {
1
+ import { createAssetDeliveryPluginLoader } from "@webiny/api-file-manager";
2
+ import { createThreatDetectionPluginLoader } from "./threatDetection/index.js";
3
+ export const createAssetDelivery = (params = {}) => {
4
+ return [
9
5
  /**
10
6
  * We only want to load this plugin in the context of the Asset Delivery Lambda function.
11
7
  */
12
- return (0, _apiFileManager.createAssetDeliveryPluginLoader)(() => {
13
- return import( /* webpackChunkName: "s3AssetDelivery" */"./assetDeliveryConfig").then(({
8
+ createAssetDeliveryPluginLoader(() => {
9
+ return import(/* webpackChunkName: "s3AssetDelivery" */"./assetDeliveryConfig.js").then(({
14
10
  assetDeliveryConfig
15
11
  }) => assetDeliveryConfig(params));
16
- });
12
+ }),
13
+ /**
14
+ * We only want to load this plugin in the context of the Threat Detection Lambda function.
15
+ */
16
+ createThreatDetectionPluginLoader(() => {
17
+ return import(/* webpackChunkName: "threatDetectionEventHandler" */"./threatDetection/createThreatDetectionEventHandler.js").then(({
18
+ createThreatDetectionEventHandler
19
+ }) => createThreatDetectionEventHandler());
20
+ })];
17
21
  };
18
- exports.createAssetDelivery = createAssetDelivery;
19
22
 
20
23
  //# sourceMappingURL=createAssetDelivery.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_apiFileManager","require","createAssetDelivery","params","createAssetDeliveryPluginLoader","then","assetDeliveryConfig","exports"],"sources":["createAssetDelivery.ts"],"sourcesContent":["import { createAssetDeliveryPluginLoader } from \"@webiny/api-file-manager\";\nimport { PluginFactory } from \"@webiny/plugins/types\";\nimport type { AssetDeliveryParams } from \"./assetDeliveryConfig\";\n\nexport const createAssetDelivery = (params: AssetDeliveryParams): PluginFactory => {\n /**\n * We only want to load this plugin in the context of the Asset Delivery Lambda function.\n */\n return createAssetDeliveryPluginLoader(() => {\n return import(/* webpackChunkName: \"s3AssetDelivery\" */ \"./assetDeliveryConfig\").then(\n ({ assetDeliveryConfig }) => assetDeliveryConfig(params)\n );\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAIO,MAAMC,mBAAmB,GAAIC,MAA2B,IAAoB;EAC/E;AACJ;AACA;EACI,OAAO,IAAAC,+CAA+B,EAAC,MAAM;IACzC,OAAO,MAAM,EAAC,gEAAiE,CAAC,CAACC,IAAI,CACjF,CAAC;MAAEC;IAAoB,CAAC,KAAKA,mBAAmB,CAACH,MAAM,CAC3D,CAAC;EACL,CAAC,CAAC;AACN,CAAC;AAACI,OAAA,CAAAL,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"names":["createAssetDeliveryPluginLoader","createThreatDetectionPluginLoader","createAssetDelivery","params","then","assetDeliveryConfig","createThreatDetectionEventHandler"],"sources":["createAssetDelivery.ts"],"sourcesContent":["import { createAssetDeliveryPluginLoader } from \"@webiny/api-file-manager\";\nimport type { PluginFactory } from \"@webiny/plugins/types.js\";\nimport { createThreatDetectionPluginLoader } from \"~/assetDelivery/threatDetection/index.js\";\nimport type { AssetDeliveryParams } from \"~/assetDelivery/types.js\";\n\nexport const createAssetDelivery = (params: AssetDeliveryParams = {}): PluginFactory[] => {\n return [\n /**\n * We only want to load this plugin in the context of the Asset Delivery Lambda function.\n */\n createAssetDeliveryPluginLoader(() => {\n return import(\n /* webpackChunkName: \"s3AssetDelivery\" */ \"./assetDeliveryConfig.js\"\n ).then(({ assetDeliveryConfig }) => assetDeliveryConfig(params));\n }),\n /**\n * We only want to load this plugin in the context of the Threat Detection Lambda function.\n */\n createThreatDetectionPluginLoader(() => {\n return import(\n /* webpackChunkName: \"threatDetectionEventHandler\" */ \"./threatDetection/createThreatDetectionEventHandler.js\"\n ).then(({ createThreatDetectionEventHandler }) => createThreatDetectionEventHandler());\n })\n ];\n};\n"],"mappings":"AAAA,SAASA,+BAA+B,QAAQ,0BAA0B;AAE1E,SAASC,iCAAiC;AAG1C,OAAO,MAAMC,mBAAmB,GAAGA,CAACC,MAA2B,GAAG,CAAC,CAAC,KAAsB;EACtF,OAAO;EACH;AACR;AACA;EACQH,+BAA+B,CAAC,MAAM;IAClC,OAAO,MAAM,CACT,mEACJ,CAAC,CAACI,IAAI,CAAC,CAAC;MAAEC;IAAoB,CAAC,KAAKA,mBAAmB,CAACF,MAAM,CAAC,CAAC;EACpE,CAAC,CAAC;EACF;AACR;AACA;EACQF,iCAAiC,CAAC,MAAM;IACpC,OAAO,MAAM,CACT,6GACJ,CAAC,CAACG,IAAI,CAAC,CAAC;MAAEE;IAAkC,CAAC,KAAKA,iCAAiC,CAAC,CAAC,CAAC;EAC1F,CAAC,CAAC,CACL;AACL,CAAC","ignoreList":[]}
@@ -1,9 +1,8 @@
1
- export { S3AssetResolver } from "./s3/S3AssetResolver";
2
- export { S3AssetMetadataReader } from "./s3/S3AssetMetadataReader";
3
- export { S3OutputStrategy } from "./s3/S3OutputStrategy";
4
- export { S3ContentsReader } from "./s3/S3ContentsReader";
5
- export { S3ErrorAssetReply } from "./s3/S3ErrorAssetReply";
6
- export { S3RedirectAssetReply } from "./s3/S3RedirectAssetReply";
7
- export { S3StreamAssetReply } from "./s3/S3StreamAssetReply";
8
- export { SharpTransform } from "./s3/SharpTransform";
9
- export { CallableContentsReader } from "./s3/transformation/CallableContentsReader";
1
+ export { S3AssetResolver } from "./s3/S3AssetResolver.js";
2
+ export { S3OutputStrategy } from "./s3/S3OutputStrategy.js";
3
+ export { S3ContentsReader } from "./s3/S3ContentsReader.js";
4
+ export { S3ErrorAssetReply } from "./s3/S3ErrorAssetReply.js";
5
+ export { S3RedirectAssetReply } from "./s3/S3RedirectAssetReply.js";
6
+ export { S3StreamAssetReply } from "./s3/S3StreamAssetReply.js";
7
+ export { SharpTransform } from "./s3/SharpTransform.js";
8
+ export { CallableContentsReader } from "./s3/transformation/CallableContentsReader.js";
@@ -1,70 +1,10 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "CallableContentsReader", {
7
- enumerable: true,
8
- get: function () {
9
- return _CallableContentsReader.CallableContentsReader;
10
- }
11
- });
12
- Object.defineProperty(exports, "S3AssetMetadataReader", {
13
- enumerable: true,
14
- get: function () {
15
- return _S3AssetMetadataReader.S3AssetMetadataReader;
16
- }
17
- });
18
- Object.defineProperty(exports, "S3AssetResolver", {
19
- enumerable: true,
20
- get: function () {
21
- return _S3AssetResolver.S3AssetResolver;
22
- }
23
- });
24
- Object.defineProperty(exports, "S3ContentsReader", {
25
- enumerable: true,
26
- get: function () {
27
- return _S3ContentsReader.S3ContentsReader;
28
- }
29
- });
30
- Object.defineProperty(exports, "S3ErrorAssetReply", {
31
- enumerable: true,
32
- get: function () {
33
- return _S3ErrorAssetReply.S3ErrorAssetReply;
34
- }
35
- });
36
- Object.defineProperty(exports, "S3OutputStrategy", {
37
- enumerable: true,
38
- get: function () {
39
- return _S3OutputStrategy.S3OutputStrategy;
40
- }
41
- });
42
- Object.defineProperty(exports, "S3RedirectAssetReply", {
43
- enumerable: true,
44
- get: function () {
45
- return _S3RedirectAssetReply.S3RedirectAssetReply;
46
- }
47
- });
48
- Object.defineProperty(exports, "S3StreamAssetReply", {
49
- enumerable: true,
50
- get: function () {
51
- return _S3StreamAssetReply.S3StreamAssetReply;
52
- }
53
- });
54
- Object.defineProperty(exports, "SharpTransform", {
55
- enumerable: true,
56
- get: function () {
57
- return _SharpTransform.SharpTransform;
58
- }
59
- });
60
- var _S3AssetResolver = require("./s3/S3AssetResolver");
61
- var _S3AssetMetadataReader = require("./s3/S3AssetMetadataReader");
62
- var _S3OutputStrategy = require("./s3/S3OutputStrategy");
63
- var _S3ContentsReader = require("./s3/S3ContentsReader");
64
- var _S3ErrorAssetReply = require("./s3/S3ErrorAssetReply");
65
- var _S3RedirectAssetReply = require("./s3/S3RedirectAssetReply");
66
- var _S3StreamAssetReply = require("./s3/S3StreamAssetReply");
67
- var _SharpTransform = require("./s3/SharpTransform");
68
- var _CallableContentsReader = require("./s3/transformation/CallableContentsReader");
1
+ export { S3AssetResolver } from "./s3/S3AssetResolver.js";
2
+ export { S3OutputStrategy } from "./s3/S3OutputStrategy.js";
3
+ export { S3ContentsReader } from "./s3/S3ContentsReader.js";
4
+ export { S3ErrorAssetReply } from "./s3/S3ErrorAssetReply.js";
5
+ export { S3RedirectAssetReply } from "./s3/S3RedirectAssetReply.js";
6
+ export { S3StreamAssetReply } from "./s3/S3StreamAssetReply.js";
7
+ export { SharpTransform } from "./s3/SharpTransform.js";
8
+ export { CallableContentsReader } from "./s3/transformation/CallableContentsReader.js";
69
9
 
70
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_S3AssetResolver","require","_S3AssetMetadataReader","_S3OutputStrategy","_S3ContentsReader","_S3ErrorAssetReply","_S3RedirectAssetReply","_S3StreamAssetReply","_SharpTransform","_CallableContentsReader"],"sources":["index.ts"],"sourcesContent":["export { S3AssetResolver } from \"./s3/S3AssetResolver\";\nexport { S3AssetMetadataReader } from \"./s3/S3AssetMetadataReader\";\nexport { S3OutputStrategy } from \"./s3/S3OutputStrategy\";\nexport { S3ContentsReader } from \"./s3/S3ContentsReader\";\nexport { S3ErrorAssetReply } from \"./s3/S3ErrorAssetReply\";\nexport { S3RedirectAssetReply } from \"./s3/S3RedirectAssetReply\";\nexport { S3StreamAssetReply } from \"./s3/S3StreamAssetReply\";\nexport { SharpTransform } from \"./s3/SharpTransform\";\nexport { CallableContentsReader } from \"./s3/transformation/CallableContentsReader\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAJ,OAAA;AACA,IAAAK,qBAAA,GAAAL,OAAA;AACA,IAAAM,mBAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AACA,IAAAQ,uBAAA,GAAAR,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["S3AssetResolver","S3OutputStrategy","S3ContentsReader","S3ErrorAssetReply","S3RedirectAssetReply","S3StreamAssetReply","SharpTransform","CallableContentsReader"],"sources":["index.ts"],"sourcesContent":["export { S3AssetResolver } from \"./s3/S3AssetResolver.js\";\nexport { S3OutputStrategy } from \"./s3/S3OutputStrategy.js\";\nexport { S3ContentsReader } from \"./s3/S3ContentsReader.js\";\nexport { S3ErrorAssetReply } from \"./s3/S3ErrorAssetReply.js\";\nexport { S3RedirectAssetReply } from \"./s3/S3RedirectAssetReply.js\";\nexport { S3StreamAssetReply } from \"./s3/S3StreamAssetReply.js\";\nexport { SharpTransform } from \"./s3/SharpTransform.js\";\nexport { CallableContentsReader } from \"./s3/transformation/CallableContentsReader.js\";\n"],"mappings":"AAAA,SAASA,eAAe;AACxB,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;AAC1B,SAASC,oBAAoB;AAC7B,SAASC,kBAAkB;AAC3B,SAASC,cAAc;AACvB,SAASC,sBAAsB","ignoreList":[]}
@@ -1,8 +1,11 @@
1
- import { S3 } from "@webiny/aws-sdk/client-s3";
2
- import { Asset, AssetRequest, AssetResolver } from "@webiny/api-file-manager";
1
+ import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
2
+ import type { AssetRequest, AssetResolver } from "@webiny/api-file-manager";
3
+ import { Asset } from "@webiny/api-file-manager";
4
+ import { GlobalKeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
3
5
  export declare class S3AssetResolver implements AssetResolver {
4
- private readonly s3;
5
- private readonly bucket;
6
- constructor(s3: S3, bucket: string);
6
+ private keyValueStore;
7
+ private s3;
8
+ private bucket;
9
+ constructor(keyValueStore: GlobalKeyValueStore.Interface, s3: S3, bucket: string);
7
10
  resolve(request: AssetRequest): Promise<Asset | undefined>;
8
11
  }
@@ -1,37 +1,29 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.S3AssetResolver = void 0;
7
- var _apiFileManager = require("@webiny/api-file-manager");
8
- var _S3AssetMetadataReader = require("./S3AssetMetadataReader");
9
- var _S3ContentsReader = require("./S3ContentsReader");
10
- class S3AssetResolver {
11
- constructor(s3, bucket) {
1
+ import { Asset } from "@webiny/api-file-manager";
2
+ import { S3ContentsReader } from "../index.js";
3
+ import { ObjectKey } from "../threatDetection/ObjectKey.js";
4
+ export class S3AssetResolver {
5
+ constructor(keyValueStore, s3, bucket) {
6
+ this.keyValueStore = keyValueStore;
12
7
  this.s3 = s3;
13
8
  this.bucket = bucket;
14
9
  }
15
10
  async resolve(request) {
16
- try {
17
- const metadataReader = new _S3AssetMetadataReader.S3AssetMetadataReader(this.s3, this.bucket);
18
- const metadata = await metadataReader.getMetadata(request.getKey());
19
- const asset = new _apiFileManager.Asset({
20
- id: metadata.id,
21
- tenant: metadata.tenant,
22
- locale: metadata.locale,
23
- size: metadata.size,
24
- contentType: metadata.contentType,
25
- key: request.getKey()
26
- });
27
- asset.setContentsReader(new _S3ContentsReader.S3ContentsReader(this.s3, this.bucket));
28
- return asset;
29
- } catch (error) {
30
- console.log(`S3AssetResolver failed to read metadata: ${error.message}`);
11
+ const fileId = ObjectKey.from(request.getKey()).id();
12
+ const result = await this.keyValueStore.get(`FileManager/File/${fileId}/Metadata`);
13
+ if (result.isFail()) {
31
14
  return undefined;
32
15
  }
16
+ const metadata = result.value;
17
+ const asset = new Asset({
18
+ id: metadata.id,
19
+ tenant: metadata.tenant,
20
+ size: metadata.size,
21
+ contentType: metadata.contentType,
22
+ key: metadata.bucketKey
23
+ });
24
+ asset.setContentsReader(new S3ContentsReader(this.s3, this.bucket));
25
+ return asset;
33
26
  }
34
27
  }
35
- exports.S3AssetResolver = S3AssetResolver;
36
28
 
37
29
  //# sourceMappingURL=S3AssetResolver.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_apiFileManager","require","_S3AssetMetadataReader","_S3ContentsReader","S3AssetResolver","constructor","s3","bucket","resolve","request","metadataReader","S3AssetMetadataReader","metadata","getMetadata","getKey","asset","Asset","id","tenant","locale","size","contentType","key","setContentsReader","S3ContentsReader","error","console","log","message","undefined","exports"],"sources":["S3AssetResolver.ts"],"sourcesContent":["import { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { Asset, AssetRequest, AssetResolver } from \"@webiny/api-file-manager\";\nimport { S3AssetMetadataReader } from \"./S3AssetMetadataReader\";\nimport { S3ContentsReader } from \"./S3ContentsReader\";\n\nexport class S3AssetResolver implements AssetResolver {\n private readonly s3: S3;\n private readonly bucket: string;\n\n constructor(s3: S3, bucket: string) {\n this.s3 = s3;\n this.bucket = bucket;\n }\n\n async resolve(request: AssetRequest): Promise<Asset | undefined> {\n try {\n const metadataReader = new S3AssetMetadataReader(this.s3, this.bucket);\n const metadata = await metadataReader.getMetadata(request.getKey());\n\n const asset = new Asset({\n id: metadata.id,\n tenant: metadata.tenant,\n locale: metadata.locale,\n size: metadata.size,\n contentType: metadata.contentType,\n key: request.getKey()\n });\n\n asset.setContentsReader(new S3ContentsReader(this.s3, this.bucket));\n\n return asset;\n } catch (error) {\n console.log(`S3AssetResolver failed to read metadata: ${error.message}`);\n return undefined;\n }\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AAEO,MAAMG,eAAe,CAA0B;EAIlDC,WAAWA,CAACC,EAAM,EAAEC,MAAc,EAAE;IAChC,IAAI,CAACD,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,MAAM,GAAGA,MAAM;EACxB;EAEA,MAAMC,OAAOA,CAACC,OAAqB,EAA8B;IAC7D,IAAI;MACA,MAAMC,cAAc,GAAG,IAAIC,4CAAqB,CAAC,IAAI,CAACL,EAAE,EAAE,IAAI,CAACC,MAAM,CAAC;MACtE,MAAMK,QAAQ,GAAG,MAAMF,cAAc,CAACG,WAAW,CAACJ,OAAO,CAACK,MAAM,CAAC,CAAC,CAAC;MAEnE,MAAMC,KAAK,GAAG,IAAIC,qBAAK,CAAC;QACpBC,EAAE,EAAEL,QAAQ,CAACK,EAAE;QACfC,MAAM,EAAEN,QAAQ,CAACM,MAAM;QACvBC,MAAM,EAAEP,QAAQ,CAACO,MAAM;QACvBC,IAAI,EAAER,QAAQ,CAACQ,IAAI;QACnBC,WAAW,EAAET,QAAQ,CAACS,WAAW;QACjCC,GAAG,EAAEb,OAAO,CAACK,MAAM,CAAC;MACxB,CAAC,CAAC;MAEFC,KAAK,CAACQ,iBAAiB,CAAC,IAAIC,kCAAgB,CAAC,IAAI,CAAClB,EAAE,EAAE,IAAI,CAACC,MAAM,CAAC,CAAC;MAEnE,OAAOQ,KAAK;IAChB,CAAC,CAAC,OAAOU,KAAK,EAAE;MACZC,OAAO,CAACC,GAAG,CAAE,4CAA2CF,KAAK,CAACG,OAAQ,EAAC,CAAC;MACxE,OAAOC,SAAS;IACpB;EACJ;AACJ;AAACC,OAAA,CAAA1B,eAAA,GAAAA,eAAA","ignoreList":[]}
1
+ {"version":3,"names":["Asset","S3ContentsReader","ObjectKey","S3AssetResolver","constructor","keyValueStore","s3","bucket","resolve","request","fileId","from","getKey","id","result","get","isFail","undefined","metadata","value","asset","tenant","size","contentType","key","bucketKey","setContentsReader"],"sources":["S3AssetResolver.ts"],"sourcesContent":["import type { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type { AssetRequest, AssetResolver } from \"@webiny/api-file-manager\";\nimport { Asset } from \"@webiny/api-file-manager\";\nimport { GlobalKeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { S3ContentsReader } from \"~/assetDelivery/index.js\";\nimport { ObjectKey } from \"~/assetDelivery/threatDetection/ObjectKey.js\";\n\ninterface AssetMetadata {\n id: string;\n tenant: string;\n size: number;\n contentType: string;\n bucketKey: string;\n}\n\nexport class S3AssetResolver implements AssetResolver {\n constructor(\n private keyValueStore: GlobalKeyValueStore.Interface,\n private s3: S3,\n private bucket: string\n ) {}\n\n async resolve(request: AssetRequest): Promise<Asset | undefined> {\n const fileId = ObjectKey.from(request.getKey()).id();\n const result = await this.keyValueStore.get<AssetMetadata>(\n `FileManager/File/${fileId}/Metadata`\n );\n\n if (result.isFail()) {\n return undefined;\n }\n\n const metadata = result.value;\n\n const asset = new Asset({\n id: metadata.id,\n tenant: metadata.tenant,\n size: metadata.size,\n contentType: metadata.contentType,\n key: metadata.bucketKey\n });\n\n asset.setContentsReader(new S3ContentsReader(this.s3, this.bucket));\n\n return asset;\n }\n}\n"],"mappings":"AAEA,SAASA,KAAK,QAAQ,0BAA0B;AAEhD,SAASC,gBAAgB;AACzB,SAASC,SAAS;AAUlB,OAAO,MAAMC,eAAe,CAA0B;EAClDC,WAAWA,CACCC,aAA4C,EAC5CC,EAAM,EACNC,MAAc,EACxB;IAAA,KAHUF,aAA4C,GAA5CA,aAA4C;IAAA,KAC5CC,EAAM,GAANA,EAAM;IAAA,KACNC,MAAc,GAAdA,MAAc;EACvB;EAEH,MAAMC,OAAOA,CAACC,OAAqB,EAA8B;IAC7D,MAAMC,MAAM,GAAGR,SAAS,CAACS,IAAI,CAACF,OAAO,CAACG,MAAM,CAAC,CAAC,CAAC,CAACC,EAAE,CAAC,CAAC;IACpD,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACT,aAAa,CAACU,GAAG,CACvC,oBAAoBL,MAAM,WAC9B,CAAC;IAED,IAAII,MAAM,CAACE,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOC,SAAS;IACpB;IAEA,MAAMC,QAAQ,GAAGJ,MAAM,CAACK,KAAK;IAE7B,MAAMC,KAAK,GAAG,IAAIpB,KAAK,CAAC;MACpBa,EAAE,EAAEK,QAAQ,CAACL,EAAE;MACfQ,MAAM,EAAEH,QAAQ,CAACG,MAAM;MACvBC,IAAI,EAAEJ,QAAQ,CAACI,IAAI;MACnBC,WAAW,EAAEL,QAAQ,CAACK,WAAW;MACjCC,GAAG,EAAEN,QAAQ,CAACO;IAClB,CAAC,CAAC;IAEFL,KAAK,CAACM,iBAAiB,CAAC,IAAIzB,gBAAgB,CAAC,IAAI,CAACK,EAAE,EAAE,IAAI,CAACC,MAAM,CAAC,CAAC;IAEnE,OAAOa,KAAK;EAChB;AACJ","ignoreList":[]}
@@ -1,6 +1,5 @@
1
- /// <reference types="node" />
2
- import { S3 } from "@webiny/aws-sdk/client-s3";
3
- import { Asset, AssetContentsReader } from "@webiny/api-file-manager";
1
+ import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
2
+ import type { Asset, AssetContentsReader } from "@webiny/api-file-manager";
4
3
  export declare class S3ContentsReader implements AssetContentsReader {
5
4
  private s3;
6
5
  private readonly bucket;
@@ -1,10 +1,4 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.S3ContentsReader = void 0;
7
- class S3ContentsReader {
1
+ export class S3ContentsReader {
8
2
  constructor(s3, bucket) {
9
3
  this.s3 = s3;
10
4
  this.bucket = bucket;
@@ -22,6 +16,5 @@ class S3ContentsReader {
22
16
  return Buffer.from(await Body.transformToByteArray());
23
17
  }
24
18
  }
25
- exports.S3ContentsReader = S3ContentsReader;
26
19
 
27
20
  //# sourceMappingURL=S3ContentsReader.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["S3ContentsReader","constructor","s3","bucket","read","asset","Body","getObject","Bucket","Key","getKey","Error","Buffer","from","transformToByteArray","exports"],"sources":["S3ContentsReader.ts"],"sourcesContent":["import { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { Asset, AssetContentsReader } from \"@webiny/api-file-manager\";\n\nexport class S3ContentsReader implements AssetContentsReader {\n private s3: S3;\n private readonly bucket: string;\n\n constructor(s3: S3, bucket: string) {\n this.s3 = s3;\n this.bucket = bucket;\n }\n\n async read(asset: Asset): Promise<Buffer> {\n const { Body } = await this.s3.getObject({\n Bucket: this.bucket,\n Key: asset.getKey()\n });\n\n if (!Body) {\n throw Error(`Unable to read ${asset.getKey()}!`);\n }\n\n return Buffer.from(await Body.transformToByteArray());\n }\n}\n"],"mappings":";;;;;;AAGO,MAAMA,gBAAgB,CAAgC;EAIzDC,WAAWA,CAACC,EAAM,EAAEC,MAAc,EAAE;IAChC,IAAI,CAACD,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,MAAM,GAAGA,MAAM;EACxB;EAEA,MAAMC,IAAIA,CAACC,KAAY,EAAmB;IACtC,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAM,IAAI,CAACJ,EAAE,CAACK,SAAS,CAAC;MACrCC,MAAM,EAAE,IAAI,CAACL,MAAM;MACnBM,GAAG,EAAEJ,KAAK,CAACK,MAAM,CAAC;IACtB,CAAC,CAAC;IAEF,IAAI,CAACJ,IAAI,EAAE;MACP,MAAMK,KAAK,CAAE,kBAAiBN,KAAK,CAACK,MAAM,CAAC,CAAE,GAAE,CAAC;IACpD;IAEA,OAAOE,MAAM,CAACC,IAAI,CAAC,MAAMP,IAAI,CAACQ,oBAAoB,CAAC,CAAC,CAAC;EACzD;AACJ;AAACC,OAAA,CAAAf,gBAAA,GAAAA,gBAAA","ignoreList":[]}
1
+ {"version":3,"names":["S3ContentsReader","constructor","s3","bucket","read","asset","Body","getObject","Bucket","Key","getKey","Error","Buffer","from","transformToByteArray"],"sources":["S3ContentsReader.ts"],"sourcesContent":["import type { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type { Asset, AssetContentsReader } from \"@webiny/api-file-manager\";\n\nexport class S3ContentsReader implements AssetContentsReader {\n private s3: S3;\n private readonly bucket: string;\n\n constructor(s3: S3, bucket: string) {\n this.s3 = s3;\n this.bucket = bucket;\n }\n\n async read(asset: Asset): Promise<Buffer> {\n const { Body } = await this.s3.getObject({\n Bucket: this.bucket,\n Key: asset.getKey()\n });\n\n if (!Body) {\n throw Error(`Unable to read ${asset.getKey()}!`);\n }\n\n return Buffer.from(await Body.transformToByteArray());\n }\n}\n"],"mappings":"AAGA,OAAO,MAAMA,gBAAgB,CAAgC;EAIzDC,WAAWA,CAACC,EAAM,EAAEC,MAAc,EAAE;IAChC,IAAI,CAACD,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,MAAM,GAAGA,MAAM;EACxB;EAEA,MAAMC,IAAIA,CAACC,KAAY,EAAmB;IACtC,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAM,IAAI,CAACJ,EAAE,CAACK,SAAS,CAAC;MACrCC,MAAM,EAAE,IAAI,CAACL,MAAM;MACnBM,GAAG,EAAEJ,KAAK,CAACK,MAAM,CAAC;IACtB,CAAC,CAAC;IAEF,IAAI,CAACJ,IAAI,EAAE;MACP,MAAMK,KAAK,CAAC,kBAAkBN,KAAK,CAACK,MAAM,CAAC,CAAC,GAAG,CAAC;IACpD;IAEA,OAAOE,MAAM,CAACC,IAAI,CAAC,MAAMP,IAAI,CAACQ,oBAAoB,CAAC,CAAC,CAAC;EACzD;AACJ","ignoreList":[]}
@@ -1,11 +1,5 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.S3ErrorAssetReply = void 0;
7
- var _apiFileManager = require("@webiny/api-file-manager");
8
- class S3ErrorAssetReply extends _apiFileManager.AssetReply {
1
+ import { AssetReply } from "@webiny/api-file-manager";
2
+ export class S3ErrorAssetReply extends AssetReply {
9
3
  constructor(message) {
10
4
  super({
11
5
  code: 400,
@@ -15,6 +9,5 @@ class S3ErrorAssetReply extends _apiFileManager.AssetReply {
15
9
  });
16
10
  }
17
11
  }
18
- exports.S3ErrorAssetReply = S3ErrorAssetReply;
19
12
 
20
13
  //# sourceMappingURL=S3ErrorAssetReply.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_apiFileManager","require","S3ErrorAssetReply","AssetReply","constructor","message","code","body","error","exports"],"sources":["S3ErrorAssetReply.ts"],"sourcesContent":["import { AssetReply } from \"@webiny/api-file-manager\";\n\nexport class S3ErrorAssetReply extends AssetReply {\n constructor(message: string) {\n super({\n code: 400,\n body: () => ({ error: message })\n });\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAEO,MAAMC,iBAAiB,SAASC,0BAAU,CAAC;EAC9CC,WAAWA,CAACC,OAAe,EAAE;IACzB,KAAK,CAAC;MACFC,IAAI,EAAE,GAAG;MACTC,IAAI,EAAEA,CAAA,MAAO;QAAEC,KAAK,EAAEH;MAAQ,CAAC;IACnC,CAAC,CAAC;EACN;AACJ;AAACI,OAAA,CAAAP,iBAAA,GAAAA,iBAAA","ignoreList":[]}
1
+ {"version":3,"names":["AssetReply","S3ErrorAssetReply","constructor","message","code","body","error"],"sources":["S3ErrorAssetReply.ts"],"sourcesContent":["import { AssetReply } from \"@webiny/api-file-manager\";\n\nexport class S3ErrorAssetReply extends AssetReply {\n constructor(message: string) {\n super({\n code: 400,\n body: () => ({ error: message })\n });\n }\n}\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,0BAA0B;AAErD,OAAO,MAAMC,iBAAiB,SAASD,UAAU,CAAC;EAC9CE,WAAWA,CAACC,OAAe,EAAE;IACzB,KAAK,CAAC;MACFC,IAAI,EAAE,GAAG;MACTC,IAAI,EAAEA,CAAA,MAAO;QAAEC,KAAK,EAAEH;MAAQ,CAAC;IACnC,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import { Asset, AssetOutputStrategy, AssetReply } from "@webiny/api-file-manager";
2
- import { S3 } from "@webiny/aws-sdk/client-s3";
1
+ import type { Asset, AssetOutputStrategy, AssetReply } from "@webiny/api-file-manager";
2
+ import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
3
3
  /**
4
4
  * This strategy outputs an asset taking into account the size of the asset contents.
5
5
  * If the asset is larger than 5MB, a presigned URL will be generated, and a redirect will happen.
@@ -8,7 +8,8 @@ export declare class S3OutputStrategy implements AssetOutputStrategy {
8
8
  private readonly s3;
9
9
  private readonly bucket;
10
10
  private readonly presignedUrlTtl;
11
- constructor(s3: S3, bucket: string, presignedUrlTtl: number);
11
+ private readonly assetStreamingMaxSize;
12
+ constructor(s3: S3, bucket: string, presignedUrlTtl: number, assetStreamingMaxSize: number);
12
13
  output(asset: Asset): Promise<AssetReply>;
13
14
  protected getPresignedUrl(asset: Asset): Promise<string>;
14
15
  }
@@ -1,32 +1,28 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.S3OutputStrategy = void 0;
7
- var _clientS = require("@webiny/aws-sdk/client-s3");
8
- var _S3RedirectAssetReply = require("./S3RedirectAssetReply");
9
- var _S3StreamAssetReply = require("./S3StreamAssetReply");
10
- const MAX_RETURN_CONTENT_LENGTH = 4915200; // ~4.8 MB
1
+ import { GetObjectCommand, getSignedUrl } from "@webiny/aws-sdk/client-s3/index.js";
2
+ import { S3RedirectAssetReply } from "./S3RedirectAssetReply.js";
3
+ import { S3StreamAssetReply } from "./S3StreamAssetReply.js";
11
4
 
12
5
  /**
13
6
  * This strategy outputs an asset taking into account the size of the asset contents.
14
7
  * If the asset is larger than 5MB, a presigned URL will be generated, and a redirect will happen.
15
8
  */
16
- class S3OutputStrategy {
17
- constructor(s3, bucket, presignedUrlTtl) {
9
+ export class S3OutputStrategy {
10
+ constructor(s3, bucket, presignedUrlTtl, assetStreamingMaxSize) {
11
+ this.assetStreamingMaxSize = assetStreamingMaxSize;
18
12
  this.presignedUrlTtl = presignedUrlTtl;
19
13
  this.s3 = s3;
20
14
  this.bucket = bucket;
21
15
  }
22
16
  async output(asset) {
23
- if ((await asset.getSize()) > MAX_RETURN_CONTENT_LENGTH) {
24
- return new _S3RedirectAssetReply.S3RedirectAssetReply(await this.getPresignedUrl(asset), this.presignedUrlTtl);
17
+ if (asset.getSize() > this.assetStreamingMaxSize) {
18
+ console.log(`Asset size is greater than ${this.assetStreamingMaxSize}; redirecting to a presigned S3 URL.`);
19
+ return new S3RedirectAssetReply(await this.getPresignedUrl(asset), this.presignedUrlTtl);
25
20
  }
26
- return new _S3StreamAssetReply.S3StreamAssetReply(asset);
21
+ console.log(`Asset size is smaller than ${this.assetStreamingMaxSize}; streaming directly from Lambda function.`);
22
+ return new S3StreamAssetReply(asset);
27
23
  }
28
24
  getPresignedUrl(asset) {
29
- return (0, _clientS.getSignedUrl)(this.s3, new _clientS.GetObjectCommand({
25
+ return getSignedUrl(this.s3, new GetObjectCommand({
30
26
  Bucket: this.bucket,
31
27
  Key: asset.getKey()
32
28
  }), {
@@ -34,6 +30,5 @@ class S3OutputStrategy {
34
30
  });
35
31
  }
36
32
  }
37
- exports.S3OutputStrategy = S3OutputStrategy;
38
33
 
39
34
  //# sourceMappingURL=S3OutputStrategy.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_clientS","require","_S3RedirectAssetReply","_S3StreamAssetReply","MAX_RETURN_CONTENT_LENGTH","S3OutputStrategy","constructor","s3","bucket","presignedUrlTtl","output","asset","getSize","S3RedirectAssetReply","getPresignedUrl","S3StreamAssetReply","getSignedUrl","GetObjectCommand","Bucket","Key","getKey","expiresIn","exports"],"sources":["S3OutputStrategy.ts"],"sourcesContent":["import { Asset, AssetOutputStrategy, AssetReply } from \"@webiny/api-file-manager\";\nimport { GetObjectCommand, getSignedUrl, S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { S3RedirectAssetReply } from \"~/assetDelivery/s3/S3RedirectAssetReply\";\nimport { S3StreamAssetReply } from \"~/assetDelivery/s3/S3StreamAssetReply\";\n\nconst MAX_RETURN_CONTENT_LENGTH = 4915200; // ~4.8 MB\n\n/**\n * This strategy outputs an asset taking into account the size of the asset contents.\n * If the asset is larger than 5MB, a presigned URL will be generated, and a redirect will happen.\n */\nexport class S3OutputStrategy implements AssetOutputStrategy {\n private readonly s3: S3;\n private readonly bucket: string;\n private readonly presignedUrlTtl: number;\n\n constructor(s3: S3, bucket: string, presignedUrlTtl: number) {\n this.presignedUrlTtl = presignedUrlTtl;\n this.s3 = s3;\n this.bucket = bucket;\n }\n\n async output(asset: Asset): Promise<AssetReply> {\n if ((await asset.getSize()) > MAX_RETURN_CONTENT_LENGTH) {\n return new S3RedirectAssetReply(\n await this.getPresignedUrl(asset),\n this.presignedUrlTtl\n );\n }\n\n return new S3StreamAssetReply(asset);\n }\n\n protected getPresignedUrl(asset: Asset) {\n return getSignedUrl(\n this.s3,\n new GetObjectCommand({\n Bucket: this.bucket,\n Key: asset.getKey()\n }),\n { expiresIn: this.presignedUrlTtl }\n );\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,qBAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AAEA,MAAMG,yBAAyB,GAAG,OAAO,CAAC,CAAC;;AAE3C;AACA;AACA;AACA;AACO,MAAMC,gBAAgB,CAAgC;EAKzDC,WAAWA,CAACC,EAAM,EAAEC,MAAc,EAAEC,eAAuB,EAAE;IACzD,IAAI,CAACA,eAAe,GAAGA,eAAe;IACtC,IAAI,CAACF,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,MAAM,GAAGA,MAAM;EACxB;EAEA,MAAME,MAAMA,CAACC,KAAY,EAAuB;IAC5C,IAAI,CAAC,MAAMA,KAAK,CAACC,OAAO,CAAC,CAAC,IAAIR,yBAAyB,EAAE;MACrD,OAAO,IAAIS,0CAAoB,CAC3B,MAAM,IAAI,CAACC,eAAe,CAACH,KAAK,CAAC,EACjC,IAAI,CAACF,eACT,CAAC;IACL;IAEA,OAAO,IAAIM,sCAAkB,CAACJ,KAAK,CAAC;EACxC;EAEUG,eAAeA,CAACH,KAAY,EAAE;IACpC,OAAO,IAAAK,qBAAY,EACf,IAAI,CAACT,EAAE,EACP,IAAIU,yBAAgB,CAAC;MACjBC,MAAM,EAAE,IAAI,CAACV,MAAM;MACnBW,GAAG,EAAER,KAAK,CAACS,MAAM,CAAC;IACtB,CAAC,CAAC,EACF;MAAEC,SAAS,EAAE,IAAI,CAACZ;IAAgB,CACtC,CAAC;EACL;AACJ;AAACa,OAAA,CAAAjB,gBAAA,GAAAA,gBAAA","ignoreList":[]}
1
+ {"version":3,"names":["GetObjectCommand","getSignedUrl","S3RedirectAssetReply","S3StreamAssetReply","S3OutputStrategy","constructor","s3","bucket","presignedUrlTtl","assetStreamingMaxSize","output","asset","getSize","console","log","getPresignedUrl","Bucket","Key","getKey","expiresIn"],"sources":["S3OutputStrategy.ts"],"sourcesContent":["import type { Asset, AssetOutputStrategy, AssetReply } from \"@webiny/api-file-manager\";\nimport type { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { GetObjectCommand, getSignedUrl } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { S3RedirectAssetReply } from \"~/assetDelivery/s3/S3RedirectAssetReply.js\";\nimport { S3StreamAssetReply } from \"~/assetDelivery/s3/S3StreamAssetReply.js\";\n\n/**\n * This strategy outputs an asset taking into account the size of the asset contents.\n * If the asset is larger than 5MB, a presigned URL will be generated, and a redirect will happen.\n */\nexport class S3OutputStrategy implements AssetOutputStrategy {\n private readonly s3: S3;\n private readonly bucket: string;\n private readonly presignedUrlTtl: number;\n private readonly assetStreamingMaxSize: number;\n\n constructor(s3: S3, bucket: string, presignedUrlTtl: number, assetStreamingMaxSize: number) {\n this.assetStreamingMaxSize = assetStreamingMaxSize;\n this.presignedUrlTtl = presignedUrlTtl;\n this.s3 = s3;\n this.bucket = bucket;\n }\n\n async output(asset: Asset): Promise<AssetReply> {\n if (asset.getSize() > this.assetStreamingMaxSize) {\n console.log(\n `Asset size is greater than ${this.assetStreamingMaxSize}; redirecting to a presigned S3 URL.`\n );\n\n return new S3RedirectAssetReply(\n await this.getPresignedUrl(asset),\n this.presignedUrlTtl\n );\n }\n\n console.log(\n `Asset size is smaller than ${this.assetStreamingMaxSize}; streaming directly from Lambda function.`\n );\n return new S3StreamAssetReply(asset);\n }\n\n protected getPresignedUrl(asset: Asset) {\n return getSignedUrl(\n this.s3,\n new GetObjectCommand({\n Bucket: this.bucket,\n Key: asset.getKey()\n }),\n { expiresIn: this.presignedUrlTtl }\n );\n }\n}\n"],"mappings":"AAEA,SAASA,gBAAgB,EAAEC,YAAY,QAAQ,oCAAoC;AACnF,SAASC,oBAAoB;AAC7B,SAASC,kBAAkB;;AAE3B;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,CAAgC;EAMzDC,WAAWA,CAACC,EAAM,EAAEC,MAAc,EAAEC,eAAuB,EAAEC,qBAA6B,EAAE;IACxF,IAAI,CAACA,qBAAqB,GAAGA,qBAAqB;IAClD,IAAI,CAACD,eAAe,GAAGA,eAAe;IACtC,IAAI,CAACF,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,MAAM,GAAGA,MAAM;EACxB;EAEA,MAAMG,MAAMA,CAACC,KAAY,EAAuB;IAC5C,IAAIA,KAAK,CAACC,OAAO,CAAC,CAAC,GAAG,IAAI,CAACH,qBAAqB,EAAE;MAC9CI,OAAO,CAACC,GAAG,CACP,8BAA8B,IAAI,CAACL,qBAAqB,sCAC5D,CAAC;MAED,OAAO,IAAIP,oBAAoB,CAC3B,MAAM,IAAI,CAACa,eAAe,CAACJ,KAAK,CAAC,EACjC,IAAI,CAACH,eACT,CAAC;IACL;IAEAK,OAAO,CAACC,GAAG,CACP,8BAA8B,IAAI,CAACL,qBAAqB,4CAC5D,CAAC;IACD,OAAO,IAAIN,kBAAkB,CAACQ,KAAK,CAAC;EACxC;EAEUI,eAAeA,CAACJ,KAAY,EAAE;IACpC,OAAOV,YAAY,CACf,IAAI,CAACK,EAAE,EACP,IAAIN,gBAAgB,CAAC;MACjBgB,MAAM,EAAE,IAAI,CAACT,MAAM;MACnBU,GAAG,EAAEN,KAAK,CAACO,MAAM,CAAC;IACtB,CAAC,CAAC,EACF;MAAEC,SAAS,EAAE,IAAI,CAACX;IAAgB,CACtC,CAAC;EACL;AACJ","ignoreList":[]}
@@ -1,16 +1,10 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.S3RedirectAssetReply = void 0;
7
- var _apiFileManager = require("@webiny/api-file-manager");
8
- var _handler = require("@webiny/handler");
9
- class S3RedirectAssetReply extends _apiFileManager.AssetReply {
1
+ import { AssetReply } from "@webiny/api-file-manager";
2
+ import { ResponseHeaders } from "@webiny/handler";
3
+ export class S3RedirectAssetReply extends AssetReply {
10
4
  constructor(url, cacheDuration) {
11
5
  super({
12
6
  code: 301,
13
- headers: _handler.ResponseHeaders.create({
7
+ headers: ResponseHeaders.create({
14
8
  location: url,
15
9
  "cache-control": "public, max-age=" + cacheDuration
16
10
  }),
@@ -18,6 +12,5 @@ class S3RedirectAssetReply extends _apiFileManager.AssetReply {
18
12
  });
19
13
  }
20
14
  }
21
- exports.S3RedirectAssetReply = S3RedirectAssetReply;
22
15
 
23
16
  //# sourceMappingURL=S3RedirectAssetReply.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_apiFileManager","require","_handler","S3RedirectAssetReply","AssetReply","constructor","url","cacheDuration","code","headers","ResponseHeaders","create","location","body","exports"],"sources":["S3RedirectAssetReply.ts"],"sourcesContent":["import { AssetReply } from \"@webiny/api-file-manager\";\nimport { ResponseHeaders } from \"@webiny/handler\";\n\nexport class S3RedirectAssetReply extends AssetReply {\n constructor(url: string, cacheDuration: number) {\n super({\n code: 301,\n headers: ResponseHeaders.create({\n location: url,\n \"cache-control\": \"public, max-age=\" + cacheDuration\n }),\n body: () => \"\"\n });\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEO,MAAME,oBAAoB,SAASC,0BAAU,CAAC;EACjDC,WAAWA,CAACC,GAAW,EAAEC,aAAqB,EAAE;IAC5C,KAAK,CAAC;MACFC,IAAI,EAAE,GAAG;MACTC,OAAO,EAAEC,wBAAe,CAACC,MAAM,CAAC;QAC5BC,QAAQ,EAAEN,GAAG;QACb,eAAe,EAAE,kBAAkB,GAAGC;MAC1C,CAAC,CAAC;MACFM,IAAI,EAAEA,CAAA,KAAM;IAChB,CAAC,CAAC;EACN;AACJ;AAACC,OAAA,CAAAX,oBAAA,GAAAA,oBAAA","ignoreList":[]}
1
+ {"version":3,"names":["AssetReply","ResponseHeaders","S3RedirectAssetReply","constructor","url","cacheDuration","code","headers","create","location","body"],"sources":["S3RedirectAssetReply.ts"],"sourcesContent":["import { AssetReply } from \"@webiny/api-file-manager\";\nimport { ResponseHeaders } from \"@webiny/handler\";\n\nexport class S3RedirectAssetReply extends AssetReply {\n constructor(url: string, cacheDuration: number) {\n super({\n code: 301,\n headers: ResponseHeaders.create({\n location: url,\n \"cache-control\": \"public, max-age=\" + cacheDuration\n }),\n body: () => \"\"\n });\n }\n}\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,0BAA0B;AACrD,SAASC,eAAe,QAAQ,iBAAiB;AAEjD,OAAO,MAAMC,oBAAoB,SAASF,UAAU,CAAC;EACjDG,WAAWA,CAACC,GAAW,EAAEC,aAAqB,EAAE;IAC5C,KAAK,CAAC;MACFC,IAAI,EAAE,GAAG;MACTC,OAAO,EAAEN,eAAe,CAACO,MAAM,CAAC;QAC5BC,QAAQ,EAAEL,GAAG;QACb,eAAe,EAAE,kBAAkB,GAAGC;MAC1C,CAAC,CAAC;MACFK,IAAI,EAAEA,CAAA,KAAM;IAChB,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
@@ -1,4 +1,5 @@
1
- import { Asset, AssetReply } from "@webiny/api-file-manager";
1
+ import type { Asset } from "@webiny/api-file-manager";
2
+ import { AssetReply } from "@webiny/api-file-manager";
2
3
  export declare class S3StreamAssetReply extends AssetReply {
3
4
  constructor(asset: Asset);
4
5
  }