@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.
- package/README.md +11 -1
- package/assetDelivery/assetDeliveryConfig.d.ts +2 -6
- package/assetDelivery/assetDeliveryConfig.js +24 -23
- package/assetDelivery/assetDeliveryConfig.js.map +1 -1
- package/assetDelivery/createAssetDelivery.d.ts +3 -3
- package/assetDelivery/createAssetDelivery.js +15 -12
- package/assetDelivery/createAssetDelivery.js.map +1 -1
- package/assetDelivery/index.d.ts +8 -9
- package/assetDelivery/index.js +8 -68
- package/assetDelivery/index.js.map +1 -1
- package/assetDelivery/s3/S3AssetResolver.d.ts +8 -5
- package/assetDelivery/s3/S3AssetResolver.js +19 -27
- package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
- package/assetDelivery/s3/S3ContentsReader.d.ts +2 -3
- package/assetDelivery/s3/S3ContentsReader.js +1 -8
- package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
- package/assetDelivery/s3/S3ErrorAssetReply.js +2 -9
- package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3OutputStrategy.d.ts +4 -3
- package/assetDelivery/s3/S3OutputStrategy.js +12 -17
- package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
- package/assetDelivery/s3/S3RedirectAssetReply.js +4 -11
- package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3StreamAssetReply.d.ts +2 -1
- package/assetDelivery/s3/S3StreamAssetReply.js +4 -11
- package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -1
- package/assetDelivery/s3/SharpTransform.d.ts +2 -2
- package/assetDelivery/s3/SharpTransform.js +63 -37
- package/assetDelivery/s3/SharpTransform.js.map +1 -1
- package/assetDelivery/s3/transformation/AssetKeyGenerator.d.ts +1 -1
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js +3 -12
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -1
- package/assetDelivery/s3/transformation/CallableContentsReader.d.ts +1 -2
- package/assetDelivery/s3/transformation/CallableContentsReader.js +1 -8
- package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -1
- package/assetDelivery/s3/transformation/WidthCollection.js +1 -8
- package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -1
- package/assetDelivery/s3/transformation/utils.d.ts +1 -3
- package/assetDelivery/s3/transformation/utils.js +23 -19
- package/assetDelivery/s3/transformation/utils.js.map +1 -1
- package/assetDelivery/threatDetection/ObjectKey.d.ts +7 -0
- package/assetDelivery/threatDetection/ObjectKey.js +17 -0
- package/assetDelivery/threatDetection/ObjectKey.js.map +1 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.d.ts +2 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +51 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.d.ts +2 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +6 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -0
- package/assetDelivery/threatDetection/index.d.ts +2 -0
- package/assetDelivery/threatDetection/index.js +4 -0
- package/assetDelivery/threatDetection/index.js.map +1 -0
- package/assetDelivery/threatDetection/processThreatScanResult.d.ts +3 -0
- package/assetDelivery/threatDetection/processThreatScanResult.js +65 -0
- package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -0
- package/assetDelivery/threatDetection/types.d.ts +9 -0
- package/assetDelivery/threatDetection/types.js +3 -0
- package/assetDelivery/threatDetection/types.js.map +1 -0
- package/assetDelivery/types.d.ts +10 -0
- package/assetDelivery/types.js +3 -0
- package/assetDelivery/types.js.map +1 -0
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.d.ts +11 -0
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js +19 -0
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js.map +1 -0
- package/enterprise/ApplyThreatScanning/feature.d.ts +1 -0
- package/enterprise/ApplyThreatScanning/feature.js +10 -0
- package/enterprise/ApplyThreatScanning/feature.js.map +1 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.d.ts +15 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js +36 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js.map +1 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.d.ts +31 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js +60 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js.map +1 -0
- package/features/DeleteFileFromBucket/feature.d.ts +1 -0
- package/features/DeleteFileFromBucket/feature.js +12 -0
- package/features/DeleteFileFromBucket/feature.js.map +1 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.d.ts +11 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.js +26 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.js.map +1 -0
- package/features/ExtractMetadata/ExtractMetadataTask.d.ts +23 -0
- package/features/ExtractMetadata/ExtractMetadataTask.js +128 -0
- package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -0
- package/features/ExtractMetadata/feature.d.ts +1 -0
- package/features/ExtractMetadata/feature.js +12 -0
- package/features/ExtractMetadata/feature.js.map +1 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.d.ts +12 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js +27 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js.map +1 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.d.ts +12 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js +35 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js.map +1 -0
- package/features/FlushCache/InvalidateCacheTask.d.ts +25 -0
- package/features/FlushCache/InvalidateCacheTask.js +86 -0
- package/features/FlushCache/InvalidateCacheTask.js.map +1 -0
- package/features/FlushCache/feature.d.ts +1 -0
- package/features/FlushCache/feature.js +14 -0
- package/features/FlushCache/feature.js.map +1 -0
- package/features/WriteFileMetadata/MetadataReader.d.ts +14 -0
- package/features/WriteFileMetadata/MetadataReader.js +14 -0
- package/features/WriteFileMetadata/MetadataReader.js.map +1 -0
- package/features/WriteFileMetadata/MetadataWriter.d.ts +10 -0
- package/features/WriteFileMetadata/MetadataWriter.js +28 -0
- package/features/WriteFileMetadata/MetadataWriter.js.map +1 -0
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +12 -0
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +21 -0
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +12 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +21 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -0
- package/features/WriteFileMetadata/feature.d.ts +1 -0
- package/features/WriteFileMetadata/feature.js +12 -0
- package/features/WriteFileMetadata/feature.js.map +1 -0
- package/graphql/checkPermissions.d.ts +5 -0
- package/{plugins → graphql}/checkPermissions.js +4 -11
- package/graphql/checkPermissions.js.map +1 -0
- package/graphql/schema.d.ts +1 -0
- package/{plugins/graphqlFileStorageS3.js → graphql/schema.js} +49 -57
- package/graphql/schema.js.map +1 -0
- package/index.d.ts +4 -5
- package/index.js +21 -32
- package/index.js.map +1 -1
- package/multiPartUpload/CompleteMultiPartUploadUseCase.d.ts +1 -1
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js +4 -11
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -1
- package/multiPartUpload/CreateMultiPartUploadUseCase.d.ts +2 -2
- package/multiPartUpload/CreateMultiPartUploadUseCase.js +3 -10
- package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -1
- package/package.json +23 -29
- package/types.d.ts +1 -1
- package/types.js +1 -5
- package/types.js.map +1 -1
- package/utils/CdnPathsGenerator.d.ts +3 -0
- package/utils/CdnPathsGenerator.js +7 -0
- package/utils/CdnPathsGenerator.js.map +1 -0
- package/utils/FileExtension.d.ts +1 -1
- package/utils/FileExtension.js +3 -10
- package/utils/FileExtension.js.map +1 -1
- package/utils/FileKey.d.ts +1 -1
- package/utils/FileKey.js +5 -13
- package/utils/FileKey.js.map +1 -1
- package/utils/FileKey.test.js +8 -9
- package/utils/FileKey.test.js.map +1 -1
- package/utils/FileNormalizer.d.ts +2 -2
- package/utils/FileNormalizer.js +5 -12
- package/utils/FileNormalizer.js.map +1 -1
- package/utils/FileUploadModifier.d.ts +1 -1
- package/utils/FileUploadModifier.js +6 -16
- package/utils/FileUploadModifier.js.map +1 -1
- package/utils/createFileNormalizerFromContext.d.ts +2 -2
- package/utils/createFileNormalizerFromContext.js +5 -12
- package/utils/createFileNormalizerFromContext.js.map +1 -1
- package/utils/getPresignedPostPayload.d.ts +4 -3
- package/utils/getPresignedPostPayload.js +10 -15
- package/utils/getPresignedPostPayload.js.map +1 -1
- package/utils/mimeTypes.js +5 -13
- package/utils/mimeTypes.js.map +1 -1
- package/utils/uploadFileToS3.d.ts +1 -3
- package/utils/uploadFileToS3.js +7 -20
- package/utils/uploadFileToS3.js.map +1 -1
- package/assetDelivery/createCustomAssetDelivery.d.ts +0 -12
- package/assetDelivery/createCustomAssetDelivery.js +0 -28
- package/assetDelivery/createCustomAssetDelivery.js.map +0 -1
- package/assetDelivery/customAssets/CustomAsset.d.ts +0 -6
- package/assetDelivery/customAssets/CustomAsset.js +0 -14
- package/assetDelivery/customAssets/CustomAsset.js.map +0 -1
- package/assetDelivery/customAssets/CustomAssetProcessor.d.ts +0 -10
- package/assetDelivery/customAssets/CustomAssetProcessor.js +0 -25
- package/assetDelivery/customAssets/CustomAssetProcessor.js.map +0 -1
- package/assetDelivery/customAssets/S3CustomAssetResolver.d.ts +0 -15
- package/assetDelivery/customAssets/S3CustomAssetResolver.js +0 -90
- package/assetDelivery/customAssets/S3CustomAssetResolver.js.map +0 -1
- package/assetDelivery/customAssets/customAssetDeliveryConfig.d.ts +0 -1
- package/assetDelivery/customAssets/customAssetDeliveryConfig.js +0 -30
- package/assetDelivery/customAssets/customAssetDeliveryConfig.js.map +0 -1
- package/assetDelivery/s3/S3AssetMetadataReader.d.ts +0 -15
- package/assetDelivery/s3/S3AssetMetadataReader.js +0 -36
- package/assetDelivery/s3/S3AssetMetadataReader.js.map +0 -1
- package/assetDelivery/s3/transformation/legacyUtils.d.ts +0 -12
- package/assetDelivery/s3/transformation/legacyUtils.js +0 -34
- package/assetDelivery/s3/transformation/legacyUtils.js.map +0 -1
- package/flushCdnCache/CdnPathsGenerator.d.ts +0 -4
- package/flushCdnCache/CdnPathsGenerator.js +0 -14
- package/flushCdnCache/CdnPathsGenerator.js.map +0 -1
- package/flushCdnCache/InvalidateCacheTask.d.ts +0 -18
- package/flushCdnCache/InvalidateCacheTask.js +0 -78
- package/flushCdnCache/InvalidateCacheTask.js.map +0 -1
- package/flushCdnCache/flushCacheOnFileDelete.d.ts +0 -3
- package/flushCdnCache/flushCacheOnFileDelete.js +0 -34
- package/flushCdnCache/flushCacheOnFileDelete.js.map +0 -1
- package/flushCdnCache/flushCacheOnFileUpdate.d.ts +0 -3
- package/flushCdnCache/flushCacheOnFileUpdate.js +0 -40
- package/flushCdnCache/flushCacheOnFileUpdate.js.map +0 -1
- package/flushCdnCache/index.d.ts +0 -1
- package/flushCdnCache/index.js +0 -15
- package/flushCdnCache/index.js.map +0 -1
- package/flushCdnCache/invalidateCacheTaskDefinition.d.ts +0 -2
- package/flushCdnCache/invalidateCacheTaskDefinition.js +0 -22
- package/flushCdnCache/invalidateCacheTaskDefinition.js.map +0 -1
- package/plugins/addFileMetadata.d.ts +0 -10
- package/plugins/addFileMetadata.js +0 -67
- package/plugins/addFileMetadata.js.map +0 -1
- package/plugins/checkPermissions.d.ts +0 -4
- package/plugins/checkPermissions.js.map +0 -1
- package/plugins/fileStorageS3.d.ts +0 -3
- package/plugins/fileStorageS3.js +0 -60
- package/plugins/fileStorageS3.js.map +0 -1
- package/plugins/graphqlFileStorageS3.d.ts +0 -4
- 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 {
|
|
2
|
-
export declare
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
(
|
|
22
|
+
createBaseAssetDelivery(),
|
|
23
23
|
// S3 plugins
|
|
24
|
-
|
|
25
|
-
const s3 = new
|
|
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
|
|
32
|
+
return new S3AssetResolver(container.resolve(GlobalKeyValueStore), s3, bucket);
|
|
31
33
|
});
|
|
32
34
|
config.decorateAssetOutputStrategy(() => {
|
|
33
|
-
return new
|
|
35
|
+
return new S3OutputStrategy(s3, bucket, presignedUrlTtl, assetStreamingMaxSize);
|
|
34
36
|
});
|
|
35
37
|
config.decorateAssetTransformationStrategy(() => {
|
|
36
|
-
return new
|
|
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":["
|
|
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 "
|
|
3
|
-
export declare const createAssetDelivery: (params
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
13
|
-
return import(
|
|
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":["
|
|
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":[]}
|
package/assetDelivery/index.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
export { S3AssetResolver } from "./s3/S3AssetResolver";
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
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";
|
package/assetDelivery/index.js
CHANGED
|
@@ -1,70 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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":["
|
|
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 {
|
|
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
|
|
5
|
-
private
|
|
6
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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":["
|
|
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
|
-
|
|
2
|
-
import {
|
|
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
|
-
|
|
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"
|
|
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
|
-
|
|
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":["
|
|
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
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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 (
|
|
24
|
-
|
|
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
|
-
|
|
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
|
|
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":["
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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:
|
|
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":["
|
|
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
|
|
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
|
}
|