@webiny/api-file-manager 0.0.0-unstable.fcdad0bc61 → 0.0.0-unstable.fdd9228b5d

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 (291) 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/{transform/managers → manage}/imageManager.d.ts +2 -3
  168. package/handlers/manage/imageManager.js +75 -0
  169. package/handlers/manage/imageManager.js.map +1 -0
  170. package/handlers/manage/index.d.ts +1 -1
  171. package/handlers/manage/index.js +7 -19
  172. package/handlers/manage/index.js.map +1 -1
  173. package/handlers/{transform/utils.js → manage/legacyUtils.js} +6 -18
  174. package/handlers/manage/legacyUtils.js.map +1 -0
  175. package/handlers/manage/utils.d.ts +12 -0
  176. package/handlers/manage/utils.js +34 -0
  177. package/handlers/manage/utils.js.map +1 -0
  178. package/handlers/types.d.ts +1 -1
  179. package/handlers/types.js +3 -1
  180. package/handlers/types.js.map +1 -1
  181. package/handlers/utils/getEnvironment.js +2 -2
  182. package/handlers/utils/getEnvironment.js.map +1 -1
  183. package/handlers/utils/getObjectParams.js +2 -4
  184. package/handlers/utils/getObjectParams.js.map +1 -1
  185. package/handlers/utils/index.js +2 -3
  186. package/handlers/utils/index.js.map +1 -1
  187. package/index.d.ts +10 -0
  188. package/index.js +76 -0
  189. package/index.js.map +1 -0
  190. package/modelModifier/CmsModelModifier.d.ts +26 -0
  191. package/modelModifier/CmsModelModifier.js +62 -0
  192. package/modelModifier/CmsModelModifier.js.map +1 -0
  193. package/package.json +26 -37
  194. package/plugins/{definitions/FilePhysicalStoragePlugin.d.ts → FilePhysicalStoragePlugin.d.ts} +2 -1
  195. package/plugins/{definitions/FilePhysicalStoragePlugin.js → FilePhysicalStoragePlugin.js} +3 -14
  196. package/plugins/FilePhysicalStoragePlugin.js.map +1 -0
  197. package/plugins/{definitions/FileStorageTransformPlugin.d.ts → FileStorageTransformPlugin.d.ts} +1 -1
  198. package/plugins/{definitions/FileStorageTransformPlugin.js → FileStorageTransformPlugin.js} +4 -16
  199. package/plugins/FileStorageTransformPlugin.js.map +1 -0
  200. package/plugins/index.d.ts +2 -2
  201. package/plugins/index.js +23 -18
  202. package/plugins/index.js.map +1 -1
  203. package/{plugins/storage → storage}/FileStorage.d.ts +10 -6
  204. package/storage/FileStorage.js +90 -0
  205. package/storage/FileStorage.js.map +1 -0
  206. package/types/file.d.ts +49 -0
  207. package/types/file.js +7 -0
  208. package/types/file.js.map +1 -0
  209. package/types/file.lifecycle.d.ts +44 -0
  210. package/types/file.lifecycle.js +7 -0
  211. package/types/file.lifecycle.js.map +1 -0
  212. package/types.d.ts +92 -81
  213. package/types.js +25 -1
  214. package/types.js.map +1 -1
  215. package/handlers/download/index.d.ts +0 -3
  216. package/handlers/download/index.js +0 -132
  217. package/handlers/download/index.js.map +0 -1
  218. package/handlers/transform/index.d.ts +0 -2
  219. package/handlers/transform/index.js +0 -91
  220. package/handlers/transform/index.js.map +0 -1
  221. package/handlers/transform/loaders/imageLoader.d.ts +0 -30
  222. package/handlers/transform/loaders/imageLoader.js +0 -105
  223. package/handlers/transform/loaders/imageLoader.js.map +0 -1
  224. package/handlers/transform/loaders/index.d.ts +0 -8
  225. package/handlers/transform/loaders/index.js +0 -13
  226. package/handlers/transform/loaders/index.js.map +0 -1
  227. package/handlers/transform/loaders/sanitizeImageTransformations.d.ts +0 -11
  228. package/handlers/transform/loaders/sanitizeImageTransformations.js +0 -58
  229. package/handlers/transform/loaders/sanitizeImageTransformations.js.map +0 -1
  230. package/handlers/transform/managers/imageManager.js +0 -63
  231. package/handlers/transform/managers/imageManager.js.map +0 -1
  232. package/handlers/transform/managers/index.d.ts +0 -5
  233. package/handlers/transform/managers/index.js +0 -13
  234. package/handlers/transform/managers/index.js.map +0 -1
  235. package/handlers/transform/optimizeImage.d.ts +0 -3
  236. package/handlers/transform/optimizeImage.js +0 -48
  237. package/handlers/transform/optimizeImage.js.map +0 -1
  238. package/handlers/transform/transformImage.d.ts +0 -10
  239. package/handlers/transform/transformImage.js +0 -30
  240. package/handlers/transform/transformImage.js.map +0 -1
  241. package/handlers/transform/utils.js.map +0 -1
  242. package/plugins/crud/files/validation.d.ts +0 -3
  243. package/plugins/crud/files/validation.js +0 -41
  244. package/plugins/crud/files/validation.js.map +0 -1
  245. package/plugins/crud/files.crud.d.ts +0 -4
  246. package/plugins/crud/files.crud.js +0 -431
  247. package/plugins/crud/files.crud.js.map +0 -1
  248. package/plugins/crud/settings.crud.d.ts +0 -5
  249. package/plugins/crud/settings.crud.js +0 -116
  250. package/plugins/crud/settings.crud.js.map +0 -1
  251. package/plugins/crud/system.crud.d.ts +0 -4
  252. package/plugins/crud/system.crud.js +0 -153
  253. package/plugins/crud/system.crud.js.map +0 -1
  254. package/plugins/crud/utils/checkBasePermissions.d.ts +0 -5
  255. package/plugins/crud/utils/checkBasePermissions.js +0 -33
  256. package/plugins/crud/utils/checkBasePermissions.js.map +0 -1
  257. package/plugins/crud/utils/createFileModel.d.ts +0 -5
  258. package/plugins/crud/utils/createFileModel.js +0 -77
  259. package/plugins/crud/utils/createFileModel.js.map +0 -1
  260. package/plugins/crud/utils/lifecycleEvents.d.ts +0 -6
  261. package/plugins/crud/utils/lifecycleEvents.js +0 -38
  262. package/plugins/crud/utils/lifecycleEvents.js.map +0 -1
  263. package/plugins/definitions/FilePhysicalStoragePlugin.js.map +0 -1
  264. package/plugins/definitions/FilePlugin.d.ts +0 -136
  265. package/plugins/definitions/FilePlugin.js +0 -70
  266. package/plugins/definitions/FilePlugin.js.map +0 -1
  267. package/plugins/definitions/FileStorageTransformPlugin.js.map +0 -1
  268. package/plugins/definitions/FilesStorageOperationsProviderPlugin.d.ts +0 -9
  269. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js +0 -17
  270. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js.map +0 -1
  271. package/plugins/definitions/InstallationPlugin.d.ts +0 -19
  272. package/plugins/definitions/InstallationPlugin.js +0 -42
  273. package/plugins/definitions/InstallationPlugin.js.map +0 -1
  274. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.d.ts +0 -9
  275. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js +0 -17
  276. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js.map +0 -1
  277. package/plugins/definitions/SystemStorageOperationsProviderPlugin.d.ts +0 -9
  278. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js +0 -17
  279. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js.map +0 -1
  280. package/plugins/graphql.d.ts +0 -4
  281. package/plugins/graphql.js +0 -290
  282. package/plugins/graphql.js.map +0 -1
  283. package/plugins/storage/FileStorage.js +0 -103
  284. package/plugins/storage/FileStorage.js.map +0 -1
  285. package/plugins/storage/index.d.ts +0 -4
  286. package/plugins/storage/index.js +0 -26
  287. package/plugins/storage/index.js.map +0 -1
  288. package/utils.d.ts +0 -4
  289. package/utils.js +0 -16
  290. package/utils.js.map +0 -1
  291. /package/handlers/{transform/utils.d.ts → manage/legacyUtils.d.ts} +0 -0
@@ -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":[]}
@@ -1,4 +1,4 @@
1
- import S3 from "aws-sdk/clients/s3";
1
+ import type { S3 } from "@webiny/aws-sdk/client-s3";
2
2
  export interface ImageManagerCanProcessParams {
3
3
  key: string;
4
4
  extension: string;
@@ -8,8 +8,7 @@ export interface ImageManagerProcessParams {
8
8
  key: string;
9
9
  extension: string;
10
10
  }
11
- declare const _default: {
11
+ export declare const imageManager: {
12
12
  canProcess: (params: ImageManagerCanProcessParams) => boolean;
13
13
  process({ s3, key, extension }: ImageManagerProcessParams): Promise<void>;
14
14
  };
15
- export default _default;
@@ -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":[]}
@@ -2,4 +2,4 @@ import { S3EventHandler } from "@webiny/handler-aws";
2
2
  /**
3
3
  * This handler must be run through @webiny/handler-aws/s3
4
4
  */
5
- export declare const createManageFilePlugins: () => S3EventHandler<void>[];
5
+ export declare const createManageFilePlugins: () => S3EventHandler<any>[];
@@ -1,21 +1,16 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.createManageFilePlugins = void 0;
9
-
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
-
11
+ var _imageManager = require("./imageManager");
18
12
  var _handlerAws = require("@webiny/handler-aws");
13
+ const managers = [_imageManager.imageManager];
19
14
 
20
15
  /**
21
16
  * This handler must be run through @webiny/handler-aws/s3
@@ -25,39 +20,31 @@ const createManageFilePlugins = () => {
25
20
  event
26
21
  }) => {
27
22
  const keys = [];
28
-
29
23
  for (let i = 0; i < event.Records.length; i++) {
30
24
  const record = event.Records[i];
31
-
32
25
  if (typeof record.s3.object.key === "string") {
33
26
  keys.push(record.s3.object.key);
34
27
  }
35
28
  }
36
-
37
29
  if (keys.length === 0) {
38
30
  return;
39
31
  }
40
-
41
32
  const {
42
33
  region
43
34
  } = (0, _utils.getEnvironment)();
44
- const s3 = new _s.default({
35
+ const s3 = new _clientS.S3({
45
36
  region
46
37
  });
47
-
48
38
  for (const key of keys) {
49
39
  const extension = _path.default.extname(key);
50
-
51
- for (const manager of _managers.default) {
40
+ for (const manager of managers) {
52
41
  const canProcess = manager.canProcess({
53
42
  key,
54
43
  extension
55
44
  });
56
-
57
45
  if (!canProcess) {
58
46
  continue;
59
47
  }
60
-
61
48
  await manager.process({
62
49
  s3,
63
50
  key,
@@ -67,5 +54,6 @@ const createManageFilePlugins = () => {
67
54
  }
68
55
  })];
69
56
  };
57
+ exports.createManageFilePlugins = createManageFilePlugins;
70
58
 
71
- exports.createManageFilePlugins = createManageFilePlugins;
59
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createManageFilePlugins","S3EventHandler","event","keys","i","Records","length","record","s3","object","key","push","region","getEnvironment","S3","extension","path","extname","manager","managers","canProcess","process"],"sources":["index.ts"],"sourcesContent":["import path from \"path\";\nimport S3 from \"aws-sdk/clients/s3\";\nimport { getEnvironment } from \"../utils\";\nimport managers from \"../transform/managers\";\nimport { S3EventHandler } from \"@webiny/handler-aws\";\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;;AACA;;AACA;;AACA;;AACA;;AAEA;AACA;AACA;AACO,MAAMA,uBAAuB,GAAG,MAAM;EACzC,OAAO,CACH,IAAIC,0BAAJ,CAAmB,OAAO;IAAEC;EAAF,CAAP,KAAqB;IACpC,MAAMC,IAAc,GAAG,EAAvB;;IACA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,KAAK,CAACG,OAAN,CAAcC,MAAlC,EAA0CF,CAAC,EAA3C,EAA+C;MAC3C,MAAMG,MAAM,GAAGL,KAAK,CAACG,OAAN,CAAcD,CAAd,CAAf;;MACA,IAAI,OAAOG,MAAM,CAACC,EAAP,CAAUC,MAAV,CAAiBC,GAAxB,KAAgC,QAApC,EAA8C;QAC1CP,IAAI,CAACQ,IAAL,CAAUJ,MAAM,CAACC,EAAP,CAAUC,MAAV,CAAiBC,GAA3B;MACH;IACJ;;IAED,IAAIP,IAAI,CAACG,MAAL,KAAgB,CAApB,EAAuB;MACnB;IACH;;IAED,MAAM;MAAEM;IAAF,IAAa,IAAAC,qBAAA,GAAnB;IACA,MAAML,EAAE,GAAG,IAAIM,UAAJ,CAAO;MAAEF;IAAF,CAAP,CAAX;;IAEA,KAAK,MAAMF,GAAX,IAAkBP,IAAlB,EAAwB;MACpB,MAAMY,SAAS,GAAGC,aAAA,CAAKC,OAAL,CAAaP,GAAb,CAAlB;;MAEA,KAAK,MAAMQ,OAAX,IAAsBC,iBAAtB,EAAgC;QAC5B,MAAMC,UAAU,GAAGF,OAAO,CAACE,UAAR,CAAmB;UAClCV,GADkC;UAElCK;QAFkC,CAAnB,CAAnB;;QAKA,IAAI,CAACK,UAAL,EAAiB;UACb;QACH;;QACD,MAAMF,OAAO,CAACG,OAAR,CAAgB;UAClBb,EADkB;UAElBE,GAFkB;UAGlBK;QAHkB,CAAhB,CAAN;MAKH;IACJ;EACJ,CAnCD,CADG,CAAP;AAsCH,CAvCM"}
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":[]}
@@ -1,35 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
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":[]}
@@ -2,7 +2,7 @@ export interface TransformHandlerEventPayload {
2
2
  body: {
3
3
  key: string;
4
4
  transformations: {
5
- width: string;
5
+ width: number;
6
6
  };
7
7
  };
8
8
  }
package/handlers/types.js CHANGED
@@ -2,4 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
- });
5
+ });
6
+
7
+ //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["export interface TransformHandlerEventPayload {\n body: {\n key: string;\n transformations: {\n width: string;\n };\n };\n}\n"],"mappings":""}
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
@@ -1 +1 @@
1
- {"version":3,"names":["bucket","process","env","S3_BUCKET","region","AWS_REGION"],"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":";;;;;;;eAAe,OAAO;EAClBA,MAAM,EAAEC,OAAO,CAACC,GAAR,CAAYC,SADF;EAElBC,MAAM,EAAEH,OAAO,CAACC,GAAR,CAAYG;AAFF,CAAP,C"}
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,14 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _getEnvironment = _interopRequireDefault(require("./getEnvironment"));
11
-
12
9
  /**
13
10
  * Returns website's Bucket and file's Key values.
14
11
  */
@@ -21,5 +18,6 @@ var _default = filename => {
21
18
  Key: `${filename}`
22
19
  };
23
20
  };
21
+ exports.default = _default;
24
22
 
25
- exports.default = _default;
23
+ //# sourceMappingURL=getObjectParams.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["filename","bucket","Bucket","getEnvironment","Key"],"sources":["getObjectParams.ts"],"sourcesContent":["import getEnvironment from \"./getEnvironment\";\n\nexport interface ObjectParamsResponse {\n Bucket: string;\n Key: string;\n}\n/**\n * Returns website's Bucket and file's Key values.\n */\nexport default (filename: string): ObjectParamsResponse => {\n const { bucket: Bucket } = getEnvironment();\n\n return {\n Bucket,\n Key: `${filename}`\n };\n};\n"],"mappings":";;;;;;;;;AAAA;;AAMA;AACA;AACA;eACgBA,QAAD,IAA4C;EACvD,MAAM;IAAEC,MAAM,EAAEC;EAAV,IAAqB,IAAAC,uBAAA,GAA3B;EAEA,OAAO;IACHD,MADG;IAEHE,GAAG,EAAG,GAAEJ,QAAS;EAFd,CAAP;AAIH,C"}
1
+ {"version":3,"names":["_getEnvironment","_interopRequireDefault","require","_default","filename","bucket","Bucket","getEnvironment","Key","exports","default"],"sources":["getObjectParams.ts"],"sourcesContent":["import getEnvironment from \"./getEnvironment\";\n\nexport interface ObjectParamsResponse {\n Bucket: string;\n Key: string;\n}\n/**\n * Returns website's Bucket and file's Key values.\n */\nexport default (filename: string): ObjectParamsResponse => {\n const { bucket: Bucket } = getEnvironment();\n\n return {\n Bucket,\n Key: `${filename}`\n };\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AAMA;AACA;AACA;AAFA,IAAAC,QAAA,GAGgBC,QAAgB,IAA2B;EACvD,MAAM;IAAEC,MAAM,EAAEC;EAAO,CAAC,GAAG,IAAAC,uBAAc,EAAC,CAAC;EAE3C,OAAO;IACHD,MAAM;IACNE,GAAG,EAAE,GAAGJ,QAAQ;EACpB,CAAC;AACL,CAAC;AAAAK,OAAA,CAAAC,OAAA,GAAAP,QAAA","ignoreList":[]}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -17,7 +16,7 @@ Object.defineProperty(exports, "getObjectParams", {
17
16
  return _getObjectParams.default;
18
17
  }
19
18
  });
20
-
21
19
  var _getEnvironment = _interopRequireDefault(require("./getEnvironment"));
20
+ var _getObjectParams = _interopRequireDefault(require("./getObjectParams"));
22
21
 
23
- var _getObjectParams = _interopRequireDefault(require("./getObjectParams"));
22
+ //# sourceMappingURL=index.js.map