@webiny/api-file-manager 0.0.0-mt-2 → 0.0.0-unstable.06b2ede40f
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/FileManagerContextSetup.d.ts +13 -0
- package/FileManagerContextSetup.js +115 -0
- package/FileManagerContextSetup.js.map +1 -0
- package/README.md +1 -1
- package/cmsFileStorage/CmsFilesStorage.d.ts +27 -0
- package/cmsFileStorage/CmsFilesStorage.js +164 -0
- package/cmsFileStorage/CmsFilesStorage.js.map +1 -0
- package/cmsFileStorage/ListFilesWhereProcessor.d.ts +7 -0
- package/cmsFileStorage/ListFilesWhereProcessor.js +33 -0
- package/cmsFileStorage/ListFilesWhereProcessor.js.map +1 -0
- package/cmsFileStorage/ListTagsWhereProcessor.d.ts +7 -0
- package/cmsFileStorage/ListTagsWhereProcessor.js +33 -0
- package/cmsFileStorage/ListTagsWhereProcessor.js.map +1 -0
- package/cmsFileStorage/file.model.d.ts +6 -0
- package/cmsFileStorage/file.model.js +158 -0
- package/cmsFileStorage/file.model.js.map +1 -0
- package/contants.d.ts +1 -0
- package/contants.js +9 -0
- package/contants.js.map +1 -0
- package/createFileManager/files.crud.d.ts +3 -0
- package/createFileManager/files.crud.js +328 -0
- package/createFileManager/files.crud.js.map +1 -0
- package/createFileManager/index.d.ts +3 -0
- package/createFileManager/index.js +23 -0
- package/createFileManager/index.js.map +1 -0
- package/createFileManager/permissions/FilesPermissions.d.ts +4 -0
- package/createFileManager/permissions/FilesPermissions.js +11 -0
- package/createFileManager/permissions/FilesPermissions.js.map +1 -0
- package/createFileManager/permissions/SettingsPermissions.d.ts +4 -0
- package/createFileManager/permissions/SettingsPermissions.js +11 -0
- package/createFileManager/permissions/SettingsPermissions.js.map +1 -0
- package/createFileManager/settings.crud.d.ts +3 -0
- package/createFileManager/settings.crud.js +117 -0
- package/createFileManager/settings.crud.js.map +1 -0
- package/createFileManager/system.crud.d.ts +3 -0
- package/createFileManager/system.crud.js +88 -0
- package/createFileManager/system.crud.js.map +1 -0
- package/createFileManager/types.d.ts +16 -0
- package/createFileManager/types.js +7 -0
- package/createFileManager/types.js.map +1 -0
- package/delivery/AssetDelivery/AliasAssetRequestResolver.d.ts +11 -0
- package/delivery/AssetDelivery/AliasAssetRequestResolver.js +74 -0
- package/delivery/AssetDelivery/AliasAssetRequestResolver.js.map +1 -0
- package/delivery/AssetDelivery/Asset.d.ts +32 -0
- package/delivery/AssetDelivery/Asset.js +69 -0
- package/delivery/AssetDelivery/Asset.js.map +1 -0
- package/delivery/AssetDelivery/AssetDeliveryConfig.d.ts +63 -0
- package/delivery/AssetDelivery/AssetDeliveryConfig.js +102 -0
- package/delivery/AssetDelivery/AssetDeliveryConfig.js.map +1 -0
- package/delivery/AssetDelivery/AssetRequest.d.ts +25 -0
- package/delivery/AssetDelivery/AssetRequest.js +29 -0
- package/delivery/AssetDelivery/AssetRequest.js.map +1 -0
- package/delivery/AssetDelivery/FilesAssetRequestResolver.d.ts +6 -0
- package/delivery/AssetDelivery/FilesAssetRequestResolver.js +37 -0
- package/delivery/AssetDelivery/FilesAssetRequestResolver.js.map +1 -0
- package/delivery/AssetDelivery/NullAssetOutputStrategy.d.ts +4 -0
- package/delivery/AssetDelivery/NullAssetOutputStrategy.js +15 -0
- package/delivery/AssetDelivery/NullAssetOutputStrategy.js.map +1 -0
- package/delivery/AssetDelivery/NullAssetReply.d.ts +4 -0
- package/delivery/AssetDelivery/NullAssetReply.js +20 -0
- package/delivery/AssetDelivery/NullAssetReply.js.map +1 -0
- package/delivery/AssetDelivery/NullAssetResolver.d.ts +5 -0
- package/delivery/AssetDelivery/NullAssetResolver.js +14 -0
- package/delivery/AssetDelivery/NullAssetResolver.js.map +1 -0
- package/delivery/AssetDelivery/NullRequestResolver.d.ts +4 -0
- package/delivery/AssetDelivery/NullRequestResolver.js +14 -0
- package/delivery/AssetDelivery/NullRequestResolver.js.map +1 -0
- package/delivery/AssetDelivery/SetCacheControlHeaders.d.ts +8 -0
- package/delivery/AssetDelivery/SetCacheControlHeaders.js +25 -0
- package/delivery/AssetDelivery/SetCacheControlHeaders.js.map +1 -0
- package/delivery/AssetDelivery/SetResponseHeaders.d.ts +18 -0
- package/delivery/AssetDelivery/SetResponseHeaders.js +25 -0
- package/delivery/AssetDelivery/SetResponseHeaders.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetContentsReader.d.ts +6 -0
- package/delivery/AssetDelivery/abstractions/AssetContentsReader.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetContentsReader.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.d.ts +4 -0
- package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetProcessor.d.ts +4 -0
- package/delivery/AssetDelivery/abstractions/AssetProcessor.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetProcessor.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetReply.d.ts +25 -0
- package/delivery/AssetDelivery/abstractions/AssetReply.js +38 -0
- package/delivery/AssetDelivery/abstractions/AssetReply.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetRequestResolver.d.ts +5 -0
- package/delivery/AssetDelivery/abstractions/AssetRequestResolver.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetRequestResolver.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetResolver.d.ts +4 -0
- package/delivery/AssetDelivery/abstractions/AssetResolver.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetResolver.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.d.ts +4 -0
- package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.js.map +1 -0
- package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.d.ts +2 -0
- package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js +15 -0
- package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.d.ts +4 -0
- package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.js +7 -0
- package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.d.ts +4 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.js +26 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.d.ts +4 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.js +15 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.d.ts +7 -0
- package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js +28 -0
- package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/PrivateCache.d.ts +6 -0
- package/delivery/AssetDelivery/privateFiles/PrivateCache.js +28 -0
- package/delivery/AssetDelivery/privateFiles/PrivateCache.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.d.ts +8 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js +37 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.d.ts +13 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js +63 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/PublicCache.d.ts +6 -0
- package/delivery/AssetDelivery/privateFiles/PublicCache.js +28 -0
- package/delivery/AssetDelivery/privateFiles/PublicCache.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.d.ts +7 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js +27 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.d.ts +7 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js +27 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/internalIdentity.d.ts +7 -0
- package/delivery/AssetDelivery/privateFiles/internalIdentity.js +18 -0
- package/delivery/AssetDelivery/privateFiles/internalIdentity.js.map +1 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.d.ts +4 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js +14 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js.map +1 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.d.ts +4 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js +14 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js.map +1 -0
- package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.d.ts +6 -0
- package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.js +26 -0
- package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.js.map +1 -0
- package/delivery/index.d.ts +17 -0
- package/delivery/index.js +194 -0
- package/delivery/index.js.map +1 -0
- package/delivery/setupAssetDelivery.d.ts +6 -0
- package/delivery/setupAssetDelivery.js +128 -0
- package/delivery/setupAssetDelivery.js.map +1 -0
- package/enterprise/applyThreatScanning.d.ts +2 -0
- package/enterprise/applyThreatScanning.js +20 -0
- package/enterprise/applyThreatScanning.js.map +1 -0
- package/graphql/baseSchema.d.ts +3 -0
- package/graphql/baseSchema.js +121 -0
- package/graphql/baseSchema.js.map +1 -0
- package/graphql/createFilesTypeDefs.d.ts +7 -0
- package/graphql/createFilesTypeDefs.js +184 -0
- package/graphql/createFilesTypeDefs.js.map +1 -0
- package/graphql/filesSchema.d.ts +4 -0
- package/graphql/filesSchema.js +89 -0
- package/graphql/filesSchema.js.map +1 -0
- package/graphql/getFileByUrl.d.ts +3 -0
- package/graphql/getFileByUrl.js +78 -0
- package/graphql/getFileByUrl.js.map +1 -0
- package/graphql/index.d.ts +4 -0
- package/graphql/index.js +55 -0
- package/graphql/index.js.map +1 -0
- package/graphql/utils.d.ts +11 -0
- package/graphql/utils.js +24 -0
- package/graphql/utils.js.map +1 -0
- package/handlers/manage/imageManager.d.ts +14 -0
- package/handlers/manage/imageManager.js +75 -0
- package/handlers/manage/imageManager.js.map +1 -0
- package/handlers/manage/index.d.ts +5 -3
- package/handlers/manage/index.js +48 -59
- package/handlers/manage/index.js.map +1 -0
- package/handlers/{transform/utils.d.ts → manage/legacyUtils.d.ts} +2 -2
- package/handlers/{transform/utils.js → manage/legacyUtils.js} +7 -19
- package/handlers/manage/legacyUtils.js.map +1 -0
- package/handlers/manage/utils.d.ts +12 -0
- package/handlers/manage/utils.js +34 -0
- package/handlers/manage/utils.js.map +1 -0
- package/handlers/types.d.ts +8 -0
- package/handlers/types.js +7 -0
- package/handlers/types.js.map +1 -0
- package/handlers/utils/getEnvironment.js +2 -2
- package/handlers/utils/getEnvironment.js.map +1 -0
- package/handlers/utils/getObjectParams.d.ts +3 -4
- package/handlers/utils/getObjectParams.js +3 -7
- package/handlers/utils/getObjectParams.js.map +1 -0
- package/handlers/utils/index.d.ts +0 -1
- package/handlers/utils/index.js +3 -12
- package/handlers/utils/index.js.map +1 -0
- package/index.d.ts +10 -0
- package/index.js +76 -0
- package/index.js.map +1 -0
- package/modelModifier/CmsModelModifier.d.ts +26 -0
- package/modelModifier/CmsModelModifier.js +62 -0
- package/modelModifier/CmsModelModifier.js.map +1 -0
- package/package.json +26 -36
- package/plugins/FilePhysicalStoragePlugin.d.ts +22 -0
- package/plugins/{definitions/FilePhysicalStoragePlugin.js → FilePhysicalStoragePlugin.js} +4 -15
- package/plugins/FilePhysicalStoragePlugin.js.map +1 -0
- package/plugins/{definitions/FileStorageTransformPlugin.d.ts → FileStorageTransformPlugin.d.ts} +10 -10
- package/plugins/{definitions/FileStorageTransformPlugin.js → FileStorageTransformPlugin.js} +4 -16
- package/plugins/FileStorageTransformPlugin.js.map +1 -0
- package/plugins/index.d.ts +2 -2
- package/plugins/index.js +23 -18
- package/plugins/index.js.map +1 -0
- package/storage/FileStorage.d.ts +34 -0
- package/storage/FileStorage.js +90 -0
- package/storage/FileStorage.js.map +1 -0
- package/types/file.d.ts +49 -0
- package/types/file.js +7 -0
- package/types/file.js.map +1 -0
- package/types/file.lifecycle.d.ts +44 -0
- package/types/file.lifecycle.js +7 -0
- package/types/file.lifecycle.js.map +1 -0
- package/types.d.ts +104 -89
- package/types.js +25 -1
- package/types.js.map +1 -0
- package/handlers/download/index.d.ts +0 -3
- package/handlers/download/index.js +0 -125
- package/handlers/transform/index.d.ts +0 -3
- package/handlers/transform/index.js +0 -96
- package/handlers/transform/loaders/imageLoader.d.ts +0 -13
- package/handlers/transform/loaders/imageLoader.js +0 -106
- package/handlers/transform/loaders/index.d.ts +0 -13
- package/handlers/transform/loaders/index.js +0 -13
- package/handlers/transform/loaders/sanitizeImageTransformations.d.ts +0 -7
- package/handlers/transform/loaders/sanitizeImageTransformations.js +0 -51
- package/handlers/transform/managers/imageManager.d.ts +0 -9
- package/handlers/transform/managers/imageManager.js +0 -55
- package/handlers/transform/managers/index.d.ts +0 -9
- package/handlers/transform/managers/index.js +0 -13
- package/handlers/transform/optimizeImage.d.ts +0 -2
- package/handlers/transform/optimizeImage.js +0 -45
- package/handlers/transform/transformImage.d.ts +0 -9
- package/handlers/transform/transformImage.js +0 -30
- package/handlers/utils/createHandler.d.ts +0 -24
- package/handlers/utils/createHandler.js +0 -68
- package/plugins/crud/files/validation.d.ts +0 -3
- package/plugins/crud/files/validation.js +0 -41
- package/plugins/crud/files.crud.d.ts +0 -4
- package/plugins/crud/files.crud.js +0 -427
- package/plugins/crud/settings.crud.d.ts +0 -5
- package/plugins/crud/settings.crud.js +0 -115
- package/plugins/crud/system.crud.d.ts +0 -4
- package/plugins/crud/system.crud.js +0 -145
- package/plugins/crud/utils/checkBasePermissions.d.ts +0 -5
- package/plugins/crud/utils/checkBasePermissions.js +0 -33
- package/plugins/crud/utils/createFileModel.d.ts +0 -2
- package/plugins/crud/utils/createFileModel.js +0 -64
- package/plugins/crud/utils/lifecycleEvents.d.ts +0 -6
- package/plugins/crud/utils/lifecycleEvents.js +0 -33
- package/plugins/definitions/FilePhysicalStoragePlugin.d.ts +0 -22
- package/plugins/definitions/FilePlugin.d.ts +0 -133
- package/plugins/definitions/FilePlugin.js +0 -64
- package/plugins/definitions/FilesStorageOperationsProviderPlugin.d.ts +0 -9
- package/plugins/definitions/FilesStorageOperationsProviderPlugin.js +0 -17
- package/plugins/definitions/InstallationPlugin.d.ts +0 -19
- package/plugins/definitions/InstallationPlugin.js +0 -40
- package/plugins/definitions/SettingsStorageOperationsProviderPlugin.d.ts +0 -9
- package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js +0 -17
- package/plugins/definitions/SystemStorageOperationsProviderPlugin.d.ts +0 -9
- package/plugins/definitions/SystemStorageOperationsProviderPlugin.js +0 -17
- package/plugins/graphql.d.ts +0 -4
- package/plugins/graphql.js +0 -274
- package/plugins/storage/FileStorage.d.ts +0 -31
- package/plugins/storage/FileStorage.js +0 -95
- package/plugins/storage/index.d.ts +0 -4
- package/plugins/storage/index.js +0 -22
- package/utils.d.ts +0 -4
- package/utils.js +0 -16
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getFileByUrl = void 0;
|
|
7
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
8
|
+
var _apiSecurity = require("@webiny/api-security");
|
|
9
|
+
const getFileByUrl = () => {
|
|
10
|
+
const fileManagerGraphQL = new _handlerGraphql.GraphQLSchemaPlugin({
|
|
11
|
+
typeDefs: /* GraphQL */`
|
|
12
|
+
extend type FmQuery {
|
|
13
|
+
getFileByUrl(url: String!): FmFileResponse
|
|
14
|
+
}
|
|
15
|
+
`,
|
|
16
|
+
resolvers: {
|
|
17
|
+
FmQuery: {
|
|
18
|
+
async getFileByUrl(_, args, context) {
|
|
19
|
+
const {
|
|
20
|
+
url
|
|
21
|
+
} = args;
|
|
22
|
+
const useCase = new SecureGetFileByUrl(context.security, new GetFileByUrlUseCase(context.fileManager));
|
|
23
|
+
try {
|
|
24
|
+
const file = await useCase.execute(url);
|
|
25
|
+
if (file) {
|
|
26
|
+
return new _handlerGraphql.Response(file);
|
|
27
|
+
}
|
|
28
|
+
return new _handlerGraphql.NotFoundResponse("File not found!");
|
|
29
|
+
} catch (error) {
|
|
30
|
+
return new _handlerGraphql.ErrorResponse(error);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
fileManagerGraphQL.name = "fm.graphql.getFileByUrl";
|
|
37
|
+
return fileManagerGraphQL;
|
|
38
|
+
};
|
|
39
|
+
exports.getFileByUrl = getFileByUrl;
|
|
40
|
+
class GetFileByUrlUseCase {
|
|
41
|
+
constructor(fileManager) {
|
|
42
|
+
this.fileManager = fileManager;
|
|
43
|
+
}
|
|
44
|
+
async execute(url) {
|
|
45
|
+
const {
|
|
46
|
+
pathname
|
|
47
|
+
} = new URL(url);
|
|
48
|
+
const isAlias = !pathname.startsWith("/files/") && !pathname.startsWith("/private/");
|
|
49
|
+
const query = isAlias ? pathname : pathname.replace("/files/", "").replace("/private/", "");
|
|
50
|
+
const [files] = await this.fileManager.listFiles({
|
|
51
|
+
where: {
|
|
52
|
+
OR: [{
|
|
53
|
+
key: query
|
|
54
|
+
}, {
|
|
55
|
+
aliases_contains: query
|
|
56
|
+
}]
|
|
57
|
+
},
|
|
58
|
+
limit: 1
|
|
59
|
+
});
|
|
60
|
+
return files.length ? files[0] : undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
class SecureGetFileByUrl {
|
|
64
|
+
constructor(security, useCase) {
|
|
65
|
+
this.security = security;
|
|
66
|
+
this.useCase = useCase;
|
|
67
|
+
}
|
|
68
|
+
execute(url) {
|
|
69
|
+
if (!this.security.getIdentity()) {
|
|
70
|
+
throw new _apiSecurity.NotAuthorizedError({
|
|
71
|
+
message: "You're not authorized to edit this file!"
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return this.useCase.execute(url);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=getFileByUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_handlerGraphql","require","_apiSecurity","getFileByUrl","fileManagerGraphQL","GraphQLSchemaPlugin","typeDefs","resolvers","FmQuery","_","args","context","url","useCase","SecureGetFileByUrl","security","GetFileByUrlUseCase","fileManager","file","execute","Response","NotFoundResponse","error","ErrorResponse","name","exports","constructor","pathname","URL","isAlias","startsWith","query","replace","files","listFiles","where","OR","key","aliases_contains","limit","length","undefined","getIdentity","NotAuthorizedError","message"],"sources":["getFileByUrl.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { Response, NotFoundResponse } from \"@webiny/handler-graphql\";\nimport type { FileManagerContext, FileManagerContextObject, File } from \"~/types\";\nimport type { Security } from \"@webiny/api-security/types\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\n\nexport const getFileByUrl = () => {\n const fileManagerGraphQL = new GraphQLSchemaPlugin<FileManagerContext>({\n typeDefs: /* GraphQL */ `\n extend type FmQuery {\n getFileByUrl(url: String!): FmFileResponse\n }\n `,\n resolvers: {\n FmQuery: {\n async getFileByUrl(_, args, context) {\n const { url } = args as { url: string };\n const useCase = new SecureGetFileByUrl(\n context.security,\n new GetFileByUrlUseCase(context.fileManager)\n );\n try {\n const file = await useCase.execute(url);\n if (file) {\n return new Response(file);\n }\n return new NotFoundResponse(\"File not found!\");\n } catch (error) {\n return new ErrorResponse(error);\n }\n }\n }\n }\n });\n fileManagerGraphQL.name = \"fm.graphql.getFileByUrl\";\n\n return fileManagerGraphQL;\n};\n\ninterface IGetFileByUrl {\n execute(url: string): Promise<File | undefined>;\n}\n\nclass GetFileByUrlUseCase implements IGetFileByUrl {\n private readonly fileManager: FileManagerContextObject;\n\n constructor(fileManager: FileManagerContextObject) {\n this.fileManager = fileManager;\n }\n\n async execute(url: string): Promise<File | undefined> {\n const { pathname } = new URL(url);\n const isAlias = !pathname.startsWith(\"/files/\") && !pathname.startsWith(\"/private/\");\n const query = isAlias ? pathname : pathname.replace(\"/files/\", \"\").replace(\"/private/\", \"\");\n\n const [files] = await this.fileManager.listFiles({\n where: {\n OR: [{ key: query }, { aliases_contains: query }]\n },\n limit: 1\n });\n\n return files.length ? files[0] : undefined;\n }\n}\n\nclass SecureGetFileByUrl implements IGetFileByUrl {\n private security: Security;\n private useCase: IGetFileByUrl;\n\n constructor(security: Security, useCase: IGetFileByUrl) {\n this.security = security;\n this.useCase = useCase;\n }\n\n execute(url: string): Promise<File | undefined> {\n if (!this.security.getIdentity()) {\n throw new NotAuthorizedError({ message: \"You're not authorized to edit this file!\" });\n }\n\n return this.useCase.execute(url);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAIA,IAAAC,YAAA,GAAAD,OAAA;AAEO,MAAME,YAAY,GAAGA,CAAA,KAAM;EAC9B,MAAMC,kBAAkB,GAAG,IAAIC,mCAAmB,CAAqB;IACnEC,QAAQ,EAAE,aAAc;AAChC;AACA;AACA;AACA,SAAS;IACDC,SAAS,EAAE;MACPC,OAAO,EAAE;QACL,MAAML,YAAYA,CAACM,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAE;UACjC,MAAM;YAAEC;UAAI,CAAC,GAAGF,IAAuB;UACvC,MAAMG,OAAO,GAAG,IAAIC,kBAAkB,CAClCH,OAAO,CAACI,QAAQ,EAChB,IAAIC,mBAAmB,CAACL,OAAO,CAACM,WAAW,CAC/C,CAAC;UACD,IAAI;YACA,MAAMC,IAAI,GAAG,MAAML,OAAO,CAACM,OAAO,CAACP,GAAG,CAAC;YACvC,IAAIM,IAAI,EAAE;cACN,OAAO,IAAIE,wBAAQ,CAACF,IAAI,CAAC;YAC7B;YACA,OAAO,IAAIG,gCAAgB,CAAC,iBAAiB,CAAC;UAClD,CAAC,CAAC,OAAOC,KAAK,EAAE;YACZ,OAAO,IAAIC,6BAAa,CAACD,KAAK,CAAC;UACnC;QACJ;MACJ;IACJ;EACJ,CAAC,CAAC;EACFlB,kBAAkB,CAACoB,IAAI,GAAG,yBAAyB;EAEnD,OAAOpB,kBAAkB;AAC7B,CAAC;AAACqB,OAAA,CAAAtB,YAAA,GAAAA,YAAA;AAMF,MAAMa,mBAAmB,CAA0B;EAG/CU,WAAWA,CAACT,WAAqC,EAAE;IAC/C,IAAI,CAACA,WAAW,GAAGA,WAAW;EAClC;EAEA,MAAME,OAAOA,CAACP,GAAW,EAA6B;IAClD,MAAM;MAAEe;IAAS,CAAC,GAAG,IAAIC,GAAG,CAAChB,GAAG,CAAC;IACjC,MAAMiB,OAAO,GAAG,CAACF,QAAQ,CAACG,UAAU,CAAC,SAAS,CAAC,IAAI,CAACH,QAAQ,CAACG,UAAU,CAAC,WAAW,CAAC;IACpF,MAAMC,KAAK,GAAGF,OAAO,GAAGF,QAAQ,GAAGA,QAAQ,CAACK,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;IAE3F,MAAM,CAACC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAChB,WAAW,CAACiB,SAAS,CAAC;MAC7CC,KAAK,EAAE;QACHC,EAAE,EAAE,CAAC;UAAEC,GAAG,EAAEN;QAAM,CAAC,EAAE;UAAEO,gBAAgB,EAAEP;QAAM,CAAC;MACpD,CAAC;MACDQ,KAAK,EAAE;IACX,CAAC,CAAC;IAEF,OAAON,KAAK,CAACO,MAAM,GAAGP,KAAK,CAAC,CAAC,CAAC,GAAGQ,SAAS;EAC9C;AACJ;AAEA,MAAM3B,kBAAkB,CAA0B;EAI9CY,WAAWA,CAACX,QAAkB,EAAEF,OAAsB,EAAE;IACpD,IAAI,CAACE,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACF,OAAO,GAAGA,OAAO;EAC1B;EAEAM,OAAOA,CAACP,GAAW,EAA6B;IAC5C,IAAI,CAAC,IAAI,CAACG,QAAQ,CAAC2B,WAAW,CAAC,CAAC,EAAE;MAC9B,MAAM,IAAIC,+BAAkB,CAAC;QAAEC,OAAO,EAAE;MAA2C,CAAC,CAAC;IACzF;IAEA,OAAO,IAAI,CAAC/B,OAAO,CAACM,OAAO,CAACP,GAAG,CAAC;EACpC;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ContextPlugin } from "@webiny/api";
|
|
2
|
+
import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
|
|
3
|
+
import type { FileManagerContext } from "../types";
|
|
4
|
+
export declare const createGraphQLSchemaPlugin: () => (GraphQLSchemaPlugin<FileManagerContext> | ContextPlugin<FileManagerContext>)[];
|
package/graphql/index.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createGraphQLSchemaPlugin = void 0;
|
|
7
|
+
var _api = require("@webiny/api");
|
|
8
|
+
var _apiHeadlessCms = require("@webiny/api-headless-cms");
|
|
9
|
+
var _createFieldTypePluginRecords = require("@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords");
|
|
10
|
+
var _getSchemaFromFieldPlugins = require("@webiny/api-headless-cms/utils/getSchemaFromFieldPlugins");
|
|
11
|
+
var _baseSchema = require("./baseSchema");
|
|
12
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
13
|
+
var _filesSchema = require("./filesSchema");
|
|
14
|
+
var _getFileByUrl = require("./getFileByUrl");
|
|
15
|
+
const createGraphQLSchemaPlugin = () => {
|
|
16
|
+
return [(0, _baseSchema.createBaseSchema)(),
|
|
17
|
+
// Files schema is generated dynamically, based on a CMS model, so we need to
|
|
18
|
+
// register it from a ContextPlugin, to perform additional bootstrap.
|
|
19
|
+
new _api.ContextPlugin(async context => {
|
|
20
|
+
if (!(await (0, _apiHeadlessCms.isHeadlessCmsReady)(context))) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
await context.security.withoutAuthorization(async () => {
|
|
24
|
+
const fileModel = await context.cms.getModel("fmFile");
|
|
25
|
+
const models = await context.cms.listModels();
|
|
26
|
+
const fieldPlugins = (0, _createFieldTypePluginRecords.createFieldTypePluginRecords)(context.plugins);
|
|
27
|
+
/**
|
|
28
|
+
* We need to register all plugins for all the CMS fields.
|
|
29
|
+
*/
|
|
30
|
+
const plugins = (0, _getSchemaFromFieldPlugins.createGraphQLSchemaPluginFromFieldPlugins)({
|
|
31
|
+
models,
|
|
32
|
+
type: "manage",
|
|
33
|
+
fieldTypePlugins: fieldPlugins,
|
|
34
|
+
createPlugin: ({
|
|
35
|
+
schema,
|
|
36
|
+
type,
|
|
37
|
+
fieldType
|
|
38
|
+
}) => {
|
|
39
|
+
const plugin = new _handlerGraphql.GraphQLSchemaPlugin(schema);
|
|
40
|
+
plugin.name = `fm.graphql.schema.${type}.field.${fieldType}`;
|
|
41
|
+
return plugin;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
const graphQlPlugin = (0, _filesSchema.createFilesSchema)({
|
|
45
|
+
model: fileModel,
|
|
46
|
+
models,
|
|
47
|
+
plugins: fieldPlugins
|
|
48
|
+
});
|
|
49
|
+
context.plugins.register([...plugins, graphQlPlugin, (0, _getFileByUrl.getFileByUrl)()]);
|
|
50
|
+
});
|
|
51
|
+
})];
|
|
52
|
+
};
|
|
53
|
+
exports.createGraphQLSchemaPlugin = createGraphQLSchemaPlugin;
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_api","require","_apiHeadlessCms","_createFieldTypePluginRecords","_getSchemaFromFieldPlugins","_baseSchema","_handlerGraphql","_filesSchema","_getFileByUrl","createGraphQLSchemaPlugin","createBaseSchema","ContextPlugin","context","isHeadlessCmsReady","security","withoutAuthorization","fileModel","cms","getModel","models","listModels","fieldPlugins","createFieldTypePluginRecords","plugins","createGraphQLSchemaPluginFromFieldPlugins","type","fieldTypePlugins","createPlugin","schema","fieldType","plugin","GraphQLSchemaPlugin","name","graphQlPlugin","createFilesSchema","model","register","getFileByUrl","exports"],"sources":["index.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { createFieldTypePluginRecords } from \"@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords\";\nimport { createGraphQLSchemaPluginFromFieldPlugins } from \"@webiny/api-headless-cms/utils/getSchemaFromFieldPlugins\";\nimport { createBaseSchema } from \"~/graphql/baseSchema\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { createFilesSchema } from \"~/graphql/filesSchema\";\nimport { getFileByUrl } from \"~/graphql/getFileByUrl\";\nimport type { FileManagerContext } from \"~/types\";\n\nexport const createGraphQLSchemaPlugin = () => {\n return [\n createBaseSchema(),\n // Files schema is generated dynamically, based on a CMS model, so we need to\n // register it from a ContextPlugin, to perform additional bootstrap.\n new ContextPlugin<FileManagerContext>(async context => {\n if (!(await isHeadlessCmsReady(context))) {\n return;\n }\n\n await context.security.withoutAuthorization(async () => {\n const fileModel = (await context.cms.getModel(\"fmFile\")) as CmsModel;\n const models = await context.cms.listModels();\n const fieldPlugins = createFieldTypePluginRecords(context.plugins);\n /**\n * We need to register all plugins for all the CMS fields.\n */\n const plugins = createGraphQLSchemaPluginFromFieldPlugins({\n models,\n type: \"manage\",\n fieldTypePlugins: fieldPlugins,\n createPlugin: ({ schema, type, fieldType }) => {\n const plugin = new GraphQLSchemaPlugin(schema);\n plugin.name = `fm.graphql.schema.${type}.field.${fieldType}`;\n return plugin;\n }\n });\n\n const graphQlPlugin = createFilesSchema({\n model: fileModel,\n models,\n plugins: fieldPlugins\n });\n\n context.plugins.register([...plugins, graphQlPlugin, getFileByUrl()]);\n });\n })\n ];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAEA,IAAAE,6BAAA,GAAAF,OAAA;AACA,IAAAG,0BAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,YAAA,GAAAN,OAAA;AACA,IAAAO,aAAA,GAAAP,OAAA;AAGO,MAAMQ,yBAAyB,GAAGA,CAAA,KAAM;EAC3C,OAAO,CACH,IAAAC,4BAAgB,EAAC,CAAC;EAClB;EACA;EACA,IAAIC,kBAAa,CAAqB,MAAMC,OAAO,IAAI;IACnD,IAAI,EAAE,MAAM,IAAAC,kCAAkB,EAACD,OAAO,CAAC,CAAC,EAAE;MACtC;IACJ;IAEA,MAAMA,OAAO,CAACE,QAAQ,CAACC,oBAAoB,CAAC,YAAY;MACpD,MAAMC,SAAS,GAAI,MAAMJ,OAAO,CAACK,GAAG,CAACC,QAAQ,CAAC,QAAQ,CAAc;MACpE,MAAMC,MAAM,GAAG,MAAMP,OAAO,CAACK,GAAG,CAACG,UAAU,CAAC,CAAC;MAC7C,MAAMC,YAAY,GAAG,IAAAC,0DAA4B,EAACV,OAAO,CAACW,OAAO,CAAC;MAClE;AAChB;AACA;MACgB,MAAMA,OAAO,GAAG,IAAAC,oEAAyC,EAAC;QACtDL,MAAM;QACNM,IAAI,EAAE,QAAQ;QACdC,gBAAgB,EAAEL,YAAY;QAC9BM,YAAY,EAAEA,CAAC;UAAEC,MAAM;UAAEH,IAAI;UAAEI;QAAU,CAAC,KAAK;UAC3C,MAAMC,MAAM,GAAG,IAAIC,mCAAmB,CAACH,MAAM,CAAC;UAC9CE,MAAM,CAACE,IAAI,GAAG,qBAAqBP,IAAI,UAAUI,SAAS,EAAE;UAC5D,OAAOC,MAAM;QACjB;MACJ,CAAC,CAAC;MAEF,MAAMG,aAAa,GAAG,IAAAC,8BAAiB,EAAC;QACpCC,KAAK,EAAEnB,SAAS;QAChBG,MAAM;QACNI,OAAO,EAAEF;MACb,CAAC,CAAC;MAEFT,OAAO,CAACW,OAAO,CAACa,QAAQ,CAAC,CAAC,GAAGb,OAAO,EAAEU,aAAa,EAAE,IAAAI,0BAAY,EAAC,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC;EACN,CAAC,CAAC,CACL;AACL,CAAC;AAACC,OAAA,CAAA7B,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Response, ErrorResponse } from "@webiny/handler-graphql";
|
|
2
|
+
export declare const emptyResolver: () => {};
|
|
3
|
+
/**
|
|
4
|
+
* Use any because it really can be any.
|
|
5
|
+
* TODO @ts-refactor maybe use generics at some point?
|
|
6
|
+
*/
|
|
7
|
+
interface ResolveCallable {
|
|
8
|
+
(): Promise<any>;
|
|
9
|
+
}
|
|
10
|
+
export declare const resolve: (fn: ResolveCallable) => Promise<ErrorResponse | Response<any>>;
|
|
11
|
+
export {};
|
package/graphql/utils.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.resolve = exports.emptyResolver = void 0;
|
|
7
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
8
|
+
const emptyResolver = () => ({});
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Use any because it really can be any.
|
|
12
|
+
* TODO @ts-refactor maybe use generics at some point?
|
|
13
|
+
*/
|
|
14
|
+
exports.emptyResolver = emptyResolver;
|
|
15
|
+
const resolve = async fn => {
|
|
16
|
+
try {
|
|
17
|
+
return new _handlerGraphql.Response(await fn());
|
|
18
|
+
} catch (e) {
|
|
19
|
+
return new _handlerGraphql.ErrorResponse(e);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.resolve = resolve;
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_handlerGraphql","require","emptyResolver","exports","resolve","fn","Response","e","ErrorResponse"],"sources":["utils.ts"],"sourcesContent":["import { Response, ErrorResponse } from \"@webiny/handler-graphql\";\n\nexport const emptyResolver = () => ({});\n\n/**\n * Use any because it really can be any.\n * TODO @ts-refactor maybe use generics at some point?\n */\ninterface ResolveCallable {\n (): Promise<any>;\n}\n\nexport const resolve = async (fn: ResolveCallable) => {\n try {\n return new Response(await fn());\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAEO,MAAMC,aAAa,GAAGA,CAAA,MAAO,CAAC,CAAC,CAAC;;AAEvC;AACA;AACA;AACA;AAHAC,OAAA,CAAAD,aAAA,GAAAA,aAAA;AAQO,MAAME,OAAO,GAAG,MAAOC,EAAmB,IAAK;EAClD,IAAI;IACA,OAAO,IAAIC,wBAAQ,CAAC,MAAMD,EAAE,CAAC,CAAC,CAAC;EACnC,CAAC,CAAC,OAAOE,CAAC,EAAE;IACR,OAAO,IAAIC,6BAAa,CAACD,CAAC,CAAC;EAC/B;AACJ,CAAC;AAACJ,OAAA,CAAAC,OAAA,GAAAA,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { S3 } from "@webiny/aws-sdk/client-s3";
|
|
2
|
+
export interface ImageManagerCanProcessParams {
|
|
3
|
+
key: string;
|
|
4
|
+
extension: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ImageManagerProcessParams {
|
|
7
|
+
s3: S3;
|
|
8
|
+
key: string;
|
|
9
|
+
extension: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const imageManager: {
|
|
12
|
+
canProcess: (params: ImageManagerCanProcessParams) => boolean;
|
|
13
|
+
process({ s3, key, extension }: ImageManagerProcessParams): Promise<void>;
|
|
14
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.imageManager = void 0;
|
|
8
|
+
var _path = require("path");
|
|
9
|
+
var _utils = require("../utils");
|
|
10
|
+
var newUtils = _interopRequireWildcard(require("./utils"));
|
|
11
|
+
var legacyUtils = _interopRequireWildcard(require("./legacyUtils"));
|
|
12
|
+
const isLegacyKey = key => {
|
|
13
|
+
return !key.includes("/");
|
|
14
|
+
};
|
|
15
|
+
const imageManager = exports.imageManager = {
|
|
16
|
+
canProcess: params => {
|
|
17
|
+
const {
|
|
18
|
+
key,
|
|
19
|
+
extension
|
|
20
|
+
} = params;
|
|
21
|
+
const utils = key.includes("/") ? newUtils : legacyUtils;
|
|
22
|
+
if (!utils.SUPPORTED_IMAGES.includes(extension)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// We only want to process original images, and delete all variations of it at once.
|
|
27
|
+
// We DO NOT want to process the event for the deletion of an optimized/transformed image.
|
|
28
|
+
// Unfortunately, there's no way to filter those events on the S3 bucket itself, so we have to do it this way.
|
|
29
|
+
return !(key.startsWith(utils.OPTIMIZED_IMAGE_PREFIX) || key.startsWith(utils.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX));
|
|
30
|
+
},
|
|
31
|
+
async process({
|
|
32
|
+
s3,
|
|
33
|
+
key,
|
|
34
|
+
extension
|
|
35
|
+
}) {
|
|
36
|
+
const utils = key.includes("/") ? newUtils : legacyUtils;
|
|
37
|
+
|
|
38
|
+
// 1. Get optimized image key.
|
|
39
|
+
await s3.deleteObject((0, _utils.getObjectParams)(utils.getImageKey({
|
|
40
|
+
key
|
|
41
|
+
})));
|
|
42
|
+
if (!utils.SUPPORTED_TRANSFORMABLE_IMAGES.includes(extension)) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Search for all transformed images and delete those too.
|
|
48
|
+
*
|
|
49
|
+
* For new keys, we take the entire path, up to, but not including, the file name:
|
|
50
|
+
* - demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg
|
|
51
|
+
* - 60228148f98841000981c724/welcome-to-webiny__idp.svg
|
|
52
|
+
*
|
|
53
|
+
* Legacy keys don't have sub-folders:
|
|
54
|
+
* - 8ldc5n3w2-custom-field-renderers.mp4
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
const prefix = isLegacyKey(key) ? utils.getOptimizedImageKeyPrefix(key) : (0, _path.dirname)(key) + "/";
|
|
58
|
+
const env = (0, _utils.getEnvironment)();
|
|
59
|
+
const imagesList = await s3.listObjects({
|
|
60
|
+
Bucket: env.bucket,
|
|
61
|
+
Prefix: prefix
|
|
62
|
+
});
|
|
63
|
+
if (!imagesList.Contents) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
for (const imageObject of imagesList.Contents) {
|
|
67
|
+
if (!imageObject.Key) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
await s3.deleteObject((0, _utils.getObjectParams)(imageObject.Key));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=imageManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_path","require","_utils","newUtils","_interopRequireWildcard","legacyUtils","isLegacyKey","key","includes","imageManager","exports","canProcess","params","extension","utils","SUPPORTED_IMAGES","startsWith","OPTIMIZED_IMAGE_PREFIX","OPTIMIZED_TRANSFORMED_IMAGE_PREFIX","process","s3","deleteObject","getObjectParams","getImageKey","SUPPORTED_TRANSFORMABLE_IMAGES","prefix","getOptimizedImageKeyPrefix","dirname","env","getEnvironment","imagesList","listObjects","Bucket","bucket","Prefix","Contents","imageObject","Key"],"sources":["imageManager.ts"],"sourcesContent":["import { dirname } from \"path\";\nimport type { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { getObjectParams, getEnvironment } from \"~/handlers/utils\";\nimport * as newUtils from \"./utils\";\nimport * as legacyUtils from \"./legacyUtils\";\n\nconst isLegacyKey = (key: string) => {\n return !key.includes(\"/\");\n};\n\nexport interface ImageManagerCanProcessParams {\n key: string;\n extension: string;\n}\nexport interface ImageManagerProcessParams {\n s3: S3;\n key: string;\n extension: string;\n}\nexport const imageManager = {\n canProcess: (params: ImageManagerCanProcessParams) => {\n const { key, extension } = params;\n const utils = key.includes(\"/\") ? newUtils : legacyUtils;\n\n if (!utils.SUPPORTED_IMAGES.includes(extension)) {\n return false;\n }\n\n // We only want to process original images, and delete all variations of it at once.\n // We DO NOT want to process the event for the deletion of an optimized/transformed image.\n // Unfortunately, there's no way to filter those events on the S3 bucket itself, so we have to do it this way.\n return !(\n key.startsWith(utils.OPTIMIZED_IMAGE_PREFIX) ||\n key.startsWith(utils.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX)\n );\n },\n async process({ s3, key, extension }: ImageManagerProcessParams) {\n const utils = key.includes(\"/\") ? newUtils : legacyUtils;\n\n // 1. Get optimized image key.\n await s3.deleteObject(getObjectParams(utils.getImageKey({ key })));\n\n if (!utils.SUPPORTED_TRANSFORMABLE_IMAGES.includes(extension)) {\n return;\n }\n\n /**\n * Search for all transformed images and delete those too.\n *\n * For new keys, we take the entire path, up to, but not including, the file name:\n * - demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg\n * - 60228148f98841000981c724/welcome-to-webiny__idp.svg\n *\n * Legacy keys don't have sub-folders:\n * - 8ldc5n3w2-custom-field-renderers.mp4\n */\n\n const prefix = isLegacyKey(key)\n ? utils.getOptimizedImageKeyPrefix(key)\n : dirname(key) + \"/\";\n\n const env = getEnvironment();\n const imagesList = await s3.listObjects({\n Bucket: env.bucket,\n Prefix: prefix\n });\n\n if (!imagesList.Contents) {\n return;\n }\n\n for (const imageObject of imagesList.Contents) {\n if (!imageObject.Key) {\n continue;\n }\n await s3.deleteObject(getObjectParams(imageObject.Key));\n }\n }\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,WAAA,GAAAD,uBAAA,CAAAH,OAAA;AAEA,MAAMK,WAAW,GAAIC,GAAW,IAAK;EACjC,OAAO,CAACA,GAAG,CAACC,QAAQ,CAAC,GAAG,CAAC;AAC7B,CAAC;AAWM,MAAMC,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EACxBE,UAAU,EAAGC,MAAoC,IAAK;IAClD,MAAM;MAAEL,GAAG;MAAEM;IAAU,CAAC,GAAGD,MAAM;IACjC,MAAME,KAAK,GAAGP,GAAG,CAACC,QAAQ,CAAC,GAAG,CAAC,GAAGL,QAAQ,GAAGE,WAAW;IAExD,IAAI,CAACS,KAAK,CAACC,gBAAgB,CAACP,QAAQ,CAACK,SAAS,CAAC,EAAE;MAC7C,OAAO,KAAK;IAChB;;IAEA;IACA;IACA;IACA,OAAO,EACHN,GAAG,CAACS,UAAU,CAACF,KAAK,CAACG,sBAAsB,CAAC,IAC5CV,GAAG,CAACS,UAAU,CAACF,KAAK,CAACI,kCAAkC,CAAC,CAC3D;EACL,CAAC;EACD,MAAMC,OAAOA,CAAC;IAAEC,EAAE;IAAEb,GAAG;IAAEM;EAAqC,CAAC,EAAE;IAC7D,MAAMC,KAAK,GAAGP,GAAG,CAACC,QAAQ,CAAC,GAAG,CAAC,GAAGL,QAAQ,GAAGE,WAAW;;IAExD;IACA,MAAMe,EAAE,CAACC,YAAY,CAAC,IAAAC,sBAAe,EAACR,KAAK,CAACS,WAAW,CAAC;MAAEhB;IAAI,CAAC,CAAC,CAAC,CAAC;IAElE,IAAI,CAACO,KAAK,CAACU,8BAA8B,CAAChB,QAAQ,CAACK,SAAS,CAAC,EAAE;MAC3D;IACJ;;IAEA;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAEQ,MAAMY,MAAM,GAAGnB,WAAW,CAACC,GAAG,CAAC,GACzBO,KAAK,CAACY,0BAA0B,CAACnB,GAAG,CAAC,GACrC,IAAAoB,aAAO,EAACpB,GAAG,CAAC,GAAG,GAAG;IAExB,MAAMqB,GAAG,GAAG,IAAAC,qBAAc,EAAC,CAAC;IAC5B,MAAMC,UAAU,GAAG,MAAMV,EAAE,CAACW,WAAW,CAAC;MACpCC,MAAM,EAAEJ,GAAG,CAACK,MAAM;MAClBC,MAAM,EAAET;IACZ,CAAC,CAAC;IAEF,IAAI,CAACK,UAAU,CAACK,QAAQ,EAAE;MACtB;IACJ;IAEA,KAAK,MAAMC,WAAW,IAAIN,UAAU,CAACK,QAAQ,EAAE;MAC3C,IAAI,CAACC,WAAW,CAACC,GAAG,EAAE;QAClB;MACJ;MACA,MAAMjB,EAAE,CAACC,YAAY,CAAC,IAAAC,sBAAe,EAACc,WAAW,CAACC,GAAG,CAAC,CAAC;IAC3D;EACJ;AACJ,CAAC","ignoreList":[]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { S3EventHandler } from "@webiny/handler-aws";
|
|
2
|
+
/**
|
|
3
|
+
* This handler must be run through @webiny/handler-aws/s3
|
|
4
|
+
*/
|
|
5
|
+
export declare const createManageFilePlugins: () => S3EventHandler<any>[];
|
package/handlers/manage/index.js
CHANGED
|
@@ -1,70 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports.
|
|
9
|
-
|
|
7
|
+
exports.createManageFilePlugins = void 0;
|
|
10
8
|
var _path = _interopRequireDefault(require("path"));
|
|
11
|
-
|
|
12
|
-
var _s = _interopRequireDefault(require("aws-sdk/clients/s3"));
|
|
13
|
-
|
|
9
|
+
var _clientS = require("@webiny/aws-sdk/client-s3");
|
|
14
10
|
var _utils = require("../utils");
|
|
15
|
-
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
keys.push(record.s3.object.key);
|
|
32
|
-
}
|
|
11
|
+
var _imageManager = require("./imageManager");
|
|
12
|
+
var _handlerAws = require("@webiny/handler-aws");
|
|
13
|
+
const managers = [_imageManager.imageManager];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* This handler must be run through @webiny/handler-aws/s3
|
|
17
|
+
*/
|
|
18
|
+
const createManageFilePlugins = () => {
|
|
19
|
+
return [new _handlerAws.S3EventHandler(async ({
|
|
20
|
+
event
|
|
21
|
+
}) => {
|
|
22
|
+
const keys = [];
|
|
23
|
+
for (let i = 0; i < event.Records.length; i++) {
|
|
24
|
+
const record = event.Records[i];
|
|
25
|
+
if (typeof record.s3.object.key === "string") {
|
|
26
|
+
keys.push(record.s3.object.key);
|
|
33
27
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
if (canProcess) {
|
|
56
|
-
await manager.process({
|
|
57
|
-
s3,
|
|
58
|
-
key,
|
|
59
|
-
extension
|
|
60
|
-
});
|
|
61
|
-
}
|
|
28
|
+
}
|
|
29
|
+
if (keys.length === 0) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const {
|
|
33
|
+
region
|
|
34
|
+
} = (0, _utils.getEnvironment)();
|
|
35
|
+
const s3 = new _clientS.S3({
|
|
36
|
+
region
|
|
37
|
+
});
|
|
38
|
+
for (const key of keys) {
|
|
39
|
+
const extension = _path.default.extname(key);
|
|
40
|
+
for (const manager of managers) {
|
|
41
|
+
const canProcess = manager.canProcess({
|
|
42
|
+
key,
|
|
43
|
+
extension
|
|
44
|
+
});
|
|
45
|
+
if (!canProcess) {
|
|
46
|
+
continue;
|
|
62
47
|
}
|
|
48
|
+
await manager.process({
|
|
49
|
+
s3,
|
|
50
|
+
key,
|
|
51
|
+
extension
|
|
52
|
+
});
|
|
63
53
|
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
});
|
|
54
|
+
}
|
|
55
|
+
})];
|
|
56
|
+
};
|
|
57
|
+
exports.createManageFilePlugins = createManageFilePlugins;
|
|
69
58
|
|
|
70
|
-
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_path","_interopRequireDefault","require","_clientS","_utils","_imageManager","_handlerAws","managers","imageManager","createManageFilePlugins","S3EventHandler","event","keys","i","Records","length","record","s3","object","key","push","region","getEnvironment","S3","extension","path","extname","manager","canProcess","process","exports"],"sources":["index.ts"],"sourcesContent":["import path from \"path\";\nimport { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { getEnvironment } from \"../utils\";\nimport { imageManager } from \"./imageManager\";\nimport { S3EventHandler } from \"@webiny/handler-aws\";\n\nconst managers = [imageManager];\n\n/**\n * This handler must be run through @webiny/handler-aws/s3\n */\nexport const createManageFilePlugins = () => {\n return [\n new S3EventHandler(async ({ event }) => {\n const keys: string[] = [];\n for (let i = 0; i < event.Records.length; i++) {\n const record = event.Records[i];\n if (typeof record.s3.object.key === \"string\") {\n keys.push(record.s3.object.key);\n }\n }\n\n if (keys.length === 0) {\n return;\n }\n\n const { region } = getEnvironment();\n const s3 = new S3({ region });\n\n for (const key of keys) {\n const extension = path.extname(key);\n\n for (const manager of managers) {\n const canProcess = manager.canProcess({\n key,\n extension\n });\n\n if (!canProcess) {\n continue;\n }\n await manager.process({\n s3,\n key,\n extension\n });\n }\n }\n })\n ];\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAEA,MAAMK,QAAQ,GAAG,CAACC,0BAAY,CAAC;;AAE/B;AACA;AACA;AACO,MAAMC,uBAAuB,GAAGA,CAAA,KAAM;EACzC,OAAO,CACH,IAAIC,0BAAc,CAAC,OAAO;IAAEC;EAAM,CAAC,KAAK;IACpC,MAAMC,IAAc,GAAG,EAAE;IACzB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,CAACG,OAAO,CAACC,MAAM,EAAEF,CAAC,EAAE,EAAE;MAC3C,MAAMG,MAAM,GAAGL,KAAK,CAACG,OAAO,CAACD,CAAC,CAAC;MAC/B,IAAI,OAAOG,MAAM,CAACC,EAAE,CAACC,MAAM,CAACC,GAAG,KAAK,QAAQ,EAAE;QAC1CP,IAAI,CAACQ,IAAI,CAACJ,MAAM,CAACC,EAAE,CAACC,MAAM,CAACC,GAAG,CAAC;MACnC;IACJ;IAEA,IAAIP,IAAI,CAACG,MAAM,KAAK,CAAC,EAAE;MACnB;IACJ;IAEA,MAAM;MAAEM;IAAO,CAAC,GAAG,IAAAC,qBAAc,EAAC,CAAC;IACnC,MAAML,EAAE,GAAG,IAAIM,WAAE,CAAC;MAAEF;IAAO,CAAC,CAAC;IAE7B,KAAK,MAAMF,GAAG,IAAIP,IAAI,EAAE;MACpB,MAAMY,SAAS,GAAGC,aAAI,CAACC,OAAO,CAACP,GAAG,CAAC;MAEnC,KAAK,MAAMQ,OAAO,IAAIpB,QAAQ,EAAE;QAC5B,MAAMqB,UAAU,GAAGD,OAAO,CAACC,UAAU,CAAC;UAClCT,GAAG;UACHK;QACJ,CAAC,CAAC;QAEF,IAAI,CAACI,UAAU,EAAE;UACb;QACJ;QACA,MAAMD,OAAO,CAACE,OAAO,CAAC;UAClBZ,EAAE;UACFE,GAAG;UACHK;QACJ,CAAC,CAAC;MACN;IACJ;EACJ,CAAC,CAAC,CACL;AACL,CAAC;AAACM,OAAA,CAAArB,uBAAA,GAAAA,uBAAA","ignoreList":[]}
|
|
@@ -2,8 +2,8 @@ declare const SUPPORTED_IMAGES: string[];
|
|
|
2
2
|
declare const SUPPORTED_TRANSFORMABLE_IMAGES: string[];
|
|
3
3
|
declare const OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = "img-o-t-";
|
|
4
4
|
declare const OPTIMIZED_IMAGE_PREFIX = "img-o-";
|
|
5
|
-
declare const getOptimizedImageKeyPrefix: (key:
|
|
6
|
-
declare const getOptimizedTransformedImageKeyPrefix: (key:
|
|
5
|
+
declare const getOptimizedImageKeyPrefix: (key: string) => string;
|
|
6
|
+
declare const getOptimizedTransformedImageKeyPrefix: (key: string) => string;
|
|
7
7
|
interface GetImageKeyParams {
|
|
8
8
|
key: string;
|
|
9
9
|
transformations?: any;
|
|
@@ -1,35 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
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;
|
|
9
|
-
|
|
10
8
|
var _objectHash = _interopRequireDefault(require("object-hash"));
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
exports.
|
|
14
|
-
const
|
|
15
|
-
exports.SUPPORTED_TRANSFORMABLE_IMAGES = SUPPORTED_TRANSFORMABLE_IMAGES;
|
|
16
|
-
const OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = "img-o-t-";
|
|
17
|
-
exports.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = OPTIMIZED_TRANSFORMED_IMAGE_PREFIX;
|
|
18
|
-
const OPTIMIZED_IMAGE_PREFIX = "img-o-";
|
|
19
|
-
exports.OPTIMIZED_IMAGE_PREFIX = OPTIMIZED_IMAGE_PREFIX;
|
|
20
|
-
|
|
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-";
|
|
21
13
|
const getOptimizedImageKeyPrefix = key => {
|
|
22
14
|
return `${OPTIMIZED_IMAGE_PREFIX}${(0, _objectHash.default)(key)}-`;
|
|
23
15
|
};
|
|
24
|
-
|
|
25
16
|
exports.getOptimizedImageKeyPrefix = getOptimizedImageKeyPrefix;
|
|
26
|
-
|
|
27
17
|
const getOptimizedTransformedImageKeyPrefix = key => {
|
|
28
18
|
return `${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${(0, _objectHash.default)(key)}-`;
|
|
29
19
|
};
|
|
30
|
-
|
|
31
20
|
exports.getOptimizedTransformedImageKeyPrefix = getOptimizedTransformedImageKeyPrefix;
|
|
32
|
-
|
|
33
21
|
const getImageKey = ({
|
|
34
22
|
key,
|
|
35
23
|
transformations
|
|
@@ -38,9 +26,9 @@ const getImageKey = ({
|
|
|
38
26
|
const prefix = getOptimizedImageKeyPrefix(key);
|
|
39
27
|
return prefix + key;
|
|
40
28
|
}
|
|
41
|
-
|
|
42
29
|
const prefix = getOptimizedTransformedImageKeyPrefix(key);
|
|
43
30
|
return `${prefix}${(0, _objectHash.default)(transformations)}-${key}`;
|
|
44
31
|
};
|
|
32
|
+
exports.getImageKey = getImageKey;
|
|
45
33
|
|
|
46
|
-
|
|
34
|
+
//# sourceMappingURL=legacyUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_objectHash","_interopRequireDefault","require","SUPPORTED_IMAGES","exports","SUPPORTED_TRANSFORMABLE_IMAGES","OPTIMIZED_TRANSFORMED_IMAGE_PREFIX","OPTIMIZED_IMAGE_PREFIX","getOptimizedImageKeyPrefix","key","objectHash","getOptimizedTransformedImageKeyPrefix","getImageKey","transformations","prefix"],"sources":["legacyUtils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\n\nconst SUPPORTED_IMAGES = [\".jpg\", \".jpeg\", \".png\", \".svg\", \".gif\"];\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\".jpg\", \".jpeg\", \".png\"];\n\nconst OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = \"img-o-t-\";\nconst OPTIMIZED_IMAGE_PREFIX = \"img-o-\";\n\nconst getOptimizedImageKeyPrefix = (key: string): string => {\n return `${OPTIMIZED_IMAGE_PREFIX}${objectHash(key)}-`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (key: string): string => {\n return `${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${objectHash(key)}-`;\n};\n\ninterface GetImageKeyParams {\n key: string;\n transformations?: any;\n}\n\nconst getImageKey = ({ key, transformations }: GetImageKeyParams): string => {\n if (!transformations) {\n const prefix = getOptimizedImageKeyPrefix(key);\n return prefix + key;\n }\n\n const prefix = getOptimizedTransformedImageKeyPrefix(key);\n return `${prefix}${objectHash(transformations)}-${key}`;\n};\n\nexport {\n SUPPORTED_IMAGES,\n SUPPORTED_TRANSFORMABLE_IMAGES,\n OPTIMIZED_TRANSFORMED_IMAGE_PREFIX,\n OPTIMIZED_IMAGE_PREFIX,\n getImageKey,\n getOptimizedImageKeyPrefix,\n getOptimizedTransformedImageKeyPrefix\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAClE,MAAME,8BAA8B,GAAAD,OAAA,CAAAC,8BAAA,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;AAEhE,MAAMC,kCAAkC,GAAAF,OAAA,CAAAE,kCAAA,GAAG,UAAU;AACrD,MAAMC,sBAAsB,GAAAH,OAAA,CAAAG,sBAAA,GAAG,QAAQ;AAEvC,MAAMC,0BAA0B,GAAIC,GAAW,IAAa;EACxD,OAAO,GAAGF,sBAAsB,GAAG,IAAAG,mBAAU,EAACD,GAAG,CAAC,GAAG;AACzD,CAAC;AAACL,OAAA,CAAAI,0BAAA,GAAAA,0BAAA;AAEF,MAAMG,qCAAqC,GAAIF,GAAW,IAAa;EACnE,OAAO,GAAGH,kCAAkC,GAAG,IAAAI,mBAAU,EAACD,GAAG,CAAC,GAAG;AACrE,CAAC;AAACL,OAAA,CAAAO,qCAAA,GAAAA,qCAAA;AAOF,MAAMC,WAAW,GAAGA,CAAC;EAAEH,GAAG;EAAEI;AAAmC,CAAC,KAAa;EACzE,IAAI,CAACA,eAAe,EAAE;IAClB,MAAMC,MAAM,GAAGN,0BAA0B,CAACC,GAAG,CAAC;IAC9C,OAAOK,MAAM,GAAGL,GAAG;EACvB;EAEA,MAAMK,MAAM,GAAGH,qCAAqC,CAACF,GAAG,CAAC;EACzD,OAAO,GAAGK,MAAM,GAAG,IAAAJ,mBAAU,EAACG,eAAe,CAAC,IAAIJ,GAAG,EAAE;AAC3D,CAAC;AAACL,OAAA,CAAAQ,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
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, transformationsHash: 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 };
|
|
@@ -0,0 +1,34 @@
|
|
|
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", ".webp"];
|
|
10
|
+
const SUPPORTED_TRANSFORMABLE_IMAGES = exports.SUPPORTED_TRANSFORMABLE_IMAGES = [".jpg", ".jpeg", ".png", ".webp"];
|
|
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
|
+
const [id, name] = key.split("/");
|
|
15
|
+
return `${id}/${OPTIMIZED_IMAGE_PREFIX}${name}`;
|
|
16
|
+
};
|
|
17
|
+
exports.getOptimizedImageKeyPrefix = getOptimizedImageKeyPrefix;
|
|
18
|
+
const getOptimizedTransformedImageKeyPrefix = (key, transformationsHash) => {
|
|
19
|
+
const [id, name] = key.split("/");
|
|
20
|
+
return `${id}/${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${transformationsHash}-${name}`;
|
|
21
|
+
};
|
|
22
|
+
exports.getOptimizedTransformedImageKeyPrefix = getOptimizedTransformedImageKeyPrefix;
|
|
23
|
+
const getImageKey = ({
|
|
24
|
+
key,
|
|
25
|
+
transformations
|
|
26
|
+
}) => {
|
|
27
|
+
if (!transformations) {
|
|
28
|
+
return getOptimizedImageKeyPrefix(key);
|
|
29
|
+
}
|
|
30
|
+
return getOptimizedTransformedImageKeyPrefix(key, (0, _objectHash.default)(transformations));
|
|
31
|
+
};
|
|
32
|
+
exports.getImageKey = getImageKey;
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_objectHash","_interopRequireDefault","require","SUPPORTED_IMAGES","exports","SUPPORTED_TRANSFORMABLE_IMAGES","OPTIMIZED_TRANSFORMED_IMAGE_PREFIX","OPTIMIZED_IMAGE_PREFIX","getOptimizedImageKeyPrefix","key","id","name","split","getOptimizedTransformedImageKeyPrefix","transformationsHash","getImageKey","transformations","objectHash"],"sources":["utils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\n\nconst SUPPORTED_IMAGES = [\".jpg\", \".jpeg\", \".png\", \".svg\", \".gif\", \".webp\"];\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\".jpg\", \".jpeg\", \".png\", \".webp\"];\n\nconst OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = \"img-o-t-\";\nconst OPTIMIZED_IMAGE_PREFIX = \"img-o-\";\n\nconst getOptimizedImageKeyPrefix = (key: string): string => {\n const [id, name] = key.split(\"/\");\n return `${id}/${OPTIMIZED_IMAGE_PREFIX}${name}`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (\n key: string,\n transformationsHash: string\n): string => {\n const [id, name] = key.split(\"/\");\n return `${id}/${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${transformationsHash}-${name}`;\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_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,EAAE,OAAO,CAAC;AAC3E,MAAME,8BAA8B,GAAAD,OAAA,CAAAC,8BAAA,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;AAEzE,MAAMC,kCAAkC,GAAAF,OAAA,CAAAE,kCAAA,GAAG,UAAU;AACrD,MAAMC,sBAAsB,GAAAH,OAAA,CAAAG,sBAAA,GAAG,QAAQ;AAEvC,MAAMC,0BAA0B,GAAIC,GAAW,IAAa;EACxD,MAAM,CAACC,EAAE,EAAEC,IAAI,CAAC,GAAGF,GAAG,CAACG,KAAK,CAAC,GAAG,CAAC;EACjC,OAAO,GAAGF,EAAE,IAAIH,sBAAsB,GAAGI,IAAI,EAAE;AACnD,CAAC;AAACP,OAAA,CAAAI,0BAAA,GAAAA,0BAAA;AAEF,MAAMK,qCAAqC,GAAGA,CAC1CJ,GAAW,EACXK,mBAA2B,KAClB;EACT,MAAM,CAACJ,EAAE,EAAEC,IAAI,CAAC,GAAGF,GAAG,CAACG,KAAK,CAAC,GAAG,CAAC;EACjC,OAAO,GAAGF,EAAE,IAAIJ,kCAAkC,GAAGQ,mBAAmB,IAAIH,IAAI,EAAE;AACtF,CAAC;AAACP,OAAA,CAAAS,qCAAA,GAAAA,qCAAA;AAOF,MAAME,WAAW,GAAGA,CAAC;EAAEN,GAAG;EAAEO;AAAmC,CAAC,KAAa;EACzE,IAAI,CAACA,eAAe,EAAE;IAClB,OAAOR,0BAA0B,CAACC,GAAG,CAAC;EAC1C;EAEA,OAAOI,qCAAqC,CAACJ,GAAG,EAAE,IAAAQ,mBAAU,EAACD,eAAe,CAAC,CAAC;AAClF,CAAC;AAACZ,OAAA,CAAAW,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["export interface TransformHandlerEventPayload {\n body: {\n key: string;\n transformations: {\n width: number;\n };\n };\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -4,10 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _default = () => ({
|
|
9
8
|
bucket: process.env.S3_BUCKET,
|
|
10
9
|
region: process.env.AWS_REGION
|
|
11
10
|
});
|
|
11
|
+
exports.default = _default;
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
//# sourceMappingURL=getEnvironment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_default","bucket","process","env","S3_BUCKET","region","AWS_REGION","exports","default"],"sources":["getEnvironment.ts"],"sourcesContent":["export default () => ({\n bucket: process.env.S3_BUCKET as string,\n region: process.env.AWS_REGION as string\n});\n"],"mappings":";;;;;;eAAeA,CAAA,MAAO;EAClBC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC,SAAmB;EACvCC,MAAM,EAAEH,OAAO,CAACC,GAAG,CAACG;AACxB,CAAC,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAR,QAAA","ignoreList":[]}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
export interface ObjectParamsResponse {
|
|
2
2
|
Bucket: string;
|
|
3
3
|
Key: string;
|
|
4
|
-
}
|
|
4
|
+
}
|
|
5
5
|
/**
|
|
6
6
|
* Returns website's Bucket and file's Key values.
|
|
7
|
-
* @param filename
|
|
8
|
-
* @returns {{Bucket: string, Key: string}}
|
|
9
7
|
*/
|
|
8
|
+
declare const _default: (filename: string) => ObjectParamsResponse;
|
|
10
9
|
export default _default;
|