@sitecore-content-sdk/nextjs 1.3.0-canary.9 → 1.4.0-canary.2

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 (234) hide show
  1. package/README.md +11 -11
  2. package/dist/cjs/client/index.js +10 -10
  3. package/dist/cjs/client/models.js +2 -2
  4. package/dist/cjs/client/sitecore-nextjs-client.js +160 -156
  5. package/dist/cjs/components/BYOCWrapper.js +31 -30
  6. package/dist/cjs/components/ComponentPropsContext.js +66 -59
  7. package/dist/cjs/components/FEaaSWrapper.js +33 -32
  8. package/dist/cjs/components/Link.js +117 -90
  9. package/dist/cjs/components/NextImage.js +66 -62
  10. package/dist/cjs/components/Placeholder.js +55 -50
  11. package/dist/cjs/components/RichText.js +133 -128
  12. package/dist/cjs/config/define-config.js +26 -25
  13. package/dist/cjs/config/index.js +5 -5
  14. package/dist/cjs/config-cli/define-cli-config.js +40 -39
  15. package/dist/cjs/config-cli/index.js +5 -5
  16. package/dist/cjs/editing/codegen/import-map.js +129 -118
  17. package/dist/cjs/editing/codegen/index.js +6 -6
  18. package/dist/cjs/editing/constants.js +10 -10
  19. package/dist/cjs/editing/editing-config-middleware.js +70 -69
  20. package/dist/cjs/editing/editing-render-middleware.js +145 -144
  21. package/dist/cjs/editing/feaas-render-middleware.js +102 -101
  22. package/dist/cjs/editing/index.js +19 -19
  23. package/dist/cjs/editing/render-middleware.js +46 -46
  24. package/dist/cjs/editing/utils.js +260 -257
  25. package/dist/cjs/index.js +132 -131
  26. package/dist/cjs/middleware/app-router-multisite-middleware.js +41 -20
  27. package/dist/cjs/middleware/index.js +30 -30
  28. package/dist/cjs/middleware/locale-middleware.js +85 -84
  29. package/dist/cjs/middleware/middleware.js +195 -192
  30. package/dist/cjs/middleware/multisite-middleware.js +141 -118
  31. package/dist/cjs/middleware/personalize-middleware.js +240 -236
  32. package/dist/cjs/middleware/redirects-middleware.js +323 -297
  33. package/dist/cjs/middleware/robots-middleware.js +45 -44
  34. package/dist/cjs/middleware/sitemap-middleware.js +50 -49
  35. package/dist/cjs/monitoring/healthcheck-middleware.js +31 -30
  36. package/dist/cjs/monitoring/index.js +5 -5
  37. package/dist/cjs/route-handler/editing-config-route-handler.js +110 -106
  38. package/dist/cjs/route-handler/editing-render-route-handler.js +270 -165
  39. package/dist/cjs/route-handler/index.js +11 -11
  40. package/dist/cjs/route-handler/robots-route-handler.js +69 -68
  41. package/dist/cjs/route-handler/sitemap-route-handler.js +66 -65
  42. package/dist/cjs/search/index.js +17 -0
  43. package/dist/cjs/services/component-props-service.js +142 -138
  44. package/dist/cjs/sharedTypes/component-props.js +2 -2
  45. package/dist/cjs/sharedTypes/sitecore-page-props.js +2 -2
  46. package/dist/cjs/site/index.js +5 -5
  47. package/dist/cjs/tools/codegen/import-map.js +15 -0
  48. package/dist/cjs/tools/component-props.loader.js +95 -95
  49. package/dist/cjs/tools/generate-map.js +317 -317
  50. package/dist/cjs/tools/index.js +14 -13
  51. package/dist/cjs/tools/templating/byoc-component.js +36 -36
  52. package/dist/cjs/tools/templating/constants.js +7 -7
  53. package/dist/cjs/tools/templating/default-component.js +35 -35
  54. package/dist/cjs/tools/templating/utils.js +200 -0
  55. package/dist/cjs/utils/index.js +14 -14
  56. package/dist/cjs/utils/utils.js +82 -73
  57. package/dist/esm/client/index.js +2 -2
  58. package/dist/esm/client/models.js +1 -1
  59. package/dist/esm/client/sitecore-nextjs-client.js +156 -152
  60. package/dist/esm/components/BYOCWrapper.js +27 -26
  61. package/dist/esm/components/ComponentPropsContext.js +28 -21
  62. package/dist/esm/components/FEaaSWrapper.js +29 -28
  63. package/dist/esm/components/Link.js +78 -51
  64. package/dist/esm/components/NextImage.js +60 -56
  65. package/dist/esm/components/Placeholder.js +18 -13
  66. package/dist/esm/components/RichText.js +96 -91
  67. package/dist/esm/config/define-config.js +21 -20
  68. package/dist/esm/config/index.js +1 -1
  69. package/dist/esm/config-cli/define-cli-config.js +36 -35
  70. package/dist/esm/config-cli/index.js +1 -1
  71. package/dist/esm/editing/codegen/import-map.js +92 -81
  72. package/dist/esm/editing/codegen/index.js +1 -1
  73. package/dist/esm/editing/constants.js +7 -7
  74. package/dist/esm/editing/editing-config-middleware.js +66 -65
  75. package/dist/esm/editing/editing-render-middleware.js +141 -140
  76. package/dist/esm/editing/feaas-render-middleware.js +98 -97
  77. package/dist/esm/editing/index.js +6 -6
  78. package/dist/esm/editing/render-middleware.js +42 -42
  79. package/dist/esm/editing/utils.js +246 -243
  80. package/dist/esm/index.js +25 -25
  81. package/dist/esm/middleware/app-router-multisite-middleware.js +37 -16
  82. package/dist/esm/middleware/index.js +11 -11
  83. package/dist/esm/middleware/locale-middleware.js +81 -80
  84. package/dist/esm/middleware/middleware.js +189 -186
  85. package/dist/esm/middleware/multisite-middleware.js +137 -114
  86. package/dist/esm/middleware/personalize-middleware.js +236 -232
  87. package/dist/esm/middleware/redirects-middleware.js +316 -290
  88. package/dist/esm/middleware/robots-middleware.js +41 -40
  89. package/dist/esm/middleware/sitemap-middleware.js +46 -45
  90. package/dist/esm/monitoring/healthcheck-middleware.js +27 -26
  91. package/dist/esm/monitoring/index.js +1 -1
  92. package/dist/esm/route-handler/editing-config-route-handler.js +106 -102
  93. package/dist/esm/route-handler/editing-render-route-handler.js +265 -160
  94. package/dist/esm/route-handler/index.js +4 -4
  95. package/dist/esm/route-handler/robots-route-handler.js +65 -64
  96. package/dist/esm/route-handler/sitemap-route-handler.js +63 -62
  97. package/dist/esm/search/index.js +1 -0
  98. package/dist/esm/services/component-props-service.js +135 -131
  99. package/dist/esm/sharedTypes/component-props.js +1 -1
  100. package/dist/esm/sharedTypes/sitecore-page-props.js +1 -1
  101. package/dist/esm/site/index.js +1 -1
  102. package/dist/esm/tools/codegen/import-map.js +11 -0
  103. package/dist/esm/tools/component-props.loader.js +59 -59
  104. package/dist/esm/tools/generate-map.js +279 -279
  105. package/dist/esm/tools/index.js +3 -2
  106. package/dist/esm/tools/templating/byoc-component.js +30 -30
  107. package/dist/esm/tools/templating/constants.js +4 -4
  108. package/dist/esm/tools/templating/default-component.js +29 -29
  109. package/dist/esm/tools/templating/utils.js +190 -0
  110. package/dist/esm/utils/index.js +3 -3
  111. package/dist/esm/utils/utils.js +74 -65
  112. package/package.json +87 -13
  113. package/search.d.ts +1 -0
  114. package/types/client/index.d.ts +3 -2
  115. package/types/client/index.d.ts.map +1 -0
  116. package/types/client/models.d.ts +9 -8
  117. package/types/client/models.d.ts.map +1 -0
  118. package/types/client/sitecore-nextjs-client.d.ts +68 -63
  119. package/types/client/sitecore-nextjs-client.d.ts.map +1 -0
  120. package/types/components/BYOCWrapper.d.ts +16 -14
  121. package/types/components/BYOCWrapper.d.ts.map +1 -0
  122. package/types/components/ComponentPropsContext.d.ts +30 -18
  123. package/types/components/ComponentPropsContext.d.ts.map +1 -0
  124. package/types/components/FEaaSWrapper.d.ts +17 -15
  125. package/types/components/FEaaSWrapper.d.ts.map +1 -0
  126. package/types/components/Link.d.ts +25 -15
  127. package/types/components/Link.d.ts.map +1 -0
  128. package/types/components/NextImage.d.ts +11 -6
  129. package/types/components/NextImage.d.ts.map +1 -0
  130. package/types/components/Placeholder.d.ts +14 -8
  131. package/types/components/Placeholder.d.ts.map +1 -0
  132. package/types/components/RichText.d.ts +35 -25
  133. package/types/components/RichText.d.ts.map +1 -0
  134. package/types/config/define-config.d.ts +42 -38
  135. package/types/config/define-config.d.ts.map +1 -0
  136. package/types/config/index.d.ts +2 -1
  137. package/types/config/index.d.ts.map +1 -0
  138. package/types/config-cli/define-cli-config.d.ts +10 -8
  139. package/types/config-cli/define-cli-config.d.ts.map +1 -0
  140. package/types/config-cli/index.d.ts +2 -1
  141. package/types/config-cli/index.d.ts.map +1 -0
  142. package/types/editing/codegen/import-map.d.ts +15 -3
  143. package/types/editing/codegen/import-map.d.ts.map +1 -0
  144. package/types/editing/codegen/index.d.ts +3 -2
  145. package/types/editing/codegen/index.d.ts.map +1 -0
  146. package/types/editing/constants.d.ts +8 -7
  147. package/types/editing/constants.d.ts.map +1 -0
  148. package/types/editing/editing-config-middleware.d.ts +37 -31
  149. package/types/editing/editing-config-middleware.d.ts.map +1 -0
  150. package/types/editing/editing-render-middleware.d.ts +47 -44
  151. package/types/editing/editing-render-middleware.d.ts.map +1 -0
  152. package/types/editing/feaas-render-middleware.d.ts +35 -32
  153. package/types/editing/feaas-render-middleware.d.ts.map +1 -0
  154. package/types/editing/index.d.ts +7 -6
  155. package/types/editing/index.d.ts.map +1 -0
  156. package/types/editing/render-middleware.d.ts +26 -25
  157. package/types/editing/render-middleware.d.ts.map +1 -0
  158. package/types/editing/utils.d.ts +110 -106
  159. package/types/editing/utils.d.ts.map +1 -0
  160. package/types/index.d.ts +25 -24
  161. package/types/index.d.ts.map +1 -0
  162. package/types/middleware/app-router-multisite-middleware.d.ts +28 -13
  163. package/types/middleware/app-router-multisite-middleware.d.ts.map +1 -0
  164. package/types/middleware/index.d.ts +12 -11
  165. package/types/middleware/index.d.ts.map +1 -0
  166. package/types/middleware/locale-middleware.d.ts +35 -32
  167. package/types/middleware/locale-middleware.d.ts.map +1 -0
  168. package/types/middleware/middleware.d.ts +135 -127
  169. package/types/middleware/middleware.d.ts.map +1 -0
  170. package/types/middleware/multisite-middleware.d.ts +54 -37
  171. package/types/middleware/multisite-middleware.d.ts.map +1 -0
  172. package/types/middleware/personalize-middleware.d.ts +81 -65
  173. package/types/middleware/personalize-middleware.d.ts.map +1 -0
  174. package/types/middleware/redirects-middleware.d.ts +68 -65
  175. package/types/middleware/redirects-middleware.d.ts.map +1 -0
  176. package/types/middleware/robots-middleware.d.ts +15 -13
  177. package/types/middleware/robots-middleware.d.ts.map +1 -0
  178. package/types/middleware/sitemap-middleware.d.ts +16 -14
  179. package/types/middleware/sitemap-middleware.d.ts.map +1 -0
  180. package/types/monitoring/healthcheck-middleware.d.ts +14 -12
  181. package/types/monitoring/healthcheck-middleware.d.ts.map +1 -0
  182. package/types/monitoring/index.d.ts +2 -1
  183. package/types/monitoring/index.d.ts.map +1 -0
  184. package/types/route-handler/editing-config-route-handler.d.ts +30 -24
  185. package/types/route-handler/editing-config-route-handler.d.ts.map +1 -0
  186. package/types/route-handler/editing-render-route-handler.d.ts +33 -25
  187. package/types/route-handler/editing-render-route-handler.d.ts.map +1 -0
  188. package/types/route-handler/index.d.ts +5 -4
  189. package/types/route-handler/index.d.ts.map +1 -0
  190. package/types/route-handler/robots-route-handler.d.ts +30 -28
  191. package/types/route-handler/robots-route-handler.d.ts.map +1 -0
  192. package/types/route-handler/sitemap-route-handler.d.ts +30 -28
  193. package/types/route-handler/sitemap-route-handler.d.ts.map +1 -0
  194. package/types/search/index.d.ts +2 -0
  195. package/types/search/index.d.ts.map +1 -0
  196. package/types/services/component-props-service.d.ts +62 -57
  197. package/types/services/component-props-service.d.ts.map +1 -0
  198. package/types/sharedTypes/component-props.d.ts +62 -47
  199. package/types/sharedTypes/component-props.d.ts.map +1 -0
  200. package/types/sharedTypes/sitecore-page-props.d.ts +14 -9
  201. package/types/sharedTypes/sitecore-page-props.d.ts.map +1 -0
  202. package/types/site/index.d.ts +2 -1
  203. package/types/site/index.d.ts.map +1 -0
  204. package/types/tools/codegen/import-map.d.ts +10 -0
  205. package/types/tools/codegen/import-map.d.ts.map +1 -0
  206. package/types/tools/component-props.loader.d.ts +8 -7
  207. package/types/tools/component-props.loader.d.ts.map +1 -0
  208. package/types/tools/generate-map.d.ts +26 -24
  209. package/types/tools/generate-map.d.ts.map +1 -0
  210. package/types/tools/index.d.ts +4 -2
  211. package/types/tools/index.d.ts.map +1 -0
  212. package/types/tools/templating/byoc-component.d.ts +3 -2
  213. package/types/tools/templating/byoc-component.d.ts.map +1 -0
  214. package/types/tools/templating/constants.d.ts +5 -4
  215. package/types/tools/templating/constants.d.ts.map +1 -0
  216. package/types/tools/templating/default-component.d.ts +3 -2
  217. package/types/tools/templating/default-component.d.ts.map +1 -0
  218. package/types/tools/templating/utils.d.ts +44 -0
  219. package/types/tools/templating/utils.d.ts.map +1 -0
  220. package/types/utils/index.d.ts +4 -3
  221. package/types/utils/index.d.ts.map +1 -0
  222. package/types/utils/utils.d.ts +34 -24
  223. package/types/utils/utils.d.ts.map +1 -0
  224. package/client.js +0 -1
  225. package/codegen.js +0 -1
  226. package/config-cli.js +0 -1
  227. package/config.js +0 -1
  228. package/editing.js +0 -1
  229. package/middleware.js +0 -1
  230. package/monitoring.js +0 -1
  231. package/route-handler.js +0 -1
  232. package/site.js +0 -1
  233. package/tools.js +0 -1
  234. package/utils.js +0 -1
@@ -1,144 +1,145 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.EditingRenderMiddleware = void 0;
13
- const core_1 = require("@sitecore-content-sdk/core");
14
- const editing_1 = require("@sitecore-content-sdk/core/editing");
15
- const layout_1 = require("@sitecore-content-sdk/core/layout");
16
- const utils_1 = require("../utils/utils");
17
- const render_middleware_1 = require("./render-middleware");
18
- const utils_2 = require("@sitecore-content-sdk/core/utils");
19
- const utils_3 = require("./utils");
20
- /**
21
- * Middleware / handler for use in the editing render Next.js API route (e.g. '/api/editing/render')
22
- * which is required for Sitecore editing support.
23
- */
24
- class EditingRenderMiddleware extends render_middleware_1.RenderMiddlewareBase {
25
- /**
26
- * @param {EditingRenderMiddlewareConfig} [config] Editing render middleware config
27
- */
28
- constructor(config) {
29
- super();
30
- this.config = config;
31
- this.handler = (req, res) => __awaiter(this, void 0, void 0, function* () {
32
- var _a, _b, _c, _d, _e;
33
- const { body, method, headers, query } = req;
34
- core_1.debug.editing('editing render middleware start: %o', {
35
- method,
36
- query,
37
- headers,
38
- body,
39
- });
40
- const corsHeaders = (0, utils_2.getEnforcedCorsHeaders)({
41
- requestMethod: req.method,
42
- headers: req.headers,
43
- presetCorsHeader: headers['Access-Control-Allow-Origin'],
44
- allowedOrigins: editing_1.EDITING_ALLOWED_ORIGINS,
45
- });
46
- if (!corsHeaders) {
47
- core_1.debug.editing('invalid origin host - set allowed origins in JSS_ALLOWED_ORIGINS environment variable');
48
- return res.status(401).json({
49
- html: `<html><body>Requests from origin ${(_a = req.headers) === null || _a === void 0 ? void 0 : _a.origin} not allowed</body></html>`,
50
- });
51
- }
52
- Object.keys(corsHeaders).forEach((key) => {
53
- res.setHeader(key, corsHeaders[key]);
54
- });
55
- // Validate secret
56
- const secret = query[editing_1.QUERY_PARAM_EDITING_SECRET];
57
- if (secret !== (0, utils_1.getEditingSecret)()) {
58
- core_1.debug.editing('invalid editing secret - sent "%s" expected "%s"', secret, (0, utils_1.getEditingSecret)());
59
- return res.status(401).json({
60
- html: '<html><body>Missing or invalid secret</body></html>',
61
- });
62
- }
63
- if (req.method === 'OPTIONS') {
64
- core_1.debug.editing('preflight request');
65
- // CORS headers are set by enforceCors
66
- return res.status(204).send(null);
67
- }
68
- if (req.method !== 'GET') {
69
- core_1.debug.editing('invalid method - sent %s expected GET', req.method);
70
- res.setHeader('Allow', 'GET');
71
- return res.status(405).json({
72
- html: `<html><body>Invalid request method '${req.method}'</body></html>`,
73
- });
74
- }
75
- const startTimestamp = Date.now();
76
- const mode = query.mode;
77
- const requiredQueryParams = (0, utils_3.getRequiredEditingParamsList)(mode);
78
- const missingQueryParams = requiredQueryParams.filter((param) => !query[param]);
79
- // Validate query parameters
80
- if (missingQueryParams.length) {
81
- core_1.debug.editing('missing required query parameters: %o', missingQueryParams);
82
- return res.status(400).json({
83
- html: `<html><body>Missing required query parameters: ${missingQueryParams.join(', ')}</body></html>`,
84
- });
85
- }
86
- const previewDataParams = (0, utils_3.mapEditingParams)(query);
87
- res.setPreviewData(Object.assign(Object.assign({}, previewDataParams), { variantIds: (_b = previewDataParams.variantIds) === null || _b === void 0 ? void 0 : _b.split(',') }), {
88
- maxAge: 3,
89
- });
90
- // Set Preview mode identifier cookie, if the page is rendered in Sitecore Preview mode
91
- if (mode === layout_1.LayoutServicePageState.Preview) {
92
- const cookies = res.getHeader('Set-Cookie');
93
- const previewCookies = (0, utils_3.getPreviewCookies)(query.sc_site);
94
- res.setHeader('Set-Cookie', [...cookies, ...previewCookies]);
95
- }
96
- // Restrict the page to be rendered only within the allowed origins
97
- res.setHeader('Content-Security-Policy', (0, utils_3.getCSPHeader)());
98
- const encodedRoute = encodeURI(query.route);
99
- const route = ((_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.resolvePageUrl) === null || _d === void 0 ? void 0 : _d.call(_c, encodedRoute)) || encodedRoute;
100
- const base = ((_e = this.config) === null || _e === void 0 ? void 0 : _e.sitecoreInternalEditingHostUrl) || (0, utils_3.resolveServerUrl)(req);
101
- const requestUrl = new URL(route, base);
102
- const cookies = res.getHeader('Set-Cookie');
103
- // Make actual render request for page route, passing on preview cookies as well as any approved query string parameters.
104
- // Note timestamp effectively disables caching the request (no amount of cache headers seemed to do it)
105
- try {
106
- core_1.debug.editing('fetching page route for %s', query.route);
107
- // Get query string parameters to propagate on subsequent requests (e.g. for deployment protection bypass)
108
- const propagatedQsParams = (0, utils_3.getQueryParamsForPropagation)(query);
109
- // Get headers to propagate on subsequent requests
110
- const propagatedHeaders = (0, utils_3.getHeadersForPropagation)(headers);
111
- const html = yield (0, utils_3.getEditingRequestHtml)(requestUrl, propagatedQsParams, propagatedHeaders, cookies, this.dataFetcher);
112
- // remove preview cookies to not leak them to the browser
113
- if (cookies && Array.isArray(cookies)) {
114
- const filteredCookies = (0, utils_3.cleanupNextPreviewCookies)(cookies);
115
- filteredCookies && res.setHeader('Set-Cookie', filteredCookies);
116
- }
117
- core_1.debug.editing('editing render middleware end in %dms: %o', Date.now() - startTimestamp, {
118
- status: 200,
119
- route,
120
- });
121
- res.status(200).send(html);
122
- }
123
- catch (err) {
124
- const error = err;
125
- console.error(error);
126
- if (error.response) {
127
- console.info(
128
- // eslint-disable-next-line quotes
129
- "Hint: for non-standard server or Next.js route configurations, you may need to override 'resolvePageUrl' or set the 'sitecoreInternalEditingHostUrl' (or SITECORE_INTERNAL_EDITING_HOST_URL env variable) available on the 'EditingRenderMiddleware' config.");
130
- }
131
- res.status(500).send(`<html><body>${error}</body></html>`);
132
- }
133
- });
134
- this.dataFetcher = new core_1.NativeDataFetcher({ debugger: core_1.debug.editing });
135
- }
136
- /**
137
- * Gets the Next.js API route handler
138
- * @returns route handler
139
- */
140
- getHandler() {
141
- return this.handler;
142
- }
143
- }
144
- exports.EditingRenderMiddleware = EditingRenderMiddleware;
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EditingRenderMiddleware = void 0;
13
+ const core_1 = require("@sitecore-content-sdk/core");
14
+ const editing_1 = require("@sitecore-content-sdk/core/editing");
15
+ const layout_1 = require("@sitecore-content-sdk/core/layout");
16
+ const utils_1 = require("../utils/utils");
17
+ const render_middleware_1 = require("./render-middleware");
18
+ const utils_2 = require("@sitecore-content-sdk/core/utils");
19
+ const utils_3 = require("./utils");
20
+ /**
21
+ * Middleware / handler for use in the editing render Next.js API route (e.g. '/api/editing/render')
22
+ * which is required for Sitecore editing support.
23
+ * @public
24
+ */
25
+ class EditingRenderMiddleware extends render_middleware_1.RenderMiddlewareBase {
26
+ /**
27
+ * @param {EditingRenderMiddlewareConfig} [config] Editing render middleware config
28
+ */
29
+ constructor(config) {
30
+ super();
31
+ this.config = config;
32
+ this.handler = (req, res) => __awaiter(this, void 0, void 0, function* () {
33
+ var _a, _b, _c, _d, _e;
34
+ const { body, method, headers, query } = req;
35
+ core_1.debug.editing('editing render middleware start: %o', {
36
+ method,
37
+ query,
38
+ headers,
39
+ body,
40
+ });
41
+ const corsHeaders = (0, utils_2.getEnforcedCorsHeaders)({
42
+ requestMethod: req.method,
43
+ headers: req.headers,
44
+ presetCorsHeader: headers['Access-Control-Allow-Origin'],
45
+ allowedOrigins: editing_1.EDITING_ALLOWED_ORIGINS,
46
+ });
47
+ if (!corsHeaders) {
48
+ core_1.debug.editing('invalid origin host - set allowed origins in JSS_ALLOWED_ORIGINS environment variable');
49
+ return res.status(401).json({
50
+ html: `<html><body>Requests from origin ${(_a = req.headers) === null || _a === void 0 ? void 0 : _a.origin} not allowed</body></html>`,
51
+ });
52
+ }
53
+ Object.keys(corsHeaders).forEach((key) => {
54
+ res.setHeader(key, corsHeaders[key]);
55
+ });
56
+ // Validate secret
57
+ const secret = query[editing_1.QUERY_PARAM_EDITING_SECRET];
58
+ if (secret !== (0, utils_1.getEditingSecret)()) {
59
+ core_1.debug.editing('invalid editing secret - sent "%s" expected "%s"', secret, (0, utils_1.getEditingSecret)());
60
+ return res.status(401).json({
61
+ html: editing_1.INVALID_SECRET_HTML_MESSAGE,
62
+ });
63
+ }
64
+ if (req.method === 'OPTIONS') {
65
+ core_1.debug.editing('preflight request');
66
+ // CORS headers are set by enforceCors
67
+ return res.status(204).send(null);
68
+ }
69
+ if (req.method !== 'GET') {
70
+ core_1.debug.editing('invalid method - sent %s expected GET', req.method);
71
+ res.setHeader('Allow', 'GET');
72
+ return res.status(405).json({
73
+ html: `<html><body>Invalid request method '${req.method}'</body></html>`,
74
+ });
75
+ }
76
+ const startTimestamp = Date.now();
77
+ const mode = query.mode;
78
+ const requiredQueryParams = (0, utils_3.getRequiredEditingParamsList)(mode);
79
+ const missingQueryParams = requiredQueryParams.filter((param) => !query[param]);
80
+ // Validate query parameters
81
+ if (missingQueryParams.length) {
82
+ core_1.debug.editing('missing required query parameters: %o', missingQueryParams);
83
+ return res.status(400).json({
84
+ html: `<html><body>Missing required query parameters: ${missingQueryParams.join(', ')}</body></html>`,
85
+ });
86
+ }
87
+ const previewDataParams = (0, utils_3.mapEditingParams)(query);
88
+ res.setPreviewData(Object.assign(Object.assign({}, previewDataParams), { variantIds: (_b = previewDataParams.variantIds) === null || _b === void 0 ? void 0 : _b.split(',') }), {
89
+ maxAge: 3,
90
+ });
91
+ // Set Preview mode identifier cookie, if the page is rendered in Sitecore Preview mode
92
+ if (mode === layout_1.LayoutServicePageState.Preview) {
93
+ const cookies = res.getHeader('Set-Cookie');
94
+ const previewCookies = (0, utils_3.getPreviewCookies)(query.sc_site);
95
+ res.setHeader('Set-Cookie', [...cookies, ...previewCookies]);
96
+ }
97
+ // Restrict the page to be rendered only within the allowed origins
98
+ res.setHeader('Content-Security-Policy', (0, utils_3.getCSPHeader)());
99
+ const encodedRoute = encodeURI(query.route);
100
+ const route = ((_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.resolvePageUrl) === null || _d === void 0 ? void 0 : _d.call(_c, encodedRoute)) || encodedRoute;
101
+ const base = ((_e = this.config) === null || _e === void 0 ? void 0 : _e.sitecoreInternalEditingHostUrl) || (0, utils_3.resolveServerUrl)(req);
102
+ const requestUrl = new URL(route, base);
103
+ const cookies = res.getHeader('Set-Cookie');
104
+ // Make actual render request for page route, passing on preview cookies as well as any approved query string parameters.
105
+ // Note timestamp effectively disables caching the request (no amount of cache headers seemed to do it)
106
+ try {
107
+ core_1.debug.editing('fetching page route for %s', query.route);
108
+ // Get query string parameters to propagate on subsequent requests (e.g. for deployment protection bypass)
109
+ const propagatedQsParams = (0, utils_3.getQueryParamsForPropagation)(query);
110
+ // Get headers to propagate on subsequent requests
111
+ const propagatedHeaders = (0, utils_3.getHeadersForPropagation)(headers);
112
+ const html = yield (0, utils_3.getEditingRequestHtml)(requestUrl, propagatedQsParams, propagatedHeaders, cookies, this.dataFetcher);
113
+ // remove preview cookies to not leak them to the browser
114
+ if (cookies && Array.isArray(cookies)) {
115
+ const filteredCookies = (0, utils_3.cleanupNextPreviewCookies)(cookies);
116
+ filteredCookies && res.setHeader('Set-Cookie', filteredCookies);
117
+ }
118
+ core_1.debug.editing('editing render middleware end in %dms: %o', Date.now() - startTimestamp, {
119
+ status: 200,
120
+ route,
121
+ });
122
+ res.status(200).send(html);
123
+ }
124
+ catch (err) {
125
+ const error = err;
126
+ console.error(error);
127
+ if (error.response) {
128
+ console.info(
129
+ // eslint-disable-next-line quotes
130
+ "Hint: for non-standard server or Next.js route configurations, you may need to override 'resolvePageUrl' or set the 'sitecoreInternalEditingHostUrl' (or SITECORE_INTERNAL_EDITING_HOST_URL env variable) available on the 'EditingRenderMiddleware' config.");
131
+ }
132
+ res.status(500).send(`<html><body>${error}</body></html>`);
133
+ }
134
+ });
135
+ this.dataFetcher = new core_1.NativeDataFetcher({ debugger: core_1.debug.editing });
136
+ }
137
+ /**
138
+ * Gets the Next.js API route handler
139
+ * @returns route handler
140
+ */
141
+ getHandler() {
142
+ return this.handler;
143
+ }
144
+ }
145
+ exports.EditingRenderMiddleware = EditingRenderMiddleware;
@@ -1,101 +1,102 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.FEAASRenderMiddleware = void 0;
13
- const core_1 = require("@sitecore-content-sdk/core");
14
- const editing_1 = require("@sitecore-content-sdk/core/editing");
15
- const utils_1 = require("../utils/utils");
16
- const render_middleware_1 = require("./render-middleware");
17
- const utils_2 = require("@sitecore-content-sdk/core/utils");
18
- /**
19
- * Middleware / handler for use in the feaas render Next.js API route (e.g. '/api/editing/feaas/render')
20
- * which is required for Sitecore editing support.
21
- */
22
- class FEAASRenderMiddleware extends render_middleware_1.RenderMiddlewareBase {
23
- /**
24
- * @param {EditingRenderMiddlewareConfig} [config] Editing render middleware config
25
- */
26
- constructor(config) {
27
- var _a;
28
- super();
29
- this.config = config;
30
- this.defaultPageUrl = '/feaas/render';
31
- this.handler = (req, res) => __awaiter(this, void 0, void 0, function* () {
32
- var _a;
33
- const { method, query, headers } = req;
34
- const startTimestamp = Date.now();
35
- core_1.debug.editing('feaas render middleware start: %o', {
36
- method,
37
- query,
38
- headers,
39
- });
40
- if (!(0, utils_2.enforceCors)(req, res, editing_1.EDITING_ALLOWED_ORIGINS)) {
41
- core_1.debug.editing('invalid origin host - set allowed origins in JSS_ALLOWED_ORIGINS environment variable');
42
- return res
43
- .status(401)
44
- .send(`<html><body>Requests from origin ${(_a = req.headers) === null || _a === void 0 ? void 0 : _a.origin} are not allowed</body></html>`);
45
- }
46
- if (!method || !['GET', 'OPTIONS'].includes(method)) {
47
- core_1.debug.editing('invalid method - sent %s expected GET,OPTIONS', method);
48
- res.setHeader('Allow', 'GET, OPTIONS');
49
- return res.status(405).send(`<html><body>Invalid request method '${method}'</body></html>`);
50
- }
51
- // Validate secret
52
- const secret = query[editing_1.QUERY_PARAM_EDITING_SECRET];
53
- if (secret !== (0, utils_1.getEditingSecret)()) {
54
- core_1.debug.editing('invalid editing secret - sent "%s" expected "%s"', secret, (0, utils_1.getEditingSecret)());
55
- return res.status(401).send('<html><body>Missing or invalid secret</body></html>');
56
- }
57
- // Handle preflight request
58
- if (method === 'OPTIONS') {
59
- core_1.debug.editing('preflight request');
60
- // CORS headers are set by enforceCors
61
- return res.status(204).send(null);
62
- }
63
- try {
64
- // Get query string parameters to propagate on subsequent requests (e.g. for deployment protection bypass)
65
- const params = this.getQueryParamsForPropagation(query);
66
- // Enable Next.js Preview Mode
67
- res.setPreviewData({});
68
- const queryParams = new URLSearchParams();
69
- for (const key in params) {
70
- if ({}.hasOwnProperty.call(params, key)) {
71
- queryParams.append(key, params[key]);
72
- }
73
- }
74
- // Pass "feaasSrc" in case a FEAASComponent is being requested
75
- if (query.feaasSrc) {
76
- queryParams.append('feaasSrc', query.feaasSrc);
77
- }
78
- const redirectUrl = this.pageUrl + (queryParams.toString() ? `?${queryParams.toString()}` : '');
79
- core_1.debug.editing('redirecting to page route %s', redirectUrl);
80
- core_1.debug.editing('feaas render middleware end in %dms', Date.now() - startTimestamp);
81
- res.redirect(redirectUrl);
82
- }
83
- catch (err) {
84
- const error = err;
85
- console.info(
86
- // eslint-disable-next-line quotes
87
- "Hint: for non-standard server or Next.js route configurations, you may need to override the 'pageUrl' available on the 'FEAASRenderMiddleware' config.");
88
- res.status(500).send(`<html><body>${error}</body></html>`);
89
- }
90
- });
91
- this.pageUrl = (_a = config === null || config === void 0 ? void 0 : config.pageUrl) !== null && _a !== void 0 ? _a : this.defaultPageUrl;
92
- }
93
- /**
94
- * Gets the Next.js API route handler
95
- * @returns route handler
96
- */
97
- getHandler() {
98
- return this.handler;
99
- }
100
- }
101
- exports.FEAASRenderMiddleware = FEAASRenderMiddleware;
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.FEAASRenderMiddleware = void 0;
13
+ const core_1 = require("@sitecore-content-sdk/core");
14
+ const editing_1 = require("@sitecore-content-sdk/core/editing");
15
+ const utils_1 = require("../utils/utils");
16
+ const render_middleware_1 = require("./render-middleware");
17
+ const utils_2 = require("@sitecore-content-sdk/core/utils");
18
+ /**
19
+ * Middleware / handler for use in the feaas render Next.js API route (e.g. '/api/editing/feaas/render')
20
+ * which is required for Sitecore editing support.
21
+ * @public
22
+ */
23
+ class FEAASRenderMiddleware extends render_middleware_1.RenderMiddlewareBase {
24
+ /**
25
+ * @param {EditingRenderMiddlewareConfig} [config] Editing render middleware config
26
+ */
27
+ constructor(config) {
28
+ var _a;
29
+ super();
30
+ this.config = config;
31
+ this.defaultPageUrl = '/feaas/render';
32
+ this.handler = (req, res) => __awaiter(this, void 0, void 0, function* () {
33
+ var _a;
34
+ const { method, query, headers } = req;
35
+ const startTimestamp = Date.now();
36
+ core_1.debug.editing('feaas render middleware start: %o', {
37
+ method,
38
+ query,
39
+ headers,
40
+ });
41
+ if (!(0, utils_2.enforceCors)(req, res, editing_1.EDITING_ALLOWED_ORIGINS)) {
42
+ core_1.debug.editing('invalid origin host - set allowed origins in JSS_ALLOWED_ORIGINS environment variable');
43
+ return res
44
+ .status(401)
45
+ .send(`<html><body>Requests from origin ${(_a = req.headers) === null || _a === void 0 ? void 0 : _a.origin} are not allowed</body></html>`);
46
+ }
47
+ if (!method || !['GET', 'OPTIONS'].includes(method)) {
48
+ core_1.debug.editing('invalid method - sent %s expected GET,OPTIONS', method);
49
+ res.setHeader('Allow', 'GET, OPTIONS');
50
+ return res.status(405).send(`<html><body>Invalid request method '${method}'</body></html>`);
51
+ }
52
+ // Validate secret
53
+ const secret = query[editing_1.QUERY_PARAM_EDITING_SECRET];
54
+ if (secret !== (0, utils_1.getEditingSecret)()) {
55
+ core_1.debug.editing('invalid editing secret - sent "%s" expected "%s"', secret, (0, utils_1.getEditingSecret)());
56
+ return res.status(401).send(editing_1.INVALID_SECRET_HTML_MESSAGE);
57
+ }
58
+ // Handle preflight request
59
+ if (method === 'OPTIONS') {
60
+ core_1.debug.editing('preflight request');
61
+ // CORS headers are set by enforceCors
62
+ return res.status(204).send(null);
63
+ }
64
+ try {
65
+ // Get query string parameters to propagate on subsequent requests (e.g. for deployment protection bypass)
66
+ const params = this.getQueryParamsForPropagation(query);
67
+ // Enable Next.js Preview Mode
68
+ res.setPreviewData({});
69
+ const queryParams = new URLSearchParams();
70
+ for (const key in params) {
71
+ if ({}.hasOwnProperty.call(params, key)) {
72
+ queryParams.append(key, params[key]);
73
+ }
74
+ }
75
+ // Pass "feaasSrc" in case a FEAASComponent is being requested
76
+ if (query.feaasSrc) {
77
+ queryParams.append('feaasSrc', query.feaasSrc);
78
+ }
79
+ const redirectUrl = this.pageUrl + (queryParams.toString() ? `?${queryParams.toString()}` : '');
80
+ core_1.debug.editing('redirecting to page route %s', redirectUrl);
81
+ core_1.debug.editing('feaas render middleware end in %dms', Date.now() - startTimestamp);
82
+ res.redirect(redirectUrl);
83
+ }
84
+ catch (err) {
85
+ const error = err;
86
+ console.info(
87
+ // eslint-disable-next-line quotes
88
+ "Hint: for non-standard server or Next.js route configurations, you may need to override the 'pageUrl' available on the 'FEAASRenderMiddleware' config.");
89
+ res.status(500).send(`<html><body>${error}</body></html>`);
90
+ }
91
+ });
92
+ this.pageUrl = (_a = config === null || config === void 0 ? void 0 : config.pageUrl) !== null && _a !== void 0 ? _a : this.defaultPageUrl;
93
+ }
94
+ /**
95
+ * Gets the Next.js API route handler
96
+ * @returns route handler
97
+ */
98
+ getHandler() {
99
+ return this.handler;
100
+ }
101
+ }
102
+ exports.FEAASRenderMiddleware = FEAASRenderMiddleware;
@@ -1,19 +1,19 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EDITING_COMPONENT_ID = exports.EDITING_COMPONENT_PLACEHOLDER = exports.RenderingType = exports.EditingConfigMiddleware = exports.FEAASRenderMiddleware = exports.getHeadersForPropagation = exports.getQueryParamsForPropagation = exports.isDesignLibraryPreviewData = exports.EditingRenderMiddleware = exports.EditingService = void 0;
4
- var editing_1 = require("@sitecore-content-sdk/core/editing");
5
- Object.defineProperty(exports, "EditingService", { enumerable: true, get: function () { return editing_1.EditingService; } });
6
- var editing_render_middleware_1 = require("./editing-render-middleware");
7
- Object.defineProperty(exports, "EditingRenderMiddleware", { enumerable: true, get: function () { return editing_render_middleware_1.EditingRenderMiddleware; } });
8
- var utils_1 = require("./utils");
9
- Object.defineProperty(exports, "isDesignLibraryPreviewData", { enumerable: true, get: function () { return utils_1.isDesignLibraryPreviewData; } });
10
- Object.defineProperty(exports, "getQueryParamsForPropagation", { enumerable: true, get: function () { return utils_1.getQueryParamsForPropagation; } });
11
- Object.defineProperty(exports, "getHeadersForPropagation", { enumerable: true, get: function () { return utils_1.getHeadersForPropagation; } });
12
- var feaas_render_middleware_1 = require("./feaas-render-middleware");
13
- Object.defineProperty(exports, "FEAASRenderMiddleware", { enumerable: true, get: function () { return feaas_render_middleware_1.FEAASRenderMiddleware; } });
14
- var editing_config_middleware_1 = require("./editing-config-middleware");
15
- Object.defineProperty(exports, "EditingConfigMiddleware", { enumerable: true, get: function () { return editing_config_middleware_1.EditingConfigMiddleware; } });
16
- var layout_1 = require("@sitecore-content-sdk/core/layout");
17
- Object.defineProperty(exports, "RenderingType", { enumerable: true, get: function () { return layout_1.RenderingType; } });
18
- Object.defineProperty(exports, "EDITING_COMPONENT_PLACEHOLDER", { enumerable: true, get: function () { return layout_1.EDITING_COMPONENT_PLACEHOLDER; } });
19
- Object.defineProperty(exports, "EDITING_COMPONENT_ID", { enumerable: true, get: function () { return layout_1.EDITING_COMPONENT_ID; } });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EDITING_COMPONENT_ID = exports.EDITING_COMPONENT_PLACEHOLDER = exports.RenderingType = exports.EditingConfigMiddleware = exports.FEAASRenderMiddleware = exports.getHeadersForPropagation = exports.getQueryParamsForPropagation = exports.isDesignLibraryPreviewData = exports.EditingRenderMiddleware = exports.EditingService = void 0;
4
+ var editing_1 = require("@sitecore-content-sdk/core/editing");
5
+ Object.defineProperty(exports, "EditingService", { enumerable: true, get: function () { return editing_1.EditingService; } });
6
+ var editing_render_middleware_1 = require("./editing-render-middleware");
7
+ Object.defineProperty(exports, "EditingRenderMiddleware", { enumerable: true, get: function () { return editing_render_middleware_1.EditingRenderMiddleware; } });
8
+ var utils_1 = require("./utils");
9
+ Object.defineProperty(exports, "isDesignLibraryPreviewData", { enumerable: true, get: function () { return utils_1.isDesignLibraryPreviewData; } });
10
+ Object.defineProperty(exports, "getQueryParamsForPropagation", { enumerable: true, get: function () { return utils_1.getQueryParamsForPropagation; } });
11
+ Object.defineProperty(exports, "getHeadersForPropagation", { enumerable: true, get: function () { return utils_1.getHeadersForPropagation; } });
12
+ var feaas_render_middleware_1 = require("./feaas-render-middleware");
13
+ Object.defineProperty(exports, "FEAASRenderMiddleware", { enumerable: true, get: function () { return feaas_render_middleware_1.FEAASRenderMiddleware; } });
14
+ var editing_config_middleware_1 = require("./editing-config-middleware");
15
+ Object.defineProperty(exports, "EditingConfigMiddleware", { enumerable: true, get: function () { return editing_config_middleware_1.EditingConfigMiddleware; } });
16
+ var layout_1 = require("@sitecore-content-sdk/core/layout");
17
+ Object.defineProperty(exports, "RenderingType", { enumerable: true, get: function () { return layout_1.RenderingType; } });
18
+ Object.defineProperty(exports, "EDITING_COMPONENT_PLACEHOLDER", { enumerable: true, get: function () { return layout_1.EDITING_COMPONENT_PLACEHOLDER; } });
19
+ Object.defineProperty(exports, "EDITING_COMPONENT_ID", { enumerable: true, get: function () { return layout_1.EDITING_COMPONENT_ID; } });