@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.
Files changed (270) hide show
  1. package/FileManagerContextSetup.d.ts +13 -0
  2. package/FileManagerContextSetup.js +115 -0
  3. package/FileManagerContextSetup.js.map +1 -0
  4. package/README.md +1 -1
  5. package/cmsFileStorage/CmsFilesStorage.d.ts +27 -0
  6. package/cmsFileStorage/CmsFilesStorage.js +164 -0
  7. package/cmsFileStorage/CmsFilesStorage.js.map +1 -0
  8. package/cmsFileStorage/ListFilesWhereProcessor.d.ts +7 -0
  9. package/cmsFileStorage/ListFilesWhereProcessor.js +33 -0
  10. package/cmsFileStorage/ListFilesWhereProcessor.js.map +1 -0
  11. package/cmsFileStorage/ListTagsWhereProcessor.d.ts +7 -0
  12. package/cmsFileStorage/ListTagsWhereProcessor.js +33 -0
  13. package/cmsFileStorage/ListTagsWhereProcessor.js.map +1 -0
  14. package/cmsFileStorage/file.model.d.ts +6 -0
  15. package/cmsFileStorage/file.model.js +158 -0
  16. package/cmsFileStorage/file.model.js.map +1 -0
  17. package/contants.d.ts +1 -0
  18. package/contants.js +9 -0
  19. package/contants.js.map +1 -0
  20. package/createFileManager/files.crud.d.ts +3 -0
  21. package/createFileManager/files.crud.js +328 -0
  22. package/createFileManager/files.crud.js.map +1 -0
  23. package/createFileManager/index.d.ts +3 -0
  24. package/createFileManager/index.js +23 -0
  25. package/createFileManager/index.js.map +1 -0
  26. package/createFileManager/permissions/FilesPermissions.d.ts +4 -0
  27. package/createFileManager/permissions/FilesPermissions.js +11 -0
  28. package/createFileManager/permissions/FilesPermissions.js.map +1 -0
  29. package/createFileManager/permissions/SettingsPermissions.d.ts +4 -0
  30. package/createFileManager/permissions/SettingsPermissions.js +11 -0
  31. package/createFileManager/permissions/SettingsPermissions.js.map +1 -0
  32. package/createFileManager/settings.crud.d.ts +3 -0
  33. package/createFileManager/settings.crud.js +117 -0
  34. package/createFileManager/settings.crud.js.map +1 -0
  35. package/createFileManager/system.crud.d.ts +3 -0
  36. package/createFileManager/system.crud.js +88 -0
  37. package/createFileManager/system.crud.js.map +1 -0
  38. package/createFileManager/types.d.ts +16 -0
  39. package/createFileManager/types.js +7 -0
  40. package/createFileManager/types.js.map +1 -0
  41. package/delivery/AssetDelivery/AliasAssetRequestResolver.d.ts +11 -0
  42. package/delivery/AssetDelivery/AliasAssetRequestResolver.js +74 -0
  43. package/delivery/AssetDelivery/AliasAssetRequestResolver.js.map +1 -0
  44. package/delivery/AssetDelivery/Asset.d.ts +32 -0
  45. package/delivery/AssetDelivery/Asset.js +69 -0
  46. package/delivery/AssetDelivery/Asset.js.map +1 -0
  47. package/delivery/AssetDelivery/AssetDeliveryConfig.d.ts +63 -0
  48. package/delivery/AssetDelivery/AssetDeliveryConfig.js +102 -0
  49. package/delivery/AssetDelivery/AssetDeliveryConfig.js.map +1 -0
  50. package/delivery/AssetDelivery/AssetRequest.d.ts +25 -0
  51. package/delivery/AssetDelivery/AssetRequest.js +29 -0
  52. package/delivery/AssetDelivery/AssetRequest.js.map +1 -0
  53. package/delivery/AssetDelivery/FilesAssetRequestResolver.d.ts +6 -0
  54. package/delivery/AssetDelivery/FilesAssetRequestResolver.js +37 -0
  55. package/delivery/AssetDelivery/FilesAssetRequestResolver.js.map +1 -0
  56. package/delivery/AssetDelivery/NullAssetOutputStrategy.d.ts +4 -0
  57. package/delivery/AssetDelivery/NullAssetOutputStrategy.js +15 -0
  58. package/delivery/AssetDelivery/NullAssetOutputStrategy.js.map +1 -0
  59. package/delivery/AssetDelivery/NullAssetReply.d.ts +4 -0
  60. package/delivery/AssetDelivery/NullAssetReply.js +20 -0
  61. package/delivery/AssetDelivery/NullAssetReply.js.map +1 -0
  62. package/delivery/AssetDelivery/NullAssetResolver.d.ts +5 -0
  63. package/delivery/AssetDelivery/NullAssetResolver.js +14 -0
  64. package/delivery/AssetDelivery/NullAssetResolver.js.map +1 -0
  65. package/delivery/AssetDelivery/NullRequestResolver.d.ts +4 -0
  66. package/delivery/AssetDelivery/NullRequestResolver.js +14 -0
  67. package/delivery/AssetDelivery/NullRequestResolver.js.map +1 -0
  68. package/delivery/AssetDelivery/SetCacheControlHeaders.d.ts +8 -0
  69. package/delivery/AssetDelivery/SetCacheControlHeaders.js +25 -0
  70. package/delivery/AssetDelivery/SetCacheControlHeaders.js.map +1 -0
  71. package/delivery/AssetDelivery/SetResponseHeaders.d.ts +18 -0
  72. package/delivery/AssetDelivery/SetResponseHeaders.js +25 -0
  73. package/delivery/AssetDelivery/SetResponseHeaders.js.map +1 -0
  74. package/delivery/AssetDelivery/abstractions/AssetContentsReader.d.ts +6 -0
  75. package/delivery/AssetDelivery/abstractions/AssetContentsReader.js +7 -0
  76. package/delivery/AssetDelivery/abstractions/AssetContentsReader.js.map +1 -0
  77. package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.d.ts +4 -0
  78. package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.js +7 -0
  79. package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.js.map +1 -0
  80. package/delivery/AssetDelivery/abstractions/AssetProcessor.d.ts +4 -0
  81. package/delivery/AssetDelivery/abstractions/AssetProcessor.js +7 -0
  82. package/delivery/AssetDelivery/abstractions/AssetProcessor.js.map +1 -0
  83. package/delivery/AssetDelivery/abstractions/AssetReply.d.ts +25 -0
  84. package/delivery/AssetDelivery/abstractions/AssetReply.js +38 -0
  85. package/delivery/AssetDelivery/abstractions/AssetReply.js.map +1 -0
  86. package/delivery/AssetDelivery/abstractions/AssetRequestResolver.d.ts +5 -0
  87. package/delivery/AssetDelivery/abstractions/AssetRequestResolver.js +7 -0
  88. package/delivery/AssetDelivery/abstractions/AssetRequestResolver.js.map +1 -0
  89. package/delivery/AssetDelivery/abstractions/AssetResolver.d.ts +4 -0
  90. package/delivery/AssetDelivery/abstractions/AssetResolver.js +7 -0
  91. package/delivery/AssetDelivery/abstractions/AssetResolver.js.map +1 -0
  92. package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.d.ts +4 -0
  93. package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.js +7 -0
  94. package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.js.map +1 -0
  95. package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.d.ts +2 -0
  96. package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js +15 -0
  97. package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js.map +1 -0
  98. package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.d.ts +4 -0
  99. package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.js +7 -0
  100. package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.js.map +1 -0
  101. package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.d.ts +4 -0
  102. package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.js +26 -0
  103. package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.js.map +1 -0
  104. package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.d.ts +4 -0
  105. package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.js +15 -0
  106. package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.js.map +1 -0
  107. package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.d.ts +7 -0
  108. package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js +28 -0
  109. package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js.map +1 -0
  110. package/delivery/AssetDelivery/privateFiles/PrivateCache.d.ts +6 -0
  111. package/delivery/AssetDelivery/privateFiles/PrivateCache.js +28 -0
  112. package/delivery/AssetDelivery/privateFiles/PrivateCache.js.map +1 -0
  113. package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.d.ts +8 -0
  114. package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js +37 -0
  115. package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +1 -0
  116. package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.d.ts +13 -0
  117. package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js +63 -0
  118. package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +1 -0
  119. package/delivery/AssetDelivery/privateFiles/PublicCache.d.ts +6 -0
  120. package/delivery/AssetDelivery/privateFiles/PublicCache.js +28 -0
  121. package/delivery/AssetDelivery/privateFiles/PublicCache.js.map +1 -0
  122. package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.d.ts +7 -0
  123. package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js +27 -0
  124. package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js.map +1 -0
  125. package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.d.ts +7 -0
  126. package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js +27 -0
  127. package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js.map +1 -0
  128. package/delivery/AssetDelivery/privateFiles/internalIdentity.d.ts +7 -0
  129. package/delivery/AssetDelivery/privateFiles/internalIdentity.js +18 -0
  130. package/delivery/AssetDelivery/privateFiles/internalIdentity.js.map +1 -0
  131. package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.d.ts +4 -0
  132. package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js +14 -0
  133. package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js.map +1 -0
  134. package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.d.ts +4 -0
  135. package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js +14 -0
  136. package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js.map +1 -0
  137. package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.d.ts +6 -0
  138. package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.js +26 -0
  139. package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.js.map +1 -0
  140. package/delivery/index.d.ts +17 -0
  141. package/delivery/index.js +194 -0
  142. package/delivery/index.js.map +1 -0
  143. package/delivery/setupAssetDelivery.d.ts +6 -0
  144. package/delivery/setupAssetDelivery.js +128 -0
  145. package/delivery/setupAssetDelivery.js.map +1 -0
  146. package/enterprise/applyThreatScanning.d.ts +2 -0
  147. package/enterprise/applyThreatScanning.js +20 -0
  148. package/enterprise/applyThreatScanning.js.map +1 -0
  149. package/graphql/baseSchema.d.ts +3 -0
  150. package/graphql/baseSchema.js +121 -0
  151. package/graphql/baseSchema.js.map +1 -0
  152. package/graphql/createFilesTypeDefs.d.ts +7 -0
  153. package/graphql/createFilesTypeDefs.js +184 -0
  154. package/graphql/createFilesTypeDefs.js.map +1 -0
  155. package/graphql/filesSchema.d.ts +4 -0
  156. package/graphql/filesSchema.js +89 -0
  157. package/graphql/filesSchema.js.map +1 -0
  158. package/graphql/getFileByUrl.d.ts +3 -0
  159. package/graphql/getFileByUrl.js +78 -0
  160. package/graphql/getFileByUrl.js.map +1 -0
  161. package/graphql/index.d.ts +4 -0
  162. package/graphql/index.js +55 -0
  163. package/graphql/index.js.map +1 -0
  164. package/graphql/utils.d.ts +11 -0
  165. package/graphql/utils.js +24 -0
  166. package/graphql/utils.js.map +1 -0
  167. package/handlers/manage/imageManager.d.ts +14 -0
  168. package/handlers/manage/imageManager.js +75 -0
  169. package/handlers/manage/imageManager.js.map +1 -0
  170. package/handlers/manage/index.d.ts +5 -3
  171. package/handlers/manage/index.js +48 -59
  172. package/handlers/manage/index.js.map +1 -0
  173. package/handlers/{transform/utils.d.ts → manage/legacyUtils.d.ts} +2 -2
  174. package/handlers/{transform/utils.js → manage/legacyUtils.js} +7 -19
  175. package/handlers/manage/legacyUtils.js.map +1 -0
  176. package/handlers/manage/utils.d.ts +12 -0
  177. package/handlers/manage/utils.js +34 -0
  178. package/handlers/manage/utils.js.map +1 -0
  179. package/handlers/types.d.ts +8 -0
  180. package/handlers/types.js +7 -0
  181. package/handlers/types.js.map +1 -0
  182. package/handlers/utils/getEnvironment.js +2 -2
  183. package/handlers/utils/getEnvironment.js.map +1 -0
  184. package/handlers/utils/getObjectParams.d.ts +3 -4
  185. package/handlers/utils/getObjectParams.js +3 -7
  186. package/handlers/utils/getObjectParams.js.map +1 -0
  187. package/handlers/utils/index.d.ts +0 -1
  188. package/handlers/utils/index.js +3 -12
  189. package/handlers/utils/index.js.map +1 -0
  190. package/index.d.ts +10 -0
  191. package/index.js +76 -0
  192. package/index.js.map +1 -0
  193. package/modelModifier/CmsModelModifier.d.ts +26 -0
  194. package/modelModifier/CmsModelModifier.js +62 -0
  195. package/modelModifier/CmsModelModifier.js.map +1 -0
  196. package/package.json +26 -36
  197. package/plugins/FilePhysicalStoragePlugin.d.ts +22 -0
  198. package/plugins/{definitions/FilePhysicalStoragePlugin.js → FilePhysicalStoragePlugin.js} +4 -15
  199. package/plugins/FilePhysicalStoragePlugin.js.map +1 -0
  200. package/plugins/{definitions/FileStorageTransformPlugin.d.ts → FileStorageTransformPlugin.d.ts} +10 -10
  201. package/plugins/{definitions/FileStorageTransformPlugin.js → FileStorageTransformPlugin.js} +4 -16
  202. package/plugins/FileStorageTransformPlugin.js.map +1 -0
  203. package/plugins/index.d.ts +2 -2
  204. package/plugins/index.js +23 -18
  205. package/plugins/index.js.map +1 -0
  206. package/storage/FileStorage.d.ts +34 -0
  207. package/storage/FileStorage.js +90 -0
  208. package/storage/FileStorage.js.map +1 -0
  209. package/types/file.d.ts +49 -0
  210. package/types/file.js +7 -0
  211. package/types/file.js.map +1 -0
  212. package/types/file.lifecycle.d.ts +44 -0
  213. package/types/file.lifecycle.js +7 -0
  214. package/types/file.lifecycle.js.map +1 -0
  215. package/types.d.ts +104 -89
  216. package/types.js +25 -1
  217. package/types.js.map +1 -0
  218. package/handlers/download/index.d.ts +0 -3
  219. package/handlers/download/index.js +0 -125
  220. package/handlers/transform/index.d.ts +0 -3
  221. package/handlers/transform/index.js +0 -96
  222. package/handlers/transform/loaders/imageLoader.d.ts +0 -13
  223. package/handlers/transform/loaders/imageLoader.js +0 -106
  224. package/handlers/transform/loaders/index.d.ts +0 -13
  225. package/handlers/transform/loaders/index.js +0 -13
  226. package/handlers/transform/loaders/sanitizeImageTransformations.d.ts +0 -7
  227. package/handlers/transform/loaders/sanitizeImageTransformations.js +0 -51
  228. package/handlers/transform/managers/imageManager.d.ts +0 -9
  229. package/handlers/transform/managers/imageManager.js +0 -55
  230. package/handlers/transform/managers/index.d.ts +0 -9
  231. package/handlers/transform/managers/index.js +0 -13
  232. package/handlers/transform/optimizeImage.d.ts +0 -2
  233. package/handlers/transform/optimizeImage.js +0 -45
  234. package/handlers/transform/transformImage.d.ts +0 -9
  235. package/handlers/transform/transformImage.js +0 -30
  236. package/handlers/utils/createHandler.d.ts +0 -24
  237. package/handlers/utils/createHandler.js +0 -68
  238. package/plugins/crud/files/validation.d.ts +0 -3
  239. package/plugins/crud/files/validation.js +0 -41
  240. package/plugins/crud/files.crud.d.ts +0 -4
  241. package/plugins/crud/files.crud.js +0 -427
  242. package/plugins/crud/settings.crud.d.ts +0 -5
  243. package/plugins/crud/settings.crud.js +0 -115
  244. package/plugins/crud/system.crud.d.ts +0 -4
  245. package/plugins/crud/system.crud.js +0 -145
  246. package/plugins/crud/utils/checkBasePermissions.d.ts +0 -5
  247. package/plugins/crud/utils/checkBasePermissions.js +0 -33
  248. package/plugins/crud/utils/createFileModel.d.ts +0 -2
  249. package/plugins/crud/utils/createFileModel.js +0 -64
  250. package/plugins/crud/utils/lifecycleEvents.d.ts +0 -6
  251. package/plugins/crud/utils/lifecycleEvents.js +0 -33
  252. package/plugins/definitions/FilePhysicalStoragePlugin.d.ts +0 -22
  253. package/plugins/definitions/FilePlugin.d.ts +0 -133
  254. package/plugins/definitions/FilePlugin.js +0 -64
  255. package/plugins/definitions/FilesStorageOperationsProviderPlugin.d.ts +0 -9
  256. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js +0 -17
  257. package/plugins/definitions/InstallationPlugin.d.ts +0 -19
  258. package/plugins/definitions/InstallationPlugin.js +0 -40
  259. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.d.ts +0 -9
  260. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js +0 -17
  261. package/plugins/definitions/SystemStorageOperationsProviderPlugin.d.ts +0 -9
  262. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js +0 -17
  263. package/plugins/graphql.d.ts +0 -4
  264. package/plugins/graphql.js +0 -274
  265. package/plugins/storage/FileStorage.d.ts +0 -31
  266. package/plugins/storage/FileStorage.js +0 -95
  267. package/plugins/storage/index.d.ts +0 -4
  268. package/plugins/storage/index.js +0 -22
  269. package/utils.d.ts +0 -4
  270. 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>)[];
@@ -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 {};
@@ -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 { HandlerPlugin } from "@webiny/handler/types";
2
- declare const _default: () => HandlerPlugin;
3
- export default _default;
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>[];
@@ -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.default = void 0;
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 _managers = _interopRequireDefault(require("../transform/managers"));
17
-
18
- var _default = () => ({
19
- type: "handler",
20
- name: "handler-download-file",
21
-
22
- async handle(context) {
23
- const event = context.invocationArgs;
24
- const handler = (0, _utils.createHandler)(async event => {
25
- const keys = [];
26
-
27
- for (let i = 0; i < event.Records.length; i++) {
28
- const record = event.Records[i];
29
-
30
- if (typeof record.s3.object.key === "string") {
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
- const {
36
- region
37
- } = (0, _utils.getEnvironment)();
38
- const s3 = new _s.default({
39
- region
40
- });
41
-
42
- for (let i = 0; i < keys.length; i++) {
43
- const key = keys[i];
44
-
45
- const extension = _path.default.extname(key);
46
-
47
- for (let j = 0; j < _managers.default.length; j++) {
48
- const manager = _managers.default[j];
49
- const canProcess = manager.canProcess({
50
- s3,
51
- key,
52
- extension
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
- return await handler(event);
66
- }
67
-
68
- });
54
+ }
55
+ })];
56
+ };
57
+ exports.createManageFilePlugins = createManageFilePlugins;
69
58
 
70
- exports.default = _default;
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: any) => string;
6
- declare const getOptimizedTransformedImageKeyPrefix: (key: any) => string;
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 SUPPORTED_IMAGES = [".jpg", ".jpeg", ".png", ".svg", ".gif"];
13
- exports.SUPPORTED_IMAGES = SUPPORTED_IMAGES;
14
- const SUPPORTED_TRANSFORMABLE_IMAGES = [".jpg", ".jpeg", ".png"];
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
- exports.getImageKey = getImageKey;
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,8 @@
1
+ export interface TransformHandlerEventPayload {
2
+ body: {
3
+ key: string;
4
+ transformations: {
5
+ width: number;
6
+ };
7
+ };
8
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ //# sourceMappingURL=types.js.map
@@ -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
- exports.default = _default;
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
- declare const _default: (filename: any) => {
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;