@webiny/api-file-manager-s3 0.0.0-unstable.e6f0dc8ca7 → 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/assetDelivery/abstractions.d.ts +11 -0
- package/assetDelivery/abstractions.js +7 -0
- package/assetDelivery/abstractions.js.map +1 -0
- package/assetDelivery/assetDeliveryConfig.d.ts +1 -1
- package/assetDelivery/assetDeliveryConfig.js +10 -44
- package/assetDelivery/assetDeliveryConfig.js.map +1 -1
- package/assetDelivery/createAssetDelivery.js +5 -19
- package/assetDelivery/createAssetDelivery.js.map +1 -1
- package/assetDelivery/feature.d.ts +5 -0
- package/assetDelivery/feature.js +36 -0
- package/assetDelivery/feature.js.map +1 -0
- package/assetDelivery/index.js +0 -2
- 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 +3 -0
- package/assetDelivery/s3/S3AssetResolver.js +32 -22
- package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
- package/assetDelivery/s3/S3ContentsReader.js +13 -16
- package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
- package/assetDelivery/s3/S3ErrorAssetReply.js +10 -9
- package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3OutputStrategy.d.ts +5 -5
- package/assetDelivery/s3/S3OutputStrategy.js +33 -27
- package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
- package/assetDelivery/s3/S3RedirectAssetReply.js +12 -11
- package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
- package/assetDelivery/s3/S3StreamAssetReply.js +12 -11
- package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -1
- package/assetDelivery/s3/SharpTransform.d.ts +21 -13
- package/assetDelivery/s3/SharpTransform.js +164 -173
- package/assetDelivery/s3/SharpTransform.js.map +1 -1
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js +18 -17
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -1
- package/assetDelivery/s3/transformation/CallableContentsReader.js +8 -7
- package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -1
- package/assetDelivery/s3/transformation/WidthCollection.js +15 -16
- package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -1
- package/assetDelivery/s3/transformation/utils.js +24 -30
- package/assetDelivery/s3/transformation/utils.js.map +1 -1
- package/assetDelivery/threatDetection/ObjectKey.js +15 -14
- package/assetDelivery/threatDetection/ObjectKey.js.map +1 -1
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.d.ts +21 -1
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +46 -44
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -1
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +2 -3
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -1
- package/assetDelivery/threatDetection/index.js +0 -2
- package/assetDelivery/threatDetection/processThreatScanResult.js +51 -55
- package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -1
- package/assetDelivery/threatDetection/types.js +0 -3
- package/assetDelivery/types.d.ts +3 -0
- package/assetDelivery/types.js +0 -3
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.d.ts +3 -1
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js +22 -13
- package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js.map +1 -1
- package/enterprise/ApplyThreatScanning/feature.js +6 -5
- package/enterprise/ApplyThreatScanning/feature.js.map +1 -1
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js +26 -27
- package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js.map +1 -1
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.d.ts +9 -4
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js +49 -53
- package/features/DeleteFileFromBucket/DeleteS3FolderTask.js.map +1 -1
- package/features/DeleteFileFromBucket/feature.js +7 -6
- package/features/DeleteFileFromBucket/feature.js.map +1 -1
- package/features/ExtractMetadata/ExtractMetadataHandler.js +18 -19
- package/features/ExtractMetadata/ExtractMetadataHandler.js.map +1 -1
- package/features/ExtractMetadata/ExtractMetadataTask.d.ts +11 -6
- package/features/ExtractMetadata/ExtractMetadataTask.js +86 -116
- package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -1
- package/features/ExtractMetadata/feature.js +7 -6
- package/features/ExtractMetadata/feature.js.map +1 -1
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js +20 -19
- package/features/FlushCache/FlushCacheOnFileDeleteHandler.js.map +1 -1
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js +22 -26
- package/features/FlushCache/FlushCacheOnFileUpdateHandler.js.map +1 -1
- package/features/FlushCache/InvalidateCacheTask.d.ts +11 -6
- package/features/FlushCache/InvalidateCacheTask.js +75 -78
- package/features/FlushCache/InvalidateCacheTask.js.map +1 -1
- package/features/FlushCache/feature.js +8 -7
- package/features/FlushCache/feature.js.map +1 -1
- package/features/GetFileContentsById/GetFileContentsByIdUseCase.d.ts +13 -0
- package/features/GetFileContentsById/GetFileContentsByIdUseCase.js +40 -0
- package/features/GetFileContentsById/GetFileContentsByIdUseCase.js.map +1 -0
- package/features/{GetFileContents → GetFileContentsById}/feature.d.ts +1 -1
- package/features/GetFileContentsById/feature.js +11 -0
- package/features/GetFileContentsById/feature.js.map +1 -0
- package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.d.ts +13 -0
- package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.js +40 -0
- package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.js.map +1 -0
- package/features/GetFileContentsByKey/feature.d.ts +4 -0
- package/features/GetFileContentsByKey/feature.js +11 -0
- package/features/GetFileContentsByKey/feature.js.map +1 -0
- package/features/WriteFileMetadata/MetadataReader.js +9 -10
- package/features/WriteFileMetadata/MetadataReader.js.map +1 -1
- package/features/WriteFileMetadata/MetadataWriter.js +25 -25
- package/features/WriteFileMetadata/MetadataWriter.js.map +1 -1
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +14 -12
- package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -1
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +16 -12
- package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -1
- package/features/WriteFileMetadata/feature.js +7 -6
- package/features/WriteFileMetadata/feature.js.map +1 -1
- package/graphql/S3GraphQLSchema.d.ts +10 -0
- package/graphql/S3GraphQLSchema.js +233 -0
- package/graphql/S3GraphQLSchema.js.map +1 -0
- package/graphql/checkPermissions.js +17 -32
- package/graphql/checkPermissions.js.map +1 -1
- package/index.d.ts +2 -2
- package/index.js +1 -25
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js +50 -53
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -1
- package/multiPartUpload/CreateMultiPartUploadUseCase.js +31 -38
- package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -1
- package/package.json +27 -23
- package/types.d.ts +1 -1
- package/types.js +1 -3
- package/utils/CdnPathsGenerator.js +8 -4
- package/utils/CdnPathsGenerator.js.map +1 -1
- package/utils/FileExtension.js +12 -13
- package/utils/FileExtension.js.map +1 -1
- package/utils/FileKey.js +29 -21
- package/utils/FileKey.js.map +1 -1
- package/utils/FileKey.test.js +49 -49
- package/utils/FileKey.test.js.map +1 -1
- package/utils/FileNormalizer.js +31 -46
- package/utils/FileNormalizer.js.map +1 -1
- package/utils/FileUploadModifier.d.ts +8 -2
- package/utils/FileUploadModifier.js +35 -33
- package/utils/FileUploadModifier.js.map +1 -1
- package/utils/createFileNormalizerFromContext.js +5 -4
- package/utils/createFileNormalizerFromContext.js.map +1 -1
- package/utils/getPresignedPostPayload.js +36 -33
- package/utils/getPresignedPostPayload.js.map +1 -1
- package/utils/mimeTypes.js +6 -10
- package/utils/mimeTypes.js.map +1 -1
- package/utils/uploadFileToS3.d.ts +1 -1
- package/utils/uploadFileToS3.js +11 -10
- package/utils/uploadFileToS3.js.map +1 -1
- package/assetDelivery/index.js.map +0 -1
- package/assetDelivery/threatDetection/index.js.map +0 -1
- package/assetDelivery/threatDetection/types.js.map +0 -1
- package/assetDelivery/types.js.map +0 -1
- package/features/GetFileContents/GetFileContentsUseCase.d.ts +0 -13
- package/features/GetFileContents/GetFileContentsUseCase.js +0 -41
- package/features/GetFileContents/GetFileContentsUseCase.js.map +0 -1
- package/features/GetFileContents/feature.js +0 -10
- package/features/GetFileContents/feature.js.map +0 -1
- package/graphql/schema.d.ts +0 -1
- package/graphql/schema.js +0 -204
- package/graphql/schema.js.map +0 -1
- package/index.js.map +0 -1
- package/types.js.map +0 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
class CallableContentsReader {
|
|
2
|
+
constructor(callable){
|
|
3
|
+
this.callable = callable;
|
|
4
|
+
}
|
|
5
|
+
async read() {
|
|
6
|
+
return this.callable();
|
|
7
|
+
}
|
|
8
8
|
}
|
|
9
|
+
export { CallableContentsReader };
|
|
9
10
|
|
|
10
11
|
//# sourceMappingURL=CallableContentsReader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/s3/transformation/CallableContentsReader.js","sources":["../../../../src/assetDelivery/s3/transformation/CallableContentsReader.ts"],"sourcesContent":["import type { AssetContentsReader } from \"@webiny/api-file-manager\";\n\ninterface ContentsCallable {\n (): Promise<Buffer> | Buffer;\n}\n\nexport class CallableContentsReader implements AssetContentsReader {\n private readonly callable: ContentsCallable;\n\n constructor(callable: ContentsCallable) {\n this.callable = callable;\n }\n\n async read(): Promise<Buffer> {\n return this.callable();\n }\n}\n"],"names":["CallableContentsReader","callable"],"mappings":"AAMO,MAAMA;IAGT,YAAYC,QAA0B,CAAE;QACpC,IAAI,CAAC,QAAQ,GAAGA;IACpB;IAEA,MAAM,OAAwB;QAC1B,OAAO,IAAI,CAAC,QAAQ;IACxB;AACJ"}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
class WidthCollection {
|
|
2
|
+
constructor(values){
|
|
3
|
+
this.values = values.sort((a, b)=>a - b);
|
|
4
|
+
}
|
|
5
|
+
max() {
|
|
6
|
+
return Math.max(...this.values);
|
|
7
|
+
}
|
|
8
|
+
min() {
|
|
9
|
+
return Math.min(...this.values);
|
|
10
|
+
}
|
|
11
|
+
getClosestOrMax(value) {
|
|
12
|
+
if (!value) return this.max();
|
|
13
|
+
const gteGivenValue = this.values.filter((w)=>w >= value);
|
|
14
|
+
return gteGivenValue.length > 0 ? gteGivenValue[0] : this.max();
|
|
14
15
|
}
|
|
15
|
-
const gteGivenValue = this.values.filter(w => w >= value);
|
|
16
|
-
return gteGivenValue.length > 0 ? gteGivenValue[0] : this.max();
|
|
17
|
-
}
|
|
18
16
|
}
|
|
17
|
+
export { WidthCollection };
|
|
19
18
|
|
|
20
19
|
//# sourceMappingURL=WidthCollection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/s3/transformation/WidthCollection.js","sources":["../../../../src/assetDelivery/s3/transformation/WidthCollection.ts"],"sourcesContent":["export class WidthCollection {\n private readonly values: number[];\n\n constructor(values: number[]) {\n this.values = values.sort((a, b) => a - b);\n }\n\n max() {\n return Math.max(...this.values);\n }\n\n min() {\n return Math.min(...this.values);\n }\n\n getClosestOrMax(value: number | undefined): number {\n if (!value) {\n return this.max();\n }\n const gteGivenValue = this.values.filter(w => w >= value);\n return gteGivenValue.length > 0 ? gteGivenValue[0] : this.max();\n }\n}\n"],"names":["WidthCollection","values","a","b","Math","value","gteGivenValue","w"],"mappings":"AAAO,MAAMA;IAGT,YAAYC,MAAgB,CAAE;QAC1B,IAAI,CAAC,MAAM,GAAGA,OAAO,IAAI,CAAC,CAACC,GAAGC,IAAMD,IAAIC;IAC5C;IAEA,MAAM;QACF,OAAOC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM;IAClC;IAEA,MAAM;QACF,OAAOA,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM;IAClC;IAEA,gBAAgBC,KAAyB,EAAU;QAC/C,IAAI,CAACA,OACD,OAAO,IAAI,CAAC,GAAG;QAEnB,MAAMC,gBAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,CAACC,CAAAA,IAAKA,KAAKF;QACnD,OAAOC,cAAc,MAAM,GAAG,IAAIA,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG;IACjE;AACJ"}
|
|
@@ -1,36 +1,30 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
const SUPPORTED_TRANSFORMABLE_IMAGES = [
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import object_hash from "object-hash";
|
|
2
|
+
import node_path from "node:path";
|
|
3
|
+
const SUPPORTED_TRANSFORMABLE_IMAGES = [
|
|
4
|
+
"jpg",
|
|
5
|
+
"jpeg",
|
|
6
|
+
"png",
|
|
7
|
+
"webp"
|
|
8
|
+
];
|
|
9
|
+
const parseKey = (key)=>{
|
|
10
|
+
const filename = node_path.basename(key);
|
|
11
|
+
const dirname = node_path.dirname(key);
|
|
12
|
+
return {
|
|
13
|
+
filename,
|
|
14
|
+
dirname
|
|
15
|
+
};
|
|
11
16
|
};
|
|
12
|
-
const getOptimizedImageKeyPrefix = key
|
|
13
|
-
|
|
14
|
-
filename
|
|
15
|
-
dirname
|
|
16
|
-
} = parseKey(key);
|
|
17
|
-
return `${dirname}/optimized/${filename}`;
|
|
17
|
+
const getOptimizedImageKeyPrefix = (key)=>{
|
|
18
|
+
const { filename, dirname } = parseKey(key);
|
|
19
|
+
return `${dirname}/optimized/${filename}`;
|
|
18
20
|
};
|
|
19
|
-
const getOptimizedTransformedImageKeyPrefix = (key, transformationsHash)
|
|
20
|
-
|
|
21
|
-
filename
|
|
22
|
-
dirname
|
|
23
|
-
} = parseKey(key);
|
|
24
|
-
return `${dirname}/optimized/${transformationsHash}-${filename}`;
|
|
21
|
+
const getOptimizedTransformedImageKeyPrefix = (key, transformationsHash)=>{
|
|
22
|
+
const { filename, dirname } = parseKey(key);
|
|
23
|
+
return `${dirname}/optimized/${transformationsHash}-${filename}`;
|
|
25
24
|
};
|
|
26
|
-
const getImageKey = ({
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}) => {
|
|
30
|
-
if (!transformations) {
|
|
31
|
-
return getOptimizedImageKeyPrefix(key);
|
|
32
|
-
}
|
|
33
|
-
return getOptimizedTransformedImageKeyPrefix(key, objectHash(transformations));
|
|
25
|
+
const getImageKey = ({ key, transformations })=>{
|
|
26
|
+
if (!transformations) return getOptimizedImageKeyPrefix(key);
|
|
27
|
+
return getOptimizedTransformedImageKeyPrefix(key, object_hash(transformations));
|
|
34
28
|
};
|
|
35
29
|
export { SUPPORTED_TRANSFORMABLE_IMAGES, getImageKey, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix };
|
|
36
30
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/s3/transformation/utils.js","sources":["../../../../src/assetDelivery/s3/transformation/utils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\nimport path from \"node:path\";\n\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\"jpg\", \"jpeg\", \"png\", \"webp\"];\n\nconst parseKey = (key: string) => {\n const filename = path.basename(key);\n const dirname = path.dirname(key);\n\n return { filename, dirname };\n};\n\nconst getOptimizedImageKeyPrefix = (key: string): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${filename}`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (\n key: string,\n transformationsHash: string\n): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${transformationsHash}-${filename}`;\n};\n\ninterface GetImageKeyParams {\n key: string;\n transformations?: any;\n}\n\nconst getImageKey = ({ key, transformations }: GetImageKeyParams): string => {\n if (!transformations) {\n return getOptimizedImageKeyPrefix(key);\n }\n\n return getOptimizedTransformedImageKeyPrefix(key, objectHash(transformations));\n};\n\nexport {\n SUPPORTED_TRANSFORMABLE_IMAGES,\n getImageKey,\n getOptimizedImageKeyPrefix,\n getOptimizedTransformedImageKeyPrefix\n};\n"],"names":["SUPPORTED_TRANSFORMABLE_IMAGES","parseKey","key","filename","path","dirname","getOptimizedImageKeyPrefix","getOptimizedTransformedImageKeyPrefix","transformationsHash","getImageKey","transformations","objectHash"],"mappings":";;AAGA,MAAMA,iCAAiC;IAAC;IAAO;IAAQ;IAAO;CAAO;AAErE,MAAMC,WAAW,CAACC;IACd,MAAMC,WAAWC,UAAAA,QAAa,CAACF;IAC/B,MAAMG,UAAUD,UAAAA,OAAY,CAACF;IAE7B,OAAO;QAAEC;QAAUE;IAAQ;AAC/B;AAEA,MAAMC,6BAA6B,CAACJ;IAChC,MAAM,EAAEC,QAAQ,EAAEE,OAAO,EAAE,GAAGJ,SAASC;IAEvC,OAAO,GAAGG,QAAQ,WAAW,EAAEF,UAAU;AAC7C;AAEA,MAAMI,wCAAwC,CAC1CL,KACAM;IAEA,MAAM,EAAEL,QAAQ,EAAEE,OAAO,EAAE,GAAGJ,SAASC;IAEvC,OAAO,GAAGG,QAAQ,WAAW,EAAEG,oBAAoB,CAAC,EAAEL,UAAU;AACpE;AAOA,MAAMM,cAAc,CAAC,EAAEP,GAAG,EAAEQ,eAAe,EAAqB;IAC5D,IAAI,CAACA,iBACD,OAAOJ,2BAA2BJ;IAGtC,OAAOK,sCAAsCL,KAAKS,YAAWD;AACjE"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
class ObjectKey {
|
|
2
|
+
static from(key) {
|
|
3
|
+
return new ObjectKey(key);
|
|
4
|
+
}
|
|
5
|
+
constructor(key){
|
|
6
|
+
this.bucketKey = key;
|
|
7
|
+
}
|
|
8
|
+
id() {
|
|
9
|
+
const [id] = this.relativeKey().split("/");
|
|
10
|
+
return id;
|
|
11
|
+
}
|
|
12
|
+
relativeKey() {
|
|
13
|
+
return this.bucketKey.replace(/^tenants\/[^/]+\/files\//, "");
|
|
14
|
+
}
|
|
15
15
|
}
|
|
16
|
+
export { ObjectKey };
|
|
16
17
|
|
|
17
18
|
//# sourceMappingURL=ObjectKey.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/threatDetection/ObjectKey.js","sources":["../../../src/assetDelivery/threatDetection/ObjectKey.ts"],"sourcesContent":["export class ObjectKey {\n private bucketKey: string;\n\n static from(key: string) {\n return new ObjectKey(key);\n }\n\n private constructor(key: string) {\n this.bucketKey = key;\n }\n\n id() {\n const [id] = this.relativeKey().split(\"/\");\n return id;\n }\n\n relativeKey() {\n return this.bucketKey.replace(/^tenants\\/[^/]+\\/files\\//, \"\");\n }\n}\n"],"names":["ObjectKey","key","id"],"mappings":"AAAO,MAAMA;IAGT,OAAO,KAAKC,GAAW,EAAE;QACrB,OAAO,IAAID,UAAUC;IACzB;IAEA,YAAoBA,GAAW,CAAE;QAC7B,IAAI,CAAC,SAAS,GAAGA;IACrB;IAEA,KAAK;QACD,MAAM,CAACC,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACtC,OAAOA;IACX;IAEA,cAAc;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4BAA4B;IAC9D;AACJ"}
|
|
@@ -1,2 +1,22 @@
|
|
|
1
|
+
import type { Container } from "@webiny/feature/api";
|
|
2
|
+
import type { EventBridgeEvent } from "@webiny/aws-sdk/types/index.js";
|
|
3
|
+
import { EventBridgeEventHandler, type EventBridgeResult } from "@webiny/event-handler-aws/abstractions/handlers/EventBridgeEventHandler.js";
|
|
4
|
+
import type { ITenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js";
|
|
5
|
+
import type { IGetTenantByIdUseCase } from "@webiny/api-core/features/tenancy/GetTenantById/abstractions.js";
|
|
6
|
+
import type { EventContext, NextFunction } from "@webiny/event-handler-core";
|
|
1
7
|
import type { GuardDutyEvent } from "./types.js";
|
|
2
|
-
|
|
8
|
+
declare class ThreatDetectionEventBridgeLambdaHandlerImpl implements EventBridgeEventHandler.Interface {
|
|
9
|
+
private container;
|
|
10
|
+
private tenantCtx;
|
|
11
|
+
private getTenantById;
|
|
12
|
+
constructor(container: Container, tenantCtx: ITenantContext, getTenantById: IGetTenantByIdUseCase);
|
|
13
|
+
execute(eventCtx: EventContext<EventBridgeEvent<string, GuardDutyEvent>>, _next: NextFunction): Promise<EventBridgeResult>;
|
|
14
|
+
}
|
|
15
|
+
export declare const ThreatDetectionEventBridgeLambdaHandler: typeof ThreatDetectionEventBridgeLambdaHandlerImpl & {
|
|
16
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/event-handler-aws/abstractions/handlers/EventBridgeEventHandler.js").IEventBridgeEventHandler>;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated Use ThreatDetectionEventBridgeLambdaHandler instead.
|
|
20
|
+
*/
|
|
21
|
+
export declare const createThreatDetectionEventHandler: () => never[];
|
|
22
|
+
export {};
|
|
@@ -1,51 +1,53 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { EventBridgeEventHandler } from "@webiny/event-handler-aws/abstractions/handlers/EventBridgeEventHandler.js";
|
|
2
|
+
import { RequestContainer } from "@webiny/event-handler-core";
|
|
3
|
+
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
4
|
+
import { GetTenantByIdUseCase } from "@webiny/api-core/features/tenancy/GetTenantById/index.js";
|
|
5
|
+
import { FeatureFlags } from "@webiny/api-core/features/featureFlags/abstractions.js";
|
|
3
6
|
import { GlobalKeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
|
|
4
7
|
import { processThreatScanResult } from "./processThreatScanResult.js";
|
|
5
8
|
import { ObjectKey } from "./ObjectKey.js";
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const DETAIL_TYPE = "GuardDuty Malware Protection Object Scan Result";
|
|
10
|
+
class ThreatDetectionEventBridgeLambdaHandlerImpl {
|
|
11
|
+
constructor(container, tenantCtx, getTenantById){
|
|
12
|
+
this.container = container;
|
|
13
|
+
this.tenantCtx = tenantCtx;
|
|
14
|
+
this.getTenantById = getTenantById;
|
|
12
15
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
16
|
+
async execute(eventCtx, _next) {
|
|
17
|
+
const payload = eventCtx.event;
|
|
18
|
+
if (payload["detail-type"] !== DETAIL_TYPE) return {
|
|
19
|
+
success: true
|
|
20
|
+
};
|
|
21
|
+
if (!this.container.resolve(FeatureFlags).get().isEnabled("fileManager.threatDetection")) return {
|
|
22
|
+
success: true
|
|
23
|
+
};
|
|
24
|
+
const objectKey = payload.detail.s3ObjectDetails.objectKey;
|
|
25
|
+
const keyValueStore = this.container.resolve(GlobalKeyValueStore);
|
|
26
|
+
try {
|
|
27
|
+
const fileId = ObjectKey.from(objectKey).id();
|
|
28
|
+
const result = await keyValueStore.get(`FileManager/File/${fileId}/Metadata`);
|
|
29
|
+
if (result.isOk()) {
|
|
30
|
+
const tenantResult = await this.getTenantById.execute(result.value.tenant);
|
|
31
|
+
if (tenantResult.isOk()) this.tenantCtx.setTenant(tenantResult.value);
|
|
32
|
+
}
|
|
33
|
+
} catch {}
|
|
34
|
+
await processThreatScanResult({
|
|
35
|
+
container: this.container
|
|
36
|
+
}, payload.detail);
|
|
37
|
+
return {
|
|
38
|
+
success: true
|
|
39
|
+
};
|
|
30
40
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
await processThreatScanResult(context, payload.detail);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
// Assign a human-readable name for easier debugging.
|
|
47
|
-
threatScanEventHandler.name = threatScanEventHandler.type + ".threatDetectionEventHandler";
|
|
48
|
-
return [handlerOnRequest, threatScanEventHandler];
|
|
49
|
-
};
|
|
41
|
+
}
|
|
42
|
+
const ThreatDetectionEventBridgeLambdaHandler = EventBridgeEventHandler.createImplementation({
|
|
43
|
+
implementation: ThreatDetectionEventBridgeLambdaHandlerImpl,
|
|
44
|
+
dependencies: [
|
|
45
|
+
RequestContainer,
|
|
46
|
+
TenantContext,
|
|
47
|
+
GetTenantByIdUseCase
|
|
48
|
+
]
|
|
49
|
+
});
|
|
50
|
+
const createThreatDetectionEventHandler = ()=>[];
|
|
51
|
+
export { ThreatDetectionEventBridgeLambdaHandler, createThreatDetectionEventHandler };
|
|
50
52
|
|
|
51
53
|
//# sourceMappingURL=createThreatDetectionEventHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/threatDetection/createThreatDetectionEventHandler.js","sources":["../../../src/assetDelivery/threatDetection/createThreatDetectionEventHandler.ts"],"sourcesContent":["import type { Container } from \"@webiny/feature/api\";\nimport type { EventBridgeEvent } from \"@webiny/aws-sdk/types/index.js\";\nimport {\n EventBridgeEventHandler,\n type EventBridgeResult\n} from \"@webiny/event-handler-aws/abstractions/handlers/EventBridgeEventHandler.js\";\nimport { RequestContainer } from \"@webiny/event-handler-core\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { GetTenantByIdUseCase } from \"@webiny/api-core/features/tenancy/GetTenantById/index.js\";\nimport type { ITenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/abstractions.js\";\nimport type { IGetTenantByIdUseCase } from \"@webiny/api-core/features/tenancy/GetTenantById/abstractions.js\";\nimport type { EventContext, NextFunction } from \"@webiny/event-handler-core\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { FeatureFlags } from \"@webiny/api-core/features/featureFlags/abstractions.js\";\nimport { GlobalKeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { processThreatScanResult } from \"./processThreatScanResult.js\";\nimport { ObjectKey } from \"./ObjectKey.js\";\nimport type { GuardDutyEvent } from \"./types.js\";\n\nconst DETAIL_TYPE = \"GuardDuty Malware Protection Object Scan Result\";\n\nclass ThreatDetectionEventBridgeLambdaHandlerImpl implements EventBridgeEventHandler.Interface {\n constructor(\n private container: Container,\n private tenantCtx: ITenantContext,\n private getTenantById: IGetTenantByIdUseCase\n ) {}\n\n async execute(\n eventCtx: EventContext<EventBridgeEvent<string, GuardDutyEvent>>,\n _next: NextFunction\n ): Promise<EventBridgeResult> {\n const payload = eventCtx.event;\n if (payload[\"detail-type\"] !== DETAIL_TYPE) {\n return { success: true };\n }\n\n if (!this.container.resolve(FeatureFlags).get().isEnabled(\"fileManager.threatDetection\")) {\n return { success: true };\n }\n\n const objectKey = payload.detail.s3ObjectDetails.objectKey;\n const keyValueStore = this.container.resolve(GlobalKeyValueStore);\n\n try {\n const fileId = ObjectKey.from(objectKey).id();\n const result = await keyValueStore.get<{ tenant: string }>(\n `FileManager/File/${fileId}/Metadata`\n );\n\n if (result.isOk()) {\n const tenantResult = await this.getTenantById.execute(result.value.tenant);\n if (tenantResult.isOk()) {\n this.tenantCtx.setTenant(tenantResult.value);\n }\n }\n } catch {\n // If metadata can't be loaded, ignore — likely a rendition file.\n }\n\n await processThreatScanResult(\n { container: this.container } as unknown as ApiCoreContext,\n payload.detail\n );\n return { success: true };\n }\n}\n\nexport const ThreatDetectionEventBridgeLambdaHandler = EventBridgeEventHandler.createImplementation(\n {\n implementation: ThreatDetectionEventBridgeLambdaHandlerImpl,\n dependencies: [RequestContainer, TenantContext, GetTenantByIdUseCase]\n }\n);\n\n/**\n * @deprecated Use ThreatDetectionEventBridgeLambdaHandler instead.\n */\nexport const createThreatDetectionEventHandler = () => {\n return [];\n};\n"],"names":["DETAIL_TYPE","ThreatDetectionEventBridgeLambdaHandlerImpl","container","tenantCtx","getTenantById","eventCtx","_next","payload","FeatureFlags","objectKey","keyValueStore","GlobalKeyValueStore","fileId","ObjectKey","result","tenantResult","processThreatScanResult","ThreatDetectionEventBridgeLambdaHandler","EventBridgeEventHandler","RequestContainer","TenantContext","GetTenantByIdUseCase","createThreatDetectionEventHandler"],"mappings":";;;;;;;;AAmBA,MAAMA,cAAc;AAEpB,MAAMC;IACF,YACYC,SAAoB,EACpBC,SAAyB,EACzBC,aAAoC,CAC9C;aAHUF,SAAS,GAATA;aACAC,SAAS,GAATA;aACAC,aAAa,GAAbA;IACT;IAEH,MAAM,QACFC,QAAgE,EAChEC,KAAmB,EACO;QAC1B,MAAMC,UAAUF,SAAS,KAAK;QAC9B,IAAIE,OAAO,CAAC,cAAc,KAAKP,aAC3B,OAAO;YAAE,SAAS;QAAK;QAG3B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAACQ,cAAc,GAAG,GAAG,SAAS,CAAC,gCACtD,OAAO;YAAE,SAAS;QAAK;QAG3B,MAAMC,YAAYF,QAAQ,MAAM,CAAC,eAAe,CAAC,SAAS;QAC1D,MAAMG,gBAAgB,IAAI,CAAC,SAAS,CAAC,OAAO,CAACC;QAE7C,IAAI;YACA,MAAMC,SAASC,UAAU,IAAI,CAACJ,WAAW,EAAE;YAC3C,MAAMK,SAAS,MAAMJ,cAAc,GAAG,CAClC,CAAC,iBAAiB,EAAEE,OAAO,SAAS,CAAC;YAGzC,IAAIE,OAAO,IAAI,IAAI;gBACf,MAAMC,eAAe,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAACD,OAAO,KAAK,CAAC,MAAM;gBACzE,IAAIC,aAAa,IAAI,IACjB,IAAI,CAAC,SAAS,CAAC,SAAS,CAACA,aAAa,KAAK;YAEnD;QACJ,EAAE,OAAM,CAER;QAEA,MAAMC,wBACF;YAAE,WAAW,IAAI,CAAC,SAAS;QAAC,GAC5BT,QAAQ,MAAM;QAElB,OAAO;YAAE,SAAS;QAAK;IAC3B;AACJ;AAEO,MAAMU,0CAA0CC,wBAAwB,oBAAoB,CAC/F;IACI,gBAAgBjB;IAChB,cAAc;QAACkB;QAAkBC;QAAeC;KAAqB;AACzE;AAMG,MAAMC,oCAAoC,IACtC,EAAE"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { createConditionalPluginFactory } from "@webiny/api";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
2
|
+
const createThreatDetectionPluginLoader = (cb)=>createConditionalPluginFactory(()=>"threat-detection-event-handler" === process.env.WEBINY_FUNCTION_TYPE, cb);
|
|
3
|
+
export { createThreatDetectionPluginLoader };
|
|
5
4
|
|
|
6
5
|
//# sourceMappingURL=createThreatDetectionPluginLoader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/threatDetection/createThreatDetectionPluginLoader.js","sources":["../../../src/assetDelivery/threatDetection/createThreatDetectionPluginLoader.ts"],"sourcesContent":["import type { PluginFactory } from \"@webiny/plugins/types.js\";\nimport { createConditionalPluginFactory } from \"@webiny/api\";\n\nexport const createThreatDetectionPluginLoader = (cb: PluginFactory) => {\n return createConditionalPluginFactory(\n () => process.env.WEBINY_FUNCTION_TYPE === \"threat-detection-event-handler\",\n cb\n );\n};\n"],"names":["createThreatDetectionPluginLoader","cb","createConditionalPluginFactory","process"],"mappings":";AAGO,MAAMA,oCAAoC,CAACC,KACvCC,+BACH,IAAMC,AAAqC,qCAArCA,QAAQ,GAAG,CAAC,oBAAoB,EACtCF"}
|
|
@@ -1,65 +1,61 @@
|
|
|
1
1
|
import { UpdateFileUseCase } from "@webiny/api-file-manager/features/file/UpdateFile/index.js";
|
|
2
2
|
import { DeleteFileUseCase } from "@webiny/api-file-manager/features/file/DeleteFile/index.js";
|
|
3
|
-
import {
|
|
3
|
+
import { WebsocketsListConnectionsUseCase, WebsocketsSendToConnectionsUseCase } from "@webiny/api-websockets/exports/api.js";
|
|
4
4
|
import { ObjectKey } from "./ObjectKey.js";
|
|
5
5
|
import { GetFileUseCase } from "@webiny/api-file-manager/features/file/GetFile/index.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
6
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
|
|
7
|
+
const processThreatScanResult = async (context, eventDetail)=>{
|
|
8
|
+
const listConnections = context.container.resolve(WebsocketsListConnectionsUseCase);
|
|
9
|
+
const sendToConnections = context.container.resolve(WebsocketsSendToConnectionsUseCase);
|
|
10
|
+
const getFile = context.container.resolve(GetFileUseCase);
|
|
11
|
+
const updateFile = context.container.resolve(UpdateFileUseCase);
|
|
12
|
+
const deleteFile = context.container.resolve(DeleteFileUseCase);
|
|
13
|
+
await context.container.resolve(IdentityContext).withoutAuthorization(async ()=>{
|
|
14
|
+
const scanStatus = eventDetail.scanResultDetails.scanResultStatus;
|
|
15
|
+
const s3Object = eventDetail.s3ObjectDetails;
|
|
16
|
+
const fileId = ObjectKey.from(s3Object.objectKey).id();
|
|
17
|
+
const fileResult = await getFile.execute(fileId);
|
|
18
|
+
if (fileResult.isFail()) return;
|
|
19
|
+
const file = fileResult.value;
|
|
20
|
+
let allConnections = [];
|
|
21
|
+
const connectionsResult = await listConnections.execute();
|
|
22
|
+
if (connectionsResult.isOk()) allConnections = connectionsResult.value;
|
|
23
|
+
if ("NO_THREATS_FOUND" === scanStatus) {
|
|
24
|
+
const newTags = file.tags.filter((tag)=>"threatScanInProgress" !== tag);
|
|
25
|
+
await updateFile.execute({
|
|
26
|
+
id: file.id,
|
|
27
|
+
tags: newTags
|
|
28
|
+
});
|
|
29
|
+
await sendToConnections.execute(allConnections, {
|
|
30
|
+
action: "fm.threatScan.noThreatFound",
|
|
31
|
+
data: {
|
|
32
|
+
id: file.id,
|
|
33
|
+
tags: newTags
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return;
|
|
36
37
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
name: file.name
|
|
38
|
+
if ("THREATS_FOUND" === scanStatus) {
|
|
39
|
+
await deleteFile.execute(file.id);
|
|
40
|
+
await sendToConnections.execute(allConnections, {
|
|
41
|
+
action: "fm.threatScan.threatDetected",
|
|
42
|
+
data: {
|
|
43
|
+
id: file.id,
|
|
44
|
+
name: file.name
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
data: {
|
|
58
|
-
id: file.id,
|
|
59
|
-
name: file.name
|
|
60
|
-
}
|
|
49
|
+
await deleteFile.execute(file.id);
|
|
50
|
+
await sendToConnections.execute(allConnections, {
|
|
51
|
+
action: "fm.threatScan.unsupported",
|
|
52
|
+
data: {
|
|
53
|
+
id: file.id,
|
|
54
|
+
name: file.name
|
|
55
|
+
}
|
|
56
|
+
});
|
|
61
57
|
});
|
|
62
|
-
});
|
|
63
58
|
};
|
|
59
|
+
export { processThreatScanResult };
|
|
64
60
|
|
|
65
61
|
//# sourceMappingURL=processThreatScanResult.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"assetDelivery/threatDetection/processThreatScanResult.js","sources":["../../../src/assetDelivery/threatDetection/processThreatScanResult.ts"],"sourcesContent":["import type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport { UpdateFileUseCase } from \"@webiny/api-file-manager/features/file/UpdateFile/index.js\";\nimport { DeleteFileUseCase } from \"@webiny/api-file-manager/features/file/DeleteFile/index.js\";\nimport {\n WebsocketsListConnectionsUseCase,\n WebsocketsSendToConnectionsUseCase,\n ConnectionRegistry\n} from \"@webiny/api-websockets/exports/api.js\";\nimport type { GuardDutyEvent } from \"./types.js\";\nimport { ObjectKey } from \"./ObjectKey.js\";\nimport { GetFileUseCase } from \"@webiny/api-file-manager/features/file/GetFile/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/abstractions.js\";\n\nexport const processThreatScanResult = async (\n context: ApiCoreContext,\n eventDetail: GuardDutyEvent\n) => {\n const listConnections = context.container.resolve(WebsocketsListConnectionsUseCase);\n const sendToConnections = context.container.resolve(WebsocketsSendToConnectionsUseCase);\n const getFile = context.container.resolve(GetFileUseCase);\n const updateFile = context.container.resolve(UpdateFileUseCase);\n const deleteFile = context.container.resolve(DeleteFileUseCase);\n\n await context.container.resolve(IdentityContext).withoutAuthorization(async () => {\n const scanStatus = eventDetail.scanResultDetails.scanResultStatus;\n const s3Object = eventDetail.s3ObjectDetails;\n\n const fileId = ObjectKey.from(s3Object.objectKey).id();\n const fileResult = await getFile.execute(fileId);\n\n if (fileResult.isFail()) {\n return;\n }\n\n const file = fileResult.value;\n\n let allConnections: ConnectionRegistry.Data[] = [];\n const connectionsResult = await listConnections.execute();\n if (connectionsResult.isOk()) {\n allConnections = connectionsResult.value;\n }\n\n if (scanStatus === \"NO_THREATS_FOUND\") {\n const newTags = file.tags.filter(tag => tag !== \"threatScanInProgress\");\n await updateFile.execute({\n id: file.id,\n tags: newTags\n });\n\n await sendToConnections.execute(allConnections, {\n action: \"fm.threatScan.noThreatFound\",\n data: {\n id: file.id,\n tags: newTags\n }\n });\n\n return;\n }\n\n if (scanStatus === \"THREATS_FOUND\") {\n // Delete the infected file.\n await deleteFile.execute(file.id);\n\n await sendToConnections.execute(allConnections, {\n action: \"fm.threatScan.threatDetected\",\n data: {\n id: file.id,\n name: file.name\n }\n });\n\n return;\n }\n\n // For all other outcomes, we delete the file, until better logic is implemented.\n await deleteFile.execute(file.id);\n\n await sendToConnections.execute(allConnections, {\n action: \"fm.threatScan.unsupported\",\n data: {\n id: file.id,\n name: file.name\n }\n });\n });\n};\n"],"names":["processThreatScanResult","context","eventDetail","listConnections","WebsocketsListConnectionsUseCase","sendToConnections","WebsocketsSendToConnectionsUseCase","getFile","GetFileUseCase","updateFile","UpdateFileUseCase","deleteFile","DeleteFileUseCase","IdentityContext","scanStatus","s3Object","fileId","ObjectKey","fileResult","file","allConnections","connectionsResult","newTags","tag"],"mappings":";;;;;;AAaO,MAAMA,0BAA0B,OACnCC,SACAC;IAEA,MAAMC,kBAAkBF,QAAQ,SAAS,CAAC,OAAO,CAACG;IAClD,MAAMC,oBAAoBJ,QAAQ,SAAS,CAAC,OAAO,CAACK;IACpD,MAAMC,UAAUN,QAAQ,SAAS,CAAC,OAAO,CAACO;IAC1C,MAAMC,aAAaR,QAAQ,SAAS,CAAC,OAAO,CAACS;IAC7C,MAAMC,aAAaV,QAAQ,SAAS,CAAC,OAAO,CAACW;IAE7C,MAAMX,QAAQ,SAAS,CAAC,OAAO,CAACY,iBAAiB,oBAAoB,CAAC;QAClE,MAAMC,aAAaZ,YAAY,iBAAiB,CAAC,gBAAgB;QACjE,MAAMa,WAAWb,YAAY,eAAe;QAE5C,MAAMc,SAASC,UAAU,IAAI,CAACF,SAAS,SAAS,EAAE,EAAE;QACpD,MAAMG,aAAa,MAAMX,QAAQ,OAAO,CAACS;QAEzC,IAAIE,WAAW,MAAM,IACjB;QAGJ,MAAMC,OAAOD,WAAW,KAAK;QAE7B,IAAIE,iBAA4C,EAAE;QAClD,MAAMC,oBAAoB,MAAMlB,gBAAgB,OAAO;QACvD,IAAIkB,kBAAkB,IAAI,IACtBD,iBAAiBC,kBAAkB,KAAK;QAG5C,IAAIP,AAAe,uBAAfA,YAAmC;YACnC,MAAMQ,UAAUH,KAAK,IAAI,CAAC,MAAM,CAACI,CAAAA,MAAOA,AAAQ,2BAARA;YACxC,MAAMd,WAAW,OAAO,CAAC;gBACrB,IAAIU,KAAK,EAAE;gBACX,MAAMG;YACV;YAEA,MAAMjB,kBAAkB,OAAO,CAACe,gBAAgB;gBAC5C,QAAQ;gBACR,MAAM;oBACF,IAAID,KAAK,EAAE;oBACX,MAAMG;gBACV;YACJ;YAEA;QACJ;QAEA,IAAIR,AAAe,oBAAfA,YAAgC;YAEhC,MAAMH,WAAW,OAAO,CAACQ,KAAK,EAAE;YAEhC,MAAMd,kBAAkB,OAAO,CAACe,gBAAgB;gBAC5C,QAAQ;gBACR,MAAM;oBACF,IAAID,KAAK,EAAE;oBACX,MAAMA,KAAK,IAAI;gBACnB;YACJ;YAEA;QACJ;QAGA,MAAMR,WAAW,OAAO,CAACQ,KAAK,EAAE;QAEhC,MAAMd,kBAAkB,OAAO,CAACe,gBAAgB;YAC5C,QAAQ;YACR,MAAM;gBACF,IAAID,KAAK,EAAE;gBACX,MAAMA,KAAK,IAAI;YACnB;QACJ;IACJ;AACJ"}
|
package/assetDelivery/types.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import type { ImageFormat } from "@webiny/api-file-manager/features/assetDelivery/transformation/index.js";
|
|
1
2
|
export type AssetDeliveryParams = {
|
|
2
3
|
imageResizeWidths?: number[];
|
|
4
|
+
/** Per-format encoder quality (1-100). Merged over the built-in defaults. */
|
|
5
|
+
imageQuality?: Partial<Record<ImageFormat, number>>;
|
|
3
6
|
/**
|
|
4
7
|
* BE CAREFUL!
|
|
5
8
|
* Setting this to more than 1 hour may cause your URLs to still expire before the desired expiration time.
|
package/assetDelivery/types.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { CreateFileUseCase } from "@webiny/api-file-manager/features/file/CreateFile/abstractions.js";
|
|
2
2
|
import type { CreateFileInput } from "@webiny/api-file-manager/features/file/CreateFile/abstractions.js";
|
|
3
|
+
import { FeatureFlags } from "@webiny/api-core/features/featureFlags/abstractions.js";
|
|
3
4
|
declare class CreateFileWithThreatScanDecoratorImpl implements CreateFileUseCase.Interface {
|
|
5
|
+
private featureFlags;
|
|
4
6
|
private decoratee;
|
|
5
|
-
constructor(decoratee: CreateFileUseCase.Interface);
|
|
7
|
+
constructor(featureFlags: FeatureFlags.Interface, decoratee: CreateFileUseCase.Interface);
|
|
6
8
|
execute(input: CreateFileInput, meta?: Record<string, any>): ReturnType<CreateFileUseCase.Interface["execute"]>;
|
|
7
9
|
}
|
|
8
10
|
export declare const CreateFileWithThreatScanDecorator: typeof CreateFileWithThreatScanDecoratorImpl & {
|