@webiny/api-file-manager-s3 0.0.0-unstable.6f45466a1d → 0.0.0-unstable.7be00a75a9
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/assetDelivery/abstractions.d.ts +9 -0
- package/assetDelivery/abstractions.js +7 -0
- package/assetDelivery/abstractions.js.map +1 -0
- package/assetDelivery/assetDeliveryConfig.d.ts +1 -1
- package/assetDelivery/assetDeliveryConfig.js +12 -44
- package/assetDelivery/assetDeliveryConfig.js.map +1 -1
- package/assetDelivery/createAssetDelivery.js +5 -19
- package/assetDelivery/createAssetDelivery.js.map +1 -1
- package/assetDelivery/feature.d.ts +5 -0
- package/assetDelivery/feature.js +37 -0
- package/assetDelivery/feature.js.map +1 -0
- package/assetDelivery/index.js +0 -2
- package/assetDelivery/s3/S3AssetResolver.d.ts +3 -0
- package/assetDelivery/s3/S3AssetResolver.js +32 -22
- package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
- package/assetDelivery/s3/S3ContentsReader.js +13 -16
- package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
- package/assetDelivery/s3/S3ErrorAssetReply.js +10 -9
- package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3OutputStrategy.d.ts +5 -5
- package/assetDelivery/s3/S3OutputStrategy.js +33 -27
- package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
- package/assetDelivery/s3/S3RedirectAssetReply.js +12 -11
- package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3StreamAssetReply.js +12 -11
- package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -1
- package/assetDelivery/s3/SharpTransform.d.ts +8 -8
- package/assetDelivery/s3/SharpTransform.js +149 -169
- package/assetDelivery/s3/SharpTransform.js.map +1 -1
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js +18 -17
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -1
- package/assetDelivery/s3/transformation/CallableContentsReader.js +8 -7
- package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -1
- package/assetDelivery/s3/transformation/WidthCollection.js +15 -16
- package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -1
- package/assetDelivery/s3/transformation/utils.js +24 -30
- package/assetDelivery/s3/transformation/utils.js.map +1 -1
- package/assetDelivery/threatDetection/ObjectKey.js +15 -14
- package/assetDelivery/threatDetection/ObjectKey.js.map +1 -1
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +28 -42
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -1
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +2 -3
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -1
- package/assetDelivery/threatDetection/index.js +0 -2
- package/assetDelivery/threatDetection/processThreatScanResult.js +48 -54
- package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -1
- package/assetDelivery/threatDetection/types.js +0 -3
- package/assetDelivery/types.js +0 -3
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js +17 -13
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js.map +1 -1
- package/enterprise/ApplyThreatScanning/feature.d.ts +4 -1
- package/enterprise/ApplyThreatScanning/feature.js +6 -5
- package/enterprise/ApplyThreatScanning/feature.js.map +1 -1
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.d.ts +4 -4
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js +27 -28
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js.map +1 -1
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.d.ts +1 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js +40 -50
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js.map +1 -1
- package/features/DeleteFileFromBucket/feature.d.ts +4 -1
- package/features/DeleteFileFromBucket/feature.js +7 -6
- package/features/DeleteFileFromBucket/feature.js.map +1 -1
- package/features/ExtractMetadata/ExtractMetadataHandler.d.ts +4 -4
- package/features/ExtractMetadata/ExtractMetadataHandler.js +19 -20
- package/features/ExtractMetadata/ExtractMetadataHandler.js.map +1 -1
- package/features/ExtractMetadata/ExtractMetadataTask.d.ts +2 -1
- package/features/ExtractMetadata/ExtractMetadataTask.js +75 -113
- package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -1
- package/features/ExtractMetadata/feature.d.ts +4 -1
- package/features/ExtractMetadata/feature.js +7 -6
- package/features/ExtractMetadata/feature.js.map +1 -1
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.d.ts +4 -4
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js +21 -20
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js.map +1 -1
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.d.ts +4 -4
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js +23 -27
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js.map +1 -1
- package/features/FlushCache/InvalidateCacheTask.d.ts +1 -0
- package/features/FlushCache/InvalidateCacheTask.js +63 -74
- package/features/FlushCache/InvalidateCacheTask.js.map +1 -1
- package/features/FlushCache/feature.d.ts +4 -1
- package/features/FlushCache/feature.js +8 -7
- package/features/FlushCache/feature.js.map +1 -1
- package/features/GetFileContentsById/GetFileContentsByIdUseCase.d.ts +13 -0
- package/features/GetFileContentsById/GetFileContentsByIdUseCase.js +40 -0
- package/features/GetFileContentsById/GetFileContentsByIdUseCase.js.map +1 -0
- package/features/GetFileContentsById/feature.d.ts +4 -0
- package/features/GetFileContentsById/feature.js +11 -0
- package/features/GetFileContentsById/feature.js.map +1 -0
- package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.d.ts +13 -0
- package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.js +40 -0
- package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.js.map +1 -0
- package/features/GetFileContentsByKey/feature.d.ts +4 -0
- package/features/GetFileContentsByKey/feature.js +11 -0
- package/features/GetFileContentsByKey/feature.js.map +1 -0
- package/features/WriteFileMetadata/MetadataReader.js +9 -10
- package/features/WriteFileMetadata/MetadataReader.js.map +1 -1
- package/features/WriteFileMetadata/MetadataWriter.d.ts +1 -1
- package/features/WriteFileMetadata/MetadataWriter.js +23 -25
- package/features/WriteFileMetadata/MetadataWriter.js.map +1 -1
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +5 -5
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +16 -14
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -1
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +4 -4
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +17 -13
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -1
- package/features/WriteFileMetadata/feature.d.ts +4 -1
- package/features/WriteFileMetadata/feature.js +7 -6
- package/features/WriteFileMetadata/feature.js.map +1 -1
- package/graphql/checkPermissions.d.ts +1 -1
- package/graphql/checkPermissions.js +17 -32
- package/graphql/checkPermissions.js.map +1 -1
- package/graphql/schema.js +100 -103
- package/graphql/schema.js.map +1 -1
- package/index.js +19 -13
- package/index.js.map +1 -1
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js +50 -53
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -1
- package/multiPartUpload/CreateMultiPartUploadUseCase.js +31 -38
- package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -1
- package/package.json +30 -24
- package/types.d.ts +1 -0
- package/types.js +1 -3
- package/utils/CdnPathsGenerator.js +8 -4
- package/utils/CdnPathsGenerator.js.map +1 -1
- package/utils/FileExtension.js +12 -13
- package/utils/FileExtension.js.map +1 -1
- package/utils/FileKey.js +29 -21
- package/utils/FileKey.js.map +1 -1
- package/utils/FileKey.test.js +49 -49
- package/utils/FileKey.test.js.map +1 -1
- package/utils/FileNormalizer.js +34 -35
- package/utils/FileNormalizer.js.map +1 -1
- package/utils/FileUploadModifier.js +32 -32
- package/utils/FileUploadModifier.js.map +1 -1
- package/utils/createFileNormalizerFromContext.js +5 -4
- package/utils/createFileNormalizerFromContext.js.map +1 -1
- package/utils/getPresignedPostPayload.js +36 -33
- package/utils/getPresignedPostPayload.js.map +1 -1
- package/utils/mimeTypes.js +6 -12
- package/utils/mimeTypes.js.map +1 -1
- package/utils/uploadFileToS3.js +11 -10
- package/utils/uploadFileToS3.js.map +1 -1
- package/assetDelivery/index.js.map +0 -1
- package/assetDelivery/threatDetection/index.js.map +0 -1
- package/assetDelivery/threatDetection/types.js.map +0 -1
- package/assetDelivery/types.js.map +0 -1
- package/types.js.map +0 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
|
|
2
|
+
export interface IS3AssetDeliveryConfig {
|
|
3
|
+
presignedUrlTtl: number;
|
|
4
|
+
imageResizeWidths: number[];
|
|
5
|
+
assetStreamingMaxSize: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const S3AssetDeliveryConfig: import("@webiny/di").Abstraction<IS3AssetDeliveryConfig>;
|
|
8
|
+
export declare const S3Client: import("@webiny/di").Abstraction<S3>;
|
|
9
|
+
export declare const S3Bucket: import("@webiny/di").Abstraction<string>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
+
const S3AssetDeliveryConfig = createAbstraction("AssetDelivery/S3Config");
|
|
3
|
+
const S3Client = createAbstraction("AssetDelivery/S3Client");
|
|
4
|
+
const S3Bucket = createAbstraction("AssetDelivery/S3Bucket");
|
|
5
|
+
export { S3AssetDeliveryConfig, S3Bucket, S3Client };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assetDelivery/abstractions.js","sources":["../../src/assetDelivery/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\n\nexport interface IS3AssetDeliveryConfig {\n presignedUrlTtl: number;\n imageResizeWidths: number[];\n assetStreamingMaxSize: number;\n}\n\nexport const S3AssetDeliveryConfig =\n createAbstraction<IS3AssetDeliveryConfig>(\"AssetDelivery/S3Config\");\n\nexport const S3Client = createAbstraction<S3>(\"AssetDelivery/S3Client\");\n\nexport const S3Bucket = createAbstraction<string>(\"AssetDelivery/S3Bucket\");\n"],"names":["S3AssetDeliveryConfig","createAbstraction","S3Client","S3Bucket"],"mappings":";AASO,MAAMA,wBACTC,kBAA0C;AAEvC,MAAMC,WAAWD,kBAAsB;AAEvC,MAAME,WAAWF,kBAA0B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { AssetDeliveryParams } from "../assetDelivery/types.js";
|
|
2
|
-
export declare const assetDeliveryConfig: (params: AssetDeliveryParams) => (import("@webiny/
|
|
2
|
+
export declare const assetDeliveryConfig: (params: AssetDeliveryParams) => (import("@webiny/handler").RegisterExtensionPlugin<import("@webiny/handler/types").Context> | (import("@webiny/handler").ModifyFastifyPlugin | import("@webiny/handler").RegisterExtensionPlugin<import("@webiny/handler/types").Context>)[])[];
|
|
@@ -1,47 +1,15 @@
|
|
|
1
|
-
import { createAssetDelivery
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
} = params;
|
|
20
|
-
return [
|
|
21
|
-
// Base asset delivery
|
|
22
|
-
createBaseAssetDelivery(),
|
|
23
|
-
// S3 plugins
|
|
24
|
-
createAssetDeliveryConfig(config => {
|
|
25
|
-
const s3 = new S3({
|
|
26
|
-
region
|
|
27
|
-
});
|
|
28
|
-
config.decorateAssetResolver(({
|
|
29
|
-
container
|
|
30
|
-
}) => {
|
|
31
|
-
// This resolver loads file information from the `.metadata` file.
|
|
32
|
-
return new S3AssetResolver(container.resolve(GlobalKeyValueStore), s3, bucket);
|
|
33
|
-
});
|
|
34
|
-
config.decorateAssetOutputStrategy(() => {
|
|
35
|
-
return new S3OutputStrategy(s3, bucket, presignedUrlTtl, assetStreamingMaxSize);
|
|
36
|
-
});
|
|
37
|
-
config.decorateAssetTransformationStrategy(() => {
|
|
38
|
-
return new SharpTransform({
|
|
39
|
-
s3,
|
|
40
|
-
bucket,
|
|
41
|
-
imageResizeWidths
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
})];
|
|
1
|
+
import { createAssetDelivery } from "@webiny/api-file-manager";
|
|
2
|
+
import { createRegisterExtensionPlugin } from "@webiny/handler";
|
|
3
|
+
import { createS3AssetDeliveryFeature } from "./feature.js";
|
|
4
|
+
const assetDeliveryConfig = (params)=>{
|
|
5
|
+
const feature = createS3AssetDeliveryFeature(params);
|
|
6
|
+
return [
|
|
7
|
+
createAssetDelivery(),
|
|
8
|
+
createRegisterExtensionPlugin((context)=>{
|
|
9
|
+
feature.register(context.container);
|
|
10
|
+
})
|
|
11
|
+
];
|
|
45
12
|
};
|
|
13
|
+
export { assetDeliveryConfig };
|
|
46
14
|
|
|
47
15
|
//# sourceMappingURL=assetDeliveryConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/assetDeliveryConfig.js","sources":["../../src/assetDelivery/assetDeliveryConfig.ts"],"sourcesContent":["import { createAssetDelivery as createBaseAssetDelivery } from \"@webiny/api-file-manager\";\nimport { createRegisterExtensionPlugin } from \"@webiny/handler\";\nimport type { AssetDeliveryParams } from \"~/assetDelivery/types.js\";\nimport { createS3AssetDeliveryFeature } from \"~/assetDelivery/feature.js\";\n\nexport const assetDeliveryConfig = (params: AssetDeliveryParams) => {\n const feature = createS3AssetDeliveryFeature(params);\n\n return [\n createBaseAssetDelivery(),\n createRegisterExtensionPlugin(context => {\n feature.register(context.container);\n })\n ];\n};\n"],"names":["assetDeliveryConfig","params","feature","createS3AssetDeliveryFeature","createBaseAssetDelivery","createRegisterExtensionPlugin","context"],"mappings":";;;AAKO,MAAMA,sBAAsB,CAACC;IAChC,MAAMC,UAAUC,6BAA6BF;IAE7C,OAAO;QACHG;QACAC,8BAA8BC,CAAAA;YAC1BJ,QAAQ,QAAQ,CAACI,QAAQ,SAAS;QACtC;KACH;AACL"}
|
|
@@ -1,23 +1,9 @@
|
|
|
1
1
|
import { createAssetDeliveryPluginLoader } from "@webiny/api-file-manager";
|
|
2
2
|
import { createThreatDetectionPluginLoader } from "./threatDetection/index.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
createAssetDeliveryPluginLoader(() => {
|
|
9
|
-
return import(/* webpackChunkName: "s3AssetDelivery" */"./assetDeliveryConfig.js").then(({
|
|
10
|
-
assetDeliveryConfig
|
|
11
|
-
}) => assetDeliveryConfig(params));
|
|
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
|
-
})];
|
|
21
|
-
};
|
|
3
|
+
const createAssetDelivery = (params = {})=>[
|
|
4
|
+
createAssetDeliveryPluginLoader(()=>import("./assetDeliveryConfig.js").then(({ assetDeliveryConfig })=>assetDeliveryConfig(params))),
|
|
5
|
+
createThreatDetectionPluginLoader(()=>import("./threatDetection/createThreatDetectionEventHandler.js").then(({ createThreatDetectionEventHandler })=>createThreatDetectionEventHandler()))
|
|
6
|
+
];
|
|
7
|
+
export { createAssetDelivery };
|
|
22
8
|
|
|
23
9
|
//# sourceMappingURL=createAssetDelivery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/createAssetDelivery.js","sources":["../../src/assetDelivery/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"],"names":["createAssetDelivery","params","createAssetDeliveryPluginLoader","assetDeliveryConfig","createThreatDetectionPluginLoader","createThreatDetectionEventHandler"],"mappings":";;AAKO,MAAMA,sBAAsB,CAACC,SAA8B,CAAC,CAAC,GACzD;QAIHC,gCAAgC,IACrB,MAAM,CAAN,4BAEL,IAAI,CAAC,CAAC,EAAEC,mBAAmB,EAAE,GAAKA,oBAAoBF;QAK5DG,kCAAkC,IACvB,MAAM,CAAN,0DAEL,IAAI,CAAC,CAAC,EAAEC,iCAAiC,EAAE,GAAKA;KAEzD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { S3 } from "@webiny/aws-sdk/client-s3/index.js";
|
|
3
|
+
import { S3AssetDeliveryConfig, S3Bucket, S3Client } from "./abstractions.js";
|
|
4
|
+
import { S3AssetResolverImpl } from "./s3/S3AssetResolver.js";
|
|
5
|
+
import { S3OutputStrategyImpl } from "./s3/S3OutputStrategy.js";
|
|
6
|
+
import { SharpTransformImpl } from "./s3/SharpTransform.js";
|
|
7
|
+
const createS3AssetDeliveryFeature = (params = {})=>createFeature({
|
|
8
|
+
name: "AssetDelivery/S3",
|
|
9
|
+
register (container) {
|
|
10
|
+
container.registerInstance(S3Client, new S3({
|
|
11
|
+
region: process.env.AWS_REGION
|
|
12
|
+
}));
|
|
13
|
+
container.registerInstance(S3Bucket, process.env.S3_BUCKET);
|
|
14
|
+
container.registerInstance(S3AssetDeliveryConfig, {
|
|
15
|
+
presignedUrlTtl: params.presignedUrlTtl ?? 3600,
|
|
16
|
+
imageResizeWidths: params.imageResizeWidths ?? [
|
|
17
|
+
128,
|
|
18
|
+
384,
|
|
19
|
+
640,
|
|
20
|
+
750,
|
|
21
|
+
828,
|
|
22
|
+
1080,
|
|
23
|
+
1200,
|
|
24
|
+
1920,
|
|
25
|
+
2048,
|
|
26
|
+
3840
|
|
27
|
+
],
|
|
28
|
+
assetStreamingMaxSize: params.assetStreamingMaxSize ?? 4718592
|
|
29
|
+
});
|
|
30
|
+
container.register(S3AssetResolverImpl);
|
|
31
|
+
container.register(S3OutputStrategyImpl);
|
|
32
|
+
container.register(SharpTransformImpl);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
export { createS3AssetDeliveryFeature };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assetDelivery/feature.js","sources":["../../src/assetDelivery/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { S3Client, S3Bucket, S3AssetDeliveryConfig } from \"./abstractions.js\";\nimport type { AssetDeliveryParams } from \"./types.js\";\nimport { S3AssetResolverImpl } from \"./s3/S3AssetResolver.js\";\nimport { S3OutputStrategyImpl } from \"./s3/S3OutputStrategy.js\";\nimport { SharpTransformImpl } from \"./s3/SharpTransform.js\";\n\nexport const createS3AssetDeliveryFeature = (params: AssetDeliveryParams = {}) => {\n return createFeature({\n name: \"AssetDelivery/S3\",\n register(container) {\n container.registerInstance(\n S3Client,\n new S3({ region: process.env.AWS_REGION as string })\n );\n container.registerInstance(S3Bucket, process.env.S3_BUCKET as string);\n container.registerInstance(S3AssetDeliveryConfig, {\n presignedUrlTtl: params.presignedUrlTtl ?? 3600,\n imageResizeWidths: params.imageResizeWidths ?? [\n 128, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840\n ],\n assetStreamingMaxSize: params.assetStreamingMaxSize ?? 4718592\n });\n\n container.register(S3AssetResolverImpl);\n container.register(S3OutputStrategyImpl);\n container.register(SharpTransformImpl);\n }\n });\n};\n"],"names":["createS3AssetDeliveryFeature","params","createFeature","container","S3Client","S3","process","S3Bucket","S3AssetDeliveryConfig","S3AssetResolverImpl","S3OutputStrategyImpl","SharpTransformImpl"],"mappings":";;;;;;AAQO,MAAMA,+BAA+B,CAACC,SAA8B,CAAC,CAAC,GAClEC,cAAc;QACjB,MAAM;QACN,UAASC,SAAS;YACdA,UAAU,gBAAgB,CACtBC,UACA,IAAIC,GAAG;gBAAE,QAAQC,QAAQ,GAAG,CAAC,UAAU;YAAW;YAEtDH,UAAU,gBAAgB,CAACI,UAAUD,QAAQ,GAAG,CAAC,SAAS;YAC1DH,UAAU,gBAAgB,CAACK,uBAAuB;gBAC9C,iBAAiBP,OAAO,eAAe,IAAI;gBAC3C,mBAAmBA,OAAO,iBAAiB,IAAI;oBAC3C;oBAAK;oBAAK;oBAAK;oBAAK;oBAAK;oBAAM;oBAAM;oBAAM;oBAAM;iBACpD;gBACD,uBAAuBA,OAAO,qBAAqB,IAAI;YAC3D;YAEAE,UAAU,QAAQ,CAACM;YACnBN,UAAU,QAAQ,CAACO;YACnBP,UAAU,QAAQ,CAACQ;QACvB;IACJ"}
|
package/assetDelivery/index.js
CHANGED
|
@@ -6,5 +6,3 @@ export { S3RedirectAssetReply } from "./s3/S3RedirectAssetReply.js";
|
|
|
6
6
|
export { S3StreamAssetReply } from "./s3/S3StreamAssetReply.js";
|
|
7
7
|
export { SharpTransform } from "./s3/SharpTransform.js";
|
|
8
8
|
export { CallableContentsReader } from "./s3/transformation/CallableContentsReader.js";
|
|
9
|
-
|
|
10
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -9,3 +9,6 @@ export declare class S3AssetResolver implements AssetResolver {
|
|
|
9
9
|
constructor(keyValueStore: GlobalKeyValueStore.Interface, s3: S3, bucket: string);
|
|
10
10
|
resolve(request: AssetRequest): Promise<Asset | undefined>;
|
|
11
11
|
}
|
|
12
|
+
export declare const S3AssetResolverImpl: typeof S3AssetResolver & {
|
|
13
|
+
__abstraction: import("@webiny/di").Abstraction<AssetResolver>;
|
|
14
|
+
};
|
|
@@ -1,29 +1,39 @@
|
|
|
1
1
|
import { Asset } from "@webiny/api-file-manager";
|
|
2
|
+
import { AssetResolver } from "@webiny/api-file-manager/features/assetDelivery/abstractions.js";
|
|
3
|
+
import { GlobalKeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
|
|
2
4
|
import { S3ContentsReader } from "../index.js";
|
|
3
5
|
import { ObjectKey } from "../threatDetection/ObjectKey.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
import { S3Bucket, S3Client } from "../abstractions.js";
|
|
7
|
+
class S3AssetResolver {
|
|
8
|
+
constructor(keyValueStore, s3, bucket){
|
|
9
|
+
this.keyValueStore = keyValueStore;
|
|
10
|
+
this.s3 = s3;
|
|
11
|
+
this.bucket = bucket;
|
|
12
|
+
}
|
|
13
|
+
async resolve(request) {
|
|
14
|
+
const fileId = ObjectKey.from(request.getKey()).id();
|
|
15
|
+
const result = await this.keyValueStore.get(`FileManager/File/${fileId}/Metadata`);
|
|
16
|
+
if (result.isFail()) return;
|
|
17
|
+
const metadata = result.value;
|
|
18
|
+
const asset = new Asset({
|
|
19
|
+
id: metadata.id,
|
|
20
|
+
tenant: metadata.tenant,
|
|
21
|
+
size: metadata.size,
|
|
22
|
+
contentType: metadata.contentType,
|
|
23
|
+
key: metadata.bucketKey
|
|
24
|
+
});
|
|
25
|
+
asset.setContentsReader(new S3ContentsReader(this.s3, this.bucket));
|
|
26
|
+
return asset;
|
|
15
27
|
}
|
|
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;
|
|
26
|
-
}
|
|
27
28
|
}
|
|
29
|
+
const S3AssetResolverImpl = AssetResolver.createImplementation({
|
|
30
|
+
implementation: S3AssetResolver,
|
|
31
|
+
dependencies: [
|
|
32
|
+
GlobalKeyValueStore,
|
|
33
|
+
S3Client,
|
|
34
|
+
S3Bucket
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
export { S3AssetResolver, S3AssetResolverImpl };
|
|
28
38
|
|
|
29
39
|
//# sourceMappingURL=S3AssetResolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/s3/S3AssetResolver.js","sources":["../../../src/assetDelivery/s3/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 { AssetResolver as AssetResolverAbstraction } from \"@webiny/api-file-manager/features/assetDelivery/abstractions.js\";\nimport { GlobalKeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { S3ContentsReader } from \"~/assetDelivery/index.js\";\nimport { ObjectKey } from \"~/assetDelivery/threatDetection/ObjectKey.js\";\nimport { S3Client, S3Bucket } from \"~/assetDelivery/abstractions.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\nexport const S3AssetResolverImpl = AssetResolverAbstraction.createImplementation({\n implementation: S3AssetResolver,\n dependencies: [GlobalKeyValueStore, S3Client, S3Bucket]\n});\n"],"names":["S3AssetResolver","keyValueStore","s3","bucket","request","fileId","ObjectKey","result","metadata","asset","Asset","S3ContentsReader","S3AssetResolverImpl","AssetResolverAbstraction","GlobalKeyValueStore","S3Client","S3Bucket"],"mappings":";;;;;;AAiBO,MAAMA;IACT,YACYC,aAA4C,EAC5CC,EAAM,EACNC,MAAc,CACxB;aAHUF,aAAa,GAAbA;aACAC,EAAE,GAAFA;aACAC,MAAM,GAANA;IACT;IAEH,MAAM,QAAQC,OAAqB,EAA8B;QAC7D,MAAMC,SAASC,UAAU,IAAI,CAACF,QAAQ,MAAM,IAAI,EAAE;QAClD,MAAMG,SAAS,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CACvC,CAAC,iBAAiB,EAAEF,OAAO,SAAS,CAAC;QAGzC,IAAIE,OAAO,MAAM,IACb;QAGJ,MAAMC,WAAWD,OAAO,KAAK;QAE7B,MAAME,QAAQ,IAAIC,MAAM;YACpB,IAAIF,SAAS,EAAE;YACf,QAAQA,SAAS,MAAM;YACvB,MAAMA,SAAS,IAAI;YACnB,aAAaA,SAAS,WAAW;YACjC,KAAKA,SAAS,SAAS;QAC3B;QAEAC,MAAM,iBAAiB,CAAC,IAAIE,iBAAiB,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM;QAEjE,OAAOF;IACX;AACJ;AAEO,MAAMG,sBAAsBC,cAAAA,oBAA6C,CAAC;IAC7E,gBAAgBb;IAChB,cAAc;QAACc;QAAqBC;QAAUC;KAAS;AAC3D"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (!Body) {
|
|
14
|
-
throw Error(`Unable to read ${asset.getKey()}!`);
|
|
1
|
+
class S3ContentsReader {
|
|
2
|
+
constructor(s3, bucket){
|
|
3
|
+
this.s3 = s3;
|
|
4
|
+
this.bucket = bucket;
|
|
5
|
+
}
|
|
6
|
+
async read(asset) {
|
|
7
|
+
const { Body } = await this.s3.getObject({
|
|
8
|
+
Bucket: this.bucket,
|
|
9
|
+
Key: asset.getKey()
|
|
10
|
+
});
|
|
11
|
+
if (!Body) throw Error(`Unable to read ${asset.getKey()}!`);
|
|
12
|
+
return Buffer.from(await Body.transformToByteArray());
|
|
15
13
|
}
|
|
16
|
-
return Buffer.from(await Body.transformToByteArray());
|
|
17
|
-
}
|
|
18
14
|
}
|
|
15
|
+
export { S3ContentsReader };
|
|
19
16
|
|
|
20
17
|
//# sourceMappingURL=S3ContentsReader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/s3/S3ContentsReader.js","sources":["../../../src/assetDelivery/s3/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"],"names":["S3ContentsReader","s3","bucket","asset","Body","Error","Buffer"],"mappings":"AAGO,MAAMA;IAIT,YAAYC,EAAM,EAAEC,MAAc,CAAE;QAChC,IAAI,CAAC,EAAE,GAAGD;QACV,IAAI,CAAC,MAAM,GAAGC;IAClB;IAEA,MAAM,KAAKC,KAAY,EAAmB;QACtC,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;YACrC,QAAQ,IAAI,CAAC,MAAM;YACnB,KAAKD,MAAM,MAAM;QACrB;QAEA,IAAI,CAACC,MACD,MAAMC,MAAM,CAAC,eAAe,EAAEF,MAAM,MAAM,GAAG,CAAC,CAAC;QAGnD,OAAOG,OAAO,IAAI,CAAC,MAAMF,KAAK,oBAAoB;IACtD;AACJ"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { AssetReply } from "@webiny/api-file-manager";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
class S3ErrorAssetReply extends AssetReply {
|
|
3
|
+
constructor(message){
|
|
4
|
+
super({
|
|
5
|
+
code: 400,
|
|
6
|
+
body: ()=>({
|
|
7
|
+
error: message
|
|
8
|
+
})
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
11
|
}
|
|
12
|
+
export { S3ErrorAssetReply };
|
|
12
13
|
|
|
13
14
|
//# sourceMappingURL=S3ErrorAssetReply.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/s3/S3ErrorAssetReply.js","sources":["../../../src/assetDelivery/s3/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"],"names":["S3ErrorAssetReply","AssetReply","message"],"mappings":";AAEO,MAAMA,0BAA0BC;IACnC,YAAYC,OAAe,CAAE;QACzB,KAAK,CAAC;YACF,MAAM;YACN,MAAM,IAAO;oBAAE,OAAOA;gBAAQ;QAClC;IACJ;AACJ"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type { Asset, AssetOutputStrategy, AssetReply } from "@webiny/api-file-manager";
|
|
2
2
|
import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
|
|
3
|
-
|
|
4
|
-
* This strategy outputs an asset taking into account the size of the asset contents.
|
|
5
|
-
* If the asset is larger than 5MB, a presigned URL will be generated, and a redirect will happen.
|
|
6
|
-
*/
|
|
3
|
+
import type { IS3AssetDeliveryConfig } from "../../assetDelivery/abstractions.js";
|
|
7
4
|
export declare class S3OutputStrategy implements AssetOutputStrategy {
|
|
8
5
|
private readonly s3;
|
|
9
6
|
private readonly bucket;
|
|
10
7
|
private readonly presignedUrlTtl;
|
|
11
8
|
private readonly assetStreamingMaxSize;
|
|
12
|
-
constructor(s3: S3, bucket: string,
|
|
9
|
+
constructor(s3: S3, bucket: string, config: IS3AssetDeliveryConfig);
|
|
13
10
|
output(asset: Asset): Promise<AssetReply>;
|
|
14
11
|
protected getPresignedUrl(asset: Asset): Promise<string>;
|
|
15
12
|
}
|
|
13
|
+
export declare const S3OutputStrategyImpl: typeof S3OutputStrategy & {
|
|
14
|
+
__abstraction: import("@webiny/di").Abstraction<AssetOutputStrategy>;
|
|
15
|
+
};
|
|
@@ -1,34 +1,40 @@
|
|
|
1
|
+
import { AssetOutputStrategy } from "@webiny/api-file-manager/features/assetDelivery/abstractions.js";
|
|
1
2
|
import { GetObjectCommand, getSignedUrl } from "@webiny/aws-sdk/client-s3/index.js";
|
|
2
3
|
import { S3RedirectAssetReply } from "./S3RedirectAssetReply.js";
|
|
3
4
|
import { S3StreamAssetReply } from "./S3StreamAssetReply.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
5
|
+
import { S3AssetDeliveryConfig, S3Bucket, S3Client } from "../abstractions.js";
|
|
6
|
+
class S3OutputStrategy {
|
|
7
|
+
constructor(s3, bucket, config){
|
|
8
|
+
this.s3 = s3;
|
|
9
|
+
this.bucket = bucket;
|
|
10
|
+
this.presignedUrlTtl = config.presignedUrlTtl;
|
|
11
|
+
this.assetStreamingMaxSize = config.assetStreamingMaxSize;
|
|
12
|
+
}
|
|
13
|
+
async output(asset) {
|
|
14
|
+
if (asset.getSize() > this.assetStreamingMaxSize) {
|
|
15
|
+
console.log(`Asset size is greater than ${this.assetStreamingMaxSize}; redirecting to a presigned S3 URL.`);
|
|
16
|
+
return new S3RedirectAssetReply(await this.getPresignedUrl(asset), this.presignedUrlTtl);
|
|
17
|
+
}
|
|
18
|
+
console.log(`Asset size is smaller than ${this.assetStreamingMaxSize}; streaming directly from Lambda function.`);
|
|
19
|
+
return new S3StreamAssetReply(asset);
|
|
20
|
+
}
|
|
21
|
+
getPresignedUrl(asset) {
|
|
22
|
+
return getSignedUrl(this.s3, new GetObjectCommand({
|
|
23
|
+
Bucket: this.bucket,
|
|
24
|
+
Key: asset.getKey()
|
|
25
|
+
}), {
|
|
26
|
+
expiresIn: this.presignedUrlTtl
|
|
27
|
+
});
|
|
20
28
|
}
|
|
21
|
-
console.log(`Asset size is smaller than ${this.assetStreamingMaxSize}; streaming directly from Lambda function.`);
|
|
22
|
-
return new S3StreamAssetReply(asset);
|
|
23
|
-
}
|
|
24
|
-
getPresignedUrl(asset) {
|
|
25
|
-
return getSignedUrl(this.s3, new GetObjectCommand({
|
|
26
|
-
Bucket: this.bucket,
|
|
27
|
-
Key: asset.getKey()
|
|
28
|
-
}), {
|
|
29
|
-
expiresIn: this.presignedUrlTtl
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
29
|
}
|
|
30
|
+
const S3OutputStrategyImpl = AssetOutputStrategy.createImplementation({
|
|
31
|
+
implementation: S3OutputStrategy,
|
|
32
|
+
dependencies: [
|
|
33
|
+
S3Client,
|
|
34
|
+
S3Bucket,
|
|
35
|
+
S3AssetDeliveryConfig
|
|
36
|
+
]
|
|
37
|
+
});
|
|
38
|
+
export { S3OutputStrategy, S3OutputStrategyImpl };
|
|
33
39
|
|
|
34
40
|
//# sourceMappingURL=S3OutputStrategy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/s3/S3OutputStrategy.js","sources":["../../../src/assetDelivery/s3/S3OutputStrategy.ts"],"sourcesContent":["import type { Asset, AssetOutputStrategy, AssetReply } from \"@webiny/api-file-manager\";\nimport { AssetOutputStrategy as AssetOutputStrategyAbstraction } from \"@webiny/api-file-manager/features/assetDelivery/abstractions.js\";\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\";\nimport { S3Client, S3Bucket, S3AssetDeliveryConfig } from \"~/assetDelivery/abstractions.js\";\nimport type { IS3AssetDeliveryConfig } from \"~/assetDelivery/abstractions.js\";\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, config: IS3AssetDeliveryConfig) {\n this.s3 = s3;\n this.bucket = bucket;\n this.presignedUrlTtl = config.presignedUrlTtl;\n this.assetStreamingMaxSize = config.assetStreamingMaxSize;\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\nexport const S3OutputStrategyImpl = AssetOutputStrategyAbstraction.createImplementation({\n implementation: S3OutputStrategy,\n dependencies: [S3Client, S3Bucket, S3AssetDeliveryConfig]\n});\n"],"names":["S3OutputStrategy","s3","bucket","config","asset","console","S3RedirectAssetReply","S3StreamAssetReply","getSignedUrl","GetObjectCommand","S3OutputStrategyImpl","AssetOutputStrategyAbstraction","S3Client","S3Bucket","S3AssetDeliveryConfig"],"mappings":";;;;;AASO,MAAMA;IAMT,YAAYC,EAAM,EAAEC,MAAc,EAAEC,MAA8B,CAAE;QAChE,IAAI,CAAC,EAAE,GAAGF;QACV,IAAI,CAAC,MAAM,GAAGC;QACd,IAAI,CAAC,eAAe,GAAGC,OAAO,eAAe;QAC7C,IAAI,CAAC,qBAAqB,GAAGA,OAAO,qBAAqB;IAC7D;IAEA,MAAM,OAAOC,KAAY,EAAuB;QAC5C,IAAIA,MAAM,OAAO,KAAK,IAAI,CAAC,qBAAqB,EAAE;YAC9CC,QAAQ,GAAG,CACP,CAAC,2BAA2B,EAAE,IAAI,CAAC,qBAAqB,CAAC,oCAAoC,CAAC;YAGlG,OAAO,IAAIC,qBACP,MAAM,IAAI,CAAC,eAAe,CAACF,QAC3B,IAAI,CAAC,eAAe;QAE5B;QAEAC,QAAQ,GAAG,CACP,CAAC,2BAA2B,EAAE,IAAI,CAAC,qBAAqB,CAAC,0CAA0C,CAAC;QAExG,OAAO,IAAIE,mBAAmBH;IAClC;IAEU,gBAAgBA,KAAY,EAAE;QACpC,OAAOI,aACH,IAAI,CAAC,EAAE,EACP,IAAIC,iBAAiB;YACjB,QAAQ,IAAI,CAAC,MAAM;YACnB,KAAKL,MAAM,MAAM;QACrB,IACA;YAAE,WAAW,IAAI,CAAC,eAAe;QAAC;IAE1C;AACJ;AAEO,MAAMM,uBAAuBC,oBAAAA,oBAAmD,CAAC;IACpF,gBAAgBX;IAChB,cAAc;QAACY;QAAUC;QAAUC;KAAsB;AAC7D"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { AssetReply } from "@webiny/api-file-manager";
|
|
2
2
|
import { ResponseHeaders } from "@webiny/handler";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
class S3RedirectAssetReply extends AssetReply {
|
|
4
|
+
constructor(url, cacheDuration){
|
|
5
|
+
super({
|
|
6
|
+
code: 301,
|
|
7
|
+
headers: ResponseHeaders.create({
|
|
8
|
+
location: url,
|
|
9
|
+
"cache-control": "public, max-age=" + cacheDuration
|
|
10
|
+
}),
|
|
11
|
+
body: ()=>""
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
14
|
}
|
|
15
|
+
export { S3RedirectAssetReply };
|
|
15
16
|
|
|
16
17
|
//# sourceMappingURL=S3RedirectAssetReply.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/s3/S3RedirectAssetReply.js","sources":["../../../src/assetDelivery/s3/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"],"names":["S3RedirectAssetReply","AssetReply","url","cacheDuration","ResponseHeaders"],"mappings":";;AAGO,MAAMA,6BAA6BC;IACtC,YAAYC,GAAW,EAAEC,aAAqB,CAAE;QAC5C,KAAK,CAAC;YACF,MAAM;YACN,SAASC,gBAAgB,MAAM,CAAC;gBAC5B,UAAUF;gBACV,iBAAiB,qBAAqBC;YAC1C;YACA,MAAM,IAAM;QAChB;IACJ;AACJ"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { AssetReply } from "@webiny/api-file-manager";
|
|
2
2
|
import { ResponseHeaders } from "@webiny/handler";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
class S3StreamAssetReply extends AssetReply {
|
|
4
|
+
constructor(asset){
|
|
5
|
+
super({
|
|
6
|
+
code: 200,
|
|
7
|
+
headers: ResponseHeaders.create({
|
|
8
|
+
"cache-control": "public, max-age=31536000",
|
|
9
|
+
"content-type": asset.getContentType()
|
|
10
|
+
}),
|
|
11
|
+
body: ()=>asset.getContents()
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
14
|
}
|
|
15
|
+
export { S3StreamAssetReply };
|
|
15
16
|
|
|
16
17
|
//# sourceMappingURL=S3StreamAssetReply.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/s3/S3StreamAssetReply.js","sources":["../../../src/assetDelivery/s3/S3StreamAssetReply.ts"],"sourcesContent":["import type { Asset } from \"@webiny/api-file-manager\";\nimport { AssetReply } from \"@webiny/api-file-manager\";\nimport { ResponseHeaders } from \"@webiny/handler\";\n\nexport class S3StreamAssetReply extends AssetReply {\n constructor(asset: Asset) {\n super({\n code: 200,\n headers: ResponseHeaders.create({\n \"cache-control\": `public, max-age=${86400 * 365}`,\n \"content-type\": asset.getContentType()\n }),\n body: () => asset.getContents()\n });\n }\n}\n"],"names":["S3StreamAssetReply","AssetReply","asset","ResponseHeaders"],"mappings":";;AAIO,MAAMA,2BAA2BC;IACpC,YAAYC,KAAY,CAAE;QACtB,KAAK,CAAC;YACF,MAAM;YACN,SAASC,gBAAgB,MAAM,CAAC;gBAC5B,iBAAiB;gBACjB,gBAAgBD,MAAM,cAAc;YACxC;YACA,MAAM,IAAMA,MAAM,WAAW;QACjC;IACJ;AACJ"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
|
|
2
2
|
import type { Asset, AssetRequest, AssetTransformationStrategy } from "@webiny/api-file-manager";
|
|
3
|
-
|
|
4
|
-
s3: S3;
|
|
5
|
-
bucket: string;
|
|
6
|
-
imageResizeWidths: number[];
|
|
7
|
-
}
|
|
3
|
+
import type { IS3AssetDeliveryConfig } from "../../assetDelivery/abstractions.js";
|
|
8
4
|
export declare class SharpTransform implements AssetTransformationStrategy {
|
|
9
|
-
private readonly
|
|
10
|
-
|
|
5
|
+
private readonly s3;
|
|
6
|
+
private readonly bucket;
|
|
7
|
+
private readonly imageResizeWidths;
|
|
8
|
+
constructor(s3: S3, bucket: string, config: IS3AssetDeliveryConfig);
|
|
11
9
|
transform(assetRequest: AssetRequest, asset: Asset): Promise<Asset>;
|
|
12
10
|
private transformAsset;
|
|
13
11
|
private optimizeAsset;
|
|
@@ -15,4 +13,6 @@ export declare class SharpTransform implements AssetTransformationStrategy {
|
|
|
15
13
|
private optimizePng;
|
|
16
14
|
private optimizeJpeg;
|
|
17
15
|
}
|
|
18
|
-
export {
|
|
16
|
+
export declare const SharpTransformImpl: typeof SharpTransform & {
|
|
17
|
+
__abstraction: import("@webiny/di").Abstraction<AssetTransformationStrategy>;
|
|
18
|
+
};
|