@webiny/api-file-manager-s3 6.0.0-beta.0 → 6.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -1
- package/assetDelivery/assetDeliveryConfig.d.ts +2 -6
- package/assetDelivery/assetDeliveryConfig.js +24 -23
- package/assetDelivery/assetDeliveryConfig.js.map +1 -1
- package/assetDelivery/createAssetDelivery.d.ts +3 -3
- package/assetDelivery/createAssetDelivery.js +15 -12
- package/assetDelivery/createAssetDelivery.js.map +1 -1
- package/assetDelivery/index.d.ts +8 -9
- package/assetDelivery/index.js +8 -68
- package/assetDelivery/index.js.map +1 -1
- package/assetDelivery/s3/S3AssetResolver.d.ts +8 -5
- package/assetDelivery/s3/S3AssetResolver.js +19 -27
- package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
- package/assetDelivery/s3/S3ContentsReader.d.ts +2 -3
- package/assetDelivery/s3/S3ContentsReader.js +1 -8
- package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
- package/assetDelivery/s3/S3ErrorAssetReply.js +2 -9
- package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3OutputStrategy.d.ts +4 -3
- package/assetDelivery/s3/S3OutputStrategy.js +12 -17
- package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
- package/assetDelivery/s3/S3RedirectAssetReply.js +4 -11
- package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3StreamAssetReply.d.ts +2 -1
- package/assetDelivery/s3/S3StreamAssetReply.js +4 -11
- package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -1
- package/assetDelivery/s3/SharpTransform.d.ts +2 -2
- package/assetDelivery/s3/SharpTransform.js +63 -37
- package/assetDelivery/s3/SharpTransform.js.map +1 -1
- package/assetDelivery/s3/transformation/AssetKeyGenerator.d.ts +1 -1
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js +3 -12
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -1
- package/assetDelivery/s3/transformation/CallableContentsReader.d.ts +1 -2
- package/assetDelivery/s3/transformation/CallableContentsReader.js +1 -8
- package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -1
- package/assetDelivery/s3/transformation/WidthCollection.js +1 -8
- package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -1
- package/assetDelivery/s3/transformation/utils.d.ts +1 -3
- package/assetDelivery/s3/transformation/utils.js +23 -19
- package/assetDelivery/s3/transformation/utils.js.map +1 -1
- package/assetDelivery/threatDetection/ObjectKey.d.ts +7 -0
- package/assetDelivery/threatDetection/ObjectKey.js +17 -0
- package/assetDelivery/threatDetection/ObjectKey.js.map +1 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.d.ts +2 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +51 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.d.ts +2 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +6 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -0
- package/assetDelivery/threatDetection/index.d.ts +2 -0
- package/assetDelivery/threatDetection/index.js +4 -0
- package/assetDelivery/threatDetection/index.js.map +1 -0
- package/assetDelivery/threatDetection/processThreatScanResult.d.ts +3 -0
- package/assetDelivery/threatDetection/processThreatScanResult.js +65 -0
- package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -0
- package/assetDelivery/threatDetection/types.d.ts +9 -0
- package/assetDelivery/threatDetection/types.js +3 -0
- package/assetDelivery/threatDetection/types.js.map +1 -0
- package/assetDelivery/types.d.ts +10 -0
- package/assetDelivery/types.js +3 -0
- package/assetDelivery/types.js.map +1 -0
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.d.ts +11 -0
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js +19 -0
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js.map +1 -0
- package/enterprise/ApplyThreatScanning/feature.d.ts +1 -0
- package/enterprise/ApplyThreatScanning/feature.js +10 -0
- package/enterprise/ApplyThreatScanning/feature.js.map +1 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.d.ts +15 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js +36 -0
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js.map +1 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.d.ts +31 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js +60 -0
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js.map +1 -0
- package/features/DeleteFileFromBucket/feature.d.ts +1 -0
- package/features/DeleteFileFromBucket/feature.js +12 -0
- package/features/DeleteFileFromBucket/feature.js.map +1 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.d.ts +11 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.js +26 -0
- package/features/ExtractMetadata/ExtractMetadataHandler.js.map +1 -0
- package/features/ExtractMetadata/ExtractMetadataTask.d.ts +23 -0
- package/features/ExtractMetadata/ExtractMetadataTask.js +128 -0
- package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -0
- package/features/ExtractMetadata/feature.d.ts +1 -0
- package/features/ExtractMetadata/feature.js +12 -0
- package/features/ExtractMetadata/feature.js.map +1 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.d.ts +12 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js +27 -0
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js.map +1 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.d.ts +12 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js +35 -0
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js.map +1 -0
- package/features/FlushCache/InvalidateCacheTask.d.ts +25 -0
- package/features/FlushCache/InvalidateCacheTask.js +86 -0
- package/features/FlushCache/InvalidateCacheTask.js.map +1 -0
- package/features/FlushCache/feature.d.ts +1 -0
- package/features/FlushCache/feature.js +14 -0
- package/features/FlushCache/feature.js.map +1 -0
- package/features/WriteFileMetadata/MetadataReader.d.ts +14 -0
- package/features/WriteFileMetadata/MetadataReader.js +14 -0
- package/features/WriteFileMetadata/MetadataReader.js.map +1 -0
- package/features/WriteFileMetadata/MetadataWriter.d.ts +10 -0
- package/features/WriteFileMetadata/MetadataWriter.js +28 -0
- package/features/WriteFileMetadata/MetadataWriter.js.map +1 -0
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +12 -0
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +21 -0
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +12 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +21 -0
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -0
- package/features/WriteFileMetadata/feature.d.ts +1 -0
- package/features/WriteFileMetadata/feature.js +12 -0
- package/features/WriteFileMetadata/feature.js.map +1 -0
- package/graphql/checkPermissions.d.ts +5 -0
- package/{plugins → graphql}/checkPermissions.js +4 -11
- package/graphql/checkPermissions.js.map +1 -0
- package/graphql/schema.d.ts +1 -0
- package/{plugins/graphqlFileStorageS3.js → graphql/schema.js} +49 -57
- package/graphql/schema.js.map +1 -0
- package/index.d.ts +4 -5
- package/index.js +21 -32
- package/index.js.map +1 -1
- package/multiPartUpload/CompleteMultiPartUploadUseCase.d.ts +1 -1
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js +4 -11
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -1
- package/multiPartUpload/CreateMultiPartUploadUseCase.d.ts +2 -2
- package/multiPartUpload/CreateMultiPartUploadUseCase.js +3 -10
- package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -1
- package/package.json +23 -29
- package/types.d.ts +1 -1
- package/types.js +1 -5
- package/types.js.map +1 -1
- package/utils/CdnPathsGenerator.d.ts +3 -0
- package/utils/CdnPathsGenerator.js +7 -0
- package/utils/CdnPathsGenerator.js.map +1 -0
- package/utils/FileExtension.d.ts +1 -1
- package/utils/FileExtension.js +3 -10
- package/utils/FileExtension.js.map +1 -1
- package/utils/FileKey.d.ts +1 -1
- package/utils/FileKey.js +5 -13
- package/utils/FileKey.js.map +1 -1
- package/utils/FileKey.test.js +8 -9
- package/utils/FileKey.test.js.map +1 -1
- package/utils/FileNormalizer.d.ts +2 -2
- package/utils/FileNormalizer.js +5 -12
- package/utils/FileNormalizer.js.map +1 -1
- package/utils/FileUploadModifier.d.ts +1 -1
- package/utils/FileUploadModifier.js +6 -16
- package/utils/FileUploadModifier.js.map +1 -1
- package/utils/createFileNormalizerFromContext.d.ts +2 -2
- package/utils/createFileNormalizerFromContext.js +5 -12
- package/utils/createFileNormalizerFromContext.js.map +1 -1
- package/utils/getPresignedPostPayload.d.ts +4 -3
- package/utils/getPresignedPostPayload.js +10 -15
- package/utils/getPresignedPostPayload.js.map +1 -1
- package/utils/mimeTypes.js +5 -13
- package/utils/mimeTypes.js.map +1 -1
- package/utils/uploadFileToS3.d.ts +1 -3
- package/utils/uploadFileToS3.js +7 -20
- package/utils/uploadFileToS3.js.map +1 -1
- package/assetDelivery/createCustomAssetDelivery.d.ts +0 -12
- package/assetDelivery/createCustomAssetDelivery.js +0 -28
- package/assetDelivery/createCustomAssetDelivery.js.map +0 -1
- package/assetDelivery/customAssets/CustomAsset.d.ts +0 -6
- package/assetDelivery/customAssets/CustomAsset.js +0 -14
- package/assetDelivery/customAssets/CustomAsset.js.map +0 -1
- package/assetDelivery/customAssets/CustomAssetProcessor.d.ts +0 -10
- package/assetDelivery/customAssets/CustomAssetProcessor.js +0 -25
- package/assetDelivery/customAssets/CustomAssetProcessor.js.map +0 -1
- package/assetDelivery/customAssets/S3CustomAssetResolver.d.ts +0 -15
- package/assetDelivery/customAssets/S3CustomAssetResolver.js +0 -90
- package/assetDelivery/customAssets/S3CustomAssetResolver.js.map +0 -1
- package/assetDelivery/customAssets/customAssetDeliveryConfig.d.ts +0 -1
- package/assetDelivery/customAssets/customAssetDeliveryConfig.js +0 -30
- package/assetDelivery/customAssets/customAssetDeliveryConfig.js.map +0 -1
- package/assetDelivery/s3/S3AssetMetadataReader.d.ts +0 -15
- package/assetDelivery/s3/S3AssetMetadataReader.js +0 -36
- package/assetDelivery/s3/S3AssetMetadataReader.js.map +0 -1
- package/assetDelivery/s3/transformation/legacyUtils.d.ts +0 -12
- package/assetDelivery/s3/transformation/legacyUtils.js +0 -34
- package/assetDelivery/s3/transformation/legacyUtils.js.map +0 -1
- package/flushCdnCache/CdnPathsGenerator.d.ts +0 -4
- package/flushCdnCache/CdnPathsGenerator.js +0 -14
- package/flushCdnCache/CdnPathsGenerator.js.map +0 -1
- package/flushCdnCache/InvalidateCacheTask.d.ts +0 -18
- package/flushCdnCache/InvalidateCacheTask.js +0 -78
- package/flushCdnCache/InvalidateCacheTask.js.map +0 -1
- package/flushCdnCache/flushCacheOnFileDelete.d.ts +0 -3
- package/flushCdnCache/flushCacheOnFileDelete.js +0 -34
- package/flushCdnCache/flushCacheOnFileDelete.js.map +0 -1
- package/flushCdnCache/flushCacheOnFileUpdate.d.ts +0 -3
- package/flushCdnCache/flushCacheOnFileUpdate.js +0 -40
- package/flushCdnCache/flushCacheOnFileUpdate.js.map +0 -1
- package/flushCdnCache/index.d.ts +0 -1
- package/flushCdnCache/index.js +0 -15
- package/flushCdnCache/index.js.map +0 -1
- package/flushCdnCache/invalidateCacheTaskDefinition.d.ts +0 -2
- package/flushCdnCache/invalidateCacheTaskDefinition.js +0 -22
- package/flushCdnCache/invalidateCacheTaskDefinition.js.map +0 -1
- package/plugins/addFileMetadata.d.ts +0 -10
- package/plugins/addFileMetadata.js +0 -67
- package/plugins/addFileMetadata.js.map +0 -1
- package/plugins/checkPermissions.d.ts +0 -4
- package/plugins/checkPermissions.js.map +0 -1
- package/plugins/fileStorageS3.d.ts +0 -3
- package/plugins/fileStorageS3.js +0 -60
- package/plugins/fileStorageS3.js.map +0 -1
- package/plugins/graphqlFileStorageS3.d.ts +0 -4
- package/plugins/graphqlFileStorageS3.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_CustomAsset","require","CustomAssetProcessor","constructor","assetProcessor","process","assetRequest","asset","CustomAsset","exports"],"sources":["CustomAssetProcessor.ts"],"sourcesContent":["import { Asset, AssetProcessor, AssetRequest } from \"@webiny/api-file-manager\";\nimport { CustomAsset } from \"./CustomAsset\";\n\n/**\n * We don't want to run any kind of transformations on custom assets.\n * Custom assets are usually pre-processed and ready to be delivered to the client.\n */\nexport class CustomAssetProcessor implements AssetProcessor {\n private assetProcessor: AssetProcessor;\n\n constructor(assetProcessor: AssetProcessor) {\n this.assetProcessor = assetProcessor;\n }\n\n async process(assetRequest: AssetRequest, asset: Asset): Promise<Asset> {\n if (asset instanceof CustomAsset) {\n return asset;\n }\n\n return this.assetProcessor.process(assetRequest, asset);\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACO,MAAMC,oBAAoB,CAA2B;EAGxDC,WAAWA,CAACC,cAA8B,EAAE;IACxC,IAAI,CAACA,cAAc,GAAGA,cAAc;EACxC;EAEA,MAAMC,OAAOA,CAACC,YAA0B,EAAEC,KAAY,EAAkB;IACpE,IAAIA,KAAK,YAAYC,wBAAW,EAAE;MAC9B,OAAOD,KAAK;IAChB;IAEA,OAAO,IAAI,CAACH,cAAc,CAACC,OAAO,CAACC,YAAY,EAAEC,KAAK,CAAC;EAC3D;AACJ;AAACE,OAAA,CAAAP,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { S3 } from "@webiny/aws-sdk/client-s3";
|
|
2
|
-
import { Asset, AssetRequest, AssetResolver } from "@webiny/api-file-manager";
|
|
3
|
-
/**
|
|
4
|
-
* This asset resolver kicks in only if the default resolution fails to resolve an asset.
|
|
5
|
-
* The goal of this resolver is to fetch .metadata from the original file that was uploaded via th File Manager.
|
|
6
|
-
*/
|
|
7
|
-
export declare class S3CustomAssetResolver implements AssetResolver {
|
|
8
|
-
private readonly s3;
|
|
9
|
-
private readonly bucket;
|
|
10
|
-
private assetResolver;
|
|
11
|
-
constructor(s3: S3, bucket: string, assetResolver: AssetResolver);
|
|
12
|
-
resolve(request: AssetRequest): Promise<Asset | undefined>;
|
|
13
|
-
private findMetadata;
|
|
14
|
-
private getFileAttributes;
|
|
15
|
-
}
|
|
@@ -1,90 +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.S3CustomAssetResolver = void 0;
|
|
8
|
-
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
var _S3AssetMetadataReader = require("../s3/S3AssetMetadataReader");
|
|
10
|
-
var _S3ContentsReader = require("../s3/S3ContentsReader");
|
|
11
|
-
var _CustomAsset = require("./CustomAsset");
|
|
12
|
-
/**
|
|
13
|
-
* This asset resolver kicks in only if the default resolution fails to resolve an asset.
|
|
14
|
-
* The goal of this resolver is to fetch .metadata from the original file that was uploaded via th File Manager.
|
|
15
|
-
*/
|
|
16
|
-
class S3CustomAssetResolver {
|
|
17
|
-
constructor(s3, bucket, assetResolver) {
|
|
18
|
-
this.assetResolver = assetResolver;
|
|
19
|
-
this.s3 = s3;
|
|
20
|
-
this.bucket = bucket;
|
|
21
|
-
}
|
|
22
|
-
async resolve(request) {
|
|
23
|
-
const resolvedAsset = await this.assetResolver.resolve(request);
|
|
24
|
-
if (resolvedAsset) {
|
|
25
|
-
return resolvedAsset;
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
const originalFileMetadataKey = await this.findMetadata(request);
|
|
29
|
-
if (!originalFileMetadataKey) {
|
|
30
|
-
return undefined;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// We need to fetch the actual size and content type of the file.
|
|
34
|
-
const attrs = await this.getFileAttributes(request.getKey());
|
|
35
|
-
if (!attrs) {
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
const metadataReader = new _S3AssetMetadataReader.S3AssetMetadataReader(this.s3, this.bucket);
|
|
39
|
-
const metadata = await metadataReader.getMetadata(originalFileMetadataKey.replace(".metadata", ""));
|
|
40
|
-
const asset = new _CustomAsset.CustomAsset({
|
|
41
|
-
// These attributes do not change between the original and derived files.
|
|
42
|
-
id: metadata.id,
|
|
43
|
-
tenant: metadata.tenant,
|
|
44
|
-
locale: metadata.locale,
|
|
45
|
-
// Assign the size and content type of the requested file.
|
|
46
|
-
size: attrs.size,
|
|
47
|
-
contentType: attrs.contentType,
|
|
48
|
-
key: request.getKey()
|
|
49
|
-
});
|
|
50
|
-
asset.setContentsReader(new _S3ContentsReader.S3ContentsReader(this.s3, this.bucket));
|
|
51
|
-
return asset;
|
|
52
|
-
} catch (error) {
|
|
53
|
-
console.error(error);
|
|
54
|
-
return undefined;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// https://d1s78zhy5i2noq.cloudfront.net/files/65a99721c20390000869e3d3/9l9iafhgn-17.jpeg
|
|
59
|
-
|
|
60
|
-
async findMetadata(request) {
|
|
61
|
-
const requestFolder = _path.default.dirname(request.getKey());
|
|
62
|
-
const assetList = await this.s3.listObjects({
|
|
63
|
-
Bucket: this.bucket,
|
|
64
|
-
Prefix: requestFolder + "/"
|
|
65
|
-
});
|
|
66
|
-
if (!assetList.Contents) {
|
|
67
|
-
return undefined;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// We assume that there's only one asset with the `.metadata`, and that's the original file.
|
|
71
|
-
const metadata = assetList.Contents.find(file => file.Key?.endsWith(".metadata"));
|
|
72
|
-
return metadata ? metadata.Key : undefined;
|
|
73
|
-
}
|
|
74
|
-
async getFileAttributes(key) {
|
|
75
|
-
const head = await this.s3.headObject({
|
|
76
|
-
Bucket: this.bucket,
|
|
77
|
-
Key: key
|
|
78
|
-
});
|
|
79
|
-
if (!head) {
|
|
80
|
-
return undefined;
|
|
81
|
-
}
|
|
82
|
-
return {
|
|
83
|
-
size: head.ContentLength || 0,
|
|
84
|
-
contentType: head.ContentType || ""
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
exports.S3CustomAssetResolver = S3CustomAssetResolver;
|
|
89
|
-
|
|
90
|
-
//# sourceMappingURL=S3CustomAssetResolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_path","_interopRequireDefault","require","_S3AssetMetadataReader","_S3ContentsReader","_CustomAsset","S3CustomAssetResolver","constructor","s3","bucket","assetResolver","resolve","request","resolvedAsset","originalFileMetadataKey","findMetadata","undefined","attrs","getFileAttributes","getKey","metadataReader","S3AssetMetadataReader","metadata","getMetadata","replace","asset","CustomAsset","id","tenant","locale","size","contentType","key","setContentsReader","S3ContentsReader","error","console","requestFolder","path","dirname","assetList","listObjects","Bucket","Prefix","Contents","find","file","Key","endsWith","head","headObject","ContentLength","ContentType","exports"],"sources":["S3CustomAssetResolver.ts"],"sourcesContent":["import path from \"path\";\nimport { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { Asset, AssetRequest, AssetResolver } from \"@webiny/api-file-manager\";\nimport { S3AssetMetadataReader } from \"~/assetDelivery/s3/S3AssetMetadataReader\";\nimport { S3ContentsReader } from \"~/assetDelivery/s3/S3ContentsReader\";\nimport { CustomAsset } from \"./CustomAsset\";\n\n/**\n * This asset resolver kicks in only if the default resolution fails to resolve an asset.\n * The goal of this resolver is to fetch .metadata from the original file that was uploaded via th File Manager.\n */\nexport class S3CustomAssetResolver implements AssetResolver {\n private readonly s3: S3;\n private readonly bucket: string;\n private assetResolver: AssetResolver;\n\n constructor(s3: S3, bucket: string, assetResolver: AssetResolver) {\n this.assetResolver = assetResolver;\n this.s3 = s3;\n this.bucket = bucket;\n }\n\n async resolve(request: AssetRequest): Promise<Asset | undefined> {\n const resolvedAsset = await this.assetResolver.resolve(request);\n\n if (resolvedAsset) {\n return resolvedAsset;\n }\n\n try {\n const originalFileMetadataKey = await this.findMetadata(request);\n\n if (!originalFileMetadataKey) {\n return undefined;\n }\n\n // We need to fetch the actual size and content type of the file.\n const attrs = await this.getFileAttributes(request.getKey());\n\n if (!attrs) {\n return undefined;\n }\n\n const metadataReader = new S3AssetMetadataReader(this.s3, this.bucket);\n const metadata = await metadataReader.getMetadata(\n originalFileMetadataKey.replace(\".metadata\", \"\")\n );\n\n const asset = new CustomAsset({\n // These attributes do not change between the original and derived files.\n id: metadata.id,\n tenant: metadata.tenant,\n locale: metadata.locale,\n // Assign the size and content type of the requested file.\n size: attrs.size,\n contentType: attrs.contentType,\n key: request.getKey()\n });\n\n asset.setContentsReader(new S3ContentsReader(this.s3, this.bucket));\n\n return asset;\n } catch (error) {\n console.error(error);\n return undefined;\n }\n }\n\n // https://d1s78zhy5i2noq.cloudfront.net/files/65a99721c20390000869e3d3/9l9iafhgn-17.jpeg\n\n private async findMetadata(request: AssetRequest) {\n const requestFolder = path.dirname(request.getKey());\n\n const assetList = await this.s3.listObjects({\n Bucket: this.bucket,\n Prefix: requestFolder + \"/\"\n });\n\n if (!assetList.Contents) {\n return undefined;\n }\n\n // We assume that there's only one asset with the `.metadata`, and that's the original file.\n const metadata = assetList.Contents.find(file => file.Key?.endsWith(\".metadata\"));\n\n return metadata ? metadata.Key : undefined;\n }\n\n private async getFileAttributes(key: string) {\n const head = await this.s3.headObject({\n Bucket: this.bucket,\n Key: key\n });\n\n if (!head) {\n return undefined;\n }\n\n return {\n size: head.ContentLength || 0,\n contentType: head.ContentType || \"\"\n };\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,sBAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,YAAA,GAAAH,OAAA;AAEA;AACA;AACA;AACA;AACO,MAAMI,qBAAqB,CAA0B;EAKxDC,WAAWA,CAACC,EAAM,EAAEC,MAAc,EAAEC,aAA4B,EAAE;IAC9D,IAAI,CAACA,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACF,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,MAAM,GAAGA,MAAM;EACxB;EAEA,MAAME,OAAOA,CAACC,OAAqB,EAA8B;IAC7D,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACH,aAAa,CAACC,OAAO,CAACC,OAAO,CAAC;IAE/D,IAAIC,aAAa,EAAE;MACf,OAAOA,aAAa;IACxB;IAEA,IAAI;MACA,MAAMC,uBAAuB,GAAG,MAAM,IAAI,CAACC,YAAY,CAACH,OAAO,CAAC;MAEhE,IAAI,CAACE,uBAAuB,EAAE;QAC1B,OAAOE,SAAS;MACpB;;MAEA;MACA,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACC,iBAAiB,CAACN,OAAO,CAACO,MAAM,CAAC,CAAC,CAAC;MAE5D,IAAI,CAACF,KAAK,EAAE;QACR,OAAOD,SAAS;MACpB;MAEA,MAAMI,cAAc,GAAG,IAAIC,4CAAqB,CAAC,IAAI,CAACb,EAAE,EAAE,IAAI,CAACC,MAAM,CAAC;MACtE,MAAMa,QAAQ,GAAG,MAAMF,cAAc,CAACG,WAAW,CAC7CT,uBAAuB,CAACU,OAAO,CAAC,WAAW,EAAE,EAAE,CACnD,CAAC;MAED,MAAMC,KAAK,GAAG,IAAIC,wBAAW,CAAC;QAC1B;QACAC,EAAE,EAAEL,QAAQ,CAACK,EAAE;QACfC,MAAM,EAAEN,QAAQ,CAACM,MAAM;QACvBC,MAAM,EAAEP,QAAQ,CAACO,MAAM;QACvB;QACAC,IAAI,EAAEb,KAAK,CAACa,IAAI;QAChBC,WAAW,EAAEd,KAAK,CAACc,WAAW;QAC9BC,GAAG,EAAEpB,OAAO,CAACO,MAAM,CAAC;MACxB,CAAC,CAAC;MAEFM,KAAK,CAACQ,iBAAiB,CAAC,IAAIC,kCAAgB,CAAC,IAAI,CAAC1B,EAAE,EAAE,IAAI,CAACC,MAAM,CAAC,CAAC;MAEnE,OAAOgB,KAAK;IAChB,CAAC,CAAC,OAAOU,KAAK,EAAE;MACZC,OAAO,CAACD,KAAK,CAACA,KAAK,CAAC;MACpB,OAAOnB,SAAS;IACpB;EACJ;;EAEA;;EAEA,MAAcD,YAAYA,CAACH,OAAqB,EAAE;IAC9C,MAAMyB,aAAa,GAAGC,aAAI,CAACC,OAAO,CAAC3B,OAAO,CAACO,MAAM,CAAC,CAAC,CAAC;IAEpD,MAAMqB,SAAS,GAAG,MAAM,IAAI,CAAChC,EAAE,CAACiC,WAAW,CAAC;MACxCC,MAAM,EAAE,IAAI,CAACjC,MAAM;MACnBkC,MAAM,EAAEN,aAAa,GAAG;IAC5B,CAAC,CAAC;IAEF,IAAI,CAACG,SAAS,CAACI,QAAQ,EAAE;MACrB,OAAO5B,SAAS;IACpB;;IAEA;IACA,MAAMM,QAAQ,GAAGkB,SAAS,CAACI,QAAQ,CAACC,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,GAAG,EAAEC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEjF,OAAO1B,QAAQ,GAAGA,QAAQ,CAACyB,GAAG,GAAG/B,SAAS;EAC9C;EAEA,MAAcE,iBAAiBA,CAACc,GAAW,EAAE;IACzC,MAAMiB,IAAI,GAAG,MAAM,IAAI,CAACzC,EAAE,CAAC0C,UAAU,CAAC;MAClCR,MAAM,EAAE,IAAI,CAACjC,MAAM;MACnBsC,GAAG,EAAEf;IACT,CAAC,CAAC;IAEF,IAAI,CAACiB,IAAI,EAAE;MACP,OAAOjC,SAAS;IACpB;IAEA,OAAO;MACHc,IAAI,EAAEmB,IAAI,CAACE,aAAa,IAAI,CAAC;MAC7BpB,WAAW,EAAEkB,IAAI,CAACG,WAAW,IAAI;IACrC,CAAC;EACL;AACJ;AAACC,OAAA,CAAA/C,qBAAA,GAAAA,qBAAA","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const customAssetDeliveryConfig: () => import("@webiny/api-file-manager").AssetDeliveryConfigModifierPlugin;
|
|
@@ -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,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,GAAI,GAAED,GAAI,WAAU;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,CAAE,wBAAuBP,WAAY,QAAO,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,OAAQ,GAAEF,sBAAuB,GAAE,IAAAG,mBAAU,EAACD,GAAG,CAAE,GAAE;AACzD,CAAC;AAACL,OAAA,CAAAI,0BAAA,GAAAA,0BAAA;AAEF,MAAMG,qCAAqC,GAAIF,GAAW,IAAa;EACnE,OAAQ,GAAEH,kCAAmC,GAAE,IAAAI,mBAAU,EAACD,GAAG,CAAE,GAAE;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,OAAQ,GAAEK,MAAO,GAAE,IAAAJ,mBAAU,EAACG,eAAe,CAAE,IAAGJ,GAAI,EAAC;AAC3D,CAAC;AAACL,OAAA,CAAAQ,WAAA,GAAAA,WAAA","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 { 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,CAAE,UAASA,IAAI,CAACC,GAAI,GAAE,EAAG,YAAWD,IAAI,CAACC,GAAI,GAAE,EAAE,GAAGD,IAAI,CAACE,OAAO,CAAC;EAC5E;AACJ;AAACC,OAAA,CAAAL,iBAAA,GAAAA,iBAAA","ignoreList":[]}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { ITaskRunParams } from "@webiny/tasks/types";
|
|
2
|
-
import { FileManagerContext } from "@webiny/api-file-manager/types";
|
|
3
|
-
import { 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 { ITaskRunParams } from \"@webiny/tasks/types\";\nimport { FileManagerContext } from \"@webiny/api-file-manager/types\";\nimport { executeWithRetry } from \"@webiny/utils\";\nimport { 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,EAAG,+DAA8D;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,EAAG,GAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAE,IAAGjB,MAAO,EAAC;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 { FileManagerContext, OnFileBeforeUpdateTopicParams } 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;AAEA,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 { FileManagerContext, OnFileBeforeUpdateTopicParams } 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;AAEA,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 { 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":[]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { ContextPlugin } from "@webiny/api";
|
|
2
|
-
import { 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>;
|