@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
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.customAssetDeliveryConfig = void 0;
|
|
7
|
-
var _apiFileManager = require("@webiny/api-file-manager");
|
|
8
|
-
var _clientS = require("@webiny/aws-sdk/client-s3");
|
|
9
|
-
var _S3CustomAssetResolver = require("./S3CustomAssetResolver");
|
|
10
|
-
var _CustomAssetProcessor = require("./CustomAssetProcessor");
|
|
11
|
-
const customAssetDeliveryConfig = () => {
|
|
12
|
-
return (0, _apiFileManager.createAssetDeliveryConfig)(config => {
|
|
13
|
-
config.decorateAssetResolver(({
|
|
14
|
-
assetResolver
|
|
15
|
-
}) => {
|
|
16
|
-
const s3 = new _clientS.S3({
|
|
17
|
-
region: process.env.AWS_REGION
|
|
18
|
-
});
|
|
19
|
-
return new _S3CustomAssetResolver.S3CustomAssetResolver(s3, String(process.env.S3_BUCKET), assetResolver);
|
|
20
|
-
});
|
|
21
|
-
config.decorateAssetProcessor(({
|
|
22
|
-
assetProcessor
|
|
23
|
-
}) => {
|
|
24
|
-
return new _CustomAssetProcessor.CustomAssetProcessor(assetProcessor);
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
};
|
|
28
|
-
exports.customAssetDeliveryConfig = customAssetDeliveryConfig;
|
|
29
|
-
|
|
30
|
-
//# sourceMappingURL=customAssetDeliveryConfig.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_apiFileManager","require","_clientS","_S3CustomAssetResolver","_CustomAssetProcessor","customAssetDeliveryConfig","createAssetDeliveryConfig","config","decorateAssetResolver","assetResolver","s3","S3","region","process","env","AWS_REGION","S3CustomAssetResolver","String","S3_BUCKET","decorateAssetProcessor","assetProcessor","CustomAssetProcessor","exports"],"sources":["customAssetDeliveryConfig.ts"],"sourcesContent":["import { createAssetDeliveryConfig } from \"@webiny/api-file-manager\";\nimport { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { S3CustomAssetResolver } from \"./S3CustomAssetResolver\";\nimport { CustomAssetProcessor } from \"~/assetDelivery/customAssets/CustomAssetProcessor\";\n\nexport const customAssetDeliveryConfig = () => {\n return createAssetDeliveryConfig(config => {\n config.decorateAssetResolver(({ assetResolver }) => {\n const s3 = new S3({ region: process.env.AWS_REGION });\n return new S3CustomAssetResolver(s3, String(process.env.S3_BUCKET), assetResolver);\n });\n\n config.decorateAssetProcessor(({ assetProcessor }) => {\n return new CustomAssetProcessor(assetProcessor);\n });\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AACA,IAAAG,qBAAA,GAAAH,OAAA;AAEO,MAAMI,yBAAyB,GAAGA,CAAA,KAAM;EAC3C,OAAO,IAAAC,yCAAyB,EAACC,MAAM,IAAI;IACvCA,MAAM,CAACC,qBAAqB,CAAC,CAAC;MAAEC;IAAc,CAAC,KAAK;MAChD,MAAMC,EAAE,GAAG,IAAIC,WAAE,CAAC;QAAEC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC;MAAW,CAAC,CAAC;MACrD,OAAO,IAAIC,4CAAqB,CAACN,EAAE,EAAEO,MAAM,CAACJ,OAAO,CAACC,GAAG,CAACI,SAAS,CAAC,EAAET,aAAa,CAAC;IACtF,CAAC,CAAC;IAEFF,MAAM,CAACY,sBAAsB,CAAC,CAAC;MAAEC;IAAe,CAAC,KAAK;MAClD,OAAO,IAAIC,0CAAoB,CAACD,cAAc,CAAC;IACnD,CAAC,CAAC;EACN,CAAC,CAAC;AACN,CAAC;AAACE,OAAA,CAAAjB,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_S3AssetResolver","require","_S3AssetMetadataReader","_S3OutputStrategy","_S3ContentsReader","_S3ErrorAssetReply","_S3RedirectAssetReply","_S3StreamAssetReply","_SharpTransform","_CallableContentsReader"],"sources":["index.ts"],"sourcesContent":["export { S3AssetResolver } from \"./s3/S3AssetResolver\";\nexport { S3AssetMetadataReader } from \"./s3/S3AssetMetadataReader\";\nexport { S3OutputStrategy } from \"./s3/S3OutputStrategy\";\nexport { S3ContentsReader } from \"./s3/S3ContentsReader\";\nexport { S3ErrorAssetReply } from \"./s3/S3ErrorAssetReply\";\nexport { S3RedirectAssetReply } from \"./s3/S3RedirectAssetReply\";\nexport { S3StreamAssetReply } from \"./s3/S3StreamAssetReply\";\nexport { SharpTransform } from \"./s3/SharpTransform\";\nexport { CallableContentsReader } from \"./s3/transformation/CallableContentsReader\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAJ,OAAA;AACA,IAAAK,qBAAA,GAAAL,OAAA;AACA,IAAAM,mBAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AACA,IAAAQ,uBAAA,GAAAR,OAAA","ignoreList":[]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { S3 } from "@webiny/aws-sdk/client-s3";
|
|
2
|
-
interface AssetMetadata {
|
|
3
|
-
id: string;
|
|
4
|
-
tenant: string;
|
|
5
|
-
locale: string;
|
|
6
|
-
size: number;
|
|
7
|
-
contentType: string;
|
|
8
|
-
}
|
|
9
|
-
export declare class S3AssetMetadataReader {
|
|
10
|
-
private readonly s3;
|
|
11
|
-
private readonly bucket;
|
|
12
|
-
constructor(s3: S3, bucket: string);
|
|
13
|
-
getMetadata(key: string): Promise<AssetMetadata>;
|
|
14
|
-
}
|
|
15
|
-
export {};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.S3AssetMetadataReader = void 0;
|
|
7
|
-
class S3AssetMetadataReader {
|
|
8
|
-
constructor(s3, bucket) {
|
|
9
|
-
this.bucket = bucket;
|
|
10
|
-
this.s3 = s3;
|
|
11
|
-
}
|
|
12
|
-
async getMetadata(key) {
|
|
13
|
-
const metadataKey = `${key}.metadata`;
|
|
14
|
-
console.log("Reading metadata", metadataKey);
|
|
15
|
-
const {
|
|
16
|
-
Body
|
|
17
|
-
} = await this.s3.getObject({
|
|
18
|
-
Bucket: this.bucket,
|
|
19
|
-
Key: metadataKey
|
|
20
|
-
});
|
|
21
|
-
if (!Body) {
|
|
22
|
-
throw Error(`Missing or corrupted ${metadataKey} file!`);
|
|
23
|
-
}
|
|
24
|
-
const metadata = JSON.parse(await Body.transformToString());
|
|
25
|
-
return {
|
|
26
|
-
id: metadata.id,
|
|
27
|
-
tenant: metadata.tenant,
|
|
28
|
-
locale: metadata.locale,
|
|
29
|
-
size: metadata.size,
|
|
30
|
-
contentType: metadata.contentType
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
exports.S3AssetMetadataReader = S3AssetMetadataReader;
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=S3AssetMetadataReader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["S3AssetMetadataReader","constructor","s3","bucket","getMetadata","key","metadataKey","console","log","Body","getObject","Bucket","Key","Error","metadata","JSON","parse","transformToString","id","tenant","locale","size","contentType","exports"],"sources":["S3AssetMetadataReader.ts"],"sourcesContent":["import type { S3 } from \"@webiny/aws-sdk/client-s3\";\n\ninterface AssetMetadata {\n id: string;\n tenant: string;\n locale: string;\n size: number;\n contentType: string;\n}\n\nexport class S3AssetMetadataReader {\n private readonly s3: S3;\n private readonly bucket: string;\n\n constructor(s3: S3, bucket: string) {\n this.bucket = bucket;\n this.s3 = s3;\n }\n\n async getMetadata(key: string): Promise<AssetMetadata> {\n const metadataKey = `${key}.metadata`;\n\n console.log(\"Reading metadata\", metadataKey);\n\n const { Body } = await this.s3.getObject({\n Bucket: this.bucket,\n Key: metadataKey\n });\n\n if (!Body) {\n throw Error(`Missing or corrupted ${metadataKey} file!`);\n }\n\n const metadata = JSON.parse(await Body.transformToString());\n\n return {\n id: metadata.id,\n tenant: metadata.tenant,\n locale: metadata.locale,\n size: metadata.size,\n contentType: metadata.contentType\n };\n }\n}\n"],"mappings":";;;;;;AAUO,MAAMA,qBAAqB,CAAC;EAI/BC,WAAWA,CAACC,EAAM,EAAEC,MAAc,EAAE;IAChC,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACD,EAAE,GAAGA,EAAE;EAChB;EAEA,MAAME,WAAWA,CAACC,GAAW,EAA0B;IACnD,MAAMC,WAAW,GAAG,GAAGD,GAAG,WAAW;IAErCE,OAAO,CAACC,GAAG,CAAC,kBAAkB,EAAEF,WAAW,CAAC;IAE5C,MAAM;MAAEG;IAAK,CAAC,GAAG,MAAM,IAAI,CAACP,EAAE,CAACQ,SAAS,CAAC;MACrCC,MAAM,EAAE,IAAI,CAACR,MAAM;MACnBS,GAAG,EAAEN;IACT,CAAC,CAAC;IAEF,IAAI,CAACG,IAAI,EAAE;MACP,MAAMI,KAAK,CAAC,wBAAwBP,WAAW,QAAQ,CAAC;IAC5D;IAEA,MAAMQ,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAAC,MAAMP,IAAI,CAACQ,iBAAiB,CAAC,CAAC,CAAC;IAE3D,OAAO;MACHC,EAAE,EAAEJ,QAAQ,CAACI,EAAE;MACfC,MAAM,EAAEL,QAAQ,CAACK,MAAM;MACvBC,MAAM,EAAEN,QAAQ,CAACM,MAAM;MACvBC,IAAI,EAAEP,QAAQ,CAACO,IAAI;MACnBC,WAAW,EAAER,QAAQ,CAACQ;IAC1B,CAAC;EACL;AACJ;AAACC,OAAA,CAAAvB,qBAAA,GAAAA,qBAAA","ignoreList":[]}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
declare const SUPPORTED_IMAGES: string[];
|
|
2
|
-
declare const SUPPORTED_TRANSFORMABLE_IMAGES: string[];
|
|
3
|
-
declare const OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = "img-o-t-";
|
|
4
|
-
declare const OPTIMIZED_IMAGE_PREFIX = "img-o-";
|
|
5
|
-
declare const getOptimizedImageKeyPrefix: (key: string) => string;
|
|
6
|
-
declare const getOptimizedTransformedImageKeyPrefix: (key: string) => string;
|
|
7
|
-
interface GetImageKeyParams {
|
|
8
|
-
key: string;
|
|
9
|
-
transformations?: any;
|
|
10
|
-
}
|
|
11
|
-
declare const getImageKey: ({ key, transformations }: GetImageKeyParams) => string;
|
|
12
|
-
export { SUPPORTED_IMAGES, SUPPORTED_TRANSFORMABLE_IMAGES, OPTIMIZED_TRANSFORMED_IMAGE_PREFIX, OPTIMIZED_IMAGE_PREFIX, getImageKey, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix };
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.getOptimizedTransformedImageKeyPrefix = exports.getOptimizedImageKeyPrefix = exports.getImageKey = exports.SUPPORTED_TRANSFORMABLE_IMAGES = exports.SUPPORTED_IMAGES = exports.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = exports.OPTIMIZED_IMAGE_PREFIX = void 0;
|
|
8
|
-
var _objectHash = _interopRequireDefault(require("object-hash"));
|
|
9
|
-
const SUPPORTED_IMAGES = exports.SUPPORTED_IMAGES = [".jpg", ".jpeg", ".png", ".svg", ".gif"];
|
|
10
|
-
const SUPPORTED_TRANSFORMABLE_IMAGES = exports.SUPPORTED_TRANSFORMABLE_IMAGES = [".jpg", ".jpeg", ".png"];
|
|
11
|
-
const OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = exports.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = "img-o-t-";
|
|
12
|
-
const OPTIMIZED_IMAGE_PREFIX = exports.OPTIMIZED_IMAGE_PREFIX = "img-o-";
|
|
13
|
-
const getOptimizedImageKeyPrefix = key => {
|
|
14
|
-
return `${OPTIMIZED_IMAGE_PREFIX}${(0, _objectHash.default)(key)}-`;
|
|
15
|
-
};
|
|
16
|
-
exports.getOptimizedImageKeyPrefix = getOptimizedImageKeyPrefix;
|
|
17
|
-
const getOptimizedTransformedImageKeyPrefix = key => {
|
|
18
|
-
return `${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${(0, _objectHash.default)(key)}-`;
|
|
19
|
-
};
|
|
20
|
-
exports.getOptimizedTransformedImageKeyPrefix = getOptimizedTransformedImageKeyPrefix;
|
|
21
|
-
const getImageKey = ({
|
|
22
|
-
key,
|
|
23
|
-
transformations
|
|
24
|
-
}) => {
|
|
25
|
-
if (!transformations) {
|
|
26
|
-
const prefix = getOptimizedImageKeyPrefix(key);
|
|
27
|
-
return prefix + key;
|
|
28
|
-
}
|
|
29
|
-
const prefix = getOptimizedTransformedImageKeyPrefix(key);
|
|
30
|
-
return `${prefix}${(0, _objectHash.default)(transformations)}-${key}`;
|
|
31
|
-
};
|
|
32
|
-
exports.getImageKey = getImageKey;
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=legacyUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_objectHash","_interopRequireDefault","require","SUPPORTED_IMAGES","exports","SUPPORTED_TRANSFORMABLE_IMAGES","OPTIMIZED_TRANSFORMED_IMAGE_PREFIX","OPTIMIZED_IMAGE_PREFIX","getOptimizedImageKeyPrefix","key","objectHash","getOptimizedTransformedImageKeyPrefix","getImageKey","transformations","prefix"],"sources":["legacyUtils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\n\nconst SUPPORTED_IMAGES = [\".jpg\", \".jpeg\", \".png\", \".svg\", \".gif\"];\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\".jpg\", \".jpeg\", \".png\"];\n\nconst OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = \"img-o-t-\";\nconst OPTIMIZED_IMAGE_PREFIX = \"img-o-\";\n\nconst getOptimizedImageKeyPrefix = (key: string): string => {\n return `${OPTIMIZED_IMAGE_PREFIX}${objectHash(key)}-`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (key: string): string => {\n return `${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${objectHash(key)}-`;\n};\n\ninterface GetImageKeyParams {\n key: string;\n transformations?: any;\n}\n\nconst getImageKey = ({ key, transformations }: GetImageKeyParams): string => {\n if (!transformations) {\n const prefix = getOptimizedImageKeyPrefix(key);\n return prefix + key;\n }\n\n const prefix = getOptimizedTransformedImageKeyPrefix(key);\n return `${prefix}${objectHash(transformations)}-${key}`;\n};\n\nexport {\n SUPPORTED_IMAGES,\n SUPPORTED_TRANSFORMABLE_IMAGES,\n OPTIMIZED_TRANSFORMED_IMAGE_PREFIX,\n OPTIMIZED_IMAGE_PREFIX,\n getImageKey,\n getOptimizedImageKeyPrefix,\n getOptimizedTransformedImageKeyPrefix\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAClE,MAAME,8BAA8B,GAAAD,OAAA,CAAAC,8BAAA,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;AAEhE,MAAMC,kCAAkC,GAAAF,OAAA,CAAAE,kCAAA,GAAG,UAAU;AACrD,MAAMC,sBAAsB,GAAAH,OAAA,CAAAG,sBAAA,GAAG,QAAQ;AAEvC,MAAMC,0BAA0B,GAAIC,GAAW,IAAa;EACxD,OAAO,GAAGF,sBAAsB,GAAG,IAAAG,mBAAU,EAACD,GAAG,CAAC,GAAG;AACzD,CAAC;AAACL,OAAA,CAAAI,0BAAA,GAAAA,0BAAA;AAEF,MAAMG,qCAAqC,GAAIF,GAAW,IAAa;EACnE,OAAO,GAAGH,kCAAkC,GAAG,IAAAI,mBAAU,EAACD,GAAG,CAAC,GAAG;AACrE,CAAC;AAACL,OAAA,CAAAO,qCAAA,GAAAA,qCAAA;AAOF,MAAMC,WAAW,GAAGA,CAAC;EAAEH,GAAG;EAAEI;AAAmC,CAAC,KAAa;EACzE,IAAI,CAACA,eAAe,EAAE;IAClB,MAAMC,MAAM,GAAGN,0BAA0B,CAACC,GAAG,CAAC;IAC9C,OAAOK,MAAM,GAAGL,GAAG;EACvB;EAEA,MAAMK,MAAM,GAAGH,qCAAqC,CAACF,GAAG,CAAC;EACzD,OAAO,GAAGK,MAAM,GAAG,IAAAJ,mBAAU,EAACG,eAAe,CAAC,IAAIJ,GAAG,EAAE;AAC3D,CAAC;AAACL,OAAA,CAAAQ,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_createThreatDetectionEventHandler","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_createThreatDetectionPluginLoader"],"sources":["index.ts"],"sourcesContent":["export * from \"./createThreatDetectionEventHandler\";\nexport * from \"./createThreatDetectionPluginLoader\";\n"],"mappings":";;;;;AAAA,IAAAA,kCAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,kCAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,kCAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,kCAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,kCAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,kCAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,kCAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,kCAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { Context as IWebsocketsContext } from \"@webiny/api-websockets\";\nimport type { WcpContext } from \"@webiny/api-wcp/types\";\nimport type { FileManagerContext } from \"@webiny/api-file-manager/types\";\n\nexport type ThreatDetectionContext = FileManagerContext & IWebsocketsContext & WcpContext;\n\nexport type GuardDutyEvent = {\n scanResultDetails: {\n scanResultStatus:\n | \"UNSUPPORTED\"\n | \"FAILED\"\n | \"ACCESS_DENIED\"\n | \"THREATS_FOUND\"\n | \"NO_THREATS_FOUND\";\n };\n s3ObjectDetails: {\n bucketName: string;\n objectKey: string;\n };\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { createAssetDelivery as createBaseAssetDelivery } from \"@webiny/api-file-manager\";\n\nexport type AssetDeliveryParams = Parameters<typeof createBaseAssetDelivery>[0] & {\n imageResizeWidths?: number[];\n /**\n * BE CAREFUL!\n * Setting this to more than 1 hour may cause your URLs to still expire before the desired expiration time.\n * @see https://repost.aws/knowledge-center/presigned-url-s3-bucket-expiration\n */\n presignedUrlTtl?: number;\n assetStreamingMaxSize?: number;\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.CdnPathsGenerator = void 0;
|
|
7
|
-
class CdnPathsGenerator {
|
|
8
|
-
generate(file) {
|
|
9
|
-
return [`/files/${file.key}*`, `/private/${file.key}*`, ...file.aliases];
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
exports.CdnPathsGenerator = CdnPathsGenerator;
|
|
13
|
-
|
|
14
|
-
//# sourceMappingURL=CdnPathsGenerator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["CdnPathsGenerator","generate","file","key","aliases","exports"],"sources":["CdnPathsGenerator.ts"],"sourcesContent":["import type { File } from \"@webiny/api-file-manager/types\";\n\nexport class CdnPathsGenerator {\n generate(file: File) {\n return [`/files/${file.key}*`, `/private/${file.key}*`, ...file.aliases];\n }\n}\n"],"mappings":";;;;;;AAEO,MAAMA,iBAAiB,CAAC;EAC3BC,QAAQA,CAACC,IAAU,EAAE;IACjB,OAAO,CAAC,UAAUA,IAAI,CAACC,GAAG,GAAG,EAAE,YAAYD,IAAI,CAACC,GAAG,GAAG,EAAE,GAAGD,IAAI,CAACE,OAAO,CAAC;EAC5E;AACJ;AAACC,OAAA,CAAAL,iBAAA,GAAAA,iBAAA","ignoreList":[]}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { ITaskRunParams } from "@webiny/tasks/types";
|
|
2
|
-
import type { FileManagerContext } from "@webiny/api-file-manager/types";
|
|
3
|
-
import type { ITaskResponseResult } from "@webiny/tasks/response/abstractions";
|
|
4
|
-
export interface InvalidateCacheInput {
|
|
5
|
-
/**
|
|
6
|
-
* Caller of the task (e.g., `fm-before-update`, `fm-after-delete`).
|
|
7
|
-
*/
|
|
8
|
-
caller: string;
|
|
9
|
-
/**
|
|
10
|
-
* Cache paths to invalidate.
|
|
11
|
-
*/
|
|
12
|
-
paths: string[];
|
|
13
|
-
}
|
|
14
|
-
export declare class InvalidateCloudfrontCacheTask {
|
|
15
|
-
private continueIfCode;
|
|
16
|
-
run({ input, response, isCloseToTimeout }: ITaskRunParams<FileManagerContext, InvalidateCacheInput>): Promise<ITaskResponseResult>;
|
|
17
|
-
private invalidateCache;
|
|
18
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.InvalidateCloudfrontCacheTask = void 0;
|
|
7
|
-
var _api = require("@webiny/api");
|
|
8
|
-
var _clientCloudfront = require("@webiny/aws-sdk/client-cloudfront");
|
|
9
|
-
var _utils = require("@webiny/utils");
|
|
10
|
-
class ReturnContinue extends Error {}
|
|
11
|
-
class InvalidateCloudfrontCacheTask {
|
|
12
|
-
continueIfCode = ["TooManyInvalidationsInProgress", "Throttling"];
|
|
13
|
-
async run({
|
|
14
|
-
input,
|
|
15
|
-
response,
|
|
16
|
-
isCloseToTimeout
|
|
17
|
-
}) {
|
|
18
|
-
const manifest = await _api.ServiceDiscovery.load();
|
|
19
|
-
if (!manifest) {
|
|
20
|
-
return response.error({
|
|
21
|
-
message: `Unable to invalidate cache due to a missing service manifest.`,
|
|
22
|
-
code: "MISSING_SERVICE_MANIFEST",
|
|
23
|
-
data: {
|
|
24
|
-
manifest: "api"
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
const {
|
|
29
|
-
distributionId
|
|
30
|
-
} = manifest.api.cloudfront;
|
|
31
|
-
const invalidateCache = () => {
|
|
32
|
-
return this.invalidateCache(input.caller, distributionId, input.paths);
|
|
33
|
-
};
|
|
34
|
-
try {
|
|
35
|
-
await (0, _utils.executeWithRetry)(invalidateCache, {
|
|
36
|
-
minTimeout: 2000,
|
|
37
|
-
forever: true,
|
|
38
|
-
onFailedAttempt: err => {
|
|
39
|
-
if (this.continueIfCode.includes(err.name)) {
|
|
40
|
-
throw new ReturnContinue();
|
|
41
|
-
}
|
|
42
|
-
if (err.message.includes("not authorized to perform")) {
|
|
43
|
-
throw err;
|
|
44
|
-
}
|
|
45
|
-
if (isCloseToTimeout()) {
|
|
46
|
-
throw new ReturnContinue();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
} catch (error) {
|
|
51
|
-
if (error instanceof ReturnContinue) {
|
|
52
|
-
return response.continue(input);
|
|
53
|
-
}
|
|
54
|
-
return response.error({
|
|
55
|
-
message: error.message,
|
|
56
|
-
code: "EXECUTE_WITH_RETRY_FAILED",
|
|
57
|
-
data: input.paths
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
return response.done();
|
|
61
|
-
}
|
|
62
|
-
async invalidateCache(caller, distributionId, paths) {
|
|
63
|
-
const cloudfront = new _clientCloudfront.CloudFront();
|
|
64
|
-
await cloudfront.createInvalidation({
|
|
65
|
-
DistributionId: distributionId,
|
|
66
|
-
InvalidationBatch: {
|
|
67
|
-
CallerReference: `${new Date().getTime()}-${caller}`,
|
|
68
|
-
Paths: {
|
|
69
|
-
Quantity: paths.length,
|
|
70
|
-
Items: paths
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
exports.InvalidateCloudfrontCacheTask = InvalidateCloudfrontCacheTask;
|
|
77
|
-
|
|
78
|
-
//# sourceMappingURL=InvalidateCacheTask.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_api","require","_clientCloudfront","_utils","ReturnContinue","Error","InvalidateCloudfrontCacheTask","continueIfCode","run","input","response","isCloseToTimeout","manifest","ServiceDiscovery","load","error","message","code","data","distributionId","api","cloudfront","invalidateCache","caller","paths","executeWithRetry","minTimeout","forever","onFailedAttempt","err","includes","name","continue","done","CloudFront","createInvalidation","DistributionId","InvalidationBatch","CallerReference","Date","getTime","Paths","Quantity","length","Items","exports"],"sources":["InvalidateCacheTask.ts"],"sourcesContent":["import { ServiceDiscovery } from \"@webiny/api\";\nimport { CloudFront } from \"@webiny/aws-sdk/client-cloudfront\";\nimport type { ITaskRunParams } from \"@webiny/tasks/types\";\nimport type { FileManagerContext } from \"@webiny/api-file-manager/types\";\nimport { executeWithRetry } from \"@webiny/utils\";\nimport type { ITaskResponseResult } from \"@webiny/tasks/response/abstractions\";\n\nclass ReturnContinue extends Error {}\n\nexport interface InvalidateCacheInput {\n /**\n * Caller of the task (e.g., `fm-before-update`, `fm-after-delete`).\n */\n caller: string;\n /**\n * Cache paths to invalidate.\n */\n paths: string[];\n}\n\nexport class InvalidateCloudfrontCacheTask {\n private continueIfCode = [\"TooManyInvalidationsInProgress\", \"Throttling\"];\n\n public async run({\n input,\n response,\n isCloseToTimeout\n }: ITaskRunParams<FileManagerContext, InvalidateCacheInput>): Promise<ITaskResponseResult> {\n const manifest = await ServiceDiscovery.load();\n\n if (!manifest) {\n return response.error({\n message: `Unable to invalidate cache due to a missing service manifest.`,\n code: \"MISSING_SERVICE_MANIFEST\",\n data: {\n manifest: \"api\"\n }\n });\n }\n\n const { distributionId } = manifest.api.cloudfront;\n\n const invalidateCache = () => {\n return this.invalidateCache(input.caller, distributionId as string, input.paths);\n };\n\n try {\n await executeWithRetry(invalidateCache, {\n minTimeout: 2000,\n forever: true,\n onFailedAttempt: err => {\n if (this.continueIfCode.includes(err.name)) {\n throw new ReturnContinue();\n }\n\n if (err.message.includes(\"not authorized to perform\")) {\n throw err;\n }\n\n if (isCloseToTimeout()) {\n throw new ReturnContinue();\n }\n }\n });\n } catch (error) {\n if (error instanceof ReturnContinue) {\n return response.continue(input);\n }\n\n return response.error({\n message: error.message,\n code: \"EXECUTE_WITH_RETRY_FAILED\",\n data: input.paths\n });\n }\n\n return response.done();\n }\n\n private async invalidateCache(\n caller: string,\n distributionId: string,\n paths: string[]\n ): Promise<void> {\n const cloudfront = new CloudFront();\n await cloudfront.createInvalidation({\n DistributionId: distributionId,\n InvalidationBatch: {\n CallerReference: `${new Date().getTime()}-${caller}`,\n Paths: {\n Quantity: paths.length,\n Items: paths\n }\n }\n });\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AAGA,IAAAE,MAAA,GAAAF,OAAA;AAGA,MAAMG,cAAc,SAASC,KAAK,CAAC;AAa5B,MAAMC,6BAA6B,CAAC;EAC/BC,cAAc,GAAG,CAAC,gCAAgC,EAAE,YAAY,CAAC;EAEzE,MAAaC,GAAGA,CAAC;IACbC,KAAK;IACLC,QAAQ;IACRC;EACsD,CAAC,EAAgC;IACvF,MAAMC,QAAQ,GAAG,MAAMC,qBAAgB,CAACC,IAAI,CAAC,CAAC;IAE9C,IAAI,CAACF,QAAQ,EAAE;MACX,OAAOF,QAAQ,CAACK,KAAK,CAAC;QAClBC,OAAO,EAAE,+DAA+D;QACxEC,IAAI,EAAE,0BAA0B;QAChCC,IAAI,EAAE;UACFN,QAAQ,EAAE;QACd;MACJ,CAAC,CAAC;IACN;IAEA,MAAM;MAAEO;IAAe,CAAC,GAAGP,QAAQ,CAACQ,GAAG,CAACC,UAAU;IAElD,MAAMC,eAAe,GAAGA,CAAA,KAAM;MAC1B,OAAO,IAAI,CAACA,eAAe,CAACb,KAAK,CAACc,MAAM,EAAEJ,cAAc,EAAYV,KAAK,CAACe,KAAK,CAAC;IACpF,CAAC;IAED,IAAI;MACA,MAAM,IAAAC,uBAAgB,EAACH,eAAe,EAAE;QACpCI,UAAU,EAAE,IAAI;QAChBC,OAAO,EAAE,IAAI;QACbC,eAAe,EAAEC,GAAG,IAAI;UACpB,IAAI,IAAI,CAACtB,cAAc,CAACuB,QAAQ,CAACD,GAAG,CAACE,IAAI,CAAC,EAAE;YACxC,MAAM,IAAI3B,cAAc,CAAC,CAAC;UAC9B;UAEA,IAAIyB,GAAG,CAACb,OAAO,CAACc,QAAQ,CAAC,2BAA2B,CAAC,EAAE;YACnD,MAAMD,GAAG;UACb;UAEA,IAAIlB,gBAAgB,CAAC,CAAC,EAAE;YACpB,MAAM,IAAIP,cAAc,CAAC,CAAC;UAC9B;QACJ;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOW,KAAK,EAAE;MACZ,IAAIA,KAAK,YAAYX,cAAc,EAAE;QACjC,OAAOM,QAAQ,CAACsB,QAAQ,CAACvB,KAAK,CAAC;MACnC;MAEA,OAAOC,QAAQ,CAACK,KAAK,CAAC;QAClBC,OAAO,EAAED,KAAK,CAACC,OAAO;QACtBC,IAAI,EAAE,2BAA2B;QACjCC,IAAI,EAAET,KAAK,CAACe;MAChB,CAAC,CAAC;IACN;IAEA,OAAOd,QAAQ,CAACuB,IAAI,CAAC,CAAC;EAC1B;EAEA,MAAcX,eAAeA,CACzBC,MAAc,EACdJ,cAAsB,EACtBK,KAAe,EACF;IACb,MAAMH,UAAU,GAAG,IAAIa,4BAAU,CAAC,CAAC;IACnC,MAAMb,UAAU,CAACc,kBAAkB,CAAC;MAChCC,cAAc,EAAEjB,cAAc;MAC9BkB,iBAAiB,EAAE;QACfC,eAAe,EAAE,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,IAAIjB,MAAM,EAAE;QACpDkB,KAAK,EAAE;UACHC,QAAQ,EAAElB,KAAK,CAACmB,MAAM;UACtBC,KAAK,EAAEpB;QACX;MACJ;IACJ,CAAC,CAAC;EACN;AACJ;AAACqB,OAAA,CAAAvC,6BAAA,GAAAA,6BAAA","ignoreList":[]}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.flushCacheOnFileDelete = void 0;
|
|
7
|
-
var _api = require("@webiny/api");
|
|
8
|
-
var _CdnPathsGenerator = require("./CdnPathsGenerator");
|
|
9
|
-
class FlushCacheOnFileDelete {
|
|
10
|
-
constructor(context) {
|
|
11
|
-
this.pathsGenerator = new _CdnPathsGenerator.CdnPathsGenerator();
|
|
12
|
-
this.context = context;
|
|
13
|
-
context.fileManager.onFileAfterDelete.subscribe(this.onFileAfterDelete);
|
|
14
|
-
}
|
|
15
|
-
onFileAfterDelete = async ({
|
|
16
|
-
file
|
|
17
|
-
}) => {
|
|
18
|
-
await this.context.tasks.trigger({
|
|
19
|
-
definition: "cloudfrontInvalidateCache",
|
|
20
|
-
input: {
|
|
21
|
-
caller: "fm-before-delete",
|
|
22
|
-
paths: this.pathsGenerator.generate(file)
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
const flushCacheOnFileDelete = () => {
|
|
28
|
-
return new _api.ContextPlugin(context => {
|
|
29
|
-
new FlushCacheOnFileDelete(context);
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
|
-
exports.flushCacheOnFileDelete = flushCacheOnFileDelete;
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=flushCacheOnFileDelete.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_api","require","_CdnPathsGenerator","FlushCacheOnFileDelete","constructor","context","pathsGenerator","CdnPathsGenerator","fileManager","onFileAfterDelete","subscribe","file","tasks","trigger","definition","input","caller","paths","generate","flushCacheOnFileDelete","ContextPlugin","exports"],"sources":["flushCacheOnFileDelete.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport type {\n FileManagerContext,\n OnFileBeforeUpdateTopicParams\n} from \"@webiny/api-file-manager/types\";\nimport { CdnPathsGenerator } from \"~/flushCdnCache/CdnPathsGenerator\";\n\nclass FlushCacheOnFileDelete {\n private readonly context: FileManagerContext;\n private readonly pathsGenerator: CdnPathsGenerator;\n\n constructor(context: FileManagerContext) {\n this.pathsGenerator = new CdnPathsGenerator();\n this.context = context;\n context.fileManager.onFileAfterDelete.subscribe(this.onFileAfterDelete);\n }\n\n private onFileAfterDelete = async ({ file }: OnFileBeforeUpdateTopicParams) => {\n await this.context.tasks.trigger({\n definition: \"cloudfrontInvalidateCache\",\n input: {\n caller: \"fm-before-delete\",\n paths: this.pathsGenerator.generate(file)\n }\n });\n };\n}\n\nexport const flushCacheOnFileDelete = () => {\n return new ContextPlugin<FileManagerContext>(context => {\n new FlushCacheOnFileDelete(context);\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAKA,IAAAC,kBAAA,GAAAD,OAAA;AAEA,MAAME,sBAAsB,CAAC;EAIzBC,WAAWA,CAACC,OAA2B,EAAE;IACrC,IAAI,CAACC,cAAc,GAAG,IAAIC,oCAAiB,CAAC,CAAC;IAC7C,IAAI,CAACF,OAAO,GAAGA,OAAO;IACtBA,OAAO,CAACG,WAAW,CAACC,iBAAiB,CAACC,SAAS,CAAC,IAAI,CAACD,iBAAiB,CAAC;EAC3E;EAEQA,iBAAiB,GAAG,MAAAA,CAAO;IAAEE;EAAoC,CAAC,KAAK;IAC3E,MAAM,IAAI,CAACN,OAAO,CAACO,KAAK,CAACC,OAAO,CAAC;MAC7BC,UAAU,EAAE,2BAA2B;MACvCC,KAAK,EAAE;QACHC,MAAM,EAAE,kBAAkB;QAC1BC,KAAK,EAAE,IAAI,CAACX,cAAc,CAACY,QAAQ,CAACP,IAAI;MAC5C;IACJ,CAAC,CAAC;EACN,CAAC;AACL;AAEO,MAAMQ,sBAAsB,GAAGA,CAAA,KAAM;EACxC,OAAO,IAAIC,kBAAa,CAAqBf,OAAO,IAAI;IACpD,IAAIF,sBAAsB,CAACE,OAAO,CAAC;EACvC,CAAC,CAAC;AACN,CAAC;AAACgB,OAAA,CAAAF,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.flushCacheOnFileUpdate = void 0;
|
|
7
|
-
var _api = require("@webiny/api");
|
|
8
|
-
var _CdnPathsGenerator = require("./CdnPathsGenerator");
|
|
9
|
-
class FlushCacheOnFileUpdate {
|
|
10
|
-
constructor(context) {
|
|
11
|
-
this.pathsGenerator = new _CdnPathsGenerator.CdnPathsGenerator();
|
|
12
|
-
this.context = context;
|
|
13
|
-
context.fileManager.onFileBeforeUpdate.subscribe(this.onFileBeforeUpdate);
|
|
14
|
-
}
|
|
15
|
-
onFileBeforeUpdate = async ({
|
|
16
|
-
file,
|
|
17
|
-
original
|
|
18
|
-
}) => {
|
|
19
|
-
const prevAccessControl = original.accessControl;
|
|
20
|
-
const newAccessControl = file.accessControl;
|
|
21
|
-
if (prevAccessControl?.type === newAccessControl?.type) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
await this.context.tasks.trigger({
|
|
25
|
-
definition: "cloudfrontInvalidateCache",
|
|
26
|
-
input: {
|
|
27
|
-
caller: "fm-before-update",
|
|
28
|
-
paths: this.pathsGenerator.generate(file)
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
const flushCacheOnFileUpdate = () => {
|
|
34
|
-
return new _api.ContextPlugin(context => {
|
|
35
|
-
new FlushCacheOnFileUpdate(context);
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
exports.flushCacheOnFileUpdate = flushCacheOnFileUpdate;
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=flushCacheOnFileUpdate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_api","require","_CdnPathsGenerator","FlushCacheOnFileUpdate","constructor","context","pathsGenerator","CdnPathsGenerator","fileManager","onFileBeforeUpdate","subscribe","file","original","prevAccessControl","accessControl","newAccessControl","type","tasks","trigger","definition","input","caller","paths","generate","flushCacheOnFileUpdate","ContextPlugin","exports"],"sources":["flushCacheOnFileUpdate.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport type {\n FileManagerContext,\n OnFileBeforeUpdateTopicParams\n} from \"@webiny/api-file-manager/types\";\nimport { CdnPathsGenerator } from \"~/flushCdnCache/CdnPathsGenerator\";\n\nclass FlushCacheOnFileUpdate {\n private readonly context: FileManagerContext;\n private readonly pathsGenerator: CdnPathsGenerator;\n\n constructor(context: FileManagerContext) {\n this.pathsGenerator = new CdnPathsGenerator();\n this.context = context;\n context.fileManager.onFileBeforeUpdate.subscribe(this.onFileBeforeUpdate);\n }\n\n private onFileBeforeUpdate = async ({ file, original }: OnFileBeforeUpdateTopicParams) => {\n const prevAccessControl = original.accessControl;\n const newAccessControl = file.accessControl;\n\n if (prevAccessControl?.type === newAccessControl?.type) {\n return;\n }\n\n await this.context.tasks.trigger({\n definition: \"cloudfrontInvalidateCache\",\n input: {\n caller: \"fm-before-update\",\n paths: this.pathsGenerator.generate(file)\n }\n });\n };\n}\n\nexport const flushCacheOnFileUpdate = () => {\n return new ContextPlugin<FileManagerContext>(context => {\n new FlushCacheOnFileUpdate(context);\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAKA,IAAAC,kBAAA,GAAAD,OAAA;AAEA,MAAME,sBAAsB,CAAC;EAIzBC,WAAWA,CAACC,OAA2B,EAAE;IACrC,IAAI,CAACC,cAAc,GAAG,IAAIC,oCAAiB,CAAC,CAAC;IAC7C,IAAI,CAACF,OAAO,GAAGA,OAAO;IACtBA,OAAO,CAACG,WAAW,CAACC,kBAAkB,CAACC,SAAS,CAAC,IAAI,CAACD,kBAAkB,CAAC;EAC7E;EAEQA,kBAAkB,GAAG,MAAAA,CAAO;IAAEE,IAAI;IAAEC;EAAwC,CAAC,KAAK;IACtF,MAAMC,iBAAiB,GAAGD,QAAQ,CAACE,aAAa;IAChD,MAAMC,gBAAgB,GAAGJ,IAAI,CAACG,aAAa;IAE3C,IAAID,iBAAiB,EAAEG,IAAI,KAAKD,gBAAgB,EAAEC,IAAI,EAAE;MACpD;IACJ;IAEA,MAAM,IAAI,CAACX,OAAO,CAACY,KAAK,CAACC,OAAO,CAAC;MAC7BC,UAAU,EAAE,2BAA2B;MACvCC,KAAK,EAAE;QACHC,MAAM,EAAE,kBAAkB;QAC1BC,KAAK,EAAE,IAAI,CAAChB,cAAc,CAACiB,QAAQ,CAACZ,IAAI;MAC5C;IACJ,CAAC,CAAC;EACN,CAAC;AACL;AAEO,MAAMa,sBAAsB,GAAGA,CAAA,KAAM;EACxC,OAAO,IAAIC,kBAAa,CAAqBpB,OAAO,IAAI;IACpD,IAAIF,sBAAsB,CAACE,OAAO,CAAC;EACvC,CAAC,CAAC;AACN,CAAC;AAACqB,OAAA,CAAAF,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
package/flushCdnCache/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const flushCdnCache: () => (import("@webiny/api").ContextPlugin<import("@webiny/api-file-manager/types").FileManagerContext> | import("@webiny/tasks").TaskDefinitionPlugin<import("@webiny/api-file-manager/types").FileManagerContext, any, import("@webiny/tasks").ITaskResponseDoneResultOutput>)[];
|
package/flushCdnCache/index.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.flushCdnCache = void 0;
|
|
7
|
-
var _flushCacheOnFileUpdate = require("./flushCacheOnFileUpdate");
|
|
8
|
-
var _flushCacheOnFileDelete = require("./flushCacheOnFileDelete");
|
|
9
|
-
var _invalidateCacheTaskDefinition = require("./invalidateCacheTaskDefinition");
|
|
10
|
-
const flushCdnCache = () => {
|
|
11
|
-
return [(0, _flushCacheOnFileUpdate.flushCacheOnFileUpdate)(), (0, _flushCacheOnFileDelete.flushCacheOnFileDelete)(), (0, _invalidateCacheTaskDefinition.createInvalidateCacheTask)()];
|
|
12
|
-
};
|
|
13
|
-
exports.flushCdnCache = flushCdnCache;
|
|
14
|
-
|
|
15
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_flushCacheOnFileUpdate","require","_flushCacheOnFileDelete","_invalidateCacheTaskDefinition","flushCdnCache","flushCacheOnFileUpdate","flushCacheOnFileDelete","createInvalidateCacheTask","exports"],"sources":["index.ts"],"sourcesContent":["import { flushCacheOnFileUpdate } from \"~/flushCdnCache/flushCacheOnFileUpdate\";\nimport { flushCacheOnFileDelete } from \"~/flushCdnCache/flushCacheOnFileDelete\";\nimport { createInvalidateCacheTask } from \"./invalidateCacheTaskDefinition\";\n\nexport const flushCdnCache = () => {\n return [flushCacheOnFileUpdate(), flushCacheOnFileDelete(), createInvalidateCacheTask()];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAD,OAAA;AACA,IAAAE,8BAAA,GAAAF,OAAA;AAEO,MAAMG,aAAa,GAAGA,CAAA,KAAM;EAC/B,OAAO,CAAC,IAAAC,8CAAsB,EAAC,CAAC,EAAE,IAAAC,8CAAsB,EAAC,CAAC,EAAE,IAAAC,wDAAyB,EAAC,CAAC,CAAC;AAC5F,CAAC;AAACC,OAAA,CAAAJ,aAAA,GAAAA,aAAA","ignoreList":[]}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.createInvalidateCacheTask = void 0;
|
|
7
|
-
var _tasks = require("@webiny/tasks");
|
|
8
|
-
var _InvalidateCacheTask = require("./InvalidateCacheTask");
|
|
9
|
-
const createInvalidateCacheTask = () => {
|
|
10
|
-
return (0, _tasks.createPrivateTaskDefinition)({
|
|
11
|
-
id: "cloudfrontInvalidateCache",
|
|
12
|
-
title: "Invalidate Cloudfront Cache",
|
|
13
|
-
description: "A task to invalidate Cloudfront cache by given paths.",
|
|
14
|
-
run(params) {
|
|
15
|
-
const taskRunner = new _InvalidateCacheTask.InvalidateCloudfrontCacheTask();
|
|
16
|
-
return taskRunner.run(params);
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
exports.createInvalidateCacheTask = createInvalidateCacheTask;
|
|
21
|
-
|
|
22
|
-
//# sourceMappingURL=invalidateCacheTaskDefinition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_tasks","require","_InvalidateCacheTask","createInvalidateCacheTask","createPrivateTaskDefinition","id","title","description","run","params","taskRunner","InvalidateCloudfrontCacheTask","exports"],"sources":["invalidateCacheTaskDefinition.ts"],"sourcesContent":["import { createPrivateTaskDefinition } from \"@webiny/tasks\";\nimport type { FileManagerContext } from \"@webiny/api-file-manager/types\";\nimport { InvalidateCloudfrontCacheTask } from \"./InvalidateCacheTask\";\n\nexport const createInvalidateCacheTask = () => {\n return createPrivateTaskDefinition<FileManagerContext>({\n id: \"cloudfrontInvalidateCache\",\n title: \"Invalidate Cloudfront Cache\",\n description: \"A task to invalidate Cloudfront cache by given paths.\",\n run(params) {\n const taskRunner = new InvalidateCloudfrontCacheTask();\n return taskRunner.run(params);\n }\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,oBAAA,GAAAD,OAAA;AAEO,MAAME,yBAAyB,GAAGA,CAAA,KAAM;EAC3C,OAAO,IAAAC,kCAA2B,EAAqB;IACnDC,EAAE,EAAE,2BAA2B;IAC/BC,KAAK,EAAE,6BAA6B;IACpCC,WAAW,EAAE,uDAAuD;IACpEC,GAAGA,CAACC,MAAM,EAAE;MACR,MAAMC,UAAU,GAAG,IAAIC,kDAA6B,CAAC,CAAC;MACtD,OAAOD,UAAU,CAACF,GAAG,CAACC,MAAM,CAAC;IACjC;EACJ,CAAC,CAAC;AACN,CAAC;AAACG,OAAA,CAAAT,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
package/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_graphqlFileStorageS","_interopRequireDefault","require","_fileStorageS","_addFileMetadata","_flushCdnCache","_FileUploadModifier","_createAssetDelivery","_createCustomAssetDelivery","_default","fileStorageS3","graphqlFileStorageS3","addFileMetadata","flushCdnCache","exports","default"],"sources":["index.ts"],"sourcesContent":["import graphqlFileStorageS3 from \"./plugins/graphqlFileStorageS3\";\nimport fileStorageS3 from \"./plugins/fileStorageS3\";\nimport { addFileMetadata } from \"./plugins/addFileMetadata\";\nimport { flushCdnCache } from \"~/flushCdnCache\";\n\nexport { createFileUploadModifier } from \"./utils/FileUploadModifier\";\nexport { createAssetDelivery } from \"./assetDelivery/createAssetDelivery\";\nexport { createCustomAssetDelivery } from \"./assetDelivery/createCustomAssetDelivery\";\n\nexport default () => [fileStorageS3(), graphqlFileStorageS3, addFileMetadata(), flushCdnCache()];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,oBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AAEA,IAAAI,mBAAA,GAAAJ,OAAA;AACA,IAAAK,oBAAA,GAAAL,OAAA;AACA,IAAAM,0BAAA,GAAAN,OAAA;AAAsF,IAAAO,QAAA,GAEvEA,CAAA,KAAM,CAAC,IAAAC,qBAAa,EAAC,CAAC,EAAEC,4BAAoB,EAAE,IAAAC,gCAAe,EAAC,CAAC,EAAE,IAAAC,4BAAa,EAAC,CAAC,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAN,QAAA","ignoreList":[]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { ContextPlugin } from "@webiny/api";
|
|
2
|
-
import type { FileManagerContext, File } from "@webiny/api-file-manager/types";
|
|
3
|
-
export declare class MetadataWriter {
|
|
4
|
-
private readonly bucket;
|
|
5
|
-
constructor(bucket: string);
|
|
6
|
-
write(files: File[]): Promise<void>;
|
|
7
|
-
private getS3;
|
|
8
|
-
private getMetadata;
|
|
9
|
-
}
|
|
10
|
-
export declare const addFileMetadata: () => ContextPlugin<FileManagerContext>;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.addFileMetadata = exports.MetadataWriter = void 0;
|
|
7
|
-
var _clientS = require("@webiny/aws-sdk/client-s3");
|
|
8
|
-
var _api = require("@webiny/api");
|
|
9
|
-
var _utils = require("@webiny/utils");
|
|
10
|
-
class MetadataWriter {
|
|
11
|
-
constructor(bucket) {
|
|
12
|
-
this.bucket = bucket;
|
|
13
|
-
}
|
|
14
|
-
async write(files) {
|
|
15
|
-
const s3 = this.getS3();
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* We need to write each file with retry.
|
|
19
|
-
*/
|
|
20
|
-
const writers = files.map(file => {
|
|
21
|
-
const writer = () => {
|
|
22
|
-
return s3.putObject({
|
|
23
|
-
Bucket: this.bucket,
|
|
24
|
-
Key: `${file.key}.metadata`,
|
|
25
|
-
Body: JSON.stringify(this.getMetadata(file)),
|
|
26
|
-
ContentType: "application/json",
|
|
27
|
-
CacheControl: "max-age=31536000"
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
return (0, _utils.executeWithRetry)(writer);
|
|
31
|
-
});
|
|
32
|
-
await Promise.all(writers);
|
|
33
|
-
}
|
|
34
|
-
getS3() {
|
|
35
|
-
return new _clientS.S3({
|
|
36
|
-
region: process.env.AWS_REGION
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
getMetadata(file) {
|
|
40
|
-
return {
|
|
41
|
-
id: file.id,
|
|
42
|
-
tenant: file.tenant,
|
|
43
|
-
locale: file.locale,
|
|
44
|
-
size: file.size,
|
|
45
|
-
contentType: file.type
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
exports.MetadataWriter = MetadataWriter;
|
|
50
|
-
const addFileMetadata = () => {
|
|
51
|
-
return new _api.ContextPlugin(context => {
|
|
52
|
-
const metadataWriter = new MetadataWriter(String(process.env.S3_BUCKET));
|
|
53
|
-
context.fileManager.onFileAfterCreate.subscribe(({
|
|
54
|
-
file
|
|
55
|
-
}) => {
|
|
56
|
-
return metadataWriter.write([file]);
|
|
57
|
-
});
|
|
58
|
-
context.fileManager.onFileAfterBatchCreate.subscribe(({
|
|
59
|
-
files
|
|
60
|
-
}) => {
|
|
61
|
-
return metadataWriter.write(files);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
};
|
|
65
|
-
exports.addFileMetadata = addFileMetadata;
|
|
66
|
-
|
|
67
|
-
//# sourceMappingURL=addFileMetadata.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_clientS","require","_api","_utils","MetadataWriter","constructor","bucket","write","files","s3","getS3","writers","map","file","writer","putObject","Bucket","Key","key","Body","JSON","stringify","getMetadata","ContentType","CacheControl","executeWithRetry","Promise","all","S3","region","process","env","AWS_REGION","id","tenant","locale","size","contentType","type","exports","addFileMetadata","ContextPlugin","context","metadataWriter","String","S3_BUCKET","fileManager","onFileAfterCreate","subscribe","onFileAfterBatchCreate"],"sources":["addFileMetadata.ts"],"sourcesContent":["import { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport type { FileManagerContext, File } from \"@webiny/api-file-manager/types\";\nimport { executeWithRetry } from \"@webiny/utils\";\n\nexport class MetadataWriter {\n private readonly bucket: string;\n\n constructor(bucket: string) {\n this.bucket = bucket;\n }\n\n async write(files: File[]) {\n const s3 = this.getS3();\n\n /**\n * We need to write each file with retry.\n */\n const writers = files.map(file => {\n const writer = () => {\n return s3.putObject({\n Bucket: this.bucket,\n Key: `${file.key}.metadata`,\n Body: JSON.stringify(this.getMetadata(file)),\n ContentType: \"application/json\",\n CacheControl: \"max-age=31536000\"\n });\n };\n\n return executeWithRetry(writer);\n });\n\n await Promise.all(writers);\n }\n\n private getS3() {\n return new S3({ region: process.env.AWS_REGION });\n }\n\n private getMetadata(file: File) {\n return {\n id: file.id,\n tenant: file.tenant,\n locale: file.locale,\n size: file.size,\n contentType: file.type\n };\n }\n}\n\nexport const addFileMetadata = () => {\n return new ContextPlugin<FileManagerContext>(context => {\n const metadataWriter = new MetadataWriter(String(process.env.S3_BUCKET));\n\n context.fileManager.onFileAfterCreate.subscribe(({ file }) => {\n return metadataWriter.write([file]);\n });\n\n context.fileManager.onFileAfterBatchCreate.subscribe(({ files }) => {\n return metadataWriter.write(files);\n });\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AAEO,MAAMG,cAAc,CAAC;EAGxBC,WAAWA,CAACC,MAAc,EAAE;IACxB,IAAI,CAACA,MAAM,GAAGA,MAAM;EACxB;EAEA,MAAMC,KAAKA,CAACC,KAAa,EAAE;IACvB,MAAMC,EAAE,GAAG,IAAI,CAACC,KAAK,CAAC,CAAC;;IAEvB;AACR;AACA;IACQ,MAAMC,OAAO,GAAGH,KAAK,CAACI,GAAG,CAACC,IAAI,IAAI;MAC9B,MAAMC,MAAM,GAAGA,CAAA,KAAM;QACjB,OAAOL,EAAE,CAACM,SAAS,CAAC;UAChBC,MAAM,EAAE,IAAI,CAACV,MAAM;UACnBW,GAAG,EAAE,GAAGJ,IAAI,CAACK,GAAG,WAAW;UAC3BC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACC,WAAW,CAACT,IAAI,CAAC,CAAC;UAC5CU,WAAW,EAAE,kBAAkB;UAC/BC,YAAY,EAAE;QAClB,CAAC,CAAC;MACN,CAAC;MAED,OAAO,IAAAC,uBAAgB,EAACX,MAAM,CAAC;IACnC,CAAC,CAAC;IAEF,MAAMY,OAAO,CAACC,GAAG,CAAChB,OAAO,CAAC;EAC9B;EAEQD,KAAKA,CAAA,EAAG;IACZ,OAAO,IAAIkB,WAAE,CAAC;MAAEC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC;IAAW,CAAC,CAAC;EACrD;EAEQV,WAAWA,CAACT,IAAU,EAAE;IAC5B,OAAO;MACHoB,EAAE,EAAEpB,IAAI,CAACoB,EAAE;MACXC,MAAM,EAAErB,IAAI,CAACqB,MAAM;MACnBC,MAAM,EAAEtB,IAAI,CAACsB,MAAM;MACnBC,IAAI,EAAEvB,IAAI,CAACuB,IAAI;MACfC,WAAW,EAAExB,IAAI,CAACyB;IACtB,CAAC;EACL;AACJ;AAACC,OAAA,CAAAnC,cAAA,GAAAA,cAAA;AAEM,MAAMoC,eAAe,GAAGA,CAAA,KAAM;EACjC,OAAO,IAAIC,kBAAa,CAAqBC,OAAO,IAAI;IACpD,MAAMC,cAAc,GAAG,IAAIvC,cAAc,CAACwC,MAAM,CAACd,OAAO,CAACC,GAAG,CAACc,SAAS,CAAC,CAAC;IAExEH,OAAO,CAACI,WAAW,CAACC,iBAAiB,CAACC,SAAS,CAAC,CAAC;MAAEnC;IAAK,CAAC,KAAK;MAC1D,OAAO8B,cAAc,CAACpC,KAAK,CAAC,CAACM,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF6B,OAAO,CAACI,WAAW,CAACG,sBAAsB,CAACD,SAAS,CAAC,CAAC;MAAExC;IAAM,CAAC,KAAK;MAChE,OAAOmC,cAAc,CAACpC,KAAK,CAACC,KAAK,CAAC;IACtC,CAAC,CAAC;EACN,CAAC,CAAC;AACN,CAAC;AAAC+B,OAAA,CAAAC,eAAA,GAAAA,eAAA","ignoreList":[]}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.checkPermissions = void 0;
|
|
7
|
-
var _apiSecurity = require("@webiny/api-security");
|
|
8
|
-
const checkPermissions = async (context, check = {}) => {
|
|
9
|
-
const filePermissions = await context.security.getPermissions("fm.file");
|
|
10
|
-
const relevantFilePermissions = filePermissions.filter(current => {
|
|
11
|
-
if (check.rwd && !hasRwd(current, check.rwd)) {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
return true;
|
|
15
|
-
});
|
|
16
|
-
if (relevantFilePermissions.length === 0) {
|
|
17
|
-
throw new _apiSecurity.NotAuthorizedError();
|
|
18
|
-
}
|
|
19
|
-
return relevantFilePermissions;
|
|
20
|
-
};
|
|
21
|
-
exports.checkPermissions = checkPermissions;
|
|
22
|
-
const hasRwd = (filesFilePermissions, rwd) => {
|
|
23
|
-
if (!Array.isArray(filesFilePermissions)) {
|
|
24
|
-
filesFilePermissions = [filesFilePermissions];
|
|
25
|
-
}
|
|
26
|
-
if (!rwd) {
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Is there a permission that doesn't restrict RWD permissions, that means all RWD permissions are allowed.
|
|
31
|
-
const permissionWithoutRwdRestrictions = filesFilePermissions.some(permission => {
|
|
32
|
-
return typeof permission.rwd !== "string";
|
|
33
|
-
});
|
|
34
|
-
if (permissionWithoutRwdRestrictions) {
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// If there is no permission that doesn't restrict RWD permissions, that means we need to check if the RWD.
|
|
39
|
-
return filesFilePermissions.some(permission => {
|
|
40
|
-
return permission.rwd && permission.rwd.includes(rwd);
|
|
41
|
-
});
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
//# sourceMappingURL=checkPermissions.js.map
|