@webiny/api-file-manager-s3 0.0.0-unstable.eb196ccd2f → 0.0.0-unstable.eb81deee7e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FileManagerS3Feature.d.ts +9 -0
- package/FileManagerS3Feature.js +27 -0
- package/FileManagerS3Feature.js.map +1 -0
- package/README.md +11 -1
- package/assetDelivery/abstractions.d.ts +11 -0
- package/assetDelivery/abstractions.js +7 -0
- package/assetDelivery/abstractions.js.map +1 -0
- package/assetDelivery/assetDeliveryConfig.d.ts +2 -2
- package/assetDelivery/assetDeliveryConfig.js +10 -49
- package/assetDelivery/assetDeliveryConfig.js.map +1 -1
- package/assetDelivery/createAssetDelivery.d.ts +3 -3
- package/assetDelivery/createAssetDelivery.js +7 -28
- package/assetDelivery/createAssetDelivery.js.map +1 -1
- package/assetDelivery/feature.d.ts +5 -0
- package/assetDelivery/feature.js +36 -0
- package/assetDelivery/feature.js.map +1 -0
- package/assetDelivery/index.d.ts +8 -9
- package/assetDelivery/index.js +8 -70
- package/assetDelivery/s3/LazySharpTransform.d.ts +34 -0
- package/assetDelivery/s3/LazySharpTransform.js +34 -0
- package/assetDelivery/s3/LazySharpTransform.js.map +1 -0
- package/assetDelivery/s3/S3AssetResolver.d.ts +9 -4
- package/assetDelivery/s3/S3AssetResolver.js +34 -32
- package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
- package/assetDelivery/s3/S3ContentsReader.d.ts +1 -3
- package/assetDelivery/s3/S3ContentsReader.js +12 -22
- package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
- package/assetDelivery/s3/S3ErrorAssetReply.js +11 -17
- package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3OutputStrategy.d.ts +6 -6
- package/assetDelivery/s3/S3OutputStrategy.js +35 -35
- package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
- package/assetDelivery/s3/S3RedirectAssetReply.js +14 -20
- package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3StreamAssetReply.js +14 -20
- package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -1
- package/assetDelivery/s3/SharpTransform.d.ts +22 -14
- package/assetDelivery/s3/SharpTransform.js +163 -182
- package/assetDelivery/s3/SharpTransform.js.map +1 -1
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js +17 -25
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -1
- package/assetDelivery/s3/transformation/CallableContentsReader.d.ts +0 -2
- package/assetDelivery/s3/transformation/CallableContentsReader.js +7 -13
- package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -1
- package/assetDelivery/s3/transformation/WidthCollection.js +14 -22
- package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -1
- package/assetDelivery/s3/transformation/utils.d.ts +1 -3
- package/assetDelivery/s3/transformation/utils.js +26 -28
- package/assetDelivery/s3/transformation/utils.js.map +1 -1
- package/assetDelivery/threatDetection/ObjectKey.d.ts +7 -0
- package/assetDelivery/threatDetection/ObjectKey.js +18 -0
- package/assetDelivery/threatDetection/ObjectKey.js.map +1 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.d.ts +22 -2
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +49 -58
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -1
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.d.ts +1 -1
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +3 -11
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -1
- package/assetDelivery/threatDetection/index.d.ts +2 -2
- package/assetDelivery/threatDetection/index.js +2 -29
- package/assetDelivery/threatDetection/processThreatScanResult.d.ts +3 -2
- package/assetDelivery/threatDetection/processThreatScanResult.js +56 -61
- package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -1
- package/assetDelivery/threatDetection/types.d.ts +0 -4
- package/assetDelivery/threatDetection/types.js +0 -7
- package/assetDelivery/types.d.ts +4 -2
- package/assetDelivery/types.js +0 -7
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.d.ts +13 -0
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js +28 -0
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js.map +1 -0
- package/enterprise/ApplyThreatScanning/feature.d.ts +4 -0
- package/enterprise/ApplyThreatScanning/feature.js +11 -0
- package/enterprise/ApplyThreatScanning/feature.js.map +1 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.d.ts +15 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js +35 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js.map +1 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.d.ts +37 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js +57 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js.map +1 -0
- package/features/DeleteFileFromBucket/feature.d.ts +4 -0
- package/features/DeleteFileFromBucket/feature.js +13 -0
- package/features/DeleteFileFromBucket/feature.js.map +1 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.d.ts +11 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.js +25 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.js.map +1 -0
- package/features/ExtractMetadata/ExtractMetadataTask.d.ts +29 -0
- package/features/ExtractMetadata/ExtractMetadataTask.js +99 -0
- package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -0
- package/features/ExtractMetadata/feature.d.ts +4 -0
- package/features/ExtractMetadata/feature.js +13 -0
- package/features/ExtractMetadata/feature.js.map +1 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.d.ts +12 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js +28 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js.map +1 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.d.ts +12 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js +31 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js.map +1 -0
- package/features/FlushCache/InvalidateCacheTask.d.ts +31 -0
- package/features/FlushCache/InvalidateCacheTask.js +84 -0
- package/features/FlushCache/InvalidateCacheTask.js.map +1 -0
- package/features/FlushCache/feature.d.ts +4 -0
- package/features/FlushCache/feature.js +15 -0
- package/features/FlushCache/feature.js.map +1 -0
- 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.d.ts +14 -0
- package/features/WriteFileMetadata/MetadataReader.js +13 -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 +23 -0
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +12 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +25 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -0
- package/features/WriteFileMetadata/feature.d.ts +4 -0
- package/features/WriteFileMetadata/feature.js +13 -0
- package/features/WriteFileMetadata/feature.js.map +1 -0
- package/graphql/S3GraphQLSchema.d.ts +10 -0
- package/graphql/S3GraphQLSchema.js +233 -0
- package/graphql/S3GraphQLSchema.js.map +1 -0
- package/graphql/checkPermissions.d.ts +5 -0
- package/graphql/checkPermissions.js +22 -0
- package/graphql/checkPermissions.js.map +1 -0
- package/index.d.ts +4 -5
- package/index.js +3 -36
- package/multiPartUpload/CompleteMultiPartUploadUseCase.d.ts +1 -1
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js +49 -59
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -1
- package/multiPartUpload/CreateMultiPartUploadUseCase.d.ts +2 -2
- package/multiPartUpload/CreateMultiPartUploadUseCase.js +30 -44
- package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -1
- package/package.json +36 -34
- package/types.d.ts +2 -1
- package/types.js +1 -7
- package/utils/CdnPathsGenerator.d.ts +3 -0
- package/utils/CdnPathsGenerator.js +11 -0
- package/utils/CdnPathsGenerator.js.map +1 -0
- package/utils/FileExtension.d.ts +1 -1
- package/utils/FileExtension.js +11 -19
- package/utils/FileExtension.js.map +1 -1
- package/utils/FileKey.d.ts +1 -1
- package/utils/FileKey.js +29 -29
- package/utils/FileKey.js.map +1 -1
- package/utils/FileKey.test.js +50 -51
- package/utils/FileKey.test.js.map +1 -1
- package/utils/FileNormalizer.d.ts +2 -2
- package/utils/FileNormalizer.js +35 -43
- package/utils/FileNormalizer.js.map +1 -1
- package/utils/FileUploadModifier.d.ts +9 -3
- package/utils/FileUploadModifier.js +36 -44
- package/utils/FileUploadModifier.js.map +1 -1
- package/utils/createFileNormalizerFromContext.d.ts +2 -2
- package/utils/createFileNormalizerFromContext.js +6 -12
- package/utils/createFileNormalizerFromContext.js.map +1 -1
- package/utils/getPresignedPostPayload.d.ts +4 -3
- package/utils/getPresignedPostPayload.js +38 -40
- package/utils/getPresignedPostPayload.js.map +1 -1
- package/utils/mimeTypes.js +6 -20
- package/utils/mimeTypes.js.map +1 -1
- package/utils/uploadFileToS3.d.ts +2 -5
- package/utils/uploadFileToS3.js +11 -23
- 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/index.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/assetDelivery/threatDetection/index.js.map +0 -1
- package/assetDelivery/threatDetection/types.js.map +0 -1
- package/assetDelivery/types.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/index.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 +0 -44
- 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 +0 -213
- package/plugins/graphqlFileStorageS3.js.map +0 -1
- package/types.js.map +0 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Container } from "@webiny/feature/api";
|
|
2
|
+
import type { AssetDeliveryParams } from "./assetDelivery/types.js";
|
|
3
|
+
export interface FileManagerS3FeatureConfig {
|
|
4
|
+
assetDelivery?: AssetDeliveryParams;
|
|
5
|
+
}
|
|
6
|
+
export declare const FileManagerS3Feature: {
|
|
7
|
+
name: string;
|
|
8
|
+
register(container: Container, context?: FileManagerS3FeatureConfig | undefined): void;
|
|
9
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { S3GraphQLSchema } from "./graphql/S3GraphQLSchema.js";
|
|
3
|
+
import { DeleteFileFromBucketFeature } from "./features/DeleteFileFromBucket/feature.js";
|
|
4
|
+
import { WriteFileMetadataFeature } from "./features/WriteFileMetadata/feature.js";
|
|
5
|
+
import { ApplyThreatScanningFeature } from "./enterprise/ApplyThreatScanning/feature.js";
|
|
6
|
+
import { FlushCacheFeature } from "./features/FlushCache/feature.js";
|
|
7
|
+
import { ExtractMetadataFeature } from "./features/ExtractMetadata/feature.js";
|
|
8
|
+
import { GetFileContentsByIdFeature } from "./features/GetFileContentsById/feature.js";
|
|
9
|
+
import { GetFileContentsByKeyFeature } from "./features/GetFileContentsByKey/feature.js";
|
|
10
|
+
import { createS3AssetDeliveryFeature } from "./assetDelivery/feature.js";
|
|
11
|
+
const FileManagerS3Feature = createFeature({
|
|
12
|
+
name: "FileManagerS3",
|
|
13
|
+
register (container, config = {}) {
|
|
14
|
+
createS3AssetDeliveryFeature(config.assetDelivery).register(container);
|
|
15
|
+
FlushCacheFeature.register(container);
|
|
16
|
+
DeleteFileFromBucketFeature.register(container);
|
|
17
|
+
ExtractMetadataFeature.register(container);
|
|
18
|
+
WriteFileMetadataFeature.register(container);
|
|
19
|
+
GetFileContentsByIdFeature.register(container);
|
|
20
|
+
GetFileContentsByKeyFeature.register(container);
|
|
21
|
+
container.register(S3GraphQLSchema);
|
|
22
|
+
ApplyThreatScanningFeature.register(container);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
export { FileManagerS3Feature };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=FileManagerS3Feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileManagerS3Feature.js","sources":["../src/FileManagerS3Feature.ts"],"sourcesContent":["import { type Container, createFeature } from \"@webiny/feature/api\";\nimport { S3GraphQLSchema } from \"./graphql/S3GraphQLSchema.js\";\nimport { DeleteFileFromBucketFeature } from \"~/features/DeleteFileFromBucket/feature.js\";\nimport { WriteFileMetadataFeature } from \"~/features/WriteFileMetadata/feature.js\";\nimport { ApplyThreatScanningFeature } from \"~/enterprise/ApplyThreatScanning/feature.js\";\nimport { FlushCacheFeature } from \"~/features/FlushCache/feature.js\";\nimport { ExtractMetadataFeature } from \"~/features/ExtractMetadata/feature.js\";\nimport { GetFileContentsByIdFeature } from \"~/features/GetFileContentsById/feature.js\";\nimport { GetFileContentsByKeyFeature } from \"~/features/GetFileContentsByKey/feature.js\";\nimport { createS3AssetDeliveryFeature } from \"./assetDelivery/feature.js\";\nimport type { AssetDeliveryParams } from \"./assetDelivery/types.js\";\n\nexport interface FileManagerS3FeatureConfig {\n assetDelivery?: AssetDeliveryParams;\n}\n\nexport const FileManagerS3Feature = createFeature({\n name: \"FileManagerS3\",\n register(container: Container, config: FileManagerS3FeatureConfig = {}) {\n // Register S3-specific asset delivery implementations (S3AssetResolver, S3OutputStrategy).\n // These replace the null implementations from AssetDeliveryFeature in FileManagerAppFeature.\n createS3AssetDeliveryFeature(config.assetDelivery).register(container);\n\n // S3 file-operation features.\n FlushCacheFeature.register(container);\n DeleteFileFromBucketFeature.register(container);\n ExtractMetadataFeature.register(container);\n WriteFileMetadataFeature.register(container);\n GetFileContentsByIdFeature.register(container);\n GetFileContentsByKeyFeature.register(container);\n\n // Static S3 GraphQL schema (extends FmQuery/FmMutation) — a DI-native\n // CoreGraphQLSchemaFactory contributor (declares its resolver dependencies).\n container.register(S3GraphQLSchema);\n\n // Threat scanning is WCP-gated, but the license is per-request (loaded post-register). Register\n // unconditionally; CreateFileWithThreatScanDecorator + the GuardDuty event handler both guard\n // on canUseFileManagerThreatDetection() at request time and no-op/pass-through when unlicensed.\n ApplyThreatScanningFeature.register(container);\n }\n});\n"],"names":["FileManagerS3Feature","createFeature","container","config","createS3AssetDeliveryFeature","FlushCacheFeature","DeleteFileFromBucketFeature","ExtractMetadataFeature","WriteFileMetadataFeature","GetFileContentsByIdFeature","GetFileContentsByKeyFeature","S3GraphQLSchema","ApplyThreatScanningFeature"],"mappings":";;;;;;;;;;AAgBO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAoB,EAAEC,SAAqC,CAAC,CAAC;QAGlEC,6BAA6BD,OAAO,aAAa,EAAE,QAAQ,CAACD;QAG5DG,kBAAkB,QAAQ,CAACH;QAC3BI,4BAA4B,QAAQ,CAACJ;QACrCK,uBAAuB,QAAQ,CAACL;QAChCM,yBAAyB,QAAQ,CAACN;QAClCO,2BAA2B,QAAQ,CAACP;QACpCQ,4BAA4B,QAAQ,CAACR;QAIrCA,UAAU,QAAQ,CAACS;QAKnBC,2BAA2B,QAAQ,CAACV;IACxC;AACJ"}
|
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._
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
|
|
2
|
+
import type { ImageFormat } from "@webiny/api-file-manager/features/assetDelivery/transformation/index.js";
|
|
3
|
+
export interface IS3AssetDeliveryConfig {
|
|
4
|
+
presignedUrlTtl: number;
|
|
5
|
+
imageResizeWidths: number[];
|
|
6
|
+
imageQuality?: Partial<Record<ImageFormat, number>>;
|
|
7
|
+
assetStreamingMaxSize: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const S3AssetDeliveryConfig: import("@webiny/di").Abstraction<IS3AssetDeliveryConfig>;
|
|
10
|
+
export declare const S3Client: import("@webiny/di").Abstraction<S3>;
|
|
11
|
+
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\";\nimport type { ImageFormat } from \"@webiny/api-file-manager/features/assetDelivery/transformation/index.js\";\n\nexport interface IS3AssetDeliveryConfig {\n presignedUrlTtl: number;\n imageResizeWidths: number[];\n imageQuality?: Partial<Record<ImageFormat, 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":";AAWO,MAAMA,wBACTC,kBAA0C;AAEvC,MAAMC,WAAWD,kBAAsB;AAEvC,MAAME,WAAWF,kBAA0B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { AssetDeliveryParams } from "
|
|
2
|
-
export declare const assetDeliveryConfig: (params: AssetDeliveryParams) =>
|
|
1
|
+
import type { AssetDeliveryParams } from "../assetDelivery/types.js";
|
|
2
|
+
export declare const assetDeliveryConfig: (params: AssetDeliveryParams) => import("@webiny/handler").RegisterExtensionPlugin<import("@webiny/handler/types").Context>[];
|
|
@@ -1,52 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var _S3OutputStrategy = require("./s3/S3OutputStrategy");
|
|
11
|
-
var _SharpTransform = require("./s3/SharpTransform");
|
|
12
|
-
const assetDeliveryConfig = params => {
|
|
13
|
-
const bucket = process.env.S3_BUCKET;
|
|
14
|
-
const region = process.env.AWS_REGION;
|
|
15
|
-
const {
|
|
16
|
-
// Presigned URLs last 1 hour
|
|
17
|
-
presignedUrlTtl = 3600,
|
|
18
|
-
imageResizeWidths = [100, 300, 500, 750, 1000, 1500, 2500],
|
|
19
|
-
/**
|
|
20
|
-
* Even though Lambda's response payload limit is 6,291,556 bytes, we leave some room for the response envelope.
|
|
21
|
-
* 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.
|
|
22
|
-
*/
|
|
23
|
-
assetStreamingMaxSize = 4718592,
|
|
24
|
-
...baseParams
|
|
25
|
-
} = params;
|
|
26
|
-
return [
|
|
27
|
-
// Base asset delivery
|
|
28
|
-
(0, _apiFileManager.createAssetDelivery)(baseParams),
|
|
29
|
-
// S3 plugins
|
|
30
|
-
(0, _apiFileManager.createAssetDeliveryConfig)(config => {
|
|
31
|
-
const s3 = new _clientS.S3({
|
|
32
|
-
region
|
|
33
|
-
});
|
|
34
|
-
config.decorateAssetResolver(() => {
|
|
35
|
-
// This resolver loads file information from the `.metadata` file.
|
|
36
|
-
return new _S3AssetResolver.S3AssetResolver(s3, bucket);
|
|
37
|
-
});
|
|
38
|
-
config.decorateAssetOutputStrategy(() => {
|
|
39
|
-
return new _S3OutputStrategy.S3OutputStrategy(s3, bucket, presignedUrlTtl, assetStreamingMaxSize);
|
|
40
|
-
});
|
|
41
|
-
config.decorateAssetTransformationStrategy(() => {
|
|
42
|
-
return new _SharpTransform.SharpTransform({
|
|
43
|
-
s3,
|
|
44
|
-
bucket,
|
|
45
|
-
imageResizeWidths
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
})];
|
|
1
|
+
import { createRegisterExtensionPlugin } from "@webiny/handler";
|
|
2
|
+
import { createS3AssetDeliveryFeature } from "./feature.js";
|
|
3
|
+
const assetDeliveryConfig = (params)=>{
|
|
4
|
+
const feature = createS3AssetDeliveryFeature(params);
|
|
5
|
+
return [
|
|
6
|
+
createRegisterExtensionPlugin((context)=>{
|
|
7
|
+
feature.register(context.container);
|
|
8
|
+
})
|
|
9
|
+
];
|
|
49
10
|
};
|
|
50
|
-
|
|
11
|
+
export { assetDeliveryConfig };
|
|
51
12
|
|
|
52
13
|
//# sourceMappingURL=assetDeliveryConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/assetDeliveryConfig.js","sources":["../../src/assetDelivery/assetDeliveryConfig.ts"],"sourcesContent":["import { 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 createRegisterExtensionPlugin(context => {\n feature.register(context.container);\n })\n ];\n};\n"],"names":["assetDeliveryConfig","params","feature","createS3AssetDeliveryFeature","createRegisterExtensionPlugin","context"],"mappings":";;AAIO,MAAMA,sBAAsB,CAACC;IAChC,MAAMC,UAAUC,6BAA6BF;IAE7C,OAAO;QACHG,8BAA8BC,CAAAA;YAC1BH,QAAQ,QAAQ,CAACG,QAAQ,SAAS;QACtC;KACH;AACL"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { 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,30 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
})
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var _threatDetection = require("./threatDetection");
|
|
9
|
-
const createAssetDelivery = params => {
|
|
10
|
-
return [
|
|
11
|
-
/**
|
|
12
|
-
* We only want to load this plugin in the context of the Asset Delivery Lambda function.
|
|
13
|
-
*/
|
|
14
|
-
(0, _apiFileManager.createAssetDeliveryPluginLoader)(() => {
|
|
15
|
-
return import(/* webpackChunkName: "s3AssetDelivery" */"./assetDeliveryConfig").then(({
|
|
16
|
-
assetDeliveryConfig
|
|
17
|
-
}) => assetDeliveryConfig(params));
|
|
18
|
-
}),
|
|
19
|
-
/**
|
|
20
|
-
* We only want to load this plugin in the context of the Threat Detection Lambda function.
|
|
21
|
-
*/
|
|
22
|
-
(0, _threatDetection.createThreatDetectionPluginLoader)(() => {
|
|
23
|
-
return import(/* webpackChunkName: "threatDetectionEventHandler" */"./threatDetection/createThreatDetectionEventHandler").then(({
|
|
24
|
-
createThreatDetectionEventHandler
|
|
25
|
-
}) => createThreatDetectionEventHandler());
|
|
26
|
-
})];
|
|
27
|
-
};
|
|
28
|
-
exports.createAssetDelivery = createAssetDelivery;
|
|
1
|
+
import { createAssetDeliveryPluginLoader } from "@webiny/api-file-manager";
|
|
2
|
+
import { createThreatDetectionPluginLoader } from "./threatDetection/index.js";
|
|
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 };
|
|
29
8
|
|
|
30
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,36 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { createS3 } 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 { LazySharpTransformImpl } from "./s3/LazySharpTransform.js";
|
|
7
|
+
const createS3AssetDeliveryFeature = (params = {})=>createFeature({
|
|
8
|
+
name: "AssetDelivery/S3",
|
|
9
|
+
register (container) {
|
|
10
|
+
container.registerFactory(S3Client, ()=>createS3());
|
|
11
|
+
container.registerInstance(S3Bucket, process.env.S3_BUCKET);
|
|
12
|
+
container.registerInstance(S3AssetDeliveryConfig, {
|
|
13
|
+
presignedUrlTtl: params.presignedUrlTtl ?? 3600,
|
|
14
|
+
imageResizeWidths: params.imageResizeWidths ?? [
|
|
15
|
+
128,
|
|
16
|
+
384,
|
|
17
|
+
640,
|
|
18
|
+
750,
|
|
19
|
+
828,
|
|
20
|
+
1080,
|
|
21
|
+
1200,
|
|
22
|
+
1920,
|
|
23
|
+
2048,
|
|
24
|
+
3840
|
|
25
|
+
],
|
|
26
|
+
imageQuality: params.imageQuality ?? {},
|
|
27
|
+
assetStreamingMaxSize: params.assetStreamingMaxSize ?? 4718592
|
|
28
|
+
});
|
|
29
|
+
container.register(S3AssetResolverImpl);
|
|
30
|
+
container.register(S3OutputStrategyImpl);
|
|
31
|
+
if ("asset-delivery" === process.env.WEBINY_FUNCTION_TYPE) container.register(LazySharpTransformImpl).inSingletonScope();
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
export { createS3AssetDeliveryFeature };
|
|
35
|
+
|
|
36
|
+
//# 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 { createS3 } 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 { LazySharpTransformImpl } from \"./s3/LazySharpTransform.js\";\n\nexport const createS3AssetDeliveryFeature = (params: AssetDeliveryParams = {}) => {\n return createFeature({\n name: \"AssetDelivery/S3\",\n register(container) {\n // register() runs for every request, so build the client only when something resolves\n // it, and reuse it across requests. Building it here cost every request an S3 client.\n container.registerFactory(S3Client, () => createS3());\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 imageQuality: params.imageQuality ?? {},\n assetStreamingMaxSize: params.assetStreamingMaxSize ?? 4718592\n });\n\n container.register(S3AssetResolverImpl);\n container.register(S3OutputStrategyImpl);\n\n if (process.env.WEBINY_FUNCTION_TYPE === \"asset-delivery\") {\n // Registered eagerly; `sharp` is still loaded lazily, inside the handler.\n container.register(LazySharpTransformImpl).inSingletonScope();\n }\n }\n });\n};\n"],"names":["createS3AssetDeliveryFeature","params","createFeature","container","S3Client","createS3","S3Bucket","process","S3AssetDeliveryConfig","S3AssetResolverImpl","S3OutputStrategyImpl","LazySharpTransformImpl"],"mappings":";;;;;;AAQO,MAAMA,+BAA+B,CAACC,SAA8B,CAAC,CAAC,GAClEC,cAAc;QACjB,MAAM;QACN,UAASC,SAAS;YAGdA,UAAU,eAAe,CAACC,UAAU,IAAMC;YAC1CF,UAAU,gBAAgB,CAACG,UAAUC,QAAQ,GAAG,CAAC,SAAS;YAC1DJ,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,cAAcA,OAAO,YAAY,IAAI,CAAC;gBACtC,uBAAuBA,OAAO,qBAAqB,IAAI;YAC3D;YAEAE,UAAU,QAAQ,CAACM;YACnBN,UAAU,QAAQ,CAACO;YAEnB,IAAIH,AAAqC,qBAArCA,QAAQ,GAAG,CAAC,oBAAoB,EAEhCJ,UAAU,QAAQ,CAACQ,wBAAwB,gBAAgB;QAEnE;IACJ"}
|
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,8 @@
|
|
|
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");
|
|
69
|
-
|
|
70
|
-
//# sourceMappingURL=index.js.map
|
|
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";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
3
|
+
import { GetFileUseCase } from "@webiny/api-file-manager/features/file/GetFile/index.js";
|
|
4
|
+
import { ImageAssetTypeHandler } from "@webiny/api-file-manager/features/assetDelivery/assetTypes/image/index.js";
|
|
5
|
+
import type { Asset } from "@webiny/api-file-manager/delivery/AssetDelivery/Asset.js";
|
|
6
|
+
import type { AssetRequest } from "@webiny/api-file-manager/delivery/AssetDelivery/AssetRequest.js";
|
|
7
|
+
import type { IS3AssetDeliveryConfig } from "../../assetDelivery/abstractions.js";
|
|
8
|
+
/**
|
|
9
|
+
* Defers loading `sharp` until an image is actually transformed.
|
|
10
|
+
*
|
|
11
|
+
* The dynamic import is deliberate — it keeps `sharp` out of the main bundle (note the
|
|
12
|
+
* `webpackChunkName`). That import is async and DI resolution is not, which is why this used to be
|
|
13
|
+
* a per-request `RequestContextInitializer` that imported the module and then registered the real
|
|
14
|
+
* handler. `IAssetTypeHandler` has a single async method, so the import can be awaited there
|
|
15
|
+
* instead.
|
|
16
|
+
*
|
|
17
|
+
* The constructed handler IS memoized: the initializer registered it `.inSingletonScope()`, and
|
|
18
|
+
* nothing below caches the instance (Node caches the module, not the object built from it).
|
|
19
|
+
*/
|
|
20
|
+
declare class LazySharpTransform implements ImageAssetTypeHandler.Interface {
|
|
21
|
+
private readonly s3;
|
|
22
|
+
private readonly bucket;
|
|
23
|
+
private readonly config;
|
|
24
|
+
private readonly identityContext;
|
|
25
|
+
private readonly getFile;
|
|
26
|
+
private handler;
|
|
27
|
+
constructor(s3: S3, bucket: string, config: IS3AssetDeliveryConfig, identityContext: IdentityContext.Interface, getFile: GetFileUseCase.Interface);
|
|
28
|
+
private resolveHandler;
|
|
29
|
+
handle(assetRequest: AssetRequest, asset: Asset): Promise<Asset>;
|
|
30
|
+
}
|
|
31
|
+
export declare const LazySharpTransformImpl: typeof LazySharpTransform & {
|
|
32
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-file-manager/features/assetDelivery/abstractions/AssetType.js").IAssetTypeHandler>;
|
|
33
|
+
};
|
|
34
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
2
|
+
import { GetFileUseCase } from "@webiny/api-file-manager/features/file/GetFile/index.js";
|
|
3
|
+
import { ImageAssetTypeHandler } from "@webiny/api-file-manager/features/assetDelivery/assetTypes/image/index.js";
|
|
4
|
+
import { S3AssetDeliveryConfig, S3Bucket, S3Client } from "../abstractions.js";
|
|
5
|
+
class LazySharpTransform {
|
|
6
|
+
constructor(s3, bucket, config, identityContext, getFile){
|
|
7
|
+
this.s3 = s3;
|
|
8
|
+
this.bucket = bucket;
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.identityContext = identityContext;
|
|
11
|
+
this.getFile = getFile;
|
|
12
|
+
this.handler = null;
|
|
13
|
+
}
|
|
14
|
+
resolveHandler() {
|
|
15
|
+
if (!this.handler) this.handler = import("./SharpTransform.js").then(({ SharpTransform })=>new SharpTransform(this.s3, this.bucket, this.config, this.identityContext, this.getFile));
|
|
16
|
+
return this.handler;
|
|
17
|
+
}
|
|
18
|
+
async handle(assetRequest, asset) {
|
|
19
|
+
return (await this.resolveHandler()).handle(assetRequest, asset);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const LazySharpTransformImpl = ImageAssetTypeHandler.createImplementation({
|
|
23
|
+
implementation: LazySharpTransform,
|
|
24
|
+
dependencies: [
|
|
25
|
+
S3Client,
|
|
26
|
+
S3Bucket,
|
|
27
|
+
S3AssetDeliveryConfig,
|
|
28
|
+
IdentityContext,
|
|
29
|
+
GetFileUseCase
|
|
30
|
+
]
|
|
31
|
+
});
|
|
32
|
+
export { LazySharpTransformImpl };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=LazySharpTransform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assetDelivery/s3/LazySharpTransform.js","sources":["../../../src/assetDelivery/s3/LazySharpTransform.ts"],"sourcesContent":["import type { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { GetFileUseCase } from \"@webiny/api-file-manager/features/file/GetFile/index.js\";\nimport { ImageAssetTypeHandler } from \"@webiny/api-file-manager/features/assetDelivery/assetTypes/image/index.js\";\nimport type { Asset } from \"@webiny/api-file-manager/delivery/AssetDelivery/Asset.js\";\nimport type { AssetRequest } from \"@webiny/api-file-manager/delivery/AssetDelivery/AssetRequest.js\";\nimport { S3AssetDeliveryConfig, S3Bucket, S3Client } from \"~/assetDelivery/abstractions.js\";\nimport type { IS3AssetDeliveryConfig } from \"~/assetDelivery/abstractions.js\";\n\n/**\n * Defers loading `sharp` until an image is actually transformed.\n *\n * The dynamic import is deliberate — it keeps `sharp` out of the main bundle (note the\n * `webpackChunkName`). That import is async and DI resolution is not, which is why this used to be\n * a per-request `RequestContextInitializer` that imported the module and then registered the real\n * handler. `IAssetTypeHandler` has a single async method, so the import can be awaited there\n * instead.\n *\n * The constructed handler IS memoized: the initializer registered it `.inSingletonScope()`, and\n * nothing below caches the instance (Node caches the module, not the object built from it).\n */\nclass LazySharpTransform implements ImageAssetTypeHandler.Interface {\n private handler: Promise<ImageAssetTypeHandler.Interface> | null = null;\n\n constructor(\n private readonly s3: S3,\n private readonly bucket: string,\n private readonly config: IS3AssetDeliveryConfig,\n private readonly identityContext: IdentityContext.Interface,\n private readonly getFile: GetFileUseCase.Interface\n ) {}\n\n private resolveHandler(): Promise<ImageAssetTypeHandler.Interface> {\n if (!this.handler) {\n this.handler = import(\n /* webpackChunkName: \"s3AssetDelivery\" */ \"./SharpTransform.js\"\n ).then(\n ({ SharpTransform }) =>\n new SharpTransform(\n this.s3,\n this.bucket,\n this.config,\n this.identityContext,\n this.getFile\n )\n );\n }\n return this.handler;\n }\n\n async handle(assetRequest: AssetRequest, asset: Asset): Promise<Asset> {\n return (await this.resolveHandler()).handle(assetRequest, asset);\n }\n}\n\nexport const LazySharpTransformImpl = ImageAssetTypeHandler.createImplementation({\n implementation: LazySharpTransform,\n dependencies: [S3Client, S3Bucket, S3AssetDeliveryConfig, IdentityContext, GetFileUseCase]\n});\n"],"names":["LazySharpTransform","s3","bucket","config","identityContext","getFile","SharpTransform","assetRequest","asset","LazySharpTransformImpl","ImageAssetTypeHandler","S3Client","S3Bucket","S3AssetDeliveryConfig","IdentityContext","GetFileUseCase"],"mappings":";;;;AAqBA,MAAMA;IAGF,YACqBC,EAAM,EACNC,MAAc,EACdC,MAA8B,EAC9BC,eAA0C,EAC1CC,OAAiC,CACpD;aALmBJ,EAAE,GAAFA;aACAC,MAAM,GAANA;aACAC,MAAM,GAANA;aACAC,eAAe,GAAfA;aACAC,OAAO,GAAPA;aAPb,OAAO,GAAoD;IAQhE;IAEK,iBAA2D;QAC/D,IAAI,CAAC,IAAI,CAAC,OAAO,EACb,IAAI,CAAC,OAAO,GAAG,MAAM,CAAN,uBAEb,IAAI,CACF,CAAC,EAAEC,cAAc,EAAE,GACf,IAAIA,eACA,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,OAAO;QAI5B,OAAO,IAAI,CAAC,OAAO;IACvB;IAEA,MAAM,OAAOC,YAA0B,EAAEC,KAAY,EAAkB;QACnE,OAAQ,OAAM,IAAI,CAAC,cAAc,EAAC,EAAG,MAAM,CAACD,cAAcC;IAC9D;AACJ;AAEO,MAAMC,yBAAyBC,sBAAsB,oBAAoB,CAAC;IAC7E,gBAAgBV;IAChB,cAAc;QAACW;QAAUC;QAAUC;QAAuBC;QAAiBC;KAAe;AAC9F"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import type { S3 } from "@webiny/aws-sdk/client-s3";
|
|
1
|
+
import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
|
|
2
2
|
import type { AssetRequest, AssetResolver } from "@webiny/api-file-manager";
|
|
3
3
|
import { Asset } from "@webiny/api-file-manager";
|
|
4
|
+
import { GlobalKeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
|
|
4
5
|
export declare class S3AssetResolver implements AssetResolver {
|
|
5
|
-
private
|
|
6
|
-
private
|
|
7
|
-
|
|
6
|
+
private keyValueStore;
|
|
7
|
+
private s3;
|
|
8
|
+
private bucket;
|
|
9
|
+
constructor(keyValueStore: GlobalKeyValueStore.Interface, s3: S3, bucket: string);
|
|
8
10
|
resolve(request: AssetRequest): Promise<Asset | undefined>;
|
|
9
11
|
}
|
|
12
|
+
export declare const S3AssetResolverImpl: typeof S3AssetResolver & {
|
|
13
|
+
__abstraction: import("@webiny/di").Abstraction<AssetResolver>;
|
|
14
|
+
};
|
|
@@ -1,37 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
var _apiFileManager = require("@webiny/api-file-manager");
|
|
8
|
-
var _S3AssetMetadataReader = require("./S3AssetMetadataReader");
|
|
9
|
-
var _S3ContentsReader = require("./S3ContentsReader");
|
|
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";
|
|
4
|
+
import { S3ContentsReader } from "../index.js";
|
|
5
|
+
import { ObjectKey } from "../threatDetection/ObjectKey.js";
|
|
6
|
+
import { S3Bucket, S3Client } from "../abstractions.js";
|
|
10
7
|
class S3AssetResolver {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
console.log(`S3AssetResolver failed to read metadata: ${error.message}`);
|
|
31
|
-
return undefined;
|
|
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;
|
|
32
27
|
}
|
|
33
|
-
}
|
|
34
28
|
}
|
|
35
|
-
|
|
29
|
+
const S3AssetResolverImpl = AssetResolver.createImplementation({
|
|
30
|
+
implementation: S3AssetResolver,
|
|
31
|
+
dependencies: [
|
|
32
|
+
GlobalKeyValueStore,
|
|
33
|
+
S3Client,
|
|
34
|
+
S3Bucket
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
export { S3AssetResolver, S3AssetResolverImpl };
|
|
36
38
|
|
|
37
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,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
import type { S3 } from "@webiny/aws-sdk/client-s3";
|
|
1
|
+
import type { S3 } from "@webiny/aws-sdk/client-s3/index.js";
|
|
4
2
|
import type { Asset, AssetContentsReader } from "@webiny/api-file-manager";
|
|
5
3
|
export declare class S3ContentsReader implements AssetContentsReader {
|
|
6
4
|
private s3;
|