@webiny/api-file-manager 6.4.0-beta.2 → 6.4.0-beta.4

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 (125) hide show
  1. package/delivery/index.d.ts +3 -12
  2. package/delivery/index.js +2 -6
  3. package/delivery/setupAssetDelivery.d.ts +1 -2
  4. package/delivery/setupAssetDelivery.js +6 -20
  5. package/delivery/setupAssetDelivery.js.map +1 -1
  6. package/features/assetDelivery/FilesAssetRequestResolver.d.ts +9 -0
  7. package/{delivery/AssetDelivery → features/assetDelivery}/FilesAssetRequestResolver.js +7 -2
  8. package/features/assetDelivery/FilesAssetRequestResolver.js.map +1 -0
  9. package/features/assetDelivery/NullAssetOutputStrategy.d.ts +8 -0
  10. package/features/assetDelivery/NullAssetOutputStrategy.js +14 -0
  11. package/features/assetDelivery/NullAssetOutputStrategy.js.map +1 -0
  12. package/{delivery/AssetDelivery → features/assetDelivery}/NullAssetReply.js +1 -1
  13. package/{delivery/AssetDelivery → features/assetDelivery}/NullAssetReply.js.map +1 -1
  14. package/features/assetDelivery/NullAssetResolver.d.ts +8 -0
  15. package/features/assetDelivery/NullAssetResolver.js +13 -0
  16. package/features/assetDelivery/NullAssetResolver.js.map +1 -0
  17. package/features/assetDelivery/abstractions.d.ts +54 -0
  18. package/features/assetDelivery/abstractions.js +11 -0
  19. package/features/assetDelivery/abstractions.js.map +1 -0
  20. package/features/assetDelivery/feature.d.ts +4 -0
  21. package/features/assetDelivery/feature.js +29 -0
  22. package/features/assetDelivery/feature.js.map +1 -0
  23. package/features/assetDelivery/privateFiles/NotAuthorizedAssetReply.d.ts +4 -0
  24. package/{delivery/AssetDelivery → features/assetDelivery}/privateFiles/NotAuthorizedAssetReply.js +1 -1
  25. package/features/assetDelivery/privateFiles/NotAuthorizedAssetReply.js.map +1 -0
  26. package/features/assetDelivery/privateFiles/NotAuthorizedOutputStrategy.d.ts +5 -0
  27. package/features/assetDelivery/privateFiles/NotAuthorizedOutputStrategy.js.map +1 -0
  28. package/features/assetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.d.ts +11 -0
  29. package/features/assetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js +26 -0
  30. package/features/assetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js.map +1 -0
  31. package/features/assetDelivery/privateFiles/PrivateCache.d.ts +8 -0
  32. package/features/assetDelivery/privateFiles/PrivateCache.js.map +1 -0
  33. package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.d.ts +11 -0
  34. package/{delivery/AssetDelivery → features/assetDelivery}/privateFiles/PrivateFileAssetRequestResolver.js +7 -2
  35. package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +1 -0
  36. package/features/assetDelivery/privateFiles/PrivateFilesAssetProcessor.d.ts +19 -0
  37. package/{delivery/AssetDelivery → features/assetDelivery}/privateFiles/PrivateFilesAssetProcessor.js +17 -8
  38. package/features/assetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +1 -0
  39. package/features/assetDelivery/privateFiles/PublicCache.d.ts +8 -0
  40. package/features/assetDelivery/privateFiles/PublicCache.js.map +1 -0
  41. package/features/assetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.d.ts +9 -0
  42. package/{delivery/AssetDelivery → features/assetDelivery}/privateFiles/RedirectToPrivateUrlOutputStrategy.js +1 -1
  43. package/features/assetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js.map +1 -0
  44. package/features/assetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.d.ts +9 -0
  45. package/{delivery/AssetDelivery → features/assetDelivery}/privateFiles/RedirectToPublicUrlOutputStrategy.js +1 -1
  46. package/features/assetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js.map +1 -0
  47. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.d.ts +9 -0
  48. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.js +13 -0
  49. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.js.map +1 -0
  50. package/features/assetDelivery/transformation/TransformationAssetProcessor.d.ts +11 -0
  51. package/{delivery/AssetDelivery → features/assetDelivery}/transformation/TransformationAssetProcessor.js +8 -1
  52. package/features/assetDelivery/transformation/TransformationAssetProcessor.js.map +1 -0
  53. package/features/settings/SettingsInstaller/SettingsInstaller.js +1 -1
  54. package/features/settings/SettingsInstaller/SettingsInstaller.js.map +1 -1
  55. package/index.d.ts +1 -1
  56. package/index.js +7 -1
  57. package/index.js.map +1 -1
  58. package/package.json +21 -20
  59. package/types.d.ts +1 -1
  60. package/types.js +1 -1
  61. package/delivery/AssetDelivery/AssetDeliveryConfig.d.ts +0 -65
  62. package/delivery/AssetDelivery/AssetDeliveryConfig.js +0 -81
  63. package/delivery/AssetDelivery/AssetDeliveryConfig.js.map +0 -1
  64. package/delivery/AssetDelivery/FilesAssetRequestResolver.d.ts +0 -6
  65. package/delivery/AssetDelivery/FilesAssetRequestResolver.js.map +0 -1
  66. package/delivery/AssetDelivery/NullAssetOutputStrategy.d.ts +0 -4
  67. package/delivery/AssetDelivery/NullAssetOutputStrategy.js +0 -9
  68. package/delivery/AssetDelivery/NullAssetOutputStrategy.js.map +0 -1
  69. package/delivery/AssetDelivery/NullAssetResolver.d.ts +0 -5
  70. package/delivery/AssetDelivery/NullAssetResolver.js +0 -8
  71. package/delivery/AssetDelivery/NullAssetResolver.js.map +0 -1
  72. package/delivery/AssetDelivery/NullRequestResolver.d.ts +0 -4
  73. package/delivery/AssetDelivery/NullRequestResolver.js +0 -8
  74. package/delivery/AssetDelivery/NullRequestResolver.js.map +0 -1
  75. package/delivery/AssetDelivery/SetCacheControlHeaders.d.ts +0 -8
  76. package/delivery/AssetDelivery/SetCacheControlHeaders.js +0 -15
  77. package/delivery/AssetDelivery/SetCacheControlHeaders.js.map +0 -1
  78. package/delivery/AssetDelivery/SetResponseHeaders.d.ts +0 -18
  79. package/delivery/AssetDelivery/SetResponseHeaders.js +0 -19
  80. package/delivery/AssetDelivery/SetResponseHeaders.js.map +0 -1
  81. package/delivery/AssetDelivery/abstractions/AssetContentsReader.d.ts +0 -4
  82. package/delivery/AssetDelivery/abstractions/AssetContentsReader.js +0 -0
  83. package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.d.ts +0 -4
  84. package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.js +0 -0
  85. package/delivery/AssetDelivery/abstractions/AssetProcessor.d.ts +0 -4
  86. package/delivery/AssetDelivery/abstractions/AssetProcessor.js +0 -0
  87. package/delivery/AssetDelivery/abstractions/AssetRequestResolver.d.ts +0 -5
  88. package/delivery/AssetDelivery/abstractions/AssetRequestResolver.js +0 -0
  89. package/delivery/AssetDelivery/abstractions/AssetResolver.d.ts +0 -4
  90. package/delivery/AssetDelivery/abstractions/AssetResolver.js +0 -0
  91. package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.d.ts +0 -4
  92. package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.js +0 -0
  93. package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.d.ts +0 -4
  94. package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.js +0 -0
  95. package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.d.ts +0 -4
  96. package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.js.map +0 -1
  97. package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.d.ts +0 -4
  98. package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.js.map +0 -1
  99. package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.d.ts +0 -8
  100. package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js +0 -18
  101. package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js.map +0 -1
  102. package/delivery/AssetDelivery/privateFiles/PrivateCache.d.ts +0 -6
  103. package/delivery/AssetDelivery/privateFiles/PrivateCache.js.map +0 -1
  104. package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.d.ts +0 -8
  105. package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +0 -1
  106. package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.d.ts +0 -13
  107. package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +0 -1
  108. package/delivery/AssetDelivery/privateFiles/PublicCache.d.ts +0 -6
  109. package/delivery/AssetDelivery/privateFiles/PublicCache.js.map +0 -1
  110. package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.d.ts +0 -7
  111. package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js.map +0 -1
  112. package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.d.ts +0 -7
  113. package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js.map +0 -1
  114. package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.d.ts +0 -4
  115. package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js +0 -8
  116. package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js.map +0 -1
  117. package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.d.ts +0 -4
  118. package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js +0 -8
  119. package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js.map +0 -1
  120. package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.d.ts +0 -6
  121. package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.js.map +0 -1
  122. /package/{delivery/AssetDelivery → features/assetDelivery}/NullAssetReply.d.ts +0 -0
  123. /package/{delivery/AssetDelivery → features/assetDelivery}/privateFiles/NotAuthorizedOutputStrategy.js +0 -0
  124. /package/{delivery/AssetDelivery → features/assetDelivery}/privateFiles/PrivateCache.js +0 -0
  125. /package/{delivery/AssetDelivery → features/assetDelivery}/privateFiles/PublicCache.js +0 -0
@@ -1,16 +1,7 @@
1
- export * from "./AssetDelivery/AssetDeliveryConfig.js";
2
1
  export * from "./AssetDelivery/Asset.js";
3
2
  export * from "./AssetDelivery/AssetRequest.js";
4
- export type * from "./AssetDelivery/abstractions/AssetRequestResolver.js";
5
- export type * from "./AssetDelivery/abstractions/AssetResolver.js";
6
- export type * from "./AssetDelivery/abstractions/AssetProcessor.js";
7
- export type * from "./AssetDelivery/abstractions/AssetContentsReader.js";
8
- export type * from "./AssetDelivery/abstractions/AssetOutputStrategy.js";
9
- export type * from "./AssetDelivery/abstractions/AssetTransformationStrategy.js";
10
3
  export * from "./AssetDelivery/abstractions/AssetReply.js";
11
4
  export * from "./AssetDelivery/createAssetDeliveryPluginLoader.js";
12
- export * from "./AssetDelivery/FilesAssetRequestResolver.js";
13
- export * from "./AssetDelivery/SetCacheControlHeaders.js";
14
- export * from "./AssetDelivery/SetResponseHeaders.js";
15
- export * from "./AssetDelivery/privateFiles/PublicCache.js";
16
- export * from "./AssetDelivery/privateFiles/PrivateCache.js";
5
+ export type { IAssetRequestResolver as AssetRequestResolver, IAssetResolver as AssetResolver, IAssetProcessor as AssetProcessor, IAssetOutputStrategy as AssetOutputStrategy, IAssetTransformationStrategy as AssetTransformationStrategy, IAssetContentsReader as AssetContentsReader } from "../features/assetDelivery/abstractions.js";
6
+ export { PublicCache } from "../features/assetDelivery/privateFiles/PublicCache.js";
7
+ export { PrivateCache } from "../features/assetDelivery/privateFiles/PrivateCache.js";
package/delivery/index.js CHANGED
@@ -1,10 +1,6 @@
1
- export * from "./AssetDelivery/AssetDeliveryConfig.js";
2
1
  export * from "./AssetDelivery/Asset.js";
3
2
  export * from "./AssetDelivery/AssetRequest.js";
4
3
  export * from "./AssetDelivery/abstractions/AssetReply.js";
5
4
  export * from "./AssetDelivery/createAssetDeliveryPluginLoader.js";
6
- export * from "./AssetDelivery/FilesAssetRequestResolver.js";
7
- export * from "./AssetDelivery/SetCacheControlHeaders.js";
8
- export * from "./AssetDelivery/SetResponseHeaders.js";
9
- export * from "./AssetDelivery/privateFiles/PublicCache.js";
10
- export * from "./AssetDelivery/privateFiles/PrivateCache.js";
5
+ export { PublicCache } from "../features/assetDelivery/privateFiles/PublicCache.js";
6
+ export { PrivateCache } from "../features/assetDelivery/privateFiles/PrivateCache.js";
@@ -1,2 +1 @@
1
- import { AssetDeliveryConfigModifierPlugin } from "./index.js";
2
- export declare const setupAssetDelivery: () => (AssetDeliveryConfigModifierPlugin | import("@webiny/handler").ModifyFastifyPlugin)[];
1
+ export declare const setupAssetDelivery: () => import("@webiny/handler").ModifyFastifyPlugin[];
@@ -1,8 +1,5 @@
1
1
  import { ResponseHeaders, createHandlerOnRequest, createModifyFastifyPlugin, createRoute } from "@webiny/handler";
2
- import { PrivateFilesAssetProcessor } from "./AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js";
3
- import { PrivateAuthenticatedAuthorizer } from "./AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js";
4
- import { PrivateFileAssetRequestResolver } from "./AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js";
5
- import { AssetDeliveryConfigBuilder, AssetDeliveryConfigModifierPlugin, FilesAssetRequestResolver, createAssetDeliveryConfig } from "./index.js";
2
+ import { AssetOutputStrategy, AssetProcessor, AssetRequestResolver, AssetResolver } from "../features/assetDelivery/abstractions.js";
6
3
  const noCacheHeaders = ResponseHeaders.create({
7
4
  "content-type": "application/json",
8
5
  "cache-control": "no-cache, no-store, must-revalidate"
@@ -24,13 +21,11 @@ const setupAssetDelivery = ()=>{
24
21
  };
25
22
  return [
26
23
  createModifyFastifyPlugin((app)=>{
27
- const configBuilder = new AssetDeliveryConfigBuilder();
28
- const configPlugins = app.webiny.plugins.byType(AssetDeliveryConfigModifierPlugin.type);
29
- configPlugins.forEach((configPlugin)=>configPlugin.buildConfig(configBuilder));
24
+ const container = app.webiny.container;
30
25
  let resolvedRequest;
31
26
  let resolvedAsset;
32
27
  const handlerOnRequest = createHandlerOnRequest(async (request, reply)=>{
33
- const requestResolver = configBuilder.getAssetRequestResolver();
28
+ const requestResolver = container.resolve(AssetRequestResolver);
34
29
  resolvedRequest = await requestResolver.resolve(request);
35
30
  if (!resolvedRequest) {
36
31
  reply.code(404).headers(noCacheHeaders.getHeaders()).send({
@@ -38,8 +33,7 @@ const setupAssetDelivery = ()=>{
38
33
  }).hijack();
39
34
  return false;
40
35
  }
41
- const container = app.webiny.container;
42
- const assetResolver = configBuilder.getAssetResolver(container);
36
+ const assetResolver = container.resolve(AssetResolver);
43
37
  resolvedAsset = await assetResolver.resolve(resolvedRequest);
44
38
  if (!resolvedAsset) {
45
39
  reply.code(404).headers(noCacheHeaders.getHeaders()).send({
@@ -56,13 +50,9 @@ const setupAssetDelivery = ()=>{
56
50
  onGet("*", async (_, reply)=>{
57
51
  assertAssetRequestWasResolved(resolvedRequest);
58
52
  assertAssetWasResolved(resolvedAsset);
59
- if (context.wcp.canUsePrivateFiles()) configBuilder.decorateAssetProcessor(({ assetProcessor, context })=>{
60
- const assetAuthorizer = new PrivateAuthenticatedAuthorizer(context);
61
- return new PrivateFilesAssetProcessor(context, assetAuthorizer, assetProcessor);
62
- });
63
- const outputStrategy = configBuilder.getAssetOutputStrategy(context, resolvedRequest, resolvedAsset);
53
+ const outputStrategy = context.container.resolve(AssetOutputStrategy);
64
54
  resolvedAsset.setOutputStrategy(outputStrategy);
65
- const assetProcessor = configBuilder.getAssetProcessor(context);
55
+ const assetProcessor = context.container.resolve(AssetProcessor);
66
56
  const processedAsset = await assetProcessor.process(resolvedRequest, resolvedAsset);
67
57
  console.log(`Output asset (size: ${processedAsset.getSize()} bytes).`);
68
58
  return outputAsset(reply, processedAsset);
@@ -71,10 +61,6 @@ const setupAssetDelivery = ()=>{
71
61
  });
72
62
  });
73
63
  app.webiny.plugins.register(handlerOnRequest, deliveryRoute);
74
- }),
75
- createAssetDeliveryConfig((config)=>{
76
- config.decorateAssetRequestResolver(()=>new FilesAssetRequestResolver());
77
- config.decorateAssetRequestResolver(({ assetRequestResolver })=>new PrivateFileAssetRequestResolver(assetRequestResolver));
78
64
  })
79
65
  ];
80
66
  };
@@ -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 { PrivateFilesAssetProcessor } from \"./AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js\";\nimport { PrivateAuthenticatedAuthorizer } from \"./AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js\";\nimport { PrivateFileAssetRequestResolver } from \"./AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js\";\nimport type { Asset, AssetRequest } from \"./index.js\";\nimport {\n AssetDeliveryConfigBuilder,\n AssetDeliveryConfigModifierPlugin,\n FilesAssetRequestResolver,\n createAssetDeliveryConfig\n} from \"./index.js\";\nimport type { Reply } from \"@webiny/handler/types.js\";\nimport type { ApiCoreContext } from \"@webiny/api-core/types/core.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 // Set default headers.\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 // Config builder allows config modification via plugins.\n const configBuilder = new AssetDeliveryConfigBuilder();\n\n // Apply config modifications.\n const configPlugins = app.webiny.plugins.byType<AssetDeliveryConfigModifierPlugin>(\n AssetDeliveryConfigModifierPlugin.type\n );\n\n configPlugins.forEach(configPlugin => configPlugin.buildConfig(configBuilder));\n\n let resolvedRequest: AssetRequest | undefined;\n let resolvedAsset: Asset | undefined;\n\n // Create a `HandlerOnRequest` plugin to resolve `tenant`, and allow the system to bootstrap.\n const handlerOnRequest = createHandlerOnRequest(async (request, reply) => {\n const requestResolver = configBuilder.getAssetRequestResolver();\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 container = app.webiny.container;\n const assetResolver = configBuilder.getAssetResolver(container);\n\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 // Create the `Route` plugin, to handle all GET requests, and output the resolved asset.\n const deliveryRoute = createRoute<ApiCoreContext>(({ onGet, context }) => {\n onGet(\n \"*\",\n async (_, reply) => {\n assertAssetRequestWasResolved(resolvedRequest);\n assertAssetWasResolved(resolvedAsset);\n\n if (context.wcp.canUsePrivateFiles()) {\n configBuilder.decorateAssetProcessor(({ assetProcessor, context }) => {\n // Currently, we only have one authorizer.\n const assetAuthorizer = new PrivateAuthenticatedAuthorizer(context);\n\n return new PrivateFilesAssetProcessor(\n context,\n assetAuthorizer,\n assetProcessor\n );\n });\n }\n\n const outputStrategy = configBuilder.getAssetOutputStrategy(\n context,\n resolvedRequest,\n resolvedAsset\n );\n\n resolvedAsset.setOutputStrategy(outputStrategy);\n\n const assetProcessor = configBuilder.getAssetProcessor(context);\n\n const processedAsset = await assetProcessor.process(\n resolvedRequest,\n resolvedAsset\n );\n\n // Get reply object (runs the output strategy under the hood).\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 // Create the default configuration\n createAssetDeliveryConfig(config => {\n config.decorateAssetRequestResolver(() => {\n // This resolver works with `/files/*` requests.\n return new FilesAssetRequestResolver();\n });\n\n config.decorateAssetRequestResolver(({ assetRequestResolver }) => {\n // This resolver works with `/private/*` requests.\n return new PrivateFileAssetRequestResolver(assetRequestResolver);\n });\n })\n ];\n};\n"],"names":["noCacheHeaders","ResponseHeaders","assertAssetRequestWasResolved","request","undefined","Error","assertAssetWasResolved","asset","setupAssetDelivery","outputAsset","reply","assetReply","headers","createModifyFastifyPlugin","app","configBuilder","AssetDeliveryConfigBuilder","configPlugins","AssetDeliveryConfigModifierPlugin","configPlugin","resolvedRequest","resolvedAsset","handlerOnRequest","createHandlerOnRequest","requestResolver","container","assetResolver","deliveryRoute","createRoute","onGet","context","_","assetProcessor","assetAuthorizer","PrivateAuthenticatedAuthorizer","PrivateFilesAssetProcessor","outputStrategy","processedAsset","console","createAssetDeliveryConfig","config","FilesAssetRequestResolver","assetRequestResolver","PrivateFileAssetRequestResolver"],"mappings":";;;;;AAmBA,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;QAGrCC,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;YAEtB,MAAMC,gBAAgB,IAAIC;YAG1B,MAAMC,gBAAgBH,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAC3CI,kCAAkC,IAAI;YAG1CD,cAAc,OAAO,CAACE,CAAAA,eAAgBA,aAAa,WAAW,CAACJ;YAE/D,IAAIK;YACJ,IAAIC;YAGJ,MAAMC,mBAAmBC,uBAAuB,OAAOpB,SAASO;gBAC5D,MAAMc,kBAAkBT,cAAc,uBAAuB;gBAC7DK,kBAAkB,MAAMI,gBAAgB,OAAO,CAACrB;gBAEhD,IAAI,CAACiB,iBAAiB;oBAClBV,MACK,IAAI,CAAC,KACL,OAAO,CAACV,eAAe,UAAU,IACjC,IAAI,CAAC;wBAAE,OAAO;oBAAiC,GAC/C,MAAM;oBAEX,OAAO;gBACX;gBAEA,MAAMyB,YAAYX,IAAI,MAAM,CAAC,SAAS;gBACtC,MAAMY,gBAAgBX,cAAc,gBAAgB,CAACU;gBAErDJ,gBAAgB,MAAMK,cAAc,OAAO,CAACN;gBAE5C,IAAI,CAACC,eAAe;oBAChBX,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,YAAYkB,cAAc,SAAS;gBACvC;YAGJ;YAGA,MAAMM,gBAAgBC,YAA4B,CAAC,EAAEC,KAAK,EAAEC,OAAO,EAAE;gBACjED,MACI,KACA,OAAOE,GAAGrB;oBACNR,8BAA8BkB;oBAC9Bd,uBAAuBe;oBAEvB,IAAIS,QAAQ,GAAG,CAAC,kBAAkB,IAC9Bf,cAAc,sBAAsB,CAAC,CAAC,EAAEiB,cAAc,EAAEF,OAAO,EAAE;wBAE7D,MAAMG,kBAAkB,IAAIC,+BAA+BJ;wBAE3D,OAAO,IAAIK,2BACPL,SACAG,iBACAD;oBAER;oBAGJ,MAAMI,iBAAiBrB,cAAc,sBAAsB,CACvDe,SACAV,iBACAC;oBAGJA,cAAc,iBAAiB,CAACe;oBAEhC,MAAMJ,iBAAiBjB,cAAc,iBAAiB,CAACe;oBAEvD,MAAMO,iBAAiB,MAAML,eAAe,OAAO,CAC/CZ,iBACAC;oBAIJiB,QAAQ,GAAG,CAAC,CAAC,oBAAoB,EAAED,eAAe,OAAO,GAAG,QAAQ,CAAC;oBACrE,OAAO5B,YAAYC,OAAO2B;gBAC9B,GACA;oBAAE,UAAU;gBAAK;YAEzB;YAEAvB,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAACQ,kBAAkBK;QAClD;QAEAY,0BAA0BC,CAAAA;YACtBA,OAAO,4BAA4B,CAAC,IAEzB,IAAIC;YAGfD,OAAO,4BAA4B,CAAC,CAAC,EAAEE,oBAAoB,EAAE,GAElD,IAAIC,gCAAgCD;QAEnD;KACH;AACL"}
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"}
@@ -0,0 +1,9 @@
1
+ import type { Request } from "@webiny/handler/types.js";
2
+ import { AssetRequest } from "../../delivery/AssetDelivery/AssetRequest.js";
3
+ import { type IAssetRequestResolver } from "./abstractions.js";
4
+ export declare class FilesAssetRequestResolver implements IAssetRequestResolver {
5
+ resolve(request: Request): Promise<AssetRequest | undefined>;
6
+ }
7
+ export declare const FilesAssetRequestResolverImpl: typeof FilesAssetRequestResolver & {
8
+ __abstraction: import("@webiny/di").Abstraction<IAssetRequestResolver>;
9
+ };
@@ -1,4 +1,5 @@
1
- import { AssetRequest } from "./AssetRequest.js";
1
+ import { AssetRequest } from "../../delivery/AssetDelivery/AssetRequest.js";
2
+ import { AssetRequestResolver } from "./abstractions.js";
2
3
  class FilesAssetRequestResolver {
3
4
  async resolve(request) {
4
5
  if (!request.url.startsWith("/files/")) return;
@@ -19,6 +20,10 @@ class FilesAssetRequestResolver {
19
20
  });
20
21
  }
21
22
  }
22
- export { FilesAssetRequestResolver };
23
+ const FilesAssetRequestResolverImpl = AssetRequestResolver.createImplementation({
24
+ implementation: FilesAssetRequestResolver,
25
+ dependencies: []
26
+ });
27
+ export { FilesAssetRequestResolver, FilesAssetRequestResolverImpl };
23
28
 
24
29
  //# sourceMappingURL=FilesAssetRequestResolver.js.map
@@ -0,0 +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"}
@@ -0,0 +1,8 @@
1
+ import type { AssetReply } from "../../delivery/AssetDelivery/abstractions/AssetReply.js";
2
+ import { type IAssetOutputStrategy } from "./abstractions.js";
3
+ export declare class NullAssetOutputStrategy implements IAssetOutputStrategy {
4
+ output(): Promise<AssetReply>;
5
+ }
6
+ export declare const NullAssetOutputStrategyImpl: typeof NullAssetOutputStrategy & {
7
+ __abstraction: import("@webiny/di").Abstraction<IAssetOutputStrategy>;
8
+ };
@@ -0,0 +1,14 @@
1
+ import { NullAssetReply } from "./NullAssetReply.js";
2
+ import { AssetOutputStrategy } from "./abstractions.js";
3
+ class NullAssetOutputStrategy {
4
+ async output() {
5
+ return new NullAssetReply();
6
+ }
7
+ }
8
+ const NullAssetOutputStrategyImpl = AssetOutputStrategy.createImplementation({
9
+ implementation: NullAssetOutputStrategy,
10
+ dependencies: []
11
+ });
12
+ export { NullAssetOutputStrategy, NullAssetOutputStrategyImpl };
13
+
14
+ //# sourceMappingURL=NullAssetOutputStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/NullAssetOutputStrategy.js","sources":["../../../src/features/assetDelivery/NullAssetOutputStrategy.ts"],"sourcesContent":["import type { AssetReply } from \"~/delivery/AssetDelivery/abstractions/AssetReply.js\";\nimport { NullAssetReply } from \"./NullAssetReply.js\";\nimport { AssetOutputStrategy, type IAssetOutputStrategy } from \"./abstractions.js\";\n\nexport class NullAssetOutputStrategy implements IAssetOutputStrategy {\n async output(): Promise<AssetReply> {\n return new NullAssetReply();\n }\n}\n\nexport const NullAssetOutputStrategyImpl = AssetOutputStrategy.createImplementation({\n implementation: NullAssetOutputStrategy,\n dependencies: []\n});\n"],"names":["NullAssetOutputStrategy","NullAssetReply","NullAssetOutputStrategyImpl","AssetOutputStrategy"],"mappings":";;AAIO,MAAMA;IACT,MAAM,SAA8B;QAChC,OAAO,IAAIC;IACf;AACJ;AAEO,MAAMC,8BAA8BC,oBAAoB,oBAAoB,CAAC;IAChF,gBAAgBH;IAChB,cAAc,EAAE;AACpB"}
@@ -1,4 +1,4 @@
1
- import { AssetReply } from "./abstractions/AssetReply.js";
1
+ import { AssetReply } from "../../delivery/AssetDelivery/abstractions/AssetReply.js";
2
2
  class NullAssetReply extends AssetReply {
3
3
  constructor(){
4
4
  super({
@@ -1 +1 @@
1
- {"version":3,"file":"delivery/AssetDelivery/NullAssetReply.js","sources":["../../../src/delivery/AssetDelivery/NullAssetReply.ts"],"sourcesContent":["import { AssetReply } from \"~/delivery/AssetDelivery/abstractions/AssetReply.js\";\n\nexport class NullAssetReply extends AssetReply {\n constructor() {\n super({\n code: 404,\n body: () => ({ error: \"Asset output strategy is not implemented!\" })\n });\n }\n}\n"],"names":["NullAssetReply","AssetReply"],"mappings":";AAEO,MAAMA,uBAAuBC;IAChC,aAAc;QACV,KAAK,CAAC;YACF,MAAM;YACN,MAAM,IAAO;oBAAE,OAAO;gBAA4C;QACtE;IACJ;AACJ"}
1
+ {"version":3,"file":"features/assetDelivery/NullAssetReply.js","sources":["../../../src/features/assetDelivery/NullAssetReply.ts"],"sourcesContent":["import { AssetReply } from \"~/delivery/AssetDelivery/abstractions/AssetReply.js\";\n\nexport class NullAssetReply extends AssetReply {\n constructor() {\n super({\n code: 404,\n body: () => ({ error: \"Asset output strategy is not implemented!\" })\n });\n }\n}\n"],"names":["NullAssetReply","AssetReply"],"mappings":";AAEO,MAAMA,uBAAuBC;IAChC,aAAc;QACV,KAAK,CAAC;YACF,MAAM;YACN,MAAM,IAAO;oBAAE,OAAO;gBAA4C;QACtE;IACJ;AACJ"}
@@ -0,0 +1,8 @@
1
+ import type { Asset } from "../../delivery/AssetDelivery/Asset.js";
2
+ import { type IAssetResolver } from "./abstractions.js";
3
+ export declare class NullAssetResolver implements IAssetResolver {
4
+ resolve(): Promise<Asset | undefined>;
5
+ }
6
+ export declare const NullAssetResolverImpl: typeof NullAssetResolver & {
7
+ __abstraction: import("@webiny/di").Abstraction<IAssetResolver>;
8
+ };
@@ -0,0 +1,13 @@
1
+ import { AssetResolver } from "./abstractions.js";
2
+ class NullAssetResolver {
3
+ resolve() {
4
+ return Promise.resolve(void 0);
5
+ }
6
+ }
7
+ const NullAssetResolverImpl = AssetResolver.createImplementation({
8
+ implementation: NullAssetResolver,
9
+ dependencies: []
10
+ });
11
+ export { NullAssetResolver, NullAssetResolverImpl };
12
+
13
+ //# sourceMappingURL=NullAssetResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/NullAssetResolver.js","sources":["../../../src/features/assetDelivery/NullAssetResolver.ts"],"sourcesContent":["import type { Asset } from \"~/delivery/AssetDelivery/Asset.js\";\nimport { AssetResolver, type IAssetResolver } from \"./abstractions.js\";\n\nexport class NullAssetResolver implements IAssetResolver {\n resolve(): Promise<Asset | undefined> {\n return Promise.resolve(undefined);\n }\n}\n\nexport const NullAssetResolverImpl = AssetResolver.createImplementation({\n implementation: NullAssetResolver,\n dependencies: []\n});\n"],"names":["NullAssetResolver","Promise","undefined","NullAssetResolverImpl","AssetResolver"],"mappings":";AAGO,MAAMA;IACT,UAAsC;QAClC,OAAOC,QAAQ,OAAO,CAACC;IAC3B;AACJ;AAEO,MAAMC,wBAAwBC,cAAc,oBAAoB,CAAC;IACpE,gBAAgBJ;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,54 @@
1
+ import type { Request } from "@webiny/handler/types.js";
2
+ import type { AssetRequest } from "../../delivery/AssetDelivery/AssetRequest.js";
3
+ import type { Asset } from "../../delivery/AssetDelivery/Asset.js";
4
+ import type { AssetReply } from "../../delivery/AssetDelivery/abstractions/AssetReply.js";
5
+ import type { File } from "../../domain/file/types.js";
6
+ export interface IAssetRequestResolver {
7
+ resolve(request: Request): Promise<AssetRequest | undefined>;
8
+ }
9
+ export interface IAssetResolver {
10
+ resolve(request: AssetRequest): Promise<Asset | undefined>;
11
+ }
12
+ export interface IAssetProcessor {
13
+ process(assetRequest: AssetRequest, asset: Asset): Promise<Asset>;
14
+ }
15
+ export interface IAssetOutputStrategy {
16
+ output(asset: Asset): Promise<AssetReply>;
17
+ }
18
+ export interface IAssetTransformationStrategy {
19
+ transform(assetRequest: AssetRequest, asset: Asset): Promise<Asset>;
20
+ }
21
+ export interface IAssetContentsReader {
22
+ read(asset: Asset): Promise<Buffer>;
23
+ }
24
+ export interface IAssetAuthorizer {
25
+ authorize(file: File): Promise<void>;
26
+ }
27
+ export declare const AssetRequestResolver: import("@webiny/di").Abstraction<IAssetRequestResolver>;
28
+ export declare const AssetResolver: import("@webiny/di").Abstraction<IAssetResolver>;
29
+ export declare const AssetProcessor: import("@webiny/di").Abstraction<IAssetProcessor>;
30
+ export declare const AssetOutputStrategy: import("@webiny/di").Abstraction<IAssetOutputStrategy>;
31
+ export declare const AssetTransformationStrategy: import("@webiny/di").Abstraction<IAssetTransformationStrategy>;
32
+ export declare const AssetContentsReader: import("@webiny/di").Abstraction<IAssetContentsReader>;
33
+ export declare const AssetAuthorizer: import("@webiny/di").Abstraction<IAssetAuthorizer>;
34
+ export declare namespace AssetRequestResolver {
35
+ type Interface = IAssetRequestResolver;
36
+ }
37
+ export declare namespace AssetResolver {
38
+ type Interface = IAssetResolver;
39
+ }
40
+ export declare namespace AssetProcessor {
41
+ type Interface = IAssetProcessor;
42
+ }
43
+ export declare namespace AssetOutputStrategy {
44
+ type Interface = IAssetOutputStrategy;
45
+ }
46
+ export declare namespace AssetTransformationStrategy {
47
+ type Interface = IAssetTransformationStrategy;
48
+ }
49
+ export declare namespace AssetContentsReader {
50
+ type Interface = IAssetContentsReader;
51
+ }
52
+ export declare namespace AssetAuthorizer {
53
+ type Interface = IAssetAuthorizer;
54
+ }
@@ -0,0 +1,11 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const AssetRequestResolver = createAbstraction("AssetDelivery/AssetRequestResolver");
3
+ const AssetResolver = createAbstraction("AssetDelivery/AssetResolver");
4
+ const AssetProcessor = createAbstraction("AssetDelivery/AssetProcessor");
5
+ const AssetOutputStrategy = createAbstraction("AssetDelivery/AssetOutputStrategy");
6
+ const AssetTransformationStrategy = createAbstraction("AssetDelivery/AssetTransformationStrategy");
7
+ const AssetContentsReader = createAbstraction("AssetDelivery/AssetContentsReader");
8
+ const AssetAuthorizer = createAbstraction("AssetDelivery/AssetAuthorizer");
9
+ export { AssetAuthorizer, AssetContentsReader, AssetOutputStrategy, AssetProcessor, AssetRequestResolver, AssetResolver, AssetTransformationStrategy };
10
+
11
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/abstractions.js","sources":["../../../src/features/assetDelivery/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Request } from \"@webiny/handler/types.js\";\nimport type { AssetRequest } from \"~/delivery/AssetDelivery/AssetRequest.js\";\nimport type { Asset } from \"~/delivery/AssetDelivery/Asset.js\";\nimport type { AssetReply } from \"~/delivery/AssetDelivery/abstractions/AssetReply.js\";\nimport type { File } from \"~/domain/file/types.js\";\n\nexport interface IAssetRequestResolver {\n resolve(request: Request): Promise<AssetRequest | undefined>;\n}\n\nexport interface IAssetResolver {\n resolve(request: AssetRequest): Promise<Asset | undefined>;\n}\n\nexport interface IAssetProcessor {\n process(assetRequest: AssetRequest, asset: Asset): Promise<Asset>;\n}\n\nexport interface IAssetOutputStrategy {\n output(asset: Asset): Promise<AssetReply>;\n}\n\nexport interface IAssetTransformationStrategy {\n transform(assetRequest: AssetRequest, asset: Asset): Promise<Asset>;\n}\n\nexport interface IAssetContentsReader {\n read(asset: Asset): Promise<Buffer>;\n}\n\nexport interface IAssetAuthorizer {\n authorize(file: File): Promise<void>;\n}\n\nexport const AssetRequestResolver = createAbstraction<IAssetRequestResolver>(\n \"AssetDelivery/AssetRequestResolver\"\n);\n\nexport const AssetResolver = createAbstraction<IAssetResolver>(\"AssetDelivery/AssetResolver\");\n\nexport const AssetProcessor = createAbstraction<IAssetProcessor>(\"AssetDelivery/AssetProcessor\");\n\nexport const AssetOutputStrategy = createAbstraction<IAssetOutputStrategy>(\n \"AssetDelivery/AssetOutputStrategy\"\n);\n\nexport const AssetTransformationStrategy = createAbstraction<IAssetTransformationStrategy>(\n \"AssetDelivery/AssetTransformationStrategy\"\n);\n\nexport const AssetContentsReader = createAbstraction<IAssetContentsReader>(\n \"AssetDelivery/AssetContentsReader\"\n);\n\nexport const AssetAuthorizer = createAbstraction<IAssetAuthorizer>(\"AssetDelivery/AssetAuthorizer\");\n\nexport namespace AssetRequestResolver {\n export type Interface = IAssetRequestResolver;\n}\n\nexport namespace AssetResolver {\n export type Interface = IAssetResolver;\n}\n\nexport namespace AssetProcessor {\n export type Interface = IAssetProcessor;\n}\n\nexport namespace AssetOutputStrategy {\n export type Interface = IAssetOutputStrategy;\n}\n\nexport namespace AssetTransformationStrategy {\n export type Interface = IAssetTransformationStrategy;\n}\n\nexport namespace AssetContentsReader {\n export type Interface = IAssetContentsReader;\n}\n\nexport namespace AssetAuthorizer {\n export type Interface = IAssetAuthorizer;\n}\n"],"names":["AssetRequestResolver","createAbstraction","AssetResolver","AssetProcessor","AssetOutputStrategy","AssetTransformationStrategy","AssetContentsReader","AssetAuthorizer"],"mappings":";AAmCO,MAAMA,uBAAuBC,kBAChC;AAGG,MAAMC,gBAAgBD,kBAAkC;AAExD,MAAME,iBAAiBF,kBAAmC;AAE1D,MAAMG,sBAAsBH,kBAC/B;AAGG,MAAMI,8BAA8BJ,kBACvC;AAGG,MAAMK,sBAAsBL,kBAC/B;AAGG,MAAMM,kBAAkBN,kBAAoC"}
@@ -0,0 +1,4 @@
1
+ export declare const AssetDeliveryFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,29 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js";
3
+ import { FilesAssetRequestResolverImpl } from "./FilesAssetRequestResolver.js";
4
+ import { NullAssetResolverImpl } from "./NullAssetResolver.js";
5
+ import { NullAssetOutputStrategyImpl } from "./NullAssetOutputStrategy.js";
6
+ import { PassthroughAssetTransformationStrategyImpl } from "./transformation/PassthroughAssetTransformationStrategy.js";
7
+ import { TransformationAssetProcessorImpl } from "./transformation/TransformationAssetProcessor.js";
8
+ import { PrivateFileAssetRequestResolverDecorator } from "./privateFiles/PrivateFileAssetRequestResolver.js";
9
+ import { PrivateAuthenticatedAuthorizerImpl } from "./privateFiles/PrivateAuthenticatedAuthorizer.js";
10
+ import { PrivateFilesAssetProcessorDecorator } from "./privateFiles/PrivateFilesAssetProcessor.js";
11
+ const AssetDeliveryFeature = createFeature({
12
+ name: "AssetDelivery",
13
+ register (container) {
14
+ container.register(FilesAssetRequestResolverImpl);
15
+ container.register(NullAssetResolverImpl);
16
+ container.register(NullAssetOutputStrategyImpl);
17
+ container.register(PassthroughAssetTransformationStrategyImpl);
18
+ container.register(TransformationAssetProcessorImpl);
19
+ container.registerDecorator(PrivateFileAssetRequestResolverDecorator);
20
+ const wcp = container.resolve(WcpContext);
21
+ if (wcp.canUsePrivateFiles()) {
22
+ container.register(PrivateAuthenticatedAuthorizerImpl);
23
+ container.registerDecorator(PrivateFilesAssetProcessorDecorator);
24
+ }
25
+ }
26
+ });
27
+ export { AssetDeliveryFeature };
28
+
29
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/feature.js","sources":["../../../src/features/assetDelivery/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { WcpContext } from \"@webiny/api-core/features/wcp/WcpContext/index.js\";\nimport { FilesAssetRequestResolverImpl } from \"./FilesAssetRequestResolver.js\";\nimport { NullAssetResolverImpl } from \"./NullAssetResolver.js\";\nimport { NullAssetOutputStrategyImpl } from \"./NullAssetOutputStrategy.js\";\nimport { PassthroughAssetTransformationStrategyImpl } from \"./transformation/PassthroughAssetTransformationStrategy.js\";\nimport { TransformationAssetProcessorImpl } from \"./transformation/TransformationAssetProcessor.js\";\nimport { PrivateFileAssetRequestResolverDecorator } from \"./privateFiles/PrivateFileAssetRequestResolver.js\";\nimport { PrivateAuthenticatedAuthorizerImpl } from \"./privateFiles/PrivateAuthenticatedAuthorizer.js\";\nimport { PrivateFilesAssetProcessorDecorator } from \"./privateFiles/PrivateFilesAssetProcessor.js\";\n\nexport const AssetDeliveryFeature = createFeature({\n name: \"AssetDelivery\",\n register(container) {\n container.register(FilesAssetRequestResolverImpl);\n container.register(NullAssetResolverImpl);\n container.register(NullAssetOutputStrategyImpl);\n container.register(PassthroughAssetTransformationStrategyImpl);\n container.register(TransformationAssetProcessorImpl);\n\n container.registerDecorator(PrivateFileAssetRequestResolverDecorator);\n\n const wcp = container.resolve(WcpContext);\n if (wcp.canUsePrivateFiles()) {\n container.register(PrivateAuthenticatedAuthorizerImpl);\n container.registerDecorator(PrivateFilesAssetProcessorDecorator);\n }\n }\n});\n"],"names":["AssetDeliveryFeature","createFeature","container","FilesAssetRequestResolverImpl","NullAssetResolverImpl","NullAssetOutputStrategyImpl","PassthroughAssetTransformationStrategyImpl","TransformationAssetProcessorImpl","PrivateFileAssetRequestResolverDecorator","wcp","WcpContext","PrivateAuthenticatedAuthorizerImpl","PrivateFilesAssetProcessorDecorator"],"mappings":";;;;;;;;;;AAWO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;QAEnBL,UAAU,iBAAiB,CAACM;QAE5B,MAAMC,MAAMP,UAAU,OAAO,CAACQ;QAC9B,IAAID,IAAI,kBAAkB,IAAI;YAC1BP,UAAU,QAAQ,CAACS;YACnBT,UAAU,iBAAiB,CAACU;QAChC;IACJ;AACJ"}
@@ -0,0 +1,4 @@
1
+ import { AssetReply } from "../../../delivery/AssetDelivery/abstractions/AssetReply.js";
2
+ export declare class NotAuthorizedAssetReply extends AssetReply {
3
+ constructor();
4
+ }
@@ -1,5 +1,5 @@
1
1
  import { ResponseHeaders } from "@webiny/handler";
2
- import { AssetReply } from "../../index.js";
2
+ import { AssetReply } from "../../../delivery/AssetDelivery/abstractions/AssetReply.js";
3
3
  class NotAuthorizedAssetReply extends AssetReply {
4
4
  constructor(){
5
5
  super({
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/privateFiles/NotAuthorizedAssetReply.js","sources":["../../../../src/features/assetDelivery/privateFiles/NotAuthorizedAssetReply.ts"],"sourcesContent":["import { ResponseHeaders } from \"@webiny/handler\";\nimport { AssetReply } from \"~/delivery/AssetDelivery/abstractions/AssetReply.js\";\n\nexport class NotAuthorizedAssetReply extends AssetReply {\n constructor() {\n super({\n code: 403,\n headers: ResponseHeaders.create({\n \"cache-control\": \"no-store\",\n \"content-type\": \"application/json; charset=utf-8\"\n }),\n body: () => ({ error: \"Not authorized!\", code: \"NOT_AUTHORIZED\" })\n });\n }\n}\n"],"names":["NotAuthorizedAssetReply","AssetReply","ResponseHeaders"],"mappings":";;AAGO,MAAMA,gCAAgCC;IACzC,aAAc;QACV,KAAK,CAAC;YACF,MAAM;YACN,SAASC,gBAAgB,MAAM,CAAC;gBAC5B,iBAAiB;gBACjB,gBAAgB;YACpB;YACA,MAAM,IAAO;oBAAE,OAAO;oBAAmB,MAAM;gBAAiB;QACpE;IACJ;AACJ"}
@@ -0,0 +1,5 @@
1
+ import type { AssetReply } from "../../../delivery/AssetDelivery/abstractions/AssetReply.js";
2
+ import type { IAssetOutputStrategy } from "../abstractions.js";
3
+ export declare class NotAuthorizedOutputStrategy implements IAssetOutputStrategy {
4
+ output(): Promise<AssetReply>;
5
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/privateFiles/NotAuthorizedOutputStrategy.js","sources":["../../../../src/features/assetDelivery/privateFiles/NotAuthorizedOutputStrategy.ts"],"sourcesContent":["import type { AssetReply } from \"~/delivery/AssetDelivery/abstractions/AssetReply.js\";\nimport { NotAuthorizedAssetReply } from \"./NotAuthorizedAssetReply.js\";\nimport type { IAssetOutputStrategy } from \"../abstractions.js\";\n\nexport class NotAuthorizedOutputStrategy implements IAssetOutputStrategy {\n async output(): Promise<AssetReply> {\n return new NotAuthorizedAssetReply();\n }\n}\n"],"names":["NotAuthorizedOutputStrategy","NotAuthorizedAssetReply"],"mappings":";AAIO,MAAMA;IACT,MAAM,SAA8B;QAChC,OAAO,IAAIC;IACf;AACJ"}
@@ -0,0 +1,11 @@
1
+ import type { File } from "../../../domain/file/types.js";
2
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
3
+ import { type IAssetAuthorizer } from "../abstractions.js";
4
+ export declare class PrivateAuthenticatedAuthorizer implements IAssetAuthorizer {
5
+ private identityContext;
6
+ constructor(identityContext: IdentityContext.Interface);
7
+ authorize(file: File): Promise<void>;
8
+ }
9
+ export declare const PrivateAuthenticatedAuthorizerImpl: typeof PrivateAuthenticatedAuthorizer & {
10
+ __abstraction: import("@webiny/di").Abstraction<IAssetAuthorizer>;
11
+ };
@@ -0,0 +1,26 @@
1
+ import error from "@webiny/error";
2
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
3
+ import { AssetAuthorizer } from "../abstractions.js";
4
+ class PrivateAuthenticatedAuthorizer {
5
+ constructor(identityContext){
6
+ this.identityContext = identityContext;
7
+ }
8
+ async authorize(file) {
9
+ if (file.accessControl && "private-authenticated" === file.accessControl.type) {
10
+ const identity = this.identityContext.getIdentity();
11
+ if (!identity) throw new error({
12
+ code: "NOT_AUTHORIZED",
13
+ message: "You're not authorized to access this asset!"
14
+ });
15
+ }
16
+ }
17
+ }
18
+ const PrivateAuthenticatedAuthorizerImpl = AssetAuthorizer.createImplementation({
19
+ implementation: PrivateAuthenticatedAuthorizer,
20
+ dependencies: [
21
+ IdentityContext
22
+ ]
23
+ });
24
+ export { PrivateAuthenticatedAuthorizer, PrivateAuthenticatedAuthorizerImpl };
25
+
26
+ //# sourceMappingURL=PrivateAuthenticatedAuthorizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js","sources":["../../../../src/features/assetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.ts"],"sourcesContent":["import Error from \"@webiny/error\";\nimport type { File } from \"~/domain/file/types.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { AssetAuthorizer, type IAssetAuthorizer } from \"../abstractions.js\";\n\nexport class PrivateAuthenticatedAuthorizer implements IAssetAuthorizer {\n private identityContext: IdentityContext.Interface;\n\n constructor(identityContext: IdentityContext.Interface) {\n this.identityContext = identityContext;\n }\n\n async authorize(file: File) {\n if (file.accessControl && file.accessControl.type === \"private-authenticated\") {\n const identity = this.identityContext.getIdentity();\n\n if (!identity) {\n throw new Error({\n code: \"NOT_AUTHORIZED\",\n message: \"You're not authorized to access this asset!\"\n });\n }\n }\n }\n}\n\nexport const PrivateAuthenticatedAuthorizerImpl = AssetAuthorizer.createImplementation({\n implementation: PrivateAuthenticatedAuthorizer,\n dependencies: [IdentityContext]\n});\n"],"names":["PrivateAuthenticatedAuthorizer","identityContext","file","identity","Error","PrivateAuthenticatedAuthorizerImpl","AssetAuthorizer","IdentityContext"],"mappings":";;;AAKO,MAAMA;IAGT,YAAYC,eAA0C,CAAE;QACpD,IAAI,CAAC,eAAe,GAAGA;IAC3B;IAEA,MAAM,UAAUC,IAAU,EAAE;QACxB,IAAIA,KAAK,aAAa,IAAIA,AAA4B,4BAA5BA,KAAK,aAAa,CAAC,IAAI,EAA8B;YAC3E,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;YAEjD,IAAI,CAACA,UACD,MAAM,IAAIC,MAAM;gBACZ,MAAM;gBACN,SAAS;YACb;QAER;IACJ;AACJ;AAEO,MAAMC,qCAAqCC,gBAAgB,oBAAoB,CAAC;IACnF,gBAAgBN;IAChB,cAAc;QAACO;KAAgB;AACnC"}
@@ -0,0 +1,8 @@
1
+ import type { Asset } from "../../../delivery/AssetDelivery/Asset.js";
2
+ import type { AssetReply } from "../../../delivery/AssetDelivery/abstractions/AssetReply.js";
3
+ import type { IAssetOutputStrategy } from "../abstractions.js";
4
+ export declare class PrivateCache implements IAssetOutputStrategy {
5
+ private strategy;
6
+ constructor(strategy: IAssetOutputStrategy);
7
+ output(asset: Asset): Promise<AssetReply>;
8
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/privateFiles/PrivateCache.js","sources":["../../../../src/features/assetDelivery/privateFiles/PrivateCache.ts"],"sourcesContent":["import { parse, stringify } from \"cache-control-parser\";\nimport type { Asset } from \"~/delivery/AssetDelivery/Asset.js\";\nimport type { AssetReply } from \"~/delivery/AssetDelivery/abstractions/AssetReply.js\";\nimport type { IAssetOutputStrategy } from \"../abstractions.js\";\n\nexport class PrivateCache implements IAssetOutputStrategy {\n private strategy: IAssetOutputStrategy;\n\n constructor(strategy: IAssetOutputStrategy) {\n this.strategy = strategy;\n }\n\n async output(asset: Asset): Promise<AssetReply> {\n const reply = await this.strategy.output(asset);\n\n reply.setHeaders(headers => {\n headers.set(\"cache-control\", (value = \"\") => {\n const cacheControl = parse(value);\n cacheControl[\"private\"] = true;\n cacheControl[\"public\"] = false;\n return stringify(cacheControl);\n });\n return headers;\n });\n\n return reply;\n }\n}\n"],"names":["PrivateCache","strategy","asset","reply","headers","value","cacheControl","parse","stringify"],"mappings":";AAKO,MAAMA;IAGT,YAAYC,QAA8B,CAAE;QACxC,IAAI,CAAC,QAAQ,GAAGA;IACpB;IAEA,MAAM,OAAOC,KAAY,EAAuB;QAC5C,MAAMC,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAACD;QAEzCC,MAAM,UAAU,CAACC,CAAAA;YACbA,QAAQ,GAAG,CAAC,iBAAiB,CAACC,QAAQ,EAAE;gBACpC,MAAMC,eAAeC,MAAMF;gBAC3BC,YAAY,CAAC,UAAU,GAAG;gBAC1BA,YAAY,CAAC,SAAS,GAAG;gBACzB,OAAOE,UAAUF;YACrB;YACA,OAAOF;QACX;QAEA,OAAOD;IACX;AACJ"}
@@ -0,0 +1,11 @@
1
+ import type { Request } from "@webiny/handler/types.js";
2
+ import { AssetRequest } from "../../../delivery/AssetDelivery/AssetRequest.js";
3
+ import { type IAssetRequestResolver } from "../abstractions.js";
4
+ export declare class PrivateFileAssetRequestResolver implements IAssetRequestResolver {
5
+ private readonly resolver;
6
+ constructor(resolver: IAssetRequestResolver);
7
+ resolve(request: Request): Promise<AssetRequest | undefined>;
8
+ }
9
+ export declare const PrivateFileAssetRequestResolverDecorator: typeof PrivateFileAssetRequestResolver & {
10
+ __abstraction: import("@webiny/di").Abstraction<IAssetRequestResolver>;
11
+ };
@@ -1,4 +1,5 @@
1
- import { AssetRequest } from "../../index.js";
1
+ import { AssetRequest } from "../../../delivery/AssetDelivery/AssetRequest.js";
2
+ import { AssetRequestResolver } from "../abstractions.js";
2
3
  class PrivateFileAssetRequestResolver {
3
4
  constructor(resolver){
4
5
  this.resolver = resolver;
@@ -21,6 +22,10 @@ class PrivateFileAssetRequestResolver {
21
22
  });
22
23
  }
23
24
  }
24
- export { PrivateFileAssetRequestResolver };
25
+ const PrivateFileAssetRequestResolverDecorator = AssetRequestResolver.createDecorator({
26
+ decorator: PrivateFileAssetRequestResolver,
27
+ dependencies: []
28
+ });
29
+ export { PrivateFileAssetRequestResolver, PrivateFileAssetRequestResolverDecorator };
25
30
 
26
31
  //# sourceMappingURL=PrivateFileAssetRequestResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js","sources":["../../../../src/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.ts"],"sourcesContent":["import type { Request } from \"@webiny/handler/types.js\";\nimport { AssetRequest } from \"~/delivery/AssetDelivery/AssetRequest.js\";\nimport { AssetRequestResolver, type IAssetRequestResolver } from \"../abstractions.js\";\n\nexport class PrivateFileAssetRequestResolver implements IAssetRequestResolver {\n private readonly resolver: IAssetRequestResolver;\n\n constructor(resolver: IAssetRequestResolver) {\n this.resolver = resolver;\n }\n\n async resolve(request: Request): Promise<AssetRequest | undefined> {\n if (!request.url.startsWith(\"/private/\")) {\n return this.resolver.resolve(request);\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 return new AssetRequest({\n key: decodeURI(path).replace(\"/private/\", \"\"),\n context: {\n url: request.url,\n private: true\n },\n options: {\n ...query,\n width: query.width ? parseInt(query.width) : undefined\n }\n });\n }\n}\n\nexport const PrivateFileAssetRequestResolverDecorator = AssetRequestResolver.createDecorator({\n decorator: PrivateFileAssetRequestResolver,\n dependencies: []\n});\n"],"names":["PrivateFileAssetRequestResolver","resolver","request","params","query","path","AssetRequest","decodeURI","parseInt","undefined","PrivateFileAssetRequestResolverDecorator","AssetRequestResolver"],"mappings":";;AAIO,MAAMA;IAGT,YAAYC,QAA+B,CAAE;QACzC,IAAI,CAAC,QAAQ,GAAGA;IACpB;IAEA,MAAM,QAAQC,OAAgB,EAAqC;QAC/D,IAAI,CAACA,QAAQ,GAAG,CAAC,UAAU,CAAC,cACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACA;QAGjC,MAAMC,SAAUD,QAAQ,MAAM,IAAI,CAAC;QACnC,MAAME,QAASF,QAAQ,KAAK,IAAI,CAAC;QAEjC,MAAMG,OAAOF,MAAM,CAAC,IAAI;QAExB,OAAO,IAAIG,aAAa;YACpB,KAAKC,UAAUF,MAAM,OAAO,CAAC,aAAa;YAC1C,SAAS;gBACL,KAAKH,QAAQ,GAAG;gBAChB,SAAS;YACb;YACA,SAAS;gBACL,GAAGE,KAAK;gBACR,OAAOA,MAAM,KAAK,GAAGI,SAASJ,MAAM,KAAK,IAAIK;YACjD;QACJ;IACJ;AACJ;AAEO,MAAMC,2CAA2CC,qBAAqB,eAAe,CAAC;IACzF,WAAWX;IACX,cAAc,EAAE;AACpB"}
@@ -0,0 +1,19 @@
1
+ import type { Asset } from "../../../delivery/AssetDelivery/Asset.js";
2
+ import type { AssetRequest } from "../../../delivery/AssetDelivery/AssetRequest.js";
3
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
4
+ import { GetFileUseCase } from "../../../features/file/GetFile/index.js";
5
+ import { type IAssetProcessor, type IAssetAuthorizer } from "../abstractions.js";
6
+ export declare class PrivateFilesAssetProcessor implements IAssetProcessor {
7
+ private readonly identityContext;
8
+ private readonly getFile;
9
+ private readonly assetAuthorizer;
10
+ private readonly assetProcessor;
11
+ constructor(identityContext: IdentityContext.Interface, getFile: GetFileUseCase.Interface, assetAuthorizer: IAssetAuthorizer, assetProcessor: IAssetProcessor);
12
+ process(assetRequest: AssetRequest, asset: Asset): Promise<Asset>;
13
+ private isPrivate;
14
+ private requestedViaPrivateEndpoint;
15
+ private requestedViaPublicEndpoint;
16
+ }
17
+ export declare const PrivateFilesAssetProcessorDecorator: typeof PrivateFilesAssetProcessor & {
18
+ __abstraction: import("@webiny/di").Abstraction<IAssetProcessor>;
19
+ };
@@ -1,21 +1,22 @@
1
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
2
+ import { GetFileUseCase } from "../../file/GetFile/index.js";
1
3
  import { NotAuthorizedOutputStrategy } from "./NotAuthorizedOutputStrategy.js";
2
4
  import { RedirectToPublicUrlOutputStrategy } from "./RedirectToPublicUrlOutputStrategy.js";
3
5
  import { RedirectToPrivateUrlOutputStrategy } from "./RedirectToPrivateUrlOutputStrategy.js";
4
6
  import { PrivateCache } from "./PrivateCache.js";
5
7
  import { PublicCache } from "./PublicCache.js";
6
- import { GetFileUseCase } from "../../../features/file/GetFile/index.js";
8
+ import { AssetAuthorizer, AssetProcessor } from "../abstractions.js";
7
9
  class PrivateFilesAssetProcessor {
8
- constructor(context, assetAuthorizer, assetProcessor){
10
+ constructor(identityContext, getFile, assetAuthorizer, assetProcessor){
11
+ this.identityContext = identityContext;
12
+ this.getFile = getFile;
9
13
  this.assetAuthorizer = assetAuthorizer;
10
- this.context = context;
11
14
  this.assetProcessor = assetProcessor;
12
15
  }
13
16
  async process(assetRequest, asset) {
14
17
  const id = asset.getId();
15
- const { security } = this.context;
16
- const getFile = this.context.container.resolve(GetFileUseCase);
17
- const file = await security.withoutAuthorization(async ()=>{
18
- const fileResult = await getFile.execute(id);
18
+ const file = await this.identityContext.withoutAuthorization(async ()=>{
19
+ const fileResult = await this.getFile.execute(id);
19
20
  if (fileResult.isFail()) throw fileResult.error;
20
21
  return fileResult.value;
21
22
  });
@@ -51,6 +52,14 @@ class PrivateFilesAssetProcessor {
51
52
  return !this.requestedViaPrivateEndpoint(assetRequest);
52
53
  }
53
54
  }
54
- export { PrivateFilesAssetProcessor };
55
+ const PrivateFilesAssetProcessorDecorator = AssetProcessor.createDecorator({
56
+ decorator: PrivateFilesAssetProcessor,
57
+ dependencies: [
58
+ IdentityContext,
59
+ GetFileUseCase,
60
+ AssetAuthorizer
61
+ ]
62
+ });
63
+ export { PrivateFilesAssetProcessor, PrivateFilesAssetProcessorDecorator };
55
64
 
56
65
  //# sourceMappingURL=PrivateFilesAssetProcessor.js.map