@webiny/api-file-manager 6.4.5 → 6.6.0-alpha.0

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 (190) 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/AssetDeliveryRoute.d.ts +14 -0
  5. package/delivery/AssetDeliveryRoute.js +65 -0
  6. package/delivery/AssetDeliveryRoute.js.map +1 -0
  7. package/delivery/setupAssetDelivery.d.ts +1 -1
  8. package/delivery/setupAssetDelivery.js +1 -66
  9. package/delivery/setupAssetDelivery.js.map +1 -1
  10. package/domain/settings/validation.js +1 -1
  11. package/domain/settings/validation.js.map +1 -1
  12. package/exports/api/file-manager/assetDelivery.d.ts +10 -0
  13. package/exports/api/file-manager/assetDelivery.js +8 -0
  14. package/exports/api/file-manager/file.d.ts +1 -0
  15. package/exports/api/file-manager/file.js +1 -0
  16. package/features/FileManagerFeature.js +6 -0
  17. package/features/FileManagerFeature.js.map +1 -1
  18. package/features/FileModelContextualSchema.d.ts +13 -0
  19. package/features/FileModelContextualSchema.js +31 -0
  20. package/features/FileModelContextualSchema.js.map +1 -0
  21. package/features/assetDelivery/Asset/Asset.d.ts +8 -0
  22. package/features/assetDelivery/Asset/Asset.js +14 -0
  23. package/features/assetDelivery/Asset/Asset.js.map +1 -0
  24. package/features/assetDelivery/Asset/abstractions.d.ts +10 -0
  25. package/features/assetDelivery/Asset/abstractions.js +5 -0
  26. package/features/assetDelivery/Asset/abstractions.js.map +1 -0
  27. package/features/assetDelivery/Asset/index.d.ts +1 -0
  28. package/features/assetDelivery/Asset/index.js +1 -0
  29. package/features/assetDelivery/FilesAssetRequestResolver.js +2 -2
  30. package/features/assetDelivery/FilesAssetRequestResolver.js.map +1 -1
  31. package/features/assetDelivery/ObjectKey/ObjectKey.d.ts +8 -0
  32. package/features/assetDelivery/ObjectKey/ObjectKey.js +28 -0
  33. package/features/assetDelivery/ObjectKey/ObjectKey.js.map +1 -0
  34. package/features/assetDelivery/ObjectKey/abstractions.d.ts +12 -0
  35. package/features/assetDelivery/ObjectKey/abstractions.js +5 -0
  36. package/features/assetDelivery/ObjectKey/abstractions.js.map +1 -0
  37. package/features/assetDelivery/ObjectKey/index.d.ts +1 -0
  38. package/features/assetDelivery/ObjectKey/index.js +1 -0
  39. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.d.ts +8 -0
  40. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.js +22 -0
  41. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.js.map +1 -0
  42. package/features/assetDelivery/StreamAssetReply/abstractions.d.ts +11 -0
  43. package/features/assetDelivery/StreamAssetReply/abstractions.js +5 -0
  44. package/features/assetDelivery/StreamAssetReply/abstractions.js.map +1 -0
  45. package/features/assetDelivery/StreamAssetReply/index.d.ts +1 -0
  46. package/features/assetDelivery/StreamAssetReply/index.js +1 -0
  47. package/features/assetDelivery/abstractions.d.ts +23 -12
  48. package/features/assetDelivery/abstractions.js.map +1 -1
  49. package/features/assetDelivery/feature.js +6 -0
  50. package/features/assetDelivery/feature.js.map +1 -1
  51. package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js +2 -2
  52. package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +1 -1
  53. package/features/assetDelivery/transformation/AssetKeyGenerator.d.ts +9 -0
  54. package/features/assetDelivery/transformation/AssetKeyGenerator.js +24 -0
  55. package/features/assetDelivery/transformation/AssetKeyGenerator.js.map +1 -0
  56. package/features/assetDelivery/transformation/CallableContentsReader.d.ts +11 -0
  57. package/features/assetDelivery/transformation/CallableContentsReader.js +14 -0
  58. package/features/assetDelivery/transformation/CallableContentsReader.js.map +1 -0
  59. package/features/assetDelivery/transformation/WidthCollection.d.ts +8 -0
  60. package/features/assetDelivery/transformation/WidthCollection.js +22 -0
  61. package/features/assetDelivery/transformation/WidthCollection.js.map +1 -0
  62. package/features/assetDelivery/transformation/index.d.ts +4 -0
  63. package/features/assetDelivery/transformation/index.js +4 -0
  64. package/features/assetDelivery/transformation/utils.d.ts +9 -0
  65. package/features/assetDelivery/transformation/utils.js +31 -0
  66. package/features/assetDelivery/transformation/utils.js.map +1 -0
  67. package/features/extractMetadata/ExtractMetadataHandler.d.ts +11 -0
  68. package/features/extractMetadata/ExtractMetadataHandler.js +25 -0
  69. package/features/extractMetadata/ExtractMetadataHandler.js.map +1 -0
  70. package/features/extractMetadata/ExtractMetadataInput.d.ts +3 -0
  71. package/features/extractMetadata/ExtractMetadataInput.js +0 -0
  72. package/features/file/FileUrlGenerator/FileUrlGenerator.d.ts +14 -0
  73. package/features/file/FileUrlGenerator/FileUrlGenerator.js +25 -0
  74. package/features/file/FileUrlGenerator/FileUrlGenerator.js.map +1 -0
  75. package/features/file/FileUrlGenerator/abstractions.d.ts +3 -3
  76. package/features/file/FileUrlGenerator/abstractions.js +1 -1
  77. package/features/file/FileUrlGenerator/abstractions.js.map +1 -1
  78. package/features/file/FileUrlGenerator/feature.d.ts +4 -0
  79. package/features/file/FileUrlGenerator/feature.js +11 -0
  80. package/features/file/FileUrlGenerator/feature.js.map +1 -0
  81. package/features/file/FileUrlGenerator/index.d.ts +1 -0
  82. package/features/file/FileUrlGenerator/index.js +1 -0
  83. package/features/file/GetFileByUrl/GetFileByUrlUseCase.d.ts +15 -0
  84. package/features/file/GetFileByUrl/GetFileByUrlUseCase.js +37 -0
  85. package/features/file/GetFileByUrl/GetFileByUrlUseCase.js.map +1 -0
  86. package/features/file/GetFileByUrl/abstractions.d.ts +18 -0
  87. package/features/file/GetFileByUrl/abstractions.js +5 -0
  88. package/features/file/GetFileByUrl/abstractions.js.map +1 -0
  89. package/features/file/GetFileByUrl/feature.d.ts +4 -0
  90. package/features/file/GetFileByUrl/feature.js +11 -0
  91. package/features/file/GetFileByUrl/feature.js.map +1 -0
  92. package/features/file/GetFileByUrl/index.d.ts +1 -0
  93. package/features/file/GetFileByUrl/index.js +1 -0
  94. package/features/settings/SettingsInstaller/SettingsInstaller.d.ts +3 -1
  95. package/features/settings/SettingsInstaller/SettingsInstaller.js +7 -4
  96. package/features/settings/SettingsInstaller/SettingsInstaller.js.map +1 -1
  97. package/features/upload/CompleteMultiPartUpload/abstractions.d.ts +12 -0
  98. package/features/upload/CompleteMultiPartUpload/abstractions.js +5 -0
  99. package/features/upload/CompleteMultiPartUpload/abstractions.js.map +1 -0
  100. package/features/upload/CompleteMultiPartUpload/index.d.ts +1 -0
  101. package/features/upload/CompleteMultiPartUpload/index.js +1 -0
  102. package/features/upload/CreateMultiPartUpload/abstractions.d.ts +14 -0
  103. package/features/upload/CreateMultiPartUpload/abstractions.js +5 -0
  104. package/features/upload/CreateMultiPartUpload/abstractions.js.map +1 -0
  105. package/features/upload/CreateMultiPartUpload/index.d.ts +1 -0
  106. package/features/upload/CreateMultiPartUpload/index.js +1 -0
  107. package/features/upload/GetUploadPayload/abstractions.d.ts +10 -0
  108. package/features/upload/GetUploadPayload/abstractions.js +5 -0
  109. package/features/upload/GetUploadPayload/abstractions.js.map +1 -0
  110. package/features/upload/GetUploadPayload/index.d.ts +1 -0
  111. package/features/upload/GetUploadPayload/index.js +1 -0
  112. package/features/upload/ReadFileMetadata/MetadataReader.d.ts +11 -0
  113. package/features/upload/ReadFileMetadata/MetadataReader.js +21 -0
  114. package/features/upload/ReadFileMetadata/MetadataReader.js.map +1 -0
  115. package/features/upload/ReadFileMetadata/abstractions.d.ts +15 -0
  116. package/features/upload/ReadFileMetadata/abstractions.js +5 -0
  117. package/features/upload/ReadFileMetadata/abstractions.js.map +1 -0
  118. package/features/upload/ReadFileMetadata/feature.d.ts +4 -0
  119. package/features/upload/ReadFileMetadata/feature.js +11 -0
  120. package/features/upload/ReadFileMetadata/feature.js.map +1 -0
  121. package/features/upload/ReadFileMetadata/index.d.ts +1 -0
  122. package/features/upload/ReadFileMetadata/index.js +1 -0
  123. package/features/upload/WriteFileMetadata/MetadataWriter.d.ts +14 -0
  124. package/features/upload/WriteFileMetadata/MetadataWriter.js +36 -0
  125. package/features/upload/WriteFileMetadata/MetadataWriter.js.map +1 -0
  126. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +11 -0
  127. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +20 -0
  128. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -0
  129. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +11 -0
  130. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +22 -0
  131. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -0
  132. package/features/upload/WriteFileMetadata/abstractions.d.ts +9 -0
  133. package/features/upload/WriteFileMetadata/abstractions.js +5 -0
  134. package/features/upload/WriteFileMetadata/abstractions.js.map +1 -0
  135. package/features/upload/WriteFileMetadata/feature.d.ts +4 -0
  136. package/features/upload/WriteFileMetadata/feature.js +15 -0
  137. package/features/upload/WriteFileMetadata/feature.js.map +1 -0
  138. package/features/upload/index.d.ts +17 -0
  139. package/features/upload/index.js +10 -0
  140. package/features/upload/types.d.ts +28 -0
  141. package/features/upload/types.js +0 -0
  142. package/features/upload/utils/FileExtension.d.ts +6 -0
  143. package/features/upload/utils/FileExtension.js +16 -0
  144. package/features/upload/utils/FileExtension.js.map +1 -0
  145. package/features/upload/utils/FileKey.d.ts +11 -0
  146. package/features/upload/utils/FileKey.js +33 -0
  147. package/features/upload/utils/FileKey.js.map +1 -0
  148. package/features/upload/utils/FileNormalizer.d.ts +13 -0
  149. package/features/upload/utils/FileNormalizer.js +41 -0
  150. package/features/upload/utils/FileNormalizer.js.map +1 -0
  151. package/features/upload/utils/FileUploadModifier.d.ts +30 -0
  152. package/features/upload/utils/FileUploadModifier.js +39 -0
  153. package/features/upload/utils/FileUploadModifier.js.map +1 -0
  154. package/features/upload/utils/checkPermissions.d.ts +5 -0
  155. package/features/upload/utils/checkPermissions.js +22 -0
  156. package/features/upload/utils/checkPermissions.js.map +1 -0
  157. package/features/upload/utils/createFileNormalizerFromContext.d.ts +3 -0
  158. package/features/upload/utils/createFileNormalizerFromContext.js +9 -0
  159. package/features/upload/utils/createFileNormalizerFromContext.js.map +1 -0
  160. package/features/upload/utils/mimeTypes.d.ts +1 -0
  161. package/features/upload/utils/mimeTypes.js +9 -0
  162. package/features/upload/utils/mimeTypes.js.map +1 -0
  163. package/graphql/FmGraphQLSchema.d.ts +25 -0
  164. package/graphql/FmGraphQLSchema.js +451 -0
  165. package/graphql/FmGraphQLSchema.js.map +1 -0
  166. package/index.d.ts +3 -6
  167. package/index.js +3 -32
  168. package/index.js.map +1 -1
  169. package/package.json +24 -17
  170. package/graphql/baseSchema.d.ts +0 -3
  171. package/graphql/baseSchema.js +0 -100
  172. package/graphql/baseSchema.js.map +0 -1
  173. package/graphql/createFilesTypeDefs.d.ts +0 -8
  174. package/graphql/createFilesTypeDefs.js +0 -191
  175. package/graphql/createFilesTypeDefs.js.map +0 -1
  176. package/graphql/filesSchema.d.ts +0 -4
  177. package/graphql/filesSchema.js +0 -96
  178. package/graphql/filesSchema.js.map +0 -1
  179. package/graphql/getFileByUrl.d.ts +0 -3
  180. package/graphql/getFileByUrl.js +0 -61
  181. package/graphql/getFileByUrl.js.map +0 -1
  182. package/graphql/index.d.ts +0 -4
  183. package/graphql/index.js +0 -47
  184. package/graphql/index.js.map +0 -1
  185. package/graphql/utils.d.ts +0 -11
  186. package/graphql/utils.js +0 -12
  187. package/graphql/utils.js.map +0 -1
  188. package/modelModifier/CmsModelModifier.d.ts +0 -26
  189. package/modelModifier/CmsModelModifier.js +0 -51
  190. package/modelModifier/CmsModelModifier.js.map +0 -1
@@ -0,0 +1,5 @@
1
+ import { type Container } from "@webiny/feature/api";
2
+ export declare const FileManagerAppFeature: {
3
+ name: string;
4
+ register(container: Container): void;
5
+ };
@@ -0,0 +1,21 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { AssetDeliveryFeature } from "./features/assetDelivery/feature.js";
3
+ import { AssetDeliveryRoute } from "./delivery/AssetDeliveryRoute.js";
4
+ import { FileModel } from "./domain/file/file.model.js";
5
+ import { FmPermissionsFeature } from "./features/permissions/feature.js";
6
+ import { FileManagerFeature } from "./features/FileManagerFeature.js";
7
+ import { FileModelContextualSchema } from "./features/FileModelContextualSchema.js";
8
+ const FileManagerAppFeature = createFeature({
9
+ name: "FileManagerApp",
10
+ register (container) {
11
+ AssetDeliveryFeature.register(container);
12
+ container.register(AssetDeliveryRoute);
13
+ container.register(FileModel);
14
+ FmPermissionsFeature.register(container);
15
+ FileManagerFeature.register(container);
16
+ container.register(FileModelContextualSchema);
17
+ }
18
+ });
19
+ export { FileManagerAppFeature };
20
+
21
+ //# sourceMappingURL=FileManagerAppFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileManagerAppFeature.js","sources":["../src/FileManagerAppFeature.ts"],"sourcesContent":["import { type Container, createFeature } from \"@webiny/feature/api\";\nimport { AssetDeliveryFeature } from \"~/features/assetDelivery/feature.js\";\nimport { AssetDeliveryRoute } from \"./delivery/AssetDeliveryRoute.js\";\nimport { FileModel } from \"~/domain/file/file.model.js\";\nimport { FmPermissionsFeature } from \"~/features/permissions/feature.js\";\nimport { FileManagerFeature } from \"~/features/FileManagerFeature.js\";\nimport { FileModelContextualSchema } from \"~/features/FileModelContextualSchema.js\";\n\nexport const FileManagerAppFeature = createFeature({\n name: \"FileManagerApp\",\n register(container: Container) {\n AssetDeliveryFeature.register(container);\n container.register(AssetDeliveryRoute);\n container.register(FileModel);\n FmPermissionsFeature.register(container);\n FileManagerFeature.register(container);\n container.register(FileModelContextualSchema);\n }\n});\n"],"names":["FileManagerAppFeature","createFeature","container","AssetDeliveryFeature","AssetDeliveryRoute","FileModel","FmPermissionsFeature","FileManagerFeature","FileModelContextualSchema"],"mappings":";;;;;;;AAQO,MAAMA,wBAAwBC,cAAc;IAC/C,MAAM;IACN,UAASC,SAAoB;QACzBC,qBAAqB,QAAQ,CAACD;QAC9BA,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBC,qBAAqB,QAAQ,CAACJ;QAC9BK,mBAAmB,QAAQ,CAACL;QAC5BA,UAAU,QAAQ,CAACM;IACvB;AACJ"}
@@ -0,0 +1,14 @@
1
+ import { HttpRoute } from "@webiny/event-handler-core";
2
+ import type { IHttpRequest, IHttpResponse } from "@webiny/event-handler-core";
3
+ import type { Container } from "@webiny/di";
4
+ declare class AssetDeliveryRouteImpl implements HttpRoute.Interface {
5
+ private container;
6
+ readonly method = "GET";
7
+ readonly path = "/files/*";
8
+ constructor(container: Container);
9
+ handle(request: IHttpRequest): Promise<IHttpResponse>;
10
+ }
11
+ export declare const AssetDeliveryRoute: typeof AssetDeliveryRouteImpl & {
12
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/event-handler-core").IHttpRoute>;
13
+ };
14
+ export {};
@@ -0,0 +1,65 @@
1
+ import { HttpRoute, RequestContainer } from "@webiny/event-handler-core";
2
+ import { AssetOutputStrategy, AssetProcessor, AssetRequestResolver, AssetResolver } from "../features/assetDelivery/abstractions.js";
3
+ const NO_CACHE_HEADERS = {
4
+ "content-type": "application/json",
5
+ "cache-control": "no-cache, no-store, must-revalidate"
6
+ };
7
+ class AssetDeliveryRouteImpl {
8
+ constructor(container){
9
+ this.container = container;
10
+ this.method = "GET";
11
+ this.path = "/files/*";
12
+ }
13
+ async handle(request) {
14
+ const requestResolver = this.container.resolve(AssetRequestResolver);
15
+ const assetResolver = this.container.resolve(AssetResolver);
16
+ const assetProcessor = this.container.resolve(AssetProcessor);
17
+ const outputStrategy = this.container.resolve(AssetOutputStrategy);
18
+ const fakeRequest = {
19
+ url: request.path,
20
+ params: {
21
+ "*": request.path.replace("/files/", "")
22
+ },
23
+ query: request.query ?? {},
24
+ headers: request.headers ?? {}
25
+ };
26
+ const resolvedRequest = await requestResolver.resolve(fakeRequest);
27
+ if (!resolvedRequest) return {
28
+ statusCode: 404,
29
+ headers: NO_CACHE_HEADERS,
30
+ body: JSON.stringify({
31
+ error: "Unable to resolve the request!"
32
+ })
33
+ };
34
+ const resolvedAsset = await assetResolver.resolve(resolvedRequest);
35
+ if (!resolvedAsset) return {
36
+ statusCode: 404,
37
+ headers: NO_CACHE_HEADERS,
38
+ body: JSON.stringify({
39
+ error: "Asset not found!"
40
+ })
41
+ };
42
+ resolvedAsset.setOutputStrategy(outputStrategy);
43
+ const processedAsset = await assetProcessor.process(resolvedRequest, resolvedAsset);
44
+ const assetReply = await processedAsset.output();
45
+ const rawHeaders = assetReply.getHeaders().getHeaders();
46
+ const headers = {};
47
+ for (const [k, v] of Object.entries(rawHeaders))if (void 0 !== v) headers[k] = String(v);
48
+ const body = await assetReply.getBody();
49
+ const statusCode = assetReply.getCode();
50
+ return {
51
+ statusCode,
52
+ headers,
53
+ body: body ?? ""
54
+ };
55
+ }
56
+ }
57
+ const AssetDeliveryRoute = HttpRoute.createImplementation({
58
+ implementation: AssetDeliveryRouteImpl,
59
+ dependencies: [
60
+ RequestContainer
61
+ ]
62
+ });
63
+ export { AssetDeliveryRoute };
64
+
65
+ //# sourceMappingURL=AssetDeliveryRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery/AssetDeliveryRoute.js","sources":["../../src/delivery/AssetDeliveryRoute.ts"],"sourcesContent":["import { HttpRoute, RequestContainer } from \"@webiny/event-handler-core\";\nimport type { IHttpRequest, IHttpResponse } from \"@webiny/event-handler-core\";\nimport type { Container } from \"@webiny/di\";\nimport {\n AssetRequestResolver,\n AssetResolver,\n AssetProcessor,\n AssetOutputStrategy\n} from \"~/features/assetDelivery/abstractions.js\";\n\nconst NO_CACHE_HEADERS = {\n \"content-type\": \"application/json\",\n \"cache-control\": \"no-cache, no-store, must-revalidate\"\n};\n\nclass AssetDeliveryRouteImpl implements HttpRoute.Interface {\n readonly method = \"GET\";\n readonly path = \"/files/*\";\n\n constructor(private container: Container) {}\n\n async handle(request: IHttpRequest): Promise<IHttpResponse> {\n // Resolve asset-delivery collaborators lazily (request time), not as constructor deps.\n // HttpRouter eagerly constructs every route to match paths, and AssetProcessor's\n // PrivateFilesAssetProcessor decorator pulls in GetFileUseCase -> CMS entry repositories\n // that depend on EntryFromStorageTransform, which is only registered while a CMS GraphQL\n // request is in flight. Resolving here keeps route construction cheap so non-asset\n // requests (e.g. /graphql) don't trigger that chain before it is registered.\n const requestResolver = this.container.resolve(AssetRequestResolver);\n const assetResolver = this.container.resolve(AssetResolver);\n const assetProcessor = this.container.resolve(AssetProcessor);\n const outputStrategy = this.container.resolve(AssetOutputStrategy);\n\n // Reconstruct a minimal request object compatible with IAssetRequestResolver\n const fakeRequest = {\n url: request.path,\n params: { \"*\": request.path.replace(\"/files/\", \"\") },\n query: request.query ?? {},\n headers: request.headers ?? {}\n };\n\n const resolvedRequest = await requestResolver.resolve(fakeRequest as any);\n if (!resolvedRequest) {\n return {\n statusCode: 404,\n headers: NO_CACHE_HEADERS,\n body: JSON.stringify({ error: \"Unable to resolve the request!\" })\n };\n }\n\n const resolvedAsset = await assetResolver.resolve(resolvedRequest);\n if (!resolvedAsset) {\n return {\n statusCode: 404,\n headers: NO_CACHE_HEADERS,\n body: JSON.stringify({ error: \"Asset not found!\" })\n };\n }\n\n resolvedAsset.setOutputStrategy(outputStrategy);\n\n const processedAsset = await assetProcessor.process(resolvedRequest, resolvedAsset);\n const assetReply = await processedAsset.output();\n\n const rawHeaders = assetReply.getHeaders().getHeaders();\n const headers: Record<string, string> = {};\n for (const [k, v] of Object.entries(rawHeaders)) {\n if (v !== undefined) {\n headers[k] = String(v);\n }\n }\n\n const body = await assetReply.getBody();\n const statusCode = assetReply.getCode();\n\n // Return the raw body (a Buffer for binary assets). The transport translator\n // (e.g. httpResponseToApiGatewayResult) base64-encodes Buffers and sets isBase64Encoded so\n // API Gateway returns proper binary. Pre-encoding to a base64 STRING here defeated that —\n // the string passed through undecoded and browsers received base64 text, not an image.\n return {\n statusCode,\n headers,\n body: body ?? \"\"\n };\n }\n}\n\nexport const AssetDeliveryRoute = HttpRoute.createImplementation({\n implementation: AssetDeliveryRouteImpl,\n dependencies: [RequestContainer]\n});\n"],"names":["NO_CACHE_HEADERS","AssetDeliveryRouteImpl","container","request","requestResolver","AssetRequestResolver","assetResolver","AssetResolver","assetProcessor","AssetProcessor","outputStrategy","AssetOutputStrategy","fakeRequest","resolvedRequest","JSON","resolvedAsset","processedAsset","assetReply","rawHeaders","headers","k","v","Object","undefined","String","body","statusCode","AssetDeliveryRoute","HttpRoute","RequestContainer"],"mappings":";;AAUA,MAAMA,mBAAmB;IACrB,gBAAgB;IAChB,iBAAiB;AACrB;AAEA,MAAMC;IAIF,YAAoBC,SAAoB,CAAE;aAAtBA,SAAS,GAATA;aAHX,MAAM,GAAG;aACT,IAAI,GAAG;IAE2B;IAE3C,MAAM,OAAOC,OAAqB,EAA0B;QAOxD,MAAMC,kBAAkB,IAAI,CAAC,SAAS,CAAC,OAAO,CAACC;QAC/C,MAAMC,gBAAgB,IAAI,CAAC,SAAS,CAAC,OAAO,CAACC;QAC7C,MAAMC,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,CAACC;QAC9C,MAAMC,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,CAACC;QAG9C,MAAMC,cAAc;YAChB,KAAKT,QAAQ,IAAI;YACjB,QAAQ;gBAAE,KAAKA,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW;YAAI;YACnD,OAAOA,QAAQ,KAAK,IAAI,CAAC;YACzB,SAASA,QAAQ,OAAO,IAAI,CAAC;QACjC;QAEA,MAAMU,kBAAkB,MAAMT,gBAAgB,OAAO,CAACQ;QACtD,IAAI,CAACC,iBACD,OAAO;YACH,YAAY;YACZ,SAASb;YACT,MAAMc,KAAK,SAAS,CAAC;gBAAE,OAAO;YAAiC;QACnE;QAGJ,MAAMC,gBAAgB,MAAMT,cAAc,OAAO,CAACO;QAClD,IAAI,CAACE,eACD,OAAO;YACH,YAAY;YACZ,SAASf;YACT,MAAMc,KAAK,SAAS,CAAC;gBAAE,OAAO;YAAmB;QACrD;QAGJC,cAAc,iBAAiB,CAACL;QAEhC,MAAMM,iBAAiB,MAAMR,eAAe,OAAO,CAACK,iBAAiBE;QACrE,MAAME,aAAa,MAAMD,eAAe,MAAM;QAE9C,MAAME,aAAaD,WAAW,UAAU,GAAG,UAAU;QACrD,MAAME,UAAkC,CAAC;QACzC,KAAK,MAAM,CAACC,GAAGC,EAAE,IAAIC,OAAO,OAAO,CAACJ,YAChC,IAAIG,AAAME,WAANF,GACAF,OAAO,CAACC,EAAE,GAAGI,OAAOH;QAI5B,MAAMI,OAAO,MAAMR,WAAW,OAAO;QACrC,MAAMS,aAAaT,WAAW,OAAO;QAMrC,OAAO;YACHS;YACAP;YACA,MAAMM,QAAQ;QAClB;IACJ;AACJ;AAEO,MAAME,qBAAqBC,UAAU,oBAAoB,CAAC;IAC7D,gBAAgB3B;IAChB,cAAc;QAAC4B;KAAiB;AACpC"}
@@ -1 +1 @@
1
- export declare const setupAssetDelivery: () => import("@webiny/handler").ModifyFastifyPlugin[];
1
+ export declare const setupAssetDelivery: () => never[];
@@ -1,69 +1,4 @@
1
- import { ResponseHeaders, createHandlerOnRequest, createModifyFastifyPlugin, createRoute } from "@webiny/handler";
2
- import { AssetOutputStrategy, AssetProcessor, AssetRequestResolver, AssetResolver } from "../features/assetDelivery/abstractions.js";
3
- const noCacheHeaders = ResponseHeaders.create({
4
- "content-type": "application/json",
5
- "cache-control": "no-cache, no-store, must-revalidate"
6
- });
7
- function assertAssetRequestWasResolved(request) {
8
- if (void 0 === request) throw new Error("Not an AssetRequest!");
9
- }
10
- function assertAssetWasResolved(asset) {
11
- if (void 0 === asset) throw new Error("Not an Asset!");
12
- }
13
- const setupAssetDelivery = ()=>{
14
- const outputAsset = async (reply, asset)=>{
15
- const assetReply = await asset.output();
16
- const headers = assetReply.getHeaders();
17
- headers.set("x-webiny-base64-encoded", "true");
18
- reply.code(assetReply.getCode());
19
- reply.headers(headers.getHeaders());
20
- return reply.send(await assetReply.getBody());
21
- };
22
- return [
23
- createModifyFastifyPlugin((app)=>{
24
- const container = app.webiny.container;
25
- let resolvedRequest;
26
- let resolvedAsset;
27
- const handlerOnRequest = createHandlerOnRequest(async (request, reply)=>{
28
- const requestResolver = container.resolve(AssetRequestResolver);
29
- resolvedRequest = await requestResolver.resolve(request);
30
- if (!resolvedRequest) {
31
- reply.code(404).headers(noCacheHeaders.getHeaders()).send({
32
- error: "Unable to resolve the request!"
33
- }).hijack();
34
- return false;
35
- }
36
- const assetResolver = container.resolve(AssetResolver);
37
- resolvedAsset = await assetResolver.resolve(resolvedRequest);
38
- if (!resolvedAsset) {
39
- reply.code(404).headers(noCacheHeaders.getHeaders()).send({
40
- error: "Asset not found!"
41
- }).hijack();
42
- return false;
43
- }
44
- request.headers = {
45
- ...request.headers,
46
- "x-tenant": resolvedAsset.getTenant()
47
- };
48
- });
49
- const deliveryRoute = createRoute(({ onGet, context })=>{
50
- onGet("*", async (_, reply)=>{
51
- assertAssetRequestWasResolved(resolvedRequest);
52
- assertAssetWasResolved(resolvedAsset);
53
- const outputStrategy = context.container.resolve(AssetOutputStrategy);
54
- resolvedAsset.setOutputStrategy(outputStrategy);
55
- const assetProcessor = context.container.resolve(AssetProcessor);
56
- const processedAsset = await assetProcessor.process(resolvedRequest, resolvedAsset);
57
- console.log(`Output asset (size: ${processedAsset.getSize()} bytes).`);
58
- return outputAsset(reply, processedAsset);
59
- }, {
60
- override: true
61
- });
62
- });
63
- app.webiny.plugins.register(handlerOnRequest, deliveryRoute);
64
- })
65
- ];
66
- };
1
+ const setupAssetDelivery = ()=>[];
67
2
  export { setupAssetDelivery };
68
3
 
69
4
  //# sourceMappingURL=setupAssetDelivery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery/setupAssetDelivery.js","sources":["../../src/delivery/setupAssetDelivery.ts"],"sourcesContent":["import {\n createHandlerOnRequest,\n createModifyFastifyPlugin,\n createRoute,\n ResponseHeaders\n} from \"@webiny/handler\";\nimport type { Asset, AssetRequest } from \"./index.js\";\nimport type { Reply } from \"@webiny/handler/types.js\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.js\";\nimport {\n AssetRequestResolver,\n AssetResolver,\n AssetProcessor,\n AssetOutputStrategy\n} from \"~/features/assetDelivery/abstractions.js\";\n\nconst noCacheHeaders = ResponseHeaders.create({\n \"content-type\": \"application/json\",\n \"cache-control\": \"no-cache, no-store, must-revalidate\"\n});\n\nfunction assertAssetRequestWasResolved(request: any): asserts request is AssetRequest {\n if (request === undefined) {\n throw new Error(\"Not an AssetRequest!\");\n }\n}\n\nfunction assertAssetWasResolved(asset: Asset | undefined): asserts asset is Asset {\n if (asset === undefined) {\n throw new Error(\"Not an Asset!\");\n }\n}\n\nexport const setupAssetDelivery = () => {\n const outputAsset = async (reply: Reply, asset: Asset) => {\n const assetReply = await asset.output();\n const headers = assetReply.getHeaders();\n\n headers.set(\"x-webiny-base64-encoded\", \"true\");\n\n reply.code(assetReply.getCode());\n reply.headers(headers.getHeaders());\n return reply.send(await assetReply.getBody());\n };\n\n return [\n createModifyFastifyPlugin(app => {\n const container = app.webiny.container;\n\n let resolvedRequest: AssetRequest | undefined;\n let resolvedAsset: Asset | undefined;\n\n const handlerOnRequest = createHandlerOnRequest(async (request, reply) => {\n const requestResolver = container.resolve(AssetRequestResolver);\n resolvedRequest = await requestResolver.resolve(request);\n\n if (!resolvedRequest) {\n reply\n .code(404)\n .headers(noCacheHeaders.getHeaders())\n .send({ error: \"Unable to resolve the request!\" })\n .hijack();\n\n return false;\n }\n\n const assetResolver = container.resolve(AssetResolver);\n resolvedAsset = await assetResolver.resolve(resolvedRequest);\n\n if (!resolvedAsset) {\n reply\n .code(404)\n .headers(noCacheHeaders.getHeaders())\n .send({ error: \"Asset not found!\" })\n .hijack();\n\n return false;\n }\n\n request.headers = {\n ...request.headers,\n \"x-tenant\": resolvedAsset.getTenant()\n };\n\n return;\n });\n\n const deliveryRoute = createRoute<ApiCoreContext>(({ onGet, context }) => {\n onGet(\n \"*\",\n async (_, reply) => {\n assertAssetRequestWasResolved(resolvedRequest);\n assertAssetWasResolved(resolvedAsset);\n\n const outputStrategy = context.container.resolve(AssetOutputStrategy);\n resolvedAsset.setOutputStrategy(outputStrategy);\n\n const assetProcessor = context.container.resolve(AssetProcessor);\n const processedAsset = await assetProcessor.process(\n resolvedRequest,\n resolvedAsset\n );\n\n console.log(`Output asset (size: ${processedAsset.getSize()} bytes).`);\n return outputAsset(reply, processedAsset);\n },\n { override: true }\n );\n });\n\n app.webiny.plugins.register(handlerOnRequest, deliveryRoute);\n })\n ];\n};\n"],"names":["noCacheHeaders","ResponseHeaders","assertAssetRequestWasResolved","request","undefined","Error","assertAssetWasResolved","asset","setupAssetDelivery","outputAsset","reply","assetReply","headers","createModifyFastifyPlugin","app","container","resolvedRequest","resolvedAsset","handlerOnRequest","createHandlerOnRequest","requestResolver","AssetRequestResolver","assetResolver","AssetResolver","deliveryRoute","createRoute","onGet","context","_","outputStrategy","AssetOutputStrategy","assetProcessor","AssetProcessor","processedAsset","console"],"mappings":";;AAgBA,MAAMA,iBAAiBC,gBAAgB,MAAM,CAAC;IAC1C,gBAAgB;IAChB,iBAAiB;AACrB;AAEA,SAASC,8BAA8BC,OAAY;IAC/C,IAAIA,AAAYC,WAAZD,SACA,MAAM,IAAIE,MAAM;AAExB;AAEA,SAASC,uBAAuBC,KAAwB;IACpD,IAAIA,AAAUH,WAAVG,OACA,MAAM,IAAIF,MAAM;AAExB;AAEO,MAAMG,qBAAqB;IAC9B,MAAMC,cAAc,OAAOC,OAAcH;QACrC,MAAMI,aAAa,MAAMJ,MAAM,MAAM;QACrC,MAAMK,UAAUD,WAAW,UAAU;QAErCC,QAAQ,GAAG,CAAC,2BAA2B;QAEvCF,MAAM,IAAI,CAACC,WAAW,OAAO;QAC7BD,MAAM,OAAO,CAACE,QAAQ,UAAU;QAChC,OAAOF,MAAM,IAAI,CAAC,MAAMC,WAAW,OAAO;IAC9C;IAEA,OAAO;QACHE,0BAA0BC,CAAAA;YACtB,MAAMC,YAAYD,IAAI,MAAM,CAAC,SAAS;YAEtC,IAAIE;YACJ,IAAIC;YAEJ,MAAMC,mBAAmBC,uBAAuB,OAAOhB,SAASO;gBAC5D,MAAMU,kBAAkBL,UAAU,OAAO,CAACM;gBAC1CL,kBAAkB,MAAMI,gBAAgB,OAAO,CAACjB;gBAEhD,IAAI,CAACa,iBAAiB;oBAClBN,MACK,IAAI,CAAC,KACL,OAAO,CAACV,eAAe,UAAU,IACjC,IAAI,CAAC;wBAAE,OAAO;oBAAiC,GAC/C,MAAM;oBAEX,OAAO;gBACX;gBAEA,MAAMsB,gBAAgBP,UAAU,OAAO,CAACQ;gBACxCN,gBAAgB,MAAMK,cAAc,OAAO,CAACN;gBAE5C,IAAI,CAACC,eAAe;oBAChBP,MACK,IAAI,CAAC,KACL,OAAO,CAACV,eAAe,UAAU,IACjC,IAAI,CAAC;wBAAE,OAAO;oBAAmB,GACjC,MAAM;oBAEX,OAAO;gBACX;gBAEAG,QAAQ,OAAO,GAAG;oBACd,GAAGA,QAAQ,OAAO;oBAClB,YAAYc,cAAc,SAAS;gBACvC;YAGJ;YAEA,MAAMO,gBAAgBC,YAA4B,CAAC,EAAEC,KAAK,EAAEC,OAAO,EAAE;gBACjED,MACI,KACA,OAAOE,GAAGlB;oBACNR,8BAA8Bc;oBAC9BV,uBAAuBW;oBAEvB,MAAMY,iBAAiBF,QAAQ,SAAS,CAAC,OAAO,CAACG;oBACjDb,cAAc,iBAAiB,CAACY;oBAEhC,MAAME,iBAAiBJ,QAAQ,SAAS,CAAC,OAAO,CAACK;oBACjD,MAAMC,iBAAiB,MAAMF,eAAe,OAAO,CAC/Cf,iBACAC;oBAGJiB,QAAQ,GAAG,CAAC,CAAC,oBAAoB,EAAED,eAAe,OAAO,GAAG,QAAQ,CAAC;oBACrE,OAAOxB,YAAYC,OAAOuB;gBAC9B,GACA;oBAAE,UAAU;gBAAK;YAEzB;YAEAnB,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAACI,kBAAkBM;QAClD;KACH;AACL"}
1
+ {"version":3,"file":"delivery/setupAssetDelivery.js","sources":["../../src/delivery/setupAssetDelivery.ts"],"sourcesContent":["// Legacy Fastify-based asset delivery setup replaced by AssetDeliveryRoute in DI-native handlers.\nexport const setupAssetDelivery = (): never[] => [];\n"],"names":["setupAssetDelivery"],"mappings":"AACO,MAAMA,qBAAqB,IAAe,EAAE"}
@@ -1,5 +1,5 @@
1
1
  import zod from "zod";
2
- import { ServiceDiscovery } from "@webiny/api";
2
+ import { ServiceDiscovery } from "@webiny/api-core/features/serviceDiscovery/index.js";
3
3
  const MIN_FILE_SIZE = 0;
4
4
  const MAX_FILE_SIZE = 10737418240;
5
5
  const uploadMinFileSizeValidation = zod.number().min(MIN_FILE_SIZE, {
@@ -1 +1 @@
1
- {"version":3,"file":"domain/settings/validation.js","sources":["../../../src/domain/settings/validation.ts"],"sourcesContent":["import zod from \"zod\";\nimport { ServiceDiscovery } from \"@webiny/api\";\n\nconst MIN_FILE_SIZE = 0;\nconst MAX_FILE_SIZE = 10737418240;\n\nconst uploadMinFileSizeValidation = zod\n .number()\n .min(MIN_FILE_SIZE, {\n message: `Value needs to be greater than or equal to ${MIN_FILE_SIZE}.`\n })\n .nullish()\n .transform(value => {\n return value || MIN_FILE_SIZE;\n })\n .optional();\n\nconst uploadMaxFileSizeValidation = zod\n .number()\n .max(MAX_FILE_SIZE, {\n message: `Value needs to be lesser than or equal to ${MAX_FILE_SIZE}.`\n })\n .nullish()\n .transform(value => {\n return value || MAX_FILE_SIZE;\n })\n .optional();\n\nexport const updateSettingsValidation = zod.object({\n uploadMinFileSize: uploadMinFileSizeValidation,\n uploadMaxFileSize: uploadMaxFileSizeValidation,\n srcPrefix: zod\n .string()\n .optional()\n .transform(async value => {\n if (!value) {\n const manifest = await ServiceDiscovery.load();\n if (!manifest || !manifest.api) {\n return \"\";\n }\n\n const { domain } = manifest.api.cloudfront;\n\n return `https://${domain}/files/`;\n }\n if (typeof value === \"string\") {\n return value.endsWith(\"/\") ? value : value + \"/\";\n }\n return value;\n })\n});\n"],"names":["MIN_FILE_SIZE","MAX_FILE_SIZE","uploadMinFileSizeValidation","zod","value","uploadMaxFileSizeValidation","updateSettingsValidation","manifest","ServiceDiscovery","domain"],"mappings":";;AAGA,MAAMA,gBAAgB;AACtB,MAAMC,gBAAgB;AAEtB,MAAMC,8BAA8BC,IAAAA,MACzB,GACN,GAAG,CAACH,eAAe;IAChB,SAAS,CAAC,2CAA2C,EAAEA,cAAc,CAAC,CAAC;AAC3E,GACC,OAAO,GACP,SAAS,CAACI,CAAAA,QACAA,SAASJ,eAEnB,QAAQ;AAEb,MAAMK,8BAA8BF,IAAAA,MACzB,GACN,GAAG,CAACF,eAAe;IAChB,SAAS,CAAC,0CAA0C,EAAEA,cAAc,CAAC,CAAC;AAC1E,GACC,OAAO,GACP,SAAS,CAACG,CAAAA,QACAA,SAASH,eAEnB,QAAQ;AAEN,MAAMK,2BAA2BH,IAAI,MAAM,CAAC;IAC/C,mBAAmBD;IACnB,mBAAmBG;IACnB,WAAWF,IAAAA,MACA,GACN,QAAQ,GACR,SAAS,CAAC,OAAMC;QACb,IAAI,CAACA,OAAO;YACR,MAAMG,WAAW,MAAMC,iBAAiB,IAAI;YAC5C,IAAI,CAACD,YAAY,CAACA,SAAS,GAAG,EAC1B,OAAO;YAGX,MAAM,EAAEE,MAAM,EAAE,GAAGF,SAAS,GAAG,CAAC,UAAU;YAE1C,OAAO,CAAC,QAAQ,EAAEE,OAAO,OAAO,CAAC;QACrC;QACA,IAAI,AAAiB,YAAjB,OAAOL,OACP,OAAOA,MAAM,QAAQ,CAAC,OAAOA,QAAQA,QAAQ;QAEjD,OAAOA;IACX;AACR"}
1
+ {"version":3,"file":"domain/settings/validation.js","sources":["../../../src/domain/settings/validation.ts"],"sourcesContent":["import zod from \"zod\";\nimport { ServiceDiscovery } from \"@webiny/api-core/features/serviceDiscovery/index.js\";\n\nconst MIN_FILE_SIZE = 0;\nconst MAX_FILE_SIZE = 10737418240;\n\nconst uploadMinFileSizeValidation = zod\n .number()\n .min(MIN_FILE_SIZE, {\n message: `Value needs to be greater than or equal to ${MIN_FILE_SIZE}.`\n })\n .nullish()\n .transform(value => {\n return value || MIN_FILE_SIZE;\n })\n .optional();\n\nconst uploadMaxFileSizeValidation = zod\n .number()\n .max(MAX_FILE_SIZE, {\n message: `Value needs to be lesser than or equal to ${MAX_FILE_SIZE}.`\n })\n .nullish()\n .transform(value => {\n return value || MAX_FILE_SIZE;\n })\n .optional();\n\nexport const updateSettingsValidation = zod.object({\n uploadMinFileSize: uploadMinFileSizeValidation,\n uploadMaxFileSize: uploadMaxFileSizeValidation,\n srcPrefix: zod\n .string()\n .optional()\n .transform(async value => {\n if (!value) {\n const manifest = await ServiceDiscovery.load();\n if (!manifest || !manifest.api) {\n return \"\";\n }\n\n const { domain } = manifest.api.cloudfront;\n\n return `https://${domain}/files/`;\n }\n if (typeof value === \"string\") {\n return value.endsWith(\"/\") ? value : value + \"/\";\n }\n return value;\n })\n});\n"],"names":["MIN_FILE_SIZE","MAX_FILE_SIZE","uploadMinFileSizeValidation","zod","value","uploadMaxFileSizeValidation","updateSettingsValidation","manifest","ServiceDiscovery","domain"],"mappings":";;AAGA,MAAMA,gBAAgB;AACtB,MAAMC,gBAAgB;AAEtB,MAAMC,8BAA8BC,IAAAA,MACzB,GACN,GAAG,CAACH,eAAe;IAChB,SAAS,CAAC,2CAA2C,EAAEA,cAAc,CAAC,CAAC;AAC3E,GACC,OAAO,GACP,SAAS,CAACI,CAAAA,QACAA,SAASJ,eAEnB,QAAQ;AAEb,MAAMK,8BAA8BF,IAAAA,MACzB,GACN,GAAG,CAACF,eAAe;IAChB,SAAS,CAAC,0CAA0C,EAAEA,cAAc,CAAC,CAAC;AAC1E,GACC,OAAO,GACP,SAAS,CAACG,CAAAA,QACAA,SAASH,eAEnB,QAAQ;AAEN,MAAMK,2BAA2BH,IAAI,MAAM,CAAC;IAC/C,mBAAmBD;IACnB,mBAAmBG;IACnB,WAAWF,IAAAA,MACA,GACN,QAAQ,GACR,SAAS,CAAC,OAAMC;QACb,IAAI,CAACA,OAAO;YACR,MAAMG,WAAW,MAAMC,iBAAiB,IAAI;YAC5C,IAAI,CAACD,YAAY,CAACA,SAAS,GAAG,EAC1B,OAAO;YAGX,MAAM,EAAEE,MAAM,EAAE,GAAGF,SAAS,GAAG,CAAC,UAAU;YAE1C,OAAO,CAAC,QAAQ,EAAEE,OAAO,OAAO,CAAC;QACrC;QACA,IAAI,AAAiB,YAAjB,OAAOL,OACP,OAAOA,MAAM,QAAQ,CAAC,OAAOA,QAAQA,QAAQ;QAEjD,OAAOA;IACX;AACR"}
@@ -0,0 +1,10 @@
1
+ export { Asset } from "../../../delivery/AssetDelivery/Asset.js";
2
+ export type { AssetData } from "../../../delivery/AssetDelivery/Asset.js";
3
+ export { AssetRequest } from "../../../delivery/AssetDelivery/AssetRequest.js";
4
+ export type { AssetRequestOptions } from "../../../delivery/AssetDelivery/AssetRequest.js";
5
+ export { AssetReply } from "../../../delivery/AssetDelivery/abstractions/AssetReply.js";
6
+ export { createAssetDeliveryPluginLoader } from "../../../delivery/AssetDelivery/createAssetDeliveryPluginLoader.js";
7
+ export { AssetRequestResolver, AssetResolver, AssetProcessor, AssetOutputStrategy, AssetTransformationStrategy, AssetContentsReader, AssetAuthorizer } from "../../../features/assetDelivery/abstractions.js";
8
+ export { AssetFactory } from "../../../features/assetDelivery/Asset/abstractions.js";
9
+ export { StreamAssetReply } from "../../../features/assetDelivery/StreamAssetReply/abstractions.js";
10
+ export { ObjectKey } from "../../../features/assetDelivery/ObjectKey/abstractions.js";
@@ -0,0 +1,8 @@
1
+ export { Asset } from "../../../delivery/AssetDelivery/Asset.js";
2
+ export { AssetRequest } from "../../../delivery/AssetDelivery/AssetRequest.js";
3
+ export { AssetReply } from "../../../delivery/AssetDelivery/abstractions/AssetReply.js";
4
+ export { createAssetDeliveryPluginLoader } from "../../../delivery/AssetDelivery/createAssetDeliveryPluginLoader.js";
5
+ export { AssetAuthorizer, AssetContentsReader, AssetOutputStrategy, AssetProcessor, AssetRequestResolver, AssetResolver, AssetTransformationStrategy } from "../../../features/assetDelivery/abstractions.js";
6
+ export { AssetFactory } from "../../../features/assetDelivery/Asset/abstractions.js";
7
+ export { StreamAssetReply } from "../../../features/assetDelivery/StreamAssetReply/abstractions.js";
8
+ export { ObjectKey } from "../../../features/assetDelivery/ObjectKey/abstractions.js";
@@ -8,5 +8,6 @@ export { DeleteFileRepository, DeleteFileUseCase } from "../../../features/file/
8
8
  export { FileAfterDeleteEventHandler, FileBeforeDeleteEventHandler } from "../../../features/file/DeleteFile/events.js";
9
9
  export { FileUrlGenerator } from "../../../features/file/FileUrlGenerator/abstractions.js";
10
10
  export { GetFileRepository, GetFileUseCase } from "../../../features/file/GetFile/abstractions.js";
11
+ export { GetFileByUrlUseCase } from "../../../features/file/GetFileByUrl/abstractions.js";
11
12
  export { ListFilesRepository, ListFilesUseCase } from "../../../features/file/ListFiles/abstractions.js";
12
13
  export { ListTagsRepository, ListTagsUseCase } from "../../../features/file/ListTags/abstractions.js";
@@ -8,5 +8,6 @@ export { DeleteFileRepository, DeleteFileUseCase } from "../../../features/file/
8
8
  export { FileAfterDeleteEventHandler, FileBeforeDeleteEventHandler } from "../../../features/file/DeleteFile/events.js";
9
9
  export { FileUrlGenerator } from "../../../features/file/FileUrlGenerator/abstractions.js";
10
10
  export { GetFileRepository, GetFileUseCase } from "../../../features/file/GetFile/abstractions.js";
11
+ export { GetFileByUrlUseCase } from "../../../features/file/GetFileByUrl/abstractions.js";
11
12
  export { ListFilesRepository, ListFilesUseCase } from "../../../features/file/ListFiles/abstractions.js";
12
13
  export { ListTagsRepository, ListTagsUseCase } from "../../../features/file/ListTags/abstractions.js";
@@ -10,6 +10,9 @@ import { SettingsInstallerFeature } from "./settings/SettingsInstaller/feature.j
10
10
  import { GetSettingsFeature } from "./settings/GetSettings/feature.js";
11
11
  import { UpdateSettingsFeature } from "./settings/UpdateSettings/feature.js";
12
12
  import { ListImagesByTagToolFeature } from "./file/ListImagesByTagTool/feature.js";
13
+ import { FileUrlGeneratorFeature } from "./file/FileUrlGenerator/feature.js";
14
+ import { GetFileByUrlFeature } from "./file/GetFileByUrl/feature.js";
15
+ import { FmGraphQLSchema } from "../graphql/FmGraphQLSchema.js";
13
16
  const FileManagerFeature = createFeature({
14
17
  name: "FileManager",
15
18
  register (container) {
@@ -24,6 +27,9 @@ const FileManagerFeature = createFeature({
24
27
  GetSettingsFeature.register(container);
25
28
  UpdateSettingsFeature.register(container);
26
29
  ListImagesByTagToolFeature.register(container);
30
+ FileUrlGeneratorFeature.register(container);
31
+ GetFileByUrlFeature.register(container);
32
+ container.register(FmGraphQLSchema);
27
33
  }
28
34
  });
29
35
  export { FileManagerFeature };
@@ -1 +1 @@
1
- {"version":3,"file":"features/FileManagerFeature.js","sources":["../../src/features/FileManagerFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CreateFileFeature } from \"~/features/file/CreateFile/feature.js\";\nimport { CreateFilesInBatchFeature } from \"~/features/file/CreateFilesInBatch/feature.js\";\nimport { DeleteFileFeature } from \"~/features/file/DeleteFile/feature.js\";\nimport { GetFileFeature } from \"~/features/file/GetFile/feature.js\";\nimport { ListFilesFeature } from \"~/features/file/ListFiles/feature.js\";\nimport { ListTagsFeature } from \"~/features/file/ListTags/feature.js\";\nimport { UpdateFileFeature } from \"~/features/file/UpdateFile/feature.js\";\nimport { SettingsInstallerFeature } from \"~/features/settings/SettingsInstaller/feature.js\";\nimport { GetSettingsFeature } from \"~/features/settings/GetSettings/feature.js\";\nimport { UpdateSettingsFeature } from \"~/features/settings/UpdateSettings/feature.js\";\nimport { ListImagesByTagToolFeature } from \"~/features/file/ListImagesByTagTool/feature.js\";\n\nexport const FileManagerFeature = createFeature({\n name: \"FileManager\",\n register(container) {\n CreateFileFeature.register(container);\n CreateFilesInBatchFeature.register(container);\n UpdateFileFeature.register(container);\n DeleteFileFeature.register(container);\n GetFileFeature.register(container);\n ListFilesFeature.register(container);\n ListTagsFeature.register(container);\n SettingsInstallerFeature.register(container);\n GetSettingsFeature.register(container);\n UpdateSettingsFeature.register(container);\n ListImagesByTagToolFeature.register(container);\n }\n});\n"],"names":["FileManagerFeature","createFeature","container","CreateFileFeature","CreateFilesInBatchFeature","UpdateFileFeature","DeleteFileFeature","GetFileFeature","ListFilesFeature","ListTagsFeature","SettingsInstallerFeature","GetSettingsFeature","UpdateSettingsFeature","ListImagesByTagToolFeature"],"mappings":";;;;;;;;;;;;AAaO,MAAMA,qBAAqBC,cAAc;IAC5C,MAAM;IACN,UAASC,SAAS;QACdC,kBAAkB,QAAQ,CAACD;QAC3BE,0BAA0B,QAAQ,CAACF;QACnCG,kBAAkB,QAAQ,CAACH;QAC3BI,kBAAkB,QAAQ,CAACJ;QAC3BK,eAAe,QAAQ,CAACL;QACxBM,iBAAiB,QAAQ,CAACN;QAC1BO,gBAAgB,QAAQ,CAACP;QACzBQ,yBAAyB,QAAQ,CAACR;QAClCS,mBAAmB,QAAQ,CAACT;QAC5BU,sBAAsB,QAAQ,CAACV;QAC/BW,2BAA2B,QAAQ,CAACX;IACxC;AACJ"}
1
+ {"version":3,"file":"features/FileManagerFeature.js","sources":["../../src/features/FileManagerFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CreateFileFeature } from \"~/features/file/CreateFile/feature.js\";\nimport { CreateFilesInBatchFeature } from \"~/features/file/CreateFilesInBatch/feature.js\";\nimport { DeleteFileFeature } from \"~/features/file/DeleteFile/feature.js\";\nimport { GetFileFeature } from \"~/features/file/GetFile/feature.js\";\nimport { ListFilesFeature } from \"~/features/file/ListFiles/feature.js\";\nimport { ListTagsFeature } from \"~/features/file/ListTags/feature.js\";\nimport { UpdateFileFeature } from \"~/features/file/UpdateFile/feature.js\";\nimport { SettingsInstallerFeature } from \"~/features/settings/SettingsInstaller/feature.js\";\nimport { GetSettingsFeature } from \"~/features/settings/GetSettings/feature.js\";\nimport { UpdateSettingsFeature } from \"~/features/settings/UpdateSettings/feature.js\";\nimport { ListImagesByTagToolFeature } from \"~/features/file/ListImagesByTagTool/feature.js\";\nimport { FileUrlGeneratorFeature } from \"~/features/file/FileUrlGenerator/feature.js\";\nimport { GetFileByUrlFeature } from \"~/features/file/GetFileByUrl/feature.js\";\nimport { FmGraphQLSchema } from \"~/graphql/FmGraphQLSchema.js\";\n\nexport const FileManagerFeature = createFeature({\n name: \"FileManager\",\n register(container) {\n CreateFileFeature.register(container);\n CreateFilesInBatchFeature.register(container);\n UpdateFileFeature.register(container);\n DeleteFileFeature.register(container);\n GetFileFeature.register(container);\n ListFilesFeature.register(container);\n ListTagsFeature.register(container);\n SettingsInstallerFeature.register(container);\n GetSettingsFeature.register(container);\n UpdateSettingsFeature.register(container);\n ListImagesByTagToolFeature.register(container);\n FileUrlGeneratorFeature.register(container);\n GetFileByUrlFeature.register(container);\n\n /* GraphQL schema factory. */\n container.register(FmGraphQLSchema);\n }\n});\n"],"names":["FileManagerFeature","createFeature","container","CreateFileFeature","CreateFilesInBatchFeature","UpdateFileFeature","DeleteFileFeature","GetFileFeature","ListFilesFeature","ListTagsFeature","SettingsInstallerFeature","GetSettingsFeature","UpdateSettingsFeature","ListImagesByTagToolFeature","FileUrlGeneratorFeature","GetFileByUrlFeature","FmGraphQLSchema"],"mappings":";;;;;;;;;;;;;;;AAgBO,MAAMA,qBAAqBC,cAAc;IAC5C,MAAM;IACN,UAASC,SAAS;QACdC,kBAAkB,QAAQ,CAACD;QAC3BE,0BAA0B,QAAQ,CAACF;QACnCG,kBAAkB,QAAQ,CAACH;QAC3BI,kBAAkB,QAAQ,CAACJ;QAC3BK,eAAe,QAAQ,CAACL;QACxBM,iBAAiB,QAAQ,CAACN;QAC1BO,gBAAgB,QAAQ,CAACP;QACzBQ,yBAAyB,QAAQ,CAACR;QAClCS,mBAAmB,QAAQ,CAACT;QAC5BU,sBAAsB,QAAQ,CAACV;QAC/BW,2BAA2B,QAAQ,CAACX;QACpCY,wBAAwB,QAAQ,CAACZ;QACjCa,oBAAoB,QAAQ,CAACb;QAG7BA,UAAU,QAAQ,CAACc;IACvB;AACJ"}
@@ -0,0 +1,13 @@
1
+ import type { IRequestContextInitializer } from "@webiny/event-handler-core";
2
+ import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
3
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
4
+ declare class FileModelContextualSchemaImpl implements IRequestContextInitializer {
5
+ private tenantCtx;
6
+ private identityCtx;
7
+ constructor(tenantCtx: TenantContext.Interface, identityCtx: IdentityContext.Interface);
8
+ init(ctx: Record<string, any>): Promise<void>;
9
+ }
10
+ export declare const FileModelContextualSchema: typeof FileModelContextualSchemaImpl & {
11
+ __abstraction: import("@webiny/di").Abstraction<IRequestContextInitializer>;
12
+ };
13
+ export {};
@@ -0,0 +1,31 @@
1
+ import { RequestContextInitializer } from "@webiny/event-handler-core";
2
+ import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
3
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
4
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
5
+ import { FileModel } from "../domain/file/abstractions.js";
6
+ import { FILE_MODEL_ID } from "../domain/file/file.model.js";
7
+ class FileModelContextualSchemaImpl {
8
+ constructor(tenantCtx, identityCtx){
9
+ this.tenantCtx = tenantCtx;
10
+ this.identityCtx = identityCtx;
11
+ }
12
+ async init(ctx) {
13
+ if (!this.tenantCtx.getTenant()) return;
14
+ const container = ctx.container;
15
+ const getModel = container.resolve(GetModelUseCase);
16
+ await this.identityCtx.withoutAuthorization(async ()=>{
17
+ const result = await getModel.execute(FILE_MODEL_ID);
18
+ if (result.value) container.registerInstance(FileModel, result.value);
19
+ });
20
+ }
21
+ }
22
+ const FileModelContextualSchema = RequestContextInitializer.createImplementation({
23
+ implementation: FileModelContextualSchemaImpl,
24
+ dependencies: [
25
+ TenantContext,
26
+ IdentityContext
27
+ ]
28
+ });
29
+ export { FileModelContextualSchema };
30
+
31
+ //# sourceMappingURL=FileModelContextualSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/FileModelContextualSchema.js","sources":["../../src/features/FileModelContextualSchema.ts"],"sourcesContent":["import type { Container } from \"@webiny/di\";\nimport { RequestContextInitializer } from \"@webiny/event-handler-core\";\nimport type { IRequestContextInitializer } from \"@webiny/event-handler-core\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/abstractions.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\nimport { FILE_MODEL_ID } from \"~/domain/file/file.model.js\";\n\nclass FileModelContextualSchemaImpl implements IRequestContextInitializer {\n constructor(\n private tenantCtx: TenantContext.Interface,\n private identityCtx: IdentityContext.Interface\n ) {}\n\n async init(ctx: Record<string, any>): Promise<void> {\n if (!this.tenantCtx.getTenant()) {\n return;\n }\n\n const container = ctx.container as Container;\n // Resolved lazily here (build/request time), not as a constructor dep: GetModelUseCase\n // depends on AccessControl, which the CMS initializer only registers during its own init().\n const getModel = container.resolve(GetModelUseCase);\n\n await this.identityCtx.withoutAuthorization(async () => {\n const result = await getModel.execute(FILE_MODEL_ID);\n if (result.value) {\n container.registerInstance(FileModel, result.value);\n }\n });\n }\n}\n\nexport const FileModelContextualSchema = RequestContextInitializer.createImplementation({\n implementation: FileModelContextualSchemaImpl,\n dependencies: [TenantContext, IdentityContext]\n});\n"],"names":["FileModelContextualSchemaImpl","tenantCtx","identityCtx","ctx","container","getModel","GetModelUseCase","result","FILE_MODEL_ID","FileModel","FileModelContextualSchema","RequestContextInitializer","TenantContext","IdentityContext"],"mappings":";;;;;;AASA,MAAMA;IACF,YACYC,SAAkC,EAClCC,WAAsC,CAChD;aAFUD,SAAS,GAATA;aACAC,WAAW,GAAXA;IACT;IAEH,MAAM,KAAKC,GAAwB,EAAiB;QAChD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,IACzB;QAGJ,MAAMC,YAAYD,IAAI,SAAS;QAG/B,MAAME,WAAWD,UAAU,OAAO,CAACE;QAEnC,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC;YACxC,MAAMC,SAAS,MAAMF,SAAS,OAAO,CAACG;YACtC,IAAID,OAAO,KAAK,EACZH,UAAU,gBAAgB,CAACK,WAAWF,OAAO,KAAK;QAE1D;IACJ;AACJ;AAEO,MAAMG,4BAA4BC,0BAA0B,oBAAoB,CAAC;IACpF,gBAAgBX;IAChB,cAAc;QAACY;QAAeC;KAAgB;AAClD"}
@@ -0,0 +1,8 @@
1
+ import { AssetFactory as AssetFactoryAbstraction, type IAssetFactory } from "./abstractions.js";
2
+ declare class AssetFactoryImpl implements IAssetFactory {
3
+ create(data: AssetFactoryAbstraction.AssetData): AssetFactoryAbstraction.Asset;
4
+ }
5
+ export declare const AssetFactory: typeof AssetFactoryImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<IAssetFactory>;
7
+ };
8
+ export {};
@@ -0,0 +1,14 @@
1
+ import { Asset } from "../../../delivery/AssetDelivery/Asset.js";
2
+ import { AssetFactory } from "./abstractions.js";
3
+ class AssetFactoryImpl {
4
+ create(data) {
5
+ return new Asset(data);
6
+ }
7
+ }
8
+ const Asset_AssetFactory = AssetFactory.createImplementation({
9
+ implementation: AssetFactoryImpl,
10
+ dependencies: []
11
+ });
12
+ export { Asset_AssetFactory as AssetFactory };
13
+
14
+ //# sourceMappingURL=Asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/Asset/Asset.js","sources":["../../../../src/features/assetDelivery/Asset/Asset.ts"],"sourcesContent":["import { Asset } from \"~/delivery/AssetDelivery/Asset.js\";\nimport { AssetFactory as AssetFactoryAbstraction, type IAssetFactory } from \"./abstractions.js\";\n\nclass AssetFactoryImpl implements IAssetFactory {\n create(data: AssetFactoryAbstraction.AssetData): AssetFactoryAbstraction.Asset {\n return new Asset(data);\n }\n}\n\nexport const AssetFactory = AssetFactoryAbstraction.createImplementation({\n implementation: AssetFactoryImpl,\n dependencies: []\n});\n"],"names":["AssetFactoryImpl","data","Asset","AssetFactory","AssetFactoryAbstraction"],"mappings":";;AAGA,MAAMA;IACF,OAAOC,IAAuC,EAAiC;QAC3E,OAAO,IAAIC,MAAMD;IACrB;AACJ;AAEO,MAAME,qBAAeC,aAAAA,oBAA4C,CAAC;IACrE,gBAAgBJ;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,10 @@
1
+ import type { Asset as IAsset, AssetData as IAssetData } from "../../../delivery/AssetDelivery/Asset.js";
2
+ export interface IAssetFactory {
3
+ create(data: IAssetData): IAsset;
4
+ }
5
+ export declare const AssetFactory: import("@webiny/di").Abstraction<IAssetFactory>;
6
+ export declare namespace AssetFactory {
7
+ type Interface = IAssetFactory;
8
+ type Asset = IAsset;
9
+ type AssetData = IAssetData;
10
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const AssetFactory = createAbstraction("AssetDelivery/AssetFactory");
3
+ export { AssetFactory };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/Asset/abstractions.js","sources":["../../../../src/features/assetDelivery/Asset/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Asset as IAsset, AssetData as IAssetData } from \"~/delivery/AssetDelivery/Asset.js\";\n\nexport interface IAssetFactory {\n create(data: IAssetData): IAsset;\n}\n\nexport const AssetFactory = createAbstraction<IAssetFactory>(\"AssetDelivery/AssetFactory\");\n\nexport namespace AssetFactory {\n export type Interface = IAssetFactory;\n export type Asset = IAsset;\n export type AssetData = IAssetData;\n}\n"],"names":["AssetFactory","createAbstraction"],"mappings":";AAOO,MAAMA,eAAeC,kBAAiC"}
@@ -0,0 +1 @@
1
+ export { AssetFactory } from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export { AssetFactory } from "./abstractions.js";
@@ -2,7 +2,7 @@ import { AssetRequest } from "../../delivery/AssetDelivery/AssetRequest.js";
2
2
  import { AssetRequestResolver } from "./abstractions.js";
3
3
  class FilesAssetRequestResolver {
4
4
  async resolve(request) {
5
- if (!request.url.startsWith("/files/")) return;
5
+ if (!request.url?.startsWith("/files/")) return;
6
6
  const params = request.params ?? {};
7
7
  const query = request.query ?? {};
8
8
  const path = params["*"];
@@ -14,7 +14,7 @@ class FilesAssetRequestResolver {
14
14
  return new AssetRequest({
15
15
  key: decodeURI(path).replace("/files/", ""),
16
16
  context: {
17
- url: request.url
17
+ url: request.url ?? ""
18
18
  },
19
19
  options
20
20
  });
@@ -1 +1 @@
1
- {"version":3,"file":"features/assetDelivery/FilesAssetRequestResolver.js","sources":["../../../src/features/assetDelivery/FilesAssetRequestResolver.ts"],"sourcesContent":["import type { Request } from \"@webiny/handler/types.js\";\nimport type { AssetRequestOptions } from \"~/delivery/AssetDelivery/AssetRequest.js\";\nimport { AssetRequest } from \"~/delivery/AssetDelivery/AssetRequest.js\";\nimport { AssetRequestResolver, type IAssetRequestResolver } from \"./abstractions.js\";\n\nexport class FilesAssetRequestResolver implements IAssetRequestResolver {\n async resolve(request: Request): Promise<AssetRequest | undefined> {\n if (!request.url.startsWith(\"/files/\")) {\n return undefined;\n }\n\n const params = (request.params as Record<string, any>) ?? {};\n const query = (request.query as Record<string, any>) ?? {};\n\n const path = params[\"*\"];\n\n const options: AssetRequestOptions = {\n ...query,\n original: \"original\" in query\n };\n\n if (query.width) {\n options.width = parseInt(query.width);\n }\n\n return new AssetRequest({\n key: decodeURI(path).replace(\"/files/\", \"\"),\n context: {\n url: request.url\n },\n options\n });\n }\n}\n\nexport const FilesAssetRequestResolverImpl = AssetRequestResolver.createImplementation({\n implementation: FilesAssetRequestResolver,\n dependencies: []\n});\n"],"names":["FilesAssetRequestResolver","request","params","query","path","options","parseInt","AssetRequest","decodeURI","FilesAssetRequestResolverImpl","AssetRequestResolver"],"mappings":";;AAKO,MAAMA;IACT,MAAM,QAAQC,OAAgB,EAAqC;QAC/D,IAAI,CAACA,QAAQ,GAAG,CAAC,UAAU,CAAC,YACxB;QAGJ,MAAMC,SAAUD,QAAQ,MAAM,IAA4B,CAAC;QAC3D,MAAME,QAASF,QAAQ,KAAK,IAA4B,CAAC;QAEzD,MAAMG,OAAOF,MAAM,CAAC,IAAI;QAExB,MAAMG,UAA+B;YACjC,GAAGF,KAAK;YACR,UAAU,cAAcA;QAC5B;QAEA,IAAIA,MAAM,KAAK,EACXE,QAAQ,KAAK,GAAGC,SAASH,MAAM,KAAK;QAGxC,OAAO,IAAII,aAAa;YACpB,KAAKC,UAAUJ,MAAM,OAAO,CAAC,WAAW;YACxC,SAAS;gBACL,KAAKH,QAAQ,GAAG;YACpB;YACAI;QACJ;IACJ;AACJ;AAEO,MAAMI,gCAAgCC,qBAAqB,oBAAoB,CAAC;IACnF,gBAAgBV;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/assetDelivery/FilesAssetRequestResolver.js","sources":["../../../src/features/assetDelivery/FilesAssetRequestResolver.ts"],"sourcesContent":["import type { Request } from \"@webiny/handler/types.js\";\nimport type { AssetRequestOptions } from \"~/delivery/AssetDelivery/AssetRequest.js\";\nimport { AssetRequest } from \"~/delivery/AssetDelivery/AssetRequest.js\";\nimport { AssetRequestResolver, type IAssetRequestResolver } from \"./abstractions.js\";\n\nexport class FilesAssetRequestResolver implements IAssetRequestResolver {\n async resolve(request: Request): Promise<AssetRequest | undefined> {\n if (!request.url?.startsWith(\"/files/\")) {\n return undefined;\n }\n\n const params = (request.params as Record<string, any>) ?? {};\n const query = (request.query as Record<string, any>) ?? {};\n\n const path = params[\"*\"];\n\n const options: AssetRequestOptions = {\n ...query,\n original: \"original\" in query\n };\n\n if (query.width) {\n options.width = parseInt(query.width);\n }\n\n return new AssetRequest({\n key: decodeURI(path).replace(\"/files/\", \"\"),\n context: {\n url: request.url ?? \"\"\n },\n options\n });\n }\n}\n\nexport const FilesAssetRequestResolverImpl = AssetRequestResolver.createImplementation({\n implementation: FilesAssetRequestResolver,\n dependencies: []\n});\n"],"names":["FilesAssetRequestResolver","request","params","query","path","options","parseInt","AssetRequest","decodeURI","FilesAssetRequestResolverImpl","AssetRequestResolver"],"mappings":";;AAKO,MAAMA;IACT,MAAM,QAAQC,OAAgB,EAAqC;QAC/D,IAAI,CAACA,QAAQ,GAAG,EAAE,WAAW,YACzB;QAGJ,MAAMC,SAAUD,QAAQ,MAAM,IAA4B,CAAC;QAC3D,MAAME,QAASF,QAAQ,KAAK,IAA4B,CAAC;QAEzD,MAAMG,OAAOF,MAAM,CAAC,IAAI;QAExB,MAAMG,UAA+B;YACjC,GAAGF,KAAK;YACR,UAAU,cAAcA;QAC5B;QAEA,IAAIA,MAAM,KAAK,EACXE,QAAQ,KAAK,GAAGC,SAASH,MAAM,KAAK;QAGxC,OAAO,IAAII,aAAa;YACpB,KAAKC,UAAUJ,MAAM,OAAO,CAAC,WAAW;YACxC,SAAS;gBACL,KAAKH,QAAQ,GAAG,IAAI;YACxB;YACAI;QACJ;IACJ;AACJ;AAEO,MAAMI,gCAAgCC,qBAAqB,oBAAoB,CAAC;IACnF,gBAAgBV;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,8 @@
1
+ import { type IObjectKey, type IObjectKeyInstance } from "./abstractions.js";
2
+ declare class ObjectKeyImpl implements IObjectKey {
3
+ from(key: string): IObjectKeyInstance;
4
+ }
5
+ export declare const ObjectKey: typeof ObjectKeyImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<IObjectKey>;
7
+ };
8
+ export {};
@@ -0,0 +1,28 @@
1
+ import { ObjectKey } from "./abstractions.js";
2
+ class ObjectKeyInstance {
3
+ static create(bucketKey) {
4
+ return new ObjectKeyInstance(bucketKey);
5
+ }
6
+ constructor(bucketKey){
7
+ this.bucketKey = bucketKey;
8
+ }
9
+ id() {
10
+ const [id] = this.relativeKey().split("/");
11
+ return id;
12
+ }
13
+ relativeKey() {
14
+ return this.bucketKey.replace(/^tenants\/[^/]+\/files\//, "");
15
+ }
16
+ }
17
+ class ObjectKeyImpl {
18
+ from(key) {
19
+ return ObjectKeyInstance.create(key);
20
+ }
21
+ }
22
+ const ObjectKey_ObjectKey = ObjectKey.createImplementation({
23
+ implementation: ObjectKeyImpl,
24
+ dependencies: []
25
+ });
26
+ export { ObjectKey_ObjectKey as ObjectKey };
27
+
28
+ //# sourceMappingURL=ObjectKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/ObjectKey/ObjectKey.js","sources":["../../../../src/features/assetDelivery/ObjectKey/ObjectKey.ts"],"sourcesContent":["import {\n ObjectKey as ObjectKeyAbstraction,\n type IObjectKey,\n type IObjectKeyInstance\n} from \"./abstractions.js\";\n\nclass ObjectKeyInstance implements IObjectKeyInstance {\n public static create(bucketKey: string) {\n return new ObjectKeyInstance(bucketKey);\n }\n\n private constructor(private readonly bucketKey: string) {}\n\n public id(): string {\n const [id] = this.relativeKey().split(\"/\");\n return id;\n }\n\n public relativeKey(): string {\n return this.bucketKey.replace(/^tenants\\/[^/]+\\/files\\//, \"\");\n }\n}\n\nclass ObjectKeyImpl implements IObjectKey {\n public from(key: string): IObjectKeyInstance {\n return ObjectKeyInstance.create(key);\n }\n}\n\nexport const ObjectKey = ObjectKeyAbstraction.createImplementation({\n implementation: ObjectKeyImpl,\n dependencies: []\n});\n"],"names":["ObjectKeyInstance","bucketKey","id","ObjectKeyImpl","key","ObjectKey","ObjectKeyAbstraction"],"mappings":";AAMA,MAAMA;IACF,OAAc,OAAOC,SAAiB,EAAE;QACpC,OAAO,IAAID,kBAAkBC;IACjC;IAEA,YAAqCA,SAAiB,CAAE;aAAnBA,SAAS,GAATA;IAAoB;IAElD,KAAa;QAChB,MAAM,CAACC,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACtC,OAAOA;IACX;IAEO,cAAsB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4BAA4B;IAC9D;AACJ;AAEA,MAAMC;IACK,KAAKC,GAAW,EAAsB;QACzC,OAAOJ,kBAAkB,MAAM,CAACI;IACpC;AACJ;AAEO,MAAMC,sBAAYC,UAAAA,oBAAyC,CAAC;IAC/D,gBAAgBH;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,12 @@
1
+ export interface IObjectKeyInstance {
2
+ id(): string;
3
+ relativeKey(): string;
4
+ }
5
+ export interface IObjectKey {
6
+ from(key: string): IObjectKeyInstance;
7
+ }
8
+ export declare const ObjectKey: import("@webiny/di").Abstraction<IObjectKey>;
9
+ export declare namespace ObjectKey {
10
+ type Interface = IObjectKey;
11
+ type Instance = IObjectKeyInstance;
12
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const ObjectKey = createAbstraction("AssetDelivery/ObjectKey");
3
+ export { ObjectKey };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/ObjectKey/abstractions.js","sources":["../../../../src/features/assetDelivery/ObjectKey/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\n\nexport interface IObjectKeyInstance {\n id(): string;\n relativeKey(): string;\n}\n\nexport interface IObjectKey {\n from(key: string): IObjectKeyInstance;\n}\n\nexport const ObjectKey = createAbstraction<IObjectKey>(\"AssetDelivery/ObjectKey\");\n\nexport namespace ObjectKey {\n export type Interface = IObjectKey;\n export type Instance = IObjectKeyInstance;\n}\n"],"names":["ObjectKey","createAbstraction"],"mappings":";AAWO,MAAMA,YAAYC,kBAA8B"}
@@ -0,0 +1 @@
1
+ export { ObjectKey } from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export { ObjectKey } from "./abstractions.js";
@@ -0,0 +1,8 @@
1
+ import { StreamAssetReply as StreamAssetReplyAbstraction } from "./abstractions.js";
2
+ declare class StreamAssetReplyImpl implements StreamAssetReplyAbstraction.Interface {
3
+ create(asset: StreamAssetReplyAbstraction.Asset): StreamAssetReplyAbstraction.AssetReply;
4
+ }
5
+ export declare const StreamAssetReply: typeof StreamAssetReplyImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IStreamAssetReply>;
7
+ };
8
+ export {};
@@ -0,0 +1,22 @@
1
+ import { AssetReply } from "../../../delivery/AssetDelivery/abstractions/AssetReply.js";
2
+ import { ResponseHeaders } from "@webiny/handler";
3
+ import { StreamAssetReply } from "./abstractions.js";
4
+ class StreamAssetReplyImpl {
5
+ create(asset) {
6
+ return new AssetReply({
7
+ code: 200,
8
+ headers: ResponseHeaders.create({
9
+ "cache-control": "public, max-age=31536000",
10
+ "content-type": asset.getContentType()
11
+ }),
12
+ body: ()=>asset.getContents()
13
+ });
14
+ }
15
+ }
16
+ const StreamAssetReply_StreamAssetReply = StreamAssetReply.createImplementation({
17
+ implementation: StreamAssetReplyImpl,
18
+ dependencies: []
19
+ });
20
+ export { StreamAssetReply_StreamAssetReply as StreamAssetReply };
21
+
22
+ //# sourceMappingURL=StreamAssetReply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/StreamAssetReply/StreamAssetReply.js","sources":["../../../../src/features/assetDelivery/StreamAssetReply/StreamAssetReply.ts"],"sourcesContent":["import { AssetReply } from \"~/delivery/AssetDelivery/abstractions/AssetReply.js\";\nimport { ResponseHeaders } from \"@webiny/handler\";\nimport { StreamAssetReply as StreamAssetReplyAbstraction } from \"./abstractions.js\";\n\nclass StreamAssetReplyImpl implements StreamAssetReplyAbstraction.Interface {\n create(asset: StreamAssetReplyAbstraction.Asset): StreamAssetReplyAbstraction.AssetReply {\n return new AssetReply({\n code: 200,\n headers: ResponseHeaders.create({\n \"cache-control\": `public, max-age=${86400 * 365}`,\n \"content-type\": asset.getContentType()\n }),\n body: () => asset.getContents()\n });\n }\n}\n\nexport const StreamAssetReply = StreamAssetReplyAbstraction.createImplementation({\n implementation: StreamAssetReplyImpl,\n dependencies: []\n});\n"],"names":["StreamAssetReplyImpl","asset","AssetReply","ResponseHeaders","StreamAssetReply","StreamAssetReplyAbstraction"],"mappings":";;;AAIA,MAAMA;IACF,OAAOC,KAAwC,EAA0C;QACrF,OAAO,IAAIC,WAAW;YAClB,MAAM;YACN,SAASC,gBAAgB,MAAM,CAAC;gBAC5B,iBAAiB;gBACjB,gBAAgBF,MAAM,cAAc;YACxC;YACA,MAAM,IAAMA,MAAM,WAAW;QACjC;IACJ;AACJ;AAEO,MAAMG,oCAAmBC,iBAAAA,oBAAgD,CAAC;IAC7E,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,11 @@
1
+ import type { Asset as IAsset } from "../../../delivery/AssetDelivery/Asset.js";
2
+ import type { AssetReply as IAssetReply } from "../../../delivery/AssetDelivery/abstractions/AssetReply.js";
3
+ export interface IStreamAssetReply {
4
+ create(asset: IAsset): IAssetReply;
5
+ }
6
+ export declare const StreamAssetReply: import("@webiny/di").Abstraction<IStreamAssetReply>;
7
+ export declare namespace StreamAssetReply {
8
+ type Interface = IStreamAssetReply;
9
+ type Asset = IAsset;
10
+ type AssetReply = IAssetReply;
11
+ }