@webiny/api-file-manager 6.4.11 → 6.6.0-alpha.1

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 (256) hide show
  1. package/FileManagerAppFeature.d.ts +5 -0
  2. package/FileManagerAppFeature.js +21 -0
  3. package/FileManagerAppFeature.js.map +1 -0
  4. package/delivery/AssetDelivery/AssetRequest.d.ts +1 -1
  5. package/delivery/AssetDelivery/AssetRequest.js.map +1 -1
  6. package/delivery/AssetDeliveryRoute.d.ts +23 -0
  7. package/delivery/AssetDeliveryRoute.js +58 -0
  8. package/delivery/AssetDeliveryRoute.js.map +1 -0
  9. package/delivery/setupAssetDelivery.d.ts +1 -1
  10. package/delivery/setupAssetDelivery.js +1 -66
  11. package/delivery/setupAssetDelivery.js.map +1 -1
  12. package/domain/file/abstractions.d.ts +13 -5
  13. package/domain/file/abstractions.js +2 -2
  14. package/domain/file/abstractions.js.map +1 -1
  15. package/domain/file/file.model.d.ts +3 -3
  16. package/domain/file/file.model.js +10 -6
  17. package/domain/file/file.model.js.map +1 -1
  18. package/domain/settings/validation.js +1 -1
  19. package/domain/settings/validation.js.map +1 -1
  20. package/exports/api/file-manager/assetDelivery.d.ts +10 -0
  21. package/exports/api/file-manager/assetDelivery.js +8 -0
  22. package/exports/api/file-manager/file.d.ts +1 -0
  23. package/exports/api/file-manager/file.js +1 -0
  24. package/features/FileManagerFeature.js +6 -0
  25. package/features/FileManagerFeature.js.map +1 -1
  26. package/features/assetDelivery/Asset/Asset.d.ts +8 -0
  27. package/features/assetDelivery/Asset/Asset.js +14 -0
  28. package/features/assetDelivery/Asset/Asset.js.map +1 -0
  29. package/features/assetDelivery/Asset/abstractions.d.ts +10 -0
  30. package/features/assetDelivery/Asset/abstractions.js +5 -0
  31. package/features/assetDelivery/Asset/abstractions.js.map +1 -0
  32. package/features/assetDelivery/Asset/index.d.ts +1 -0
  33. package/features/assetDelivery/Asset/index.js +1 -0
  34. package/features/assetDelivery/FilesAssetRequestResolver.js +2 -2
  35. package/features/assetDelivery/FilesAssetRequestResolver.js.map +1 -1
  36. package/features/assetDelivery/ObjectKey/ObjectKey.d.ts +8 -0
  37. package/features/assetDelivery/ObjectKey/ObjectKey.js +28 -0
  38. package/features/assetDelivery/ObjectKey/ObjectKey.js.map +1 -0
  39. package/features/assetDelivery/ObjectKey/abstractions.d.ts +12 -0
  40. package/features/assetDelivery/ObjectKey/abstractions.js +5 -0
  41. package/features/assetDelivery/ObjectKey/abstractions.js.map +1 -0
  42. package/features/assetDelivery/ObjectKey/index.d.ts +1 -0
  43. package/features/assetDelivery/ObjectKey/index.js +1 -0
  44. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.d.ts +8 -0
  45. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.js +22 -0
  46. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.js.map +1 -0
  47. package/features/assetDelivery/StreamAssetReply/abstractions.d.ts +11 -0
  48. package/features/assetDelivery/StreamAssetReply/abstractions.js +5 -0
  49. package/features/assetDelivery/StreamAssetReply/abstractions.js.map +1 -0
  50. package/features/assetDelivery/StreamAssetReply/index.d.ts +1 -0
  51. package/features/assetDelivery/StreamAssetReply/index.js +1 -0
  52. package/features/assetDelivery/abstractions/AssetType.d.ts +17 -0
  53. package/features/assetDelivery/abstractions/AssetType.js +5 -0
  54. package/features/assetDelivery/abstractions/AssetType.js.map +1 -0
  55. package/features/assetDelivery/abstractions.d.ts +23 -12
  56. package/features/assetDelivery/abstractions.js.map +1 -1
  57. package/features/assetDelivery/assetTypes/image/AssetKeyGenerator.d.ts +12 -0
  58. package/features/assetDelivery/assetTypes/image/AssetKeyGenerator.js +30 -0
  59. package/features/assetDelivery/assetTypes/image/AssetKeyGenerator.js.map +1 -0
  60. package/features/assetDelivery/assetTypes/image/ImageAssetType.d.ts +9 -0
  61. package/features/assetDelivery/assetTypes/image/ImageAssetType.js +18 -0
  62. package/features/assetDelivery/assetTypes/image/ImageAssetType.js.map +1 -0
  63. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.d.ts +5 -0
  64. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.js +5 -0
  65. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.js.map +1 -0
  66. package/features/assetDelivery/assetTypes/image/SharpTransformer.d.ts +18 -0
  67. package/features/assetDelivery/assetTypes/image/SharpTransformer.js +47 -0
  68. package/features/assetDelivery/assetTypes/image/SharpTransformer.js.map +1 -0
  69. package/features/assetDelivery/assetTypes/image/WidthCollection.d.ts +8 -0
  70. package/features/assetDelivery/assetTypes/image/WidthCollection.js +22 -0
  71. package/features/assetDelivery/assetTypes/image/WidthCollection.js.map +1 -0
  72. package/features/assetDelivery/assetTypes/image/imageFormat.d.ts +26 -0
  73. package/features/assetDelivery/assetTypes/image/imageFormat.js +51 -0
  74. package/features/assetDelivery/assetTypes/image/imageFormat.js.map +1 -0
  75. package/features/assetDelivery/assetTypes/image/imageTypes.d.ts +39 -0
  76. package/features/assetDelivery/assetTypes/image/imageTypes.js +0 -0
  77. package/features/assetDelivery/assetTypes/image/index.d.ts +5 -0
  78. package/features/assetDelivery/assetTypes/image/index.js +4 -0
  79. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.d.ts +6 -0
  80. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.js +56 -0
  81. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.js.map +1 -0
  82. package/features/assetDelivery/assetTypes/image/transformImage.d.ts +59 -0
  83. package/features/assetDelivery/assetTypes/image/transformImage.js +146 -0
  84. package/features/assetDelivery/assetTypes/image/transformImage.js.map +1 -0
  85. package/features/assetDelivery/assetTypes/image/utils.d.ts +26 -0
  86. package/features/assetDelivery/assetTypes/image/utils.js +47 -0
  87. package/features/assetDelivery/assetTypes/image/utils.js.map +1 -0
  88. package/features/assetDelivery/feature.js +13 -7
  89. package/features/assetDelivery/feature.js.map +1 -1
  90. package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js +2 -2
  91. package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +1 -1
  92. package/features/assetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +1 -1
  93. package/features/assetDelivery/transformation/CallableContentsReader.d.ts +11 -0
  94. package/features/assetDelivery/transformation/CallableContentsReader.js +14 -0
  95. package/features/assetDelivery/transformation/CallableContentsReader.js.map +1 -0
  96. package/features/assetDelivery/transformation/TransformationAssetProcessor.d.ts +4 -6
  97. package/features/assetDelivery/transformation/TransformationAssetProcessor.js +13 -11
  98. package/features/assetDelivery/transformation/TransformationAssetProcessor.js.map +1 -1
  99. package/features/assetDelivery/transformation/index.d.ts +5 -0
  100. package/features/assetDelivery/transformation/index.js +4 -0
  101. package/features/extractMetadata/ExtractMetadataHandler.d.ts +11 -0
  102. package/features/extractMetadata/ExtractMetadataHandler.js +25 -0
  103. package/features/extractMetadata/ExtractMetadataHandler.js.map +1 -0
  104. package/features/extractMetadata/ExtractMetadataInput.d.ts +3 -0
  105. package/features/extractMetadata/ExtractMetadataInput.js +0 -0
  106. package/features/file/CreateFile/CreateFileRepository.d.ts +3 -3
  107. package/features/file/CreateFile/CreateFileRepository.js +6 -5
  108. package/features/file/CreateFile/CreateFileRepository.js.map +1 -1
  109. package/features/file/DeleteFile/DeleteFileRepository.d.ts +3 -3
  110. package/features/file/DeleteFile/DeleteFileRepository.js +6 -5
  111. package/features/file/DeleteFile/DeleteFileRepository.js.map +1 -1
  112. package/features/file/FileModelProvider.d.ts +31 -0
  113. package/features/file/FileModelProvider.js +22 -0
  114. package/features/file/FileModelProvider.js.map +1 -0
  115. package/features/file/FileUrlGenerator/FileUrlGenerator.d.ts +14 -0
  116. package/features/file/FileUrlGenerator/FileUrlGenerator.js +25 -0
  117. package/features/file/FileUrlGenerator/FileUrlGenerator.js.map +1 -0
  118. package/features/file/FileUrlGenerator/abstractions.d.ts +3 -3
  119. package/features/file/FileUrlGenerator/abstractions.js +1 -1
  120. package/features/file/FileUrlGenerator/abstractions.js.map +1 -1
  121. package/features/file/FileUrlGenerator/feature.d.ts +4 -0
  122. package/features/file/FileUrlGenerator/feature.js +11 -0
  123. package/features/file/FileUrlGenerator/feature.js.map +1 -0
  124. package/features/file/FileUrlGenerator/index.d.ts +1 -0
  125. package/features/file/FileUrlGenerator/index.js +1 -0
  126. package/features/file/GetFile/GetFileRepository.d.ts +3 -3
  127. package/features/file/GetFile/GetFileRepository.js +6 -5
  128. package/features/file/GetFile/GetFileRepository.js.map +1 -1
  129. package/features/file/GetFileByUrl/GetFileByUrlUseCase.d.ts +15 -0
  130. package/features/file/GetFileByUrl/GetFileByUrlUseCase.js +37 -0
  131. package/features/file/GetFileByUrl/GetFileByUrlUseCase.js.map +1 -0
  132. package/features/file/GetFileByUrl/abstractions.d.ts +18 -0
  133. package/features/file/GetFileByUrl/abstractions.js +5 -0
  134. package/features/file/GetFileByUrl/abstractions.js.map +1 -0
  135. package/features/file/GetFileByUrl/feature.d.ts +4 -0
  136. package/features/file/GetFileByUrl/feature.js +11 -0
  137. package/features/file/GetFileByUrl/feature.js.map +1 -0
  138. package/features/file/GetFileByUrl/index.d.ts +1 -0
  139. package/features/file/GetFileByUrl/index.js +1 -0
  140. package/features/file/ListFiles/ListFilesRepository.d.ts +3 -3
  141. package/features/file/ListFiles/ListFilesRepository.js +8 -7
  142. package/features/file/ListFiles/ListFilesRepository.js.map +1 -1
  143. package/features/file/ListImagesByTagTool/ListImagesByTagTool.d.ts +5 -0
  144. package/features/file/ListImagesByTagTool/ListImagesByTagTool.js +5 -0
  145. package/features/file/ListImagesByTagTool/ListImagesByTagTool.js.map +1 -1
  146. package/features/file/ListTags/ListTagsRepository.d.ts +3 -3
  147. package/features/file/ListTags/ListTagsRepository.js +7 -6
  148. package/features/file/ListTags/ListTagsRepository.js.map +1 -1
  149. package/features/file/UpdateFile/UpdateFileRepository.d.ts +3 -3
  150. package/features/file/UpdateFile/UpdateFileRepository.js +6 -5
  151. package/features/file/UpdateFile/UpdateFileRepository.js.map +1 -1
  152. package/features/settings/SettingsInstaller/SettingsInstaller.d.ts +3 -1
  153. package/features/settings/SettingsInstaller/SettingsInstaller.js +7 -4
  154. package/features/settings/SettingsInstaller/SettingsInstaller.js.map +1 -1
  155. package/features/settings/UpdateSettings/UpdateSettingsUseCase.js +0 -1
  156. package/features/settings/UpdateSettings/UpdateSettingsUseCase.js.map +1 -1
  157. package/features/upload/CompleteMultiPartUpload/abstractions.d.ts +12 -0
  158. package/features/upload/CompleteMultiPartUpload/abstractions.js +5 -0
  159. package/features/upload/CompleteMultiPartUpload/abstractions.js.map +1 -0
  160. package/features/upload/CompleteMultiPartUpload/index.d.ts +1 -0
  161. package/features/upload/CompleteMultiPartUpload/index.js +1 -0
  162. package/features/upload/CreateMultiPartUpload/abstractions.d.ts +14 -0
  163. package/features/upload/CreateMultiPartUpload/abstractions.js +5 -0
  164. package/features/upload/CreateMultiPartUpload/abstractions.js.map +1 -0
  165. package/features/upload/CreateMultiPartUpload/index.d.ts +1 -0
  166. package/features/upload/CreateMultiPartUpload/index.js +1 -0
  167. package/features/upload/GetUploadPayload/abstractions.d.ts +10 -0
  168. package/features/upload/GetUploadPayload/abstractions.js +5 -0
  169. package/features/upload/GetUploadPayload/abstractions.js.map +1 -0
  170. package/features/upload/GetUploadPayload/index.d.ts +1 -0
  171. package/features/upload/GetUploadPayload/index.js +1 -0
  172. package/features/upload/ReadFileMetadata/MetadataReader.d.ts +11 -0
  173. package/features/upload/ReadFileMetadata/MetadataReader.js +21 -0
  174. package/features/upload/ReadFileMetadata/MetadataReader.js.map +1 -0
  175. package/features/upload/ReadFileMetadata/abstractions.d.ts +15 -0
  176. package/features/upload/ReadFileMetadata/abstractions.js +5 -0
  177. package/features/upload/ReadFileMetadata/abstractions.js.map +1 -0
  178. package/features/upload/ReadFileMetadata/feature.d.ts +4 -0
  179. package/features/upload/ReadFileMetadata/feature.js +11 -0
  180. package/features/upload/ReadFileMetadata/feature.js.map +1 -0
  181. package/features/upload/ReadFileMetadata/index.d.ts +1 -0
  182. package/features/upload/ReadFileMetadata/index.js +1 -0
  183. package/features/upload/WriteFileMetadata/MetadataWriter.d.ts +14 -0
  184. package/features/upload/WriteFileMetadata/MetadataWriter.js +36 -0
  185. package/features/upload/WriteFileMetadata/MetadataWriter.js.map +1 -0
  186. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +11 -0
  187. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +20 -0
  188. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -0
  189. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +11 -0
  190. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +22 -0
  191. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -0
  192. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.d.ts +11 -0
  193. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.js +22 -0
  194. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.js.map +1 -0
  195. package/features/upload/WriteFileMetadata/abstractions.d.ts +9 -0
  196. package/features/upload/WriteFileMetadata/abstractions.js +5 -0
  197. package/features/upload/WriteFileMetadata/abstractions.js.map +1 -0
  198. package/features/upload/WriteFileMetadata/feature.d.ts +4 -0
  199. package/features/upload/WriteFileMetadata/feature.js +17 -0
  200. package/features/upload/WriteFileMetadata/feature.js.map +1 -0
  201. package/features/upload/index.d.ts +17 -0
  202. package/features/upload/index.js +10 -0
  203. package/features/upload/types.d.ts +28 -0
  204. package/features/upload/types.js +0 -0
  205. package/features/upload/utils/FileExtension.d.ts +6 -0
  206. package/features/upload/utils/FileExtension.js +16 -0
  207. package/features/upload/utils/FileExtension.js.map +1 -0
  208. package/features/upload/utils/FileKey.d.ts +11 -0
  209. package/features/upload/utils/FileKey.js +33 -0
  210. package/features/upload/utils/FileKey.js.map +1 -0
  211. package/features/upload/utils/FileNormalizer.d.ts +13 -0
  212. package/features/upload/utils/FileNormalizer.js +41 -0
  213. package/features/upload/utils/FileNormalizer.js.map +1 -0
  214. package/features/upload/utils/FileUploadModifier.d.ts +30 -0
  215. package/features/upload/utils/FileUploadModifier.js +39 -0
  216. package/features/upload/utils/FileUploadModifier.js.map +1 -0
  217. package/features/upload/utils/checkPermissions.d.ts +5 -0
  218. package/features/upload/utils/checkPermissions.js +22 -0
  219. package/features/upload/utils/checkPermissions.js.map +1 -0
  220. package/features/upload/utils/createFileNormalizerFromContext.d.ts +3 -0
  221. package/features/upload/utils/createFileNormalizerFromContext.js +9 -0
  222. package/features/upload/utils/createFileNormalizerFromContext.js.map +1 -0
  223. package/features/upload/utils/mimeTypes.d.ts +1 -0
  224. package/features/upload/utils/mimeTypes.js +9 -0
  225. package/features/upload/utils/mimeTypes.js.map +1 -0
  226. package/graphql/FmGraphQLSchema.d.ts +25 -0
  227. package/graphql/FmGraphQLSchema.js +452 -0
  228. package/graphql/FmGraphQLSchema.js.map +1 -0
  229. package/index.d.ts +3 -6
  230. package/index.js +3 -33
  231. package/index.js.map +1 -1
  232. package/package.json +23 -17
  233. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.d.ts +0 -9
  234. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.js +0 -13
  235. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.js.map +0 -1
  236. package/graphql/baseSchema.d.ts +0 -3
  237. package/graphql/baseSchema.js +0 -100
  238. package/graphql/baseSchema.js.map +0 -1
  239. package/graphql/createFilesTypeDefs.d.ts +0 -8
  240. package/graphql/createFilesTypeDefs.js +0 -191
  241. package/graphql/createFilesTypeDefs.js.map +0 -1
  242. package/graphql/filesSchema.d.ts +0 -4
  243. package/graphql/filesSchema.js +0 -97
  244. package/graphql/filesSchema.js.map +0 -1
  245. package/graphql/getFileByUrl.d.ts +0 -3
  246. package/graphql/getFileByUrl.js +0 -64
  247. package/graphql/getFileByUrl.js.map +0 -1
  248. package/graphql/index.d.ts +0 -4
  249. package/graphql/index.js +0 -48
  250. package/graphql/index.js.map +0 -1
  251. package/graphql/utils.d.ts +0 -11
  252. package/graphql/utils.js +0 -12
  253. package/graphql/utils.js.map +0 -1
  254. package/modelModifier/CmsModelModifier.d.ts +0 -26
  255. package/modelModifier/CmsModelModifier.js +0 -51
  256. package/modelModifier/CmsModelModifier.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"features/assetDelivery/transformation/TransformationAssetProcessor.js","sources":["../../../../src/features/assetDelivery/transformation/TransformationAssetProcessor.ts"],"sourcesContent":["import type { Asset } from \"~/delivery/AssetDelivery/Asset.js\";\nimport type { AssetRequest } from \"~/delivery/AssetDelivery/AssetRequest.js\";\nimport {\n AssetProcessor,\n AssetTransformationStrategy,\n type IAssetProcessor,\n type IAssetTransformationStrategy\n} from \"../abstractions.js\";\n\nexport class TransformationAssetProcessor implements IAssetProcessor {\n private strategy: IAssetTransformationStrategy;\n\n constructor(strategy: IAssetTransformationStrategy) {\n this.strategy = strategy;\n }\n\n async process(assetRequest: AssetRequest, asset: Asset): Promise<Asset> {\n const { original } = assetRequest.getOptions();\n\n if (original) {\n console.log(\"Skip transformations; original asset was requested.\");\n return asset;\n }\n\n return this.strategy.transform(assetRequest, asset);\n }\n}\n\nexport const TransformationAssetProcessorImpl = AssetProcessor.createImplementation({\n implementation: TransformationAssetProcessor,\n dependencies: [AssetTransformationStrategy]\n});\n"],"names":["TransformationAssetProcessor","strategy","assetRequest","asset","original","console","TransformationAssetProcessorImpl","AssetProcessor","AssetTransformationStrategy"],"mappings":";AASO,MAAMA;IAGT,YAAYC,QAAsC,CAAE;QAChD,IAAI,CAAC,QAAQ,GAAGA;IACpB;IAEA,MAAM,QAAQC,YAA0B,EAAEC,KAAY,EAAkB;QACpE,MAAM,EAAEC,QAAQ,EAAE,GAAGF,aAAa,UAAU;QAE5C,IAAIE,UAAU;YACVC,QAAQ,GAAG,CAAC;YACZ,OAAOF;QACX;QAEA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAACD,cAAcC;IACjD;AACJ;AAEO,MAAMG,mCAAmCC,eAAe,oBAAoB,CAAC;IAChF,gBAAgBP;IAChB,cAAc;QAACQ;KAA4B;AAC/C"}
1
+ {"version":3,"file":"features/assetDelivery/transformation/TransformationAssetProcessor.js","sources":["../../../../src/features/assetDelivery/transformation/TransformationAssetProcessor.ts"],"sourcesContent":["import type { Container } from \"@webiny/di\";\nimport type { Asset } from \"~/delivery/AssetDelivery/Asset.js\";\nimport type { AssetRequest } from \"~/delivery/AssetDelivery/AssetRequest.js\";\nimport type { IAssetProcessor } from \"../abstractions.js\";\nimport { AssetType } from \"../abstractions/AssetType.js\";\n\nexport class TransformationAssetProcessor implements IAssetProcessor {\n constructor(private readonly container: Container) {}\n\n async process(assetRequest: AssetRequest, asset: Asset): Promise<Asset> {\n const { original } = assetRequest.getOptions();\n\n if (original) {\n console.log(\"Skip transformations; original asset was requested.\");\n return asset;\n }\n\n const assetTypes = this.container.resolveAll(AssetType);\n const match = assetTypes.find(assetType => assetType.canHandle(asset));\n\n if (!match) {\n return asset;\n }\n\n try {\n const handler = this.container.resolve(match.getHandlerAbstraction());\n return handler.handle(assetRequest, asset);\n } catch {\n return asset;\n }\n }\n}\n"],"names":["TransformationAssetProcessor","container","assetRequest","asset","original","console","assetTypes","AssetType","match","assetType","handler"],"mappings":";AAMO,MAAMA;IACT,YAA6BC,SAAoB,CAAE;aAAtBA,SAAS,GAATA;IAAuB;IAEpD,MAAM,QAAQC,YAA0B,EAAEC,KAAY,EAAkB;QACpE,MAAM,EAAEC,QAAQ,EAAE,GAAGF,aAAa,UAAU;QAE5C,IAAIE,UAAU;YACVC,QAAQ,GAAG,CAAC;YACZ,OAAOF;QACX;QAEA,MAAMG,aAAa,IAAI,CAAC,SAAS,CAAC,UAAU,CAACC;QAC7C,MAAMC,QAAQF,WAAW,IAAI,CAACG,CAAAA,YAAaA,UAAU,SAAS,CAACN;QAE/D,IAAI,CAACK,OACD,OAAOL;QAGX,IAAI;YACA,MAAMO,UAAU,IAAI,CAAC,SAAS,CAAC,OAAO,CAACF,MAAM,qBAAqB;YAClE,OAAOE,QAAQ,MAAM,CAACR,cAAcC;QACxC,EAAE,OAAM;YACJ,OAAOA;QACX;IACJ;AACJ"}
@@ -0,0 +1,5 @@
1
+ export { CallableContentsReader } from "./CallableContentsReader.js";
2
+ export { WidthCollection } from "../assetTypes/image/WidthCollection.js";
3
+ export { type ImageFormat, SUPPORTED_OUTPUT_FORMATS, DEFAULT_IMAGE_QUALITY, contentTypeForFormat, formatFromContentType, resolveRequestedFormat, clampQuality } from "../assetTypes/image/imageFormat.js";
4
+ export { ImageAssetType, ImageAssetTypeHandler, AssetKeyGenerator, SUPPORTED_TRANSFORMABLE_IMAGES, getImageKey, getCropSignature, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix } from "../assetTypes/image/index.js";
5
+ export type { AssetCrop, AssetImageEdit } from "../assetTypes/image/index.js";
@@ -0,0 +1,4 @@
1
+ export { CallableContentsReader } from "./CallableContentsReader.js";
2
+ export { WidthCollection } from "../assetTypes/image/WidthCollection.js";
3
+ export { DEFAULT_IMAGE_QUALITY, SUPPORTED_OUTPUT_FORMATS, clampQuality, contentTypeForFormat, formatFromContentType, resolveRequestedFormat } from "../assetTypes/image/imageFormat.js";
4
+ export { AssetKeyGenerator, ImageAssetType, ImageAssetTypeHandler, SUPPORTED_TRANSFORMABLE_IMAGES, getCropSignature, getImageKey, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix } from "../assetTypes/image/index.js";
@@ -0,0 +1,11 @@
1
+ import { FileAfterCreateEventHandler } from "../file/CreateFile/events.js";
2
+ import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
3
+ declare class ExtractMetadataHandlerImpl implements FileAfterCreateEventHandler.Interface {
4
+ private readonly taskService;
5
+ constructor(taskService: TaskService.Interface);
6
+ handle(event: FileAfterCreateEventHandler.Event): Promise<void>;
7
+ }
8
+ export declare const ExtractMetadataHandler: typeof ExtractMetadataHandlerImpl & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<import("../file/CreateFile/events.js").FileAfterCreateEvent>>;
10
+ };
11
+ export {};
@@ -0,0 +1,25 @@
1
+ import { FileAfterCreateEventHandler } from "../file/CreateFile/events.js";
2
+ import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
3
+ class ExtractMetadataHandlerImpl {
4
+ constructor(taskService){
5
+ this.taskService = taskService;
6
+ }
7
+ async handle(event) {
8
+ const { file } = event.payload;
9
+ await this.taskService.trigger({
10
+ definition: "fileManagerExtractMetadata",
11
+ input: {
12
+ fileId: file.id
13
+ }
14
+ });
15
+ }
16
+ }
17
+ const ExtractMetadataHandler = FileAfterCreateEventHandler.createImplementation({
18
+ implementation: ExtractMetadataHandlerImpl,
19
+ dependencies: [
20
+ TaskService
21
+ ]
22
+ });
23
+ export { ExtractMetadataHandler };
24
+
25
+ //# sourceMappingURL=ExtractMetadataHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/extractMetadata/ExtractMetadataHandler.js","sources":["../../../src/features/extractMetadata/ExtractMetadataHandler.ts"],"sourcesContent":["import { FileAfterCreateEventHandler } from \"../file/CreateFile/events.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport type { ExtractMetadataInput } from \"./ExtractMetadataInput.js\";\n\nclass ExtractMetadataHandlerImpl implements FileAfterCreateEventHandler.Interface {\n constructor(private readonly taskService: TaskService.Interface) {}\n\n async handle(event: FileAfterCreateEventHandler.Event): Promise<void> {\n const { file } = event.payload;\n\n await this.taskService.trigger<ExtractMetadataInput>({\n definition: \"fileManagerExtractMetadata\",\n input: {\n fileId: file.id\n }\n });\n }\n}\n\nexport const ExtractMetadataHandler = FileAfterCreateEventHandler.createImplementation({\n implementation: ExtractMetadataHandlerImpl,\n dependencies: [TaskService]\n});\n"],"names":["ExtractMetadataHandlerImpl","taskService","event","file","ExtractMetadataHandler","FileAfterCreateEventHandler","TaskService"],"mappings":";;AAIA,MAAMA;IACF,YAA6BC,WAAkC,CAAE;aAApCA,WAAW,GAAXA;IAAqC;IAElE,MAAM,OAAOC,KAAwC,EAAiB;QAClE,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAM,OAAO;QAE9B,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAuB;YACjD,YAAY;YACZ,OAAO;gBACH,QAAQC,KAAK,EAAE;YACnB;QACJ;IACJ;AACJ;AAEO,MAAMC,yBAAyBC,4BAA4B,oBAAoB,CAAC;IACnF,gBAAgBL;IAChB,cAAc;QAACM;KAAY;AAC/B"}
@@ -0,0 +1,3 @@
1
+ export interface ExtractMetadataInput {
2
+ fileId: string;
3
+ }
@@ -1,12 +1,12 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { CreateFileRepository as RepositoryAbstraction } from "./abstractions.js";
3
3
  import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry";
4
- import { FileModel } from "../../../domain/file/abstractions.js";
4
+ import { FileModelProvider } from "../../../domain/file/abstractions.js";
5
5
  import type { File, FileInput } from "../../../domain/file/types.js";
6
6
  declare class CreateFileRepositoryImpl implements RepositoryAbstraction.Interface {
7
7
  private createEntry;
8
- private fileModel;
9
- constructor(createEntry: CreateEntryUseCase.Interface, fileModel: FileModel.Interface);
8
+ private fileModelProvider;
9
+ constructor(createEntry: CreateEntryUseCase.Interface, fileModelProvider: FileModelProvider.Interface);
10
10
  execute(data: FileInput): Promise<Result<File, RepositoryAbstraction.Error>>;
11
11
  }
12
12
  export declare const CreateFileRepository: typeof CreateFileRepositoryImpl & {
@@ -1,17 +1,18 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { CreateFileRepository } from "./abstractions.js";
3
3
  import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry";
4
- import { FileModel } from "../../../domain/file/abstractions.js";
4
+ import { FileModelProvider } from "../../../domain/file/abstractions.js";
5
5
  import { EntryToFileMapper } from "../shared/EntryToFileMapper.js";
6
6
  import { FileNotAuthorizedError, FilePersistenceError } from "../../../domain/file/errors.js";
7
7
  import { FileInputToEntryInputMapper } from "../shared/FileInputToEntryInputMapper.js";
8
8
  class CreateFileRepositoryImpl {
9
- constructor(createEntry, fileModel){
9
+ constructor(createEntry, fileModelProvider){
10
10
  this.createEntry = createEntry;
11
- this.fileModel = fileModel;
11
+ this.fileModelProvider = fileModelProvider;
12
12
  }
13
13
  async execute(data) {
14
- const result = await this.createEntry.execute(this.fileModel, FileInputToEntryInputMapper.toEntry(data));
14
+ const fileModel = await this.fileModelProvider.get();
15
+ const result = await this.createEntry.execute(fileModel, FileInputToEntryInputMapper.toEntry(data));
15
16
  if (result.isFail()) {
16
17
  if ("Cms/Entry/NotAuthorized" === result.error.code) return Result.fail(new FileNotAuthorizedError());
17
18
  return Result.fail(new FilePersistenceError(result.error));
@@ -24,7 +25,7 @@ const CreateFileRepository_CreateFileRepository = CreateFileRepository.createImp
24
25
  implementation: CreateFileRepositoryImpl,
25
26
  dependencies: [
26
27
  CreateEntryUseCase,
27
- FileModel
28
+ FileModelProvider
28
29
  ]
29
30
  });
30
31
  export { CreateFileRepository_CreateFileRepository as CreateFileRepository };
@@ -1 +1 @@
1
- {"version":3,"file":"features/file/CreateFile/CreateFileRepository.js","sources":["../../../../src/features/file/CreateFile/CreateFileRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CreateFileRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { CreateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/CreateEntry\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\nimport type { File, FileInput } from \"~/domain/file/types.js\";\nimport { EntryToFileMapper } from \"../shared/EntryToFileMapper.js\";\nimport { FileNotAuthorizedError, FilePersistenceError } from \"~/domain/file/errors.js\";\nimport { FileInputToEntryInputMapper } from \"~/features/file/shared/FileInputToEntryInputMapper.js\";\n\nclass CreateFileRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private createEntry: CreateEntryUseCase.Interface,\n private fileModel: FileModel.Interface\n ) {}\n\n async execute(data: FileInput): Promise<Result<File, RepositoryAbstraction.Error>> {\n const result = await this.createEntry.execute(\n this.fileModel,\n FileInputToEntryInputMapper.toEntry(data)\n );\n\n if (result.isFail()) {\n if (result.error.code === \"Cms/Entry/NotAuthorized\") {\n return Result.fail(new FileNotAuthorizedError());\n }\n\n return Result.fail(new FilePersistenceError(result.error));\n }\n\n const file = EntryToFileMapper.toFile(result.value);\n return Result.ok(file);\n }\n}\n\nexport const CreateFileRepository = RepositoryAbstraction.createImplementation({\n implementation: CreateFileRepositoryImpl,\n dependencies: [CreateEntryUseCase, FileModel]\n});\n"],"names":["CreateFileRepositoryImpl","createEntry","fileModel","data","result","FileInputToEntryInputMapper","Result","FileNotAuthorizedError","FilePersistenceError","file","EntryToFileMapper","CreateFileRepository","RepositoryAbstraction","CreateEntryUseCase","FileModel"],"mappings":";;;;;;;AASA,MAAMA;IACF,YACYC,WAAyC,EACzCC,SAA8B,CACxC;aAFUD,WAAW,GAAXA;aACAC,SAAS,GAATA;IACT;IAEH,MAAM,QAAQC,IAAe,EAAsD;QAC/E,MAAMC,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CACzC,IAAI,CAAC,SAAS,EACdC,4BAA4B,OAAO,CAACF;QAGxC,IAAIC,OAAO,MAAM,IAAI;YACjB,IAAIA,AAAsB,8BAAtBA,OAAO,KAAK,CAAC,IAAI,EACjB,OAAOE,OAAO,IAAI,CAAC,IAAIC;YAG3B,OAAOD,OAAO,IAAI,CAAC,IAAIE,qBAAqBJ,OAAO,KAAK;QAC5D;QAEA,MAAMK,OAAOC,kBAAkB,MAAM,CAACN,OAAO,KAAK;QAClD,OAAOE,OAAO,EAAE,CAACG;IACrB;AACJ;AAEO,MAAME,4CAAuBC,qBAAAA,oBAA0C,CAAC;IAC3E,gBAAgBZ;IAChB,cAAc;QAACa;QAAoBC;KAAU;AACjD"}
1
+ {"version":3,"file":"features/file/CreateFile/CreateFileRepository.js","sources":["../../../../src/features/file/CreateFile/CreateFileRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CreateFileRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { CreateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/CreateEntry\";\nimport { FileModelProvider } from \"~/domain/file/abstractions.js\";\nimport type { File, FileInput } from \"~/domain/file/types.js\";\nimport { EntryToFileMapper } from \"../shared/EntryToFileMapper.js\";\nimport { FileNotAuthorizedError, FilePersistenceError } from \"~/domain/file/errors.js\";\nimport { FileInputToEntryInputMapper } from \"~/features/file/shared/FileInputToEntryInputMapper.js\";\n\nclass CreateFileRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private createEntry: CreateEntryUseCase.Interface,\n private fileModelProvider: FileModelProvider.Interface\n ) {}\n\n async execute(data: FileInput): Promise<Result<File, RepositoryAbstraction.Error>> {\n const fileModel = await this.fileModelProvider.get();\n const result = await this.createEntry.execute(\n fileModel,\n FileInputToEntryInputMapper.toEntry(data)\n );\n\n if (result.isFail()) {\n if (result.error.code === \"Cms/Entry/NotAuthorized\") {\n return Result.fail(new FileNotAuthorizedError());\n }\n\n return Result.fail(new FilePersistenceError(result.error));\n }\n\n const file = EntryToFileMapper.toFile(result.value);\n return Result.ok(file);\n }\n}\n\nexport const CreateFileRepository = RepositoryAbstraction.createImplementation({\n implementation: CreateFileRepositoryImpl,\n dependencies: [CreateEntryUseCase, FileModelProvider]\n});\n"],"names":["CreateFileRepositoryImpl","createEntry","fileModelProvider","data","fileModel","result","FileInputToEntryInputMapper","Result","FileNotAuthorizedError","FilePersistenceError","file","EntryToFileMapper","CreateFileRepository","RepositoryAbstraction","CreateEntryUseCase","FileModelProvider"],"mappings":";;;;;;;AASA,MAAMA;IACF,YACYC,WAAyC,EACzCC,iBAA8C,CACxD;aAFUD,WAAW,GAAXA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAM,QAAQC,IAAe,EAAsD;QAC/E,MAAMC,YAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG;QAClD,MAAMC,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CACzCD,WACAE,4BAA4B,OAAO,CAACH;QAGxC,IAAIE,OAAO,MAAM,IAAI;YACjB,IAAIA,AAAsB,8BAAtBA,OAAO,KAAK,CAAC,IAAI,EACjB,OAAOE,OAAO,IAAI,CAAC,IAAIC;YAG3B,OAAOD,OAAO,IAAI,CAAC,IAAIE,qBAAqBJ,OAAO,KAAK;QAC5D;QAEA,MAAMK,OAAOC,kBAAkB,MAAM,CAACN,OAAO,KAAK;QAClD,OAAOE,OAAO,EAAE,CAACG;IACrB;AACJ;AAEO,MAAME,4CAAuBC,qBAAAA,oBAA0C,CAAC;IAC3E,gBAAgBb;IAChB,cAAc;QAACc;QAAoBC;KAAkB;AACzD"}
@@ -1,12 +1,12 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { DeleteEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry";
3
3
  import { DeleteFileRepository as RepositoryAbstraction } from "./abstractions.js";
4
- import { FileModel } from "../../../domain/file/abstractions.js";
4
+ import { FileModelProvider } from "../../../domain/file/abstractions.js";
5
5
  import { File } from "../../../domain/file/types.js";
6
6
  declare class DeleteFileRepositoryImpl implements RepositoryAbstraction.Interface {
7
7
  private deleteEntry;
8
- private fileModel;
9
- constructor(deleteEntry: DeleteEntryUseCase.Interface, fileModel: FileModel.Interface);
8
+ private fileModelProvider;
9
+ constructor(deleteEntry: DeleteEntryUseCase.Interface, fileModelProvider: FileModelProvider.Interface);
10
10
  delete(file: File): Promise<Result<void, RepositoryAbstraction.Error>>;
11
11
  }
12
12
  export declare const DeleteFileRepository: typeof DeleteFileRepositoryImpl & {
@@ -1,16 +1,17 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { DeleteEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry";
3
3
  import { DeleteFileRepository } from "./abstractions.js";
4
- import { FileModel } from "../../../domain/file/abstractions.js";
4
+ import { FileModelProvider } from "../../../domain/file/abstractions.js";
5
5
  import { FileNotFoundError, FilePersistenceError } from "../../../domain/file/errors.js";
6
6
  class DeleteFileRepositoryImpl {
7
- constructor(deleteEntry, fileModel){
7
+ constructor(deleteEntry, fileModelProvider){
8
8
  this.deleteEntry = deleteEntry;
9
- this.fileModel = fileModel;
9
+ this.fileModelProvider = fileModelProvider;
10
10
  }
11
11
  async delete(file) {
12
12
  const entryId = `${file.id}#0001`;
13
- const result = await this.deleteEntry.execute(this.fileModel, entryId);
13
+ const fileModel = await this.fileModelProvider.get();
14
+ const result = await this.deleteEntry.execute(fileModel, entryId);
14
15
  if (result.isFail()) {
15
16
  const error = result.error;
16
17
  if ("Cms/Entry/NotFound" === error.code) return Result.fail(new FileNotFoundError(file.id));
@@ -23,7 +24,7 @@ const DeleteFileRepository_DeleteFileRepository = DeleteFileRepository.createImp
23
24
  implementation: DeleteFileRepositoryImpl,
24
25
  dependencies: [
25
26
  DeleteEntryUseCase,
26
- FileModel
27
+ FileModelProvider
27
28
  ]
28
29
  });
29
30
  export { DeleteFileRepository_DeleteFileRepository as DeleteFileRepository };
@@ -1 +1 @@
1
- {"version":3,"file":"features/file/DeleteFile/DeleteFileRepository.js","sources":["../../../../src/features/file/DeleteFile/DeleteFileRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { DeleteEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry\";\nimport { DeleteFileRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\nimport { FileNotFoundError, FilePersistenceError } from \"~/domain/file/errors.js\";\nimport { File } from \"~/domain/file/types.js\";\n\nclass DeleteFileRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private deleteEntry: DeleteEntryUseCase.Interface,\n private fileModel: FileModel.Interface\n ) {}\n\n async delete(file: File): Promise<Result<void, RepositoryAbstraction.Error>> {\n // Files are not versioned, so we're always deleting the same revision\n const entryId = `${file.id}#0001`;\n\n const result = await this.deleteEntry.execute(this.fileModel, entryId);\n\n if (result.isFail()) {\n const error = result.error;\n if (error.code === \"Cms/Entry/NotFound\") {\n return Result.fail(new FileNotFoundError(file.id));\n }\n return Result.fail(new FilePersistenceError(result.error));\n }\n\n return Result.ok();\n }\n}\n\nexport const DeleteFileRepository = RepositoryAbstraction.createImplementation({\n implementation: DeleteFileRepositoryImpl,\n dependencies: [DeleteEntryUseCase, FileModel]\n});\n"],"names":["DeleteFileRepositoryImpl","deleteEntry","fileModel","file","entryId","result","error","Result","FileNotFoundError","FilePersistenceError","DeleteFileRepository","RepositoryAbstraction","DeleteEntryUseCase","FileModel"],"mappings":";;;;;AAOA,MAAMA;IACF,YACYC,WAAyC,EACzCC,SAA8B,CACxC;aAFUD,WAAW,GAAXA;aACAC,SAAS,GAATA;IACT;IAEH,MAAM,OAAOC,IAAU,EAAsD;QAEzE,MAAMC,UAAU,GAAGD,KAAK,EAAE,CAAC,KAAK,CAAC;QAEjC,MAAME,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAED;QAE9D,IAAIC,OAAO,MAAM,IAAI;YACjB,MAAMC,QAAQD,OAAO,KAAK;YAC1B,IAAIC,AAAe,yBAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIC,kBAAkBL,KAAK,EAAE;YAEpD,OAAOI,OAAO,IAAI,CAAC,IAAIE,qBAAqBJ,OAAO,KAAK;QAC5D;QAEA,OAAOE,OAAO,EAAE;IACpB;AACJ;AAEO,MAAMG,4CAAuBC,qBAAAA,oBAA0C,CAAC;IAC3E,gBAAgBX;IAChB,cAAc;QAACY;QAAoBC;KAAU;AACjD"}
1
+ {"version":3,"file":"features/file/DeleteFile/DeleteFileRepository.js","sources":["../../../../src/features/file/DeleteFile/DeleteFileRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { DeleteEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry\";\nimport { DeleteFileRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { FileModelProvider } from \"~/domain/file/abstractions.js\";\nimport { FileNotFoundError, FilePersistenceError } from \"~/domain/file/errors.js\";\nimport { File } from \"~/domain/file/types.js\";\n\nclass DeleteFileRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private deleteEntry: DeleteEntryUseCase.Interface,\n private fileModelProvider: FileModelProvider.Interface\n ) {}\n\n async delete(file: File): Promise<Result<void, RepositoryAbstraction.Error>> {\n // Files are not versioned, so we're always deleting the same revision\n const entryId = `${file.id}#0001`;\n\n const fileModel = await this.fileModelProvider.get();\n const result = await this.deleteEntry.execute(fileModel, entryId);\n\n if (result.isFail()) {\n const error = result.error;\n if (error.code === \"Cms/Entry/NotFound\") {\n return Result.fail(new FileNotFoundError(file.id));\n }\n return Result.fail(new FilePersistenceError(result.error));\n }\n\n return Result.ok();\n }\n}\n\nexport const DeleteFileRepository = RepositoryAbstraction.createImplementation({\n implementation: DeleteFileRepositoryImpl,\n dependencies: [DeleteEntryUseCase, FileModelProvider]\n});\n"],"names":["DeleteFileRepositoryImpl","deleteEntry","fileModelProvider","file","entryId","fileModel","result","error","Result","FileNotFoundError","FilePersistenceError","DeleteFileRepository","RepositoryAbstraction","DeleteEntryUseCase","FileModelProvider"],"mappings":";;;;;AAOA,MAAMA;IACF,YACYC,WAAyC,EACzCC,iBAA8C,CACxD;aAFUD,WAAW,GAAXA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAM,OAAOC,IAAU,EAAsD;QAEzE,MAAMC,UAAU,GAAGD,KAAK,EAAE,CAAC,KAAK,CAAC;QAEjC,MAAME,YAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG;QAClD,MAAMC,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACD,WAAWD;QAEzD,IAAIE,OAAO,MAAM,IAAI;YACjB,MAAMC,QAAQD,OAAO,KAAK;YAC1B,IAAIC,AAAe,yBAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIC,kBAAkBN,KAAK,EAAE;YAEpD,OAAOK,OAAO,IAAI,CAAC,IAAIE,qBAAqBJ,OAAO,KAAK;QAC5D;QAEA,OAAOE,OAAO,EAAE;IACpB;AACJ;AAEO,MAAMG,4CAAuBC,qBAAAA,oBAA0C,CAAC;IAC3E,gBAAgBZ;IAChB,cAAc;QAACa;QAAoBC;KAAkB;AACzD"}
@@ -0,0 +1,31 @@
1
+ import type { CmsModel } from "@webiny/api-headless-cms/types";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
3
+ import { FileModelProvider as Abstraction } from "../../domain/file/abstractions.js";
4
+ /**
5
+ * Resolves the tenant's `fmFile` model on demand.
6
+ *
7
+ * Two things this deliberately does NOT do, both of which the initializer it replaces did:
8
+ *
9
+ * - **No memoization.** `ModelsFetcher` already caches the model list per request (`ModelCache` is a
10
+ * per-request `createMemoryCache()`, see `ContentModelFeature`), so a second cache would buy only
11
+ * a repeat access-control check and an array lookup, at the cost of two lifetimes to reason about.
12
+ * - **No `withoutAuthorization`.** `fmFile` is a private model and `PrivateModelBuilder` sets
13
+ * `authorization: false`, which makes `AccessControl.modelAuthorizationDisabled()` short-circuit
14
+ * `canAccessModel()` to true for every identity — so the wrapper changed nothing. Confirmed
15
+ * against `filesSecurity.test.ts`, which exercises `fm.file`-only identities holding no CMS
16
+ * content-model permissions.
17
+ *
18
+ * `GetModelUseCase` is an ordinary constructor dependency: this provider is only constructed when a
19
+ * consumer first awaits `get()`, which happens during request handling — after the CMS has
20
+ * registered everything the use case needs. That timing is what previously forced the lazy
21
+ * `container.resolve()` inside the initializer.
22
+ */
23
+ declare class FileModelProviderImpl implements Abstraction.Interface {
24
+ private getModel;
25
+ constructor(getModel: GetModelUseCase.Interface);
26
+ get(): Promise<CmsModel>;
27
+ }
28
+ export declare const FileModelProvider: typeof FileModelProviderImpl & {
29
+ __abstraction: import("@webiny/di").Abstraction<import("~/domain/file/abstractions.js").IFileModelProvider>;
30
+ };
31
+ export {};
@@ -0,0 +1,22 @@
1
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
2
+ import { FileModelProvider } from "../../domain/file/abstractions.js";
3
+ import { FILE_MODEL_ID } from "../../domain/file/file.model.js";
4
+ class FileModelProviderImpl {
5
+ constructor(getModel){
6
+ this.getModel = getModel;
7
+ }
8
+ async get() {
9
+ const result = await this.getModel.execute(FILE_MODEL_ID);
10
+ if (result.isFail()) throw result.error;
11
+ return result.value;
12
+ }
13
+ }
14
+ const FileModelProvider_FileModelProvider = FileModelProvider.createImplementation({
15
+ implementation: FileModelProviderImpl,
16
+ dependencies: [
17
+ GetModelUseCase
18
+ ]
19
+ });
20
+ export { FileModelProvider_FileModelProvider as FileModelProvider };
21
+
22
+ //# sourceMappingURL=FileModelProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/file/FileModelProvider.js","sources":["../../../src/features/file/FileModelProvider.ts"],"sourcesContent":["import type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FileModelProvider as Abstraction } from \"~/domain/file/abstractions.js\";\nimport { FILE_MODEL_ID } from \"~/domain/file/file.model.js\";\n\n/**\n * Resolves the tenant's `fmFile` model on demand.\n *\n * Two things this deliberately does NOT do, both of which the initializer it replaces did:\n *\n * - **No memoization.** `ModelsFetcher` already caches the model list per request (`ModelCache` is a\n * per-request `createMemoryCache()`, see `ContentModelFeature`), so a second cache would buy only\n * a repeat access-control check and an array lookup, at the cost of two lifetimes to reason about.\n * - **No `withoutAuthorization`.** `fmFile` is a private model and `PrivateModelBuilder` sets\n * `authorization: false`, which makes `AccessControl.modelAuthorizationDisabled()` short-circuit\n * `canAccessModel()` to true for every identity — so the wrapper changed nothing. Confirmed\n * against `filesSecurity.test.ts`, which exercises `fm.file`-only identities holding no CMS\n * content-model permissions.\n *\n * `GetModelUseCase` is an ordinary constructor dependency: this provider is only constructed when a\n * consumer first awaits `get()`, which happens during request handling — after the CMS has\n * registered everything the use case needs. That timing is what previously forced the lazy\n * `container.resolve()` inside the initializer.\n */\nclass FileModelProviderImpl implements Abstraction.Interface {\n constructor(private getModel: GetModelUseCase.Interface) {}\n\n async get(): Promise<CmsModel> {\n const result = await this.getModel.execute(FILE_MODEL_ID);\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n }\n}\n\nexport const FileModelProvider = Abstraction.createImplementation({\n implementation: FileModelProviderImpl,\n dependencies: [GetModelUseCase]\n});\n"],"names":["FileModelProviderImpl","getModel","result","FILE_MODEL_ID","FileModelProvider","Abstraction","GetModelUseCase"],"mappings":";;;AAwBA,MAAMA;IACF,YAAoBC,QAAmC,CAAE;aAArCA,QAAQ,GAARA;IAAsC;IAE1D,MAAM,MAAyB;QAC3B,MAAMC,SAAS,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACC;QAC3C,IAAID,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;QAEtB,OAAOA,OAAO,KAAK;IACvB;AACJ;AAEO,MAAME,sCAAoBC,kBAAAA,oBAAgC,CAAC;IAC9D,gBAAgBL;IAChB,cAAc;QAACM;KAAgB;AACnC"}
@@ -0,0 +1,14 @@
1
+ import { FileUrlGenerator as Abstraction } from "./abstractions.js";
2
+ import { GetSettingsUseCase } from "../../../features/settings/GetSettings/abstractions.js";
3
+ import type { File } from "../../../domain/file/types.js";
4
+ declare class FileUrlGeneratorImpl implements Abstraction.Interface {
5
+ private readonly getSettings;
6
+ private srcPrefix;
7
+ constructor(getSettings: GetSettingsUseCase.Interface);
8
+ generateUrl(file: File): string;
9
+ init(): Promise<void>;
10
+ }
11
+ export declare const FileUrlGenerator: typeof FileUrlGeneratorImpl & {
12
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IFileUrlGenerator>;
13
+ };
14
+ export {};
@@ -0,0 +1,25 @@
1
+ import { FileUrlGenerator } from "./abstractions.js";
2
+ import { GetSettingsUseCase } from "../../settings/GetSettings/abstractions.js";
3
+ class FileUrlGeneratorImpl {
4
+ constructor(getSettings){
5
+ this.getSettings = getSettings;
6
+ this.srcPrefix = "";
7
+ }
8
+ generateUrl(file) {
9
+ return this.srcPrefix + file.key;
10
+ }
11
+ async init() {
12
+ const result = await this.getSettings.execute();
13
+ const settings = result.value;
14
+ this.srcPrefix = settings?.srcPrefix ?? "";
15
+ }
16
+ }
17
+ const FileUrlGenerator_FileUrlGenerator = FileUrlGenerator.createImplementation({
18
+ implementation: FileUrlGeneratorImpl,
19
+ dependencies: [
20
+ GetSettingsUseCase
21
+ ]
22
+ });
23
+ export { FileUrlGenerator_FileUrlGenerator as FileUrlGenerator };
24
+
25
+ //# sourceMappingURL=FileUrlGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/file/FileUrlGenerator/FileUrlGenerator.js","sources":["../../../../src/features/file/FileUrlGenerator/FileUrlGenerator.ts"],"sourcesContent":["import { FileUrlGenerator as Abstraction } from \"./abstractions.js\";\nimport { GetSettingsUseCase } from \"~/features/settings/GetSettings/abstractions.js\";\nimport type { File } from \"~/domain/file/types.js\";\n\nclass FileUrlGeneratorImpl implements Abstraction.Interface {\n private srcPrefix = \"\";\n\n public constructor(private readonly getSettings: GetSettingsUseCase.Interface) {}\n\n public generateUrl(file: File): string {\n return this.srcPrefix + file.key;\n }\n\n public async init(): Promise<void> {\n const result = await this.getSettings.execute();\n const settings = result.value;\n this.srcPrefix = settings?.srcPrefix ?? \"\";\n }\n}\n\nexport const FileUrlGenerator = Abstraction.createImplementation({\n implementation: FileUrlGeneratorImpl,\n dependencies: [GetSettingsUseCase]\n});\n"],"names":["FileUrlGeneratorImpl","getSettings","file","result","settings","FileUrlGenerator","Abstraction","GetSettingsUseCase"],"mappings":";;AAIA,MAAMA;IAGF,YAAoCC,WAAyC,CAAE;aAA3CA,WAAW,GAAXA;aAF5B,SAAS,GAAG;IAE4D;IAEzE,YAAYC,IAAU,EAAU;QACnC,OAAO,IAAI,CAAC,SAAS,GAAGA,KAAK,GAAG;IACpC;IAEA,MAAa,OAAsB;QAC/B,MAAMC,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO;QAC7C,MAAMC,WAAWD,OAAO,KAAK;QAC7B,IAAI,CAAC,SAAS,GAAGC,UAAU,aAAa;IAC5C;AACJ;AAEO,MAAMC,oCAAmBC,iBAAAA,oBAAgC,CAAC;IAC7D,gBAAgBN;IAChB,cAAc;QAACO;KAAmB;AACtC"}
@@ -1,9 +1,9 @@
1
- interface IFileUrlGenerator {
1
+ import type { File } from "../../../domain/file/types.js";
2
+ export interface IFileUrlGenerator {
2
3
  generateUrl(file: File): string;
4
+ init?(): Promise<void>;
3
5
  }
4
- /** Generate URLs for uploaded files. */
5
6
  export declare const FileUrlGenerator: import("@webiny/di").Abstraction<IFileUrlGenerator>;
6
7
  export declare namespace FileUrlGenerator {
7
8
  type Interface = IFileUrlGenerator;
8
9
  }
9
- export {};
@@ -1,5 +1,5 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
- const FileUrlGenerator = createAbstraction("IFileUrlGenerator");
2
+ const FileUrlGenerator = createAbstraction("FileManager/FileUrlGenerator");
3
3
  export { FileUrlGenerator };
4
4
 
5
5
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"features/file/FileUrlGenerator/abstractions.js","sources":["../../../../src/features/file/FileUrlGenerator/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\n\ninterface IFileUrlGenerator {\n generateUrl(file: File): string;\n}\n\n/** Generate URLs for uploaded files. */\nexport const FileUrlGenerator = createAbstraction<IFileUrlGenerator>(\"IFileUrlGenerator\");\n\nexport namespace FileUrlGenerator {\n export type Interface = IFileUrlGenerator;\n}\n"],"names":["FileUrlGenerator","createAbstraction"],"mappings":";AAOO,MAAMA,mBAAmBC,kBAAqC"}
1
+ {"version":3,"file":"features/file/FileUrlGenerator/abstractions.js","sources":["../../../../src/features/file/FileUrlGenerator/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { File } from \"~/domain/file/types.js\";\n\nexport interface IFileUrlGenerator {\n generateUrl(file: File): string;\n init?(): Promise<void>;\n}\n\n/* Generate URLs for uploaded files. */\nexport const FileUrlGenerator = createAbstraction<IFileUrlGenerator>(\n \"FileManager/FileUrlGenerator\"\n);\n\nexport namespace FileUrlGenerator {\n export type Interface = IFileUrlGenerator;\n}\n"],"names":["FileUrlGenerator","createAbstraction"],"mappings":";AASO,MAAMA,mBAAmBC,kBAC5B"}
@@ -0,0 +1,4 @@
1
+ export declare const FileUrlGeneratorFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { FileUrlGenerator } from "./FileUrlGenerator.js";
3
+ const FileUrlGeneratorFeature = createFeature({
4
+ name: "FileManager/FileUrlGenerator",
5
+ register (container) {
6
+ container.register(FileUrlGenerator).inSingletonScope();
7
+ }
8
+ });
9
+ export { FileUrlGeneratorFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/file/FileUrlGenerator/feature.js","sources":["../../../../src/features/file/FileUrlGenerator/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { FileUrlGenerator } from \"./FileUrlGenerator.js\";\n\nexport const FileUrlGeneratorFeature = createFeature({\n name: \"FileManager/FileUrlGenerator\",\n register(container) {\n container.register(FileUrlGenerator).inSingletonScope();\n }\n});\n"],"names":["FileUrlGeneratorFeature","createFeature","container","FileUrlGenerator"],"mappings":";;AAGO,MAAMA,0BAA0BC,cAAc;IACjD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,kBAAkB,gBAAgB;IACzD;AACJ"}
@@ -0,0 +1 @@
1
+ export { FileUrlGenerator } from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export { FileUrlGenerator } from "./abstractions.js";
@@ -1,12 +1,12 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById";
3
3
  import { GetFileRepository as RepositoryAbstraction } from "./abstractions.js";
4
- import { FileModel } from "../../../domain/file/abstractions.js";
4
+ import { FileModelProvider } from "../../../domain/file/abstractions.js";
5
5
  import type { File } from "../../../domain/file/types.js";
6
6
  declare class GetFileRepositoryImpl implements RepositoryAbstraction.Interface {
7
7
  private getEntryById;
8
- private fileModel;
9
- constructor(getEntryById: GetEntryByIdUseCase.Interface, fileModel: FileModel.Interface);
8
+ private fileModelProvider;
9
+ constructor(getEntryById: GetEntryByIdUseCase.Interface, fileModelProvider: FileModelProvider.Interface);
10
10
  execute(id: string): Promise<Result<File, RepositoryAbstraction.Error>>;
11
11
  }
12
12
  export declare const GetFileRepository: typeof GetFileRepositoryImpl & {
@@ -1,16 +1,17 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById";
3
3
  import { GetFileRepository } from "./abstractions.js";
4
- import { FileModel } from "../../../domain/file/abstractions.js";
4
+ import { FileModelProvider } from "../../../domain/file/abstractions.js";
5
5
  import { FileNotAuthorizedError, FileNotFoundError, FilePersistenceError } from "../../../domain/file/errors.js";
6
6
  import { EntryToFileMapper } from "../shared/EntryToFileMapper.js";
7
7
  class GetFileRepositoryImpl {
8
- constructor(getEntryById, fileModel){
8
+ constructor(getEntryById, fileModelProvider){
9
9
  this.getEntryById = getEntryById;
10
- this.fileModel = fileModel;
10
+ this.fileModelProvider = fileModelProvider;
11
11
  }
12
12
  async execute(id) {
13
- const result = await this.getEntryById.execute(this.fileModel, `${id}#0001`);
13
+ const fileModel = await this.fileModelProvider.get();
14
+ const result = await this.getEntryById.execute(fileModel, `${id}#0001`);
14
15
  if (result.isFail()) {
15
16
  const error = result.error;
16
17
  if ("Cms/Entry/NotFound" === error.code) return Result.fail(new FileNotFoundError(id));
@@ -25,7 +26,7 @@ const GetFileRepository_GetFileRepository = GetFileRepository.createImplementati
25
26
  implementation: GetFileRepositoryImpl,
26
27
  dependencies: [
27
28
  GetEntryByIdUseCase,
28
- FileModel
29
+ FileModelProvider
29
30
  ]
30
31
  });
31
32
  export { GetFileRepository_GetFileRepository as GetFileRepository };
@@ -1 +1 @@
1
- {"version":3,"file":"features/file/GetFile/GetFileRepository.js","sources":["../../../../src/features/file/GetFile/GetFileRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById\";\nimport { GetFileRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\nimport type { File } from \"~/domain/file/types.js\";\nimport {\n FileNotAuthorizedError,\n FileNotFoundError,\n FilePersistenceError\n} from \"~/domain/file/errors.js\";\nimport { EntryToFileMapper } from \"../shared/EntryToFileMapper.js\";\n\nclass GetFileRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private getEntryById: GetEntryByIdUseCase.Interface,\n private fileModel: FileModel.Interface\n ) {}\n\n async execute(id: string): Promise<Result<File, RepositoryAbstraction.Error>> {\n const result = await this.getEntryById.execute(this.fileModel, `${id}#0001`);\n\n if (result.isFail()) {\n const error = result.error;\n\n if (error.code === \"Cms/Entry/NotFound\") {\n return Result.fail(new FileNotFoundError(id));\n }\n\n if (error.code === \"Cms/Entry/NotAuthorized\") {\n return Result.fail(new FileNotAuthorizedError());\n }\n return Result.fail(new FilePersistenceError(result.error));\n }\n\n const file = EntryToFileMapper.toFile(result.value);\n\n return Result.ok(file);\n }\n}\n\nexport const GetFileRepository = RepositoryAbstraction.createImplementation({\n implementation: GetFileRepositoryImpl,\n dependencies: [GetEntryByIdUseCase, FileModel]\n});\n"],"names":["GetFileRepositoryImpl","getEntryById","fileModel","id","result","error","Result","FileNotFoundError","FileNotAuthorizedError","FilePersistenceError","file","EntryToFileMapper","GetFileRepository","RepositoryAbstraction","GetEntryByIdUseCase","FileModel"],"mappings":";;;;;;AAYA,MAAMA;IACF,YACYC,YAA2C,EAC3CC,SAA8B,CACxC;aAFUD,YAAY,GAAZA;aACAC,SAAS,GAATA;IACT;IAEH,MAAM,QAAQC,EAAU,EAAsD;QAC1E,MAAMC,SAAS,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAGD,GAAG,KAAK,CAAC;QAE3E,IAAIC,OAAO,MAAM,IAAI;YACjB,MAAMC,QAAQD,OAAO,KAAK;YAE1B,IAAIC,AAAe,yBAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIC,kBAAkBJ;YAG7C,IAAIE,AAAe,8BAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIE;YAE3B,OAAOF,OAAO,IAAI,CAAC,IAAIG,qBAAqBL,OAAO,KAAK;QAC5D;QAEA,MAAMM,OAAOC,kBAAkB,MAAM,CAACP,OAAO,KAAK;QAElD,OAAOE,OAAO,EAAE,CAACI;IACrB;AACJ;AAEO,MAAME,sCAAoBC,kBAAAA,oBAA0C,CAAC;IACxE,gBAAgBb;IAChB,cAAc;QAACc;QAAqBC;KAAU;AAClD"}
1
+ {"version":3,"file":"features/file/GetFile/GetFileRepository.js","sources":["../../../../src/features/file/GetFile/GetFileRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById\";\nimport { GetFileRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { FileModelProvider } from \"~/domain/file/abstractions.js\";\nimport type { File } from \"~/domain/file/types.js\";\nimport {\n FileNotAuthorizedError,\n FileNotFoundError,\n FilePersistenceError\n} from \"~/domain/file/errors.js\";\nimport { EntryToFileMapper } from \"../shared/EntryToFileMapper.js\";\n\nclass GetFileRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private getEntryById: GetEntryByIdUseCase.Interface,\n private fileModelProvider: FileModelProvider.Interface\n ) {}\n\n async execute(id: string): Promise<Result<File, RepositoryAbstraction.Error>> {\n const fileModel = await this.fileModelProvider.get();\n const result = await this.getEntryById.execute(fileModel, `${id}#0001`);\n\n if (result.isFail()) {\n const error = result.error;\n\n if (error.code === \"Cms/Entry/NotFound\") {\n return Result.fail(new FileNotFoundError(id));\n }\n\n if (error.code === \"Cms/Entry/NotAuthorized\") {\n return Result.fail(new FileNotAuthorizedError());\n }\n return Result.fail(new FilePersistenceError(result.error));\n }\n\n const file = EntryToFileMapper.toFile(result.value);\n\n return Result.ok(file);\n }\n}\n\nexport const GetFileRepository = RepositoryAbstraction.createImplementation({\n implementation: GetFileRepositoryImpl,\n dependencies: [GetEntryByIdUseCase, FileModelProvider]\n});\n"],"names":["GetFileRepositoryImpl","getEntryById","fileModelProvider","id","fileModel","result","error","Result","FileNotFoundError","FileNotAuthorizedError","FilePersistenceError","file","EntryToFileMapper","GetFileRepository","RepositoryAbstraction","GetEntryByIdUseCase","FileModelProvider"],"mappings":";;;;;;AAYA,MAAMA;IACF,YACYC,YAA2C,EAC3CC,iBAA8C,CACxD;aAFUD,YAAY,GAAZA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAM,QAAQC,EAAU,EAAsD;QAC1E,MAAMC,YAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG;QAClD,MAAMC,SAAS,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAACD,WAAW,GAAGD,GAAG,KAAK,CAAC;QAEtE,IAAIE,OAAO,MAAM,IAAI;YACjB,MAAMC,QAAQD,OAAO,KAAK;YAE1B,IAAIC,AAAe,yBAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIC,kBAAkBL;YAG7C,IAAIG,AAAe,8BAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIE;YAE3B,OAAOF,OAAO,IAAI,CAAC,IAAIG,qBAAqBL,OAAO,KAAK;QAC5D;QAEA,MAAMM,OAAOC,kBAAkB,MAAM,CAACP,OAAO,KAAK;QAElD,OAAOE,OAAO,EAAE,CAACI;IACrB;AACJ;AAEO,MAAME,sCAAoBC,kBAAAA,oBAA0C,CAAC;IACxE,gBAAgBd;IAChB,cAAc;QAACe;QAAqBC;KAAkB;AAC1D"}
@@ -0,0 +1,15 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { GetFileByUrlUseCase as Abstraction } from "./abstractions.js";
3
+ import { ListFilesUseCase } from "../../../features/file/ListFiles/abstractions.js";
4
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
5
+ import type { File } from "../../../domain/file/types.js";
6
+ declare class GetFileByUrlUseCaseImpl implements Abstraction.Interface {
7
+ private readonly identityContext;
8
+ private readonly listFiles;
9
+ constructor(identityContext: IdentityContext.Interface, listFiles: ListFilesUseCase.Interface);
10
+ execute(url: string): Promise<Result<File | undefined, Abstraction.Error>>;
11
+ }
12
+ export declare const GetFileByUrlUseCase: typeof GetFileByUrlUseCaseImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetFileByUrlUseCase>;
14
+ };
15
+ export {};
@@ -0,0 +1,37 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { GetFileByUrlUseCase } from "./abstractions.js";
3
+ import { ListFilesUseCase } from "../ListFiles/abstractions.js";
4
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
5
+ import { FileNotAuthorizedError } from "../../../domain/file/errors.js";
6
+ class GetFileByUrlUseCaseImpl {
7
+ constructor(identityContext, listFiles){
8
+ this.identityContext = identityContext;
9
+ this.listFiles = listFiles;
10
+ }
11
+ async execute(url) {
12
+ const identity = this.identityContext.getIdentity();
13
+ if (identity.isAnonymous()) return Result.fail(new FileNotAuthorizedError());
14
+ const { pathname } = new URL(url);
15
+ const query = pathname.replace("/files/", "").replace("/private/", "");
16
+ const filesResult = await this.listFiles.execute({
17
+ where: {
18
+ key: query
19
+ },
20
+ limit: 1
21
+ });
22
+ if (filesResult.isFail()) return Result.fail(filesResult.error);
23
+ const files = filesResult.value.items;
24
+ const file = files.length ? files[0] : void 0;
25
+ return Result.ok(file);
26
+ }
27
+ }
28
+ const GetFileByUrlUseCase_GetFileByUrlUseCase = GetFileByUrlUseCase.createImplementation({
29
+ implementation: GetFileByUrlUseCaseImpl,
30
+ dependencies: [
31
+ IdentityContext,
32
+ ListFilesUseCase
33
+ ]
34
+ });
35
+ export { GetFileByUrlUseCase_GetFileByUrlUseCase as GetFileByUrlUseCase };
36
+
37
+ //# sourceMappingURL=GetFileByUrlUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/file/GetFileByUrl/GetFileByUrlUseCase.js","sources":["../../../../src/features/file/GetFileByUrl/GetFileByUrlUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { GetFileByUrlUseCase as Abstraction } from \"./abstractions.js\";\nimport { ListFilesUseCase } from \"~/features/file/ListFiles/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { FileNotAuthorizedError } from \"~/domain/file/errors.js\";\nimport type { File } from \"~/domain/file/types.js\";\n\nclass GetFileByUrlUseCaseImpl implements Abstraction.Interface {\n public constructor(\n private readonly identityContext: IdentityContext.Interface,\n private readonly listFiles: ListFilesUseCase.Interface\n ) {}\n\n public async execute(url: string): Promise<Result<File | undefined, Abstraction.Error>> {\n const identity = this.identityContext.getIdentity();\n if (identity.isAnonymous()) {\n return Result.fail(new FileNotAuthorizedError());\n }\n\n const { pathname } = new URL(url);\n const query = pathname.replace(\"/files/\", \"\").replace(\"/private/\", \"\");\n\n const filesResult = await this.listFiles.execute({\n where: { key: query },\n limit: 1\n });\n\n if (filesResult.isFail()) {\n return Result.fail(filesResult.error);\n }\n\n const files = filesResult.value.items;\n const file = files.length ? files[0] : undefined;\n\n return Result.ok(file);\n }\n}\n\nexport const GetFileByUrlUseCase = Abstraction.createImplementation({\n implementation: GetFileByUrlUseCaseImpl,\n dependencies: [IdentityContext, ListFilesUseCase]\n});\n"],"names":["GetFileByUrlUseCaseImpl","identityContext","listFiles","url","identity","Result","FileNotAuthorizedError","pathname","URL","query","filesResult","files","file","undefined","GetFileByUrlUseCase","Abstraction","IdentityContext","ListFilesUseCase"],"mappings":";;;;;AAOA,MAAMA;IACF,YACqBC,eAA0C,EAC1CC,SAAqC,CACxD;aAFmBD,eAAe,GAAfA;aACAC,SAAS,GAATA;IAClB;IAEH,MAAa,QAAQC,GAAW,EAAwD;QACpF,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,IAAIA,SAAS,WAAW,IACpB,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAG3B,MAAM,EAAEC,QAAQ,EAAE,GAAG,IAAIC,IAAIL;QAC7B,MAAMM,QAAQF,SAAS,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,aAAa;QAEnE,MAAMG,cAAc,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7C,OAAO;gBAAE,KAAKD;YAAM;YACpB,OAAO;QACX;QAEA,IAAIC,YAAY,MAAM,IAClB,OAAOL,OAAO,IAAI,CAACK,YAAY,KAAK;QAGxC,MAAMC,QAAQD,YAAY,KAAK,CAAC,KAAK;QACrC,MAAME,OAAOD,MAAM,MAAM,GAAGA,KAAK,CAAC,EAAE,GAAGE;QAEvC,OAAOR,OAAO,EAAE,CAACO;IACrB;AACJ;AAEO,MAAME,0CAAsBC,oBAAAA,oBAAgC,CAAC;IAChE,gBAAgBf;IAChB,cAAc;QAACgB;QAAiBC;KAAiB;AACrD"}
@@ -0,0 +1,18 @@
1
+ import type { Result } from "@webiny/feature/api";
2
+ import type { File } from "../../../domain/file/types.js";
3
+ import { FileNotAuthorizedError } from "../../../domain/file/errors.js";
4
+ import type { FilePersistenceError } from "../../../domain/file/errors.js";
5
+ export interface IGetFileByUrlUseCase {
6
+ execute(url: string): Promise<Result<File | undefined, UseCaseError>>;
7
+ }
8
+ export interface IGetFileByUrlUseCaseErrors {
9
+ notAuthorized: FileNotAuthorizedError;
10
+ persistence: FilePersistenceError;
11
+ }
12
+ type UseCaseError = IGetFileByUrlUseCaseErrors[keyof IGetFileByUrlUseCaseErrors];
13
+ export declare const GetFileByUrlUseCase: import("@webiny/di").Abstraction<IGetFileByUrlUseCase>;
14
+ export declare namespace GetFileByUrlUseCase {
15
+ type Interface = IGetFileByUrlUseCase;
16
+ type Error = UseCaseError;
17
+ }
18
+ export {};
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const GetFileByUrlUseCase = createAbstraction("GetFileByUrlUseCase");
3
+ export { GetFileByUrlUseCase };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/file/GetFileByUrl/abstractions.js","sources":["../../../../src/features/file/GetFileByUrl/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { File } from \"~/domain/file/types.js\";\nimport { FileNotAuthorizedError } from \"~/domain/file/errors.js\";\nimport type { FilePersistenceError } from \"~/domain/file/errors.js\";\n\nexport interface IGetFileByUrlUseCase {\n execute(url: string): Promise<Result<File | undefined, UseCaseError>>;\n}\n\nexport interface IGetFileByUrlUseCaseErrors {\n notAuthorized: FileNotAuthorizedError;\n persistence: FilePersistenceError;\n}\n\ntype UseCaseError = IGetFileByUrlUseCaseErrors[keyof IGetFileByUrlUseCaseErrors];\n\n/* Retrieve a file by its public URL. */\nexport const GetFileByUrlUseCase = createAbstraction<IGetFileByUrlUseCase>(\"GetFileByUrlUseCase\");\n\nexport namespace GetFileByUrlUseCase {\n export type Interface = IGetFileByUrlUseCase;\n export type Error = UseCaseError;\n}\n"],"names":["GetFileByUrlUseCase","createAbstraction"],"mappings":";AAkBO,MAAMA,sBAAsBC,kBAAwC"}
@@ -0,0 +1,4 @@
1
+ export declare const GetFileByUrlFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { GetFileByUrlUseCase } from "./GetFileByUrlUseCase.js";
3
+ const GetFileByUrlFeature = createFeature({
4
+ name: "FileManager/GetFileByUrl",
5
+ register (container) {
6
+ container.register(GetFileByUrlUseCase);
7
+ }
8
+ });
9
+ export { GetFileByUrlFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/file/GetFileByUrl/feature.js","sources":["../../../../src/features/file/GetFileByUrl/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { GetFileByUrlUseCase } from \"./GetFileByUrlUseCase.js\";\n\nexport const GetFileByUrlFeature = createFeature({\n name: \"FileManager/GetFileByUrl\",\n register(container) {\n container.register(GetFileByUrlUseCase);\n }\n});\n"],"names":["GetFileByUrlFeature","createFeature","container","GetFileByUrlUseCase"],"mappings":";;AAGO,MAAMA,sBAAsBC,cAAc;IAC7C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -0,0 +1 @@
1
+ export { GetFileByUrlUseCase } from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export { GetFileByUrlUseCase } from "./abstractions.js";