@sitecore-content-sdk/nextjs 1.5.0 → 2.0.0-canary.10

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 (172) hide show
  1. package/LICENSE.txt +202 -202
  2. package/dist/cjs/client/index.js +1 -1
  3. package/dist/cjs/client/sitecore-nextjs-client.js +4 -4
  4. package/dist/cjs/components/BYOCWrapper.js +0 -5
  5. package/dist/cjs/components/FEaaSWrapper.js +0 -5
  6. package/dist/cjs/components/NextImage.js +2 -2
  7. package/dist/cjs/config/define-config.js +7 -4
  8. package/dist/cjs/config-cli/define-cli-config.js +1 -1
  9. package/dist/cjs/debug.js +11 -0
  10. package/dist/cjs/editing/codegen/import-map-server.js +1 -1
  11. package/dist/cjs/editing/editing-config-middleware.js +13 -11
  12. package/dist/cjs/editing/editing-render-middleware.js +41 -29
  13. package/dist/cjs/editing/feaas-render-middleware.js +24 -13
  14. package/dist/cjs/editing/index.js +2 -2
  15. package/dist/cjs/editing/types.js +2 -0
  16. package/dist/cjs/editing/utils.js +35 -6
  17. package/dist/cjs/index.js +17 -11
  18. package/dist/cjs/middleware/index.js +1 -24
  19. package/dist/cjs/{middleware/app-router-multisite-middleware.js → proxy/app-router-multisite-proxy.js} +8 -8
  20. package/dist/cjs/proxy/index.js +29 -0
  21. package/dist/cjs/{middleware/locale-middleware.js → proxy/locale-proxy.js} +18 -15
  22. package/dist/cjs/{middleware/multisite-middleware.js → proxy/multisite-proxy.js} +23 -20
  23. package/dist/cjs/{middleware/personalize-middleware.js → proxy/personalize-proxy.js} +31 -28
  24. package/dist/cjs/{middleware/middleware.js → proxy/proxy.js} +31 -28
  25. package/dist/cjs/{middleware/redirects-middleware.js → proxy/redirects-proxy.js} +121 -111
  26. package/dist/cjs/route-handler/editing-config-route-handler.js +16 -13
  27. package/dist/cjs/route-handler/editing-render-route-handler.js +43 -32
  28. package/dist/cjs/route-handler/robots-route-handler.js +14 -6
  29. package/dist/cjs/route-handler/sitemap-route-handler.js +13 -5
  30. package/dist/cjs/site/index.js +1 -1
  31. package/dist/cjs/tools/codegen/import-map.js +2 -2
  32. package/dist/cjs/tools/generate-map.js +1 -1
  33. package/dist/cjs/tools/index.js +7 -8
  34. package/dist/cjs/tools/templating/byoc-component.js +1 -1
  35. package/dist/cjs/tools/templating/default-component.js +1 -1
  36. package/dist/cjs/tools/templating/utils.js +5 -6
  37. package/dist/cjs/utils/index.js +4 -5
  38. package/dist/cjs/utils/utils.js +3 -3
  39. package/dist/esm/client/index.js +1 -1
  40. package/dist/esm/client/sitecore-nextjs-client.js +4 -4
  41. package/dist/esm/components/BYOCWrapper.js +0 -5
  42. package/dist/esm/components/FEaaSWrapper.js +0 -5
  43. package/dist/esm/components/NextImage.js +2 -2
  44. package/dist/esm/config/define-config.js +7 -4
  45. package/dist/esm/config-cli/define-cli-config.js +1 -1
  46. package/dist/esm/debug.js +9 -0
  47. package/dist/esm/editing/codegen/import-map-server.js +1 -1
  48. package/dist/esm/editing/editing-config-middleware.js +4 -5
  49. package/dist/esm/editing/editing-render-middleware.js +22 -13
  50. package/dist/esm/editing/feaas-render-middleware.js +14 -6
  51. package/dist/esm/editing/index.js +2 -2
  52. package/dist/esm/editing/types.js +1 -0
  53. package/dist/esm/editing/utils.js +32 -4
  54. package/dist/esm/index.js +11 -12
  55. package/dist/esm/middleware/index.js +0 -9
  56. package/dist/esm/{middleware/app-router-multisite-middleware.js → proxy/app-router-multisite-proxy.js} +6 -6
  57. package/dist/esm/proxy/index.js +9 -0
  58. package/dist/esm/{middleware/locale-middleware.js → proxy/locale-proxy.js} +12 -12
  59. package/dist/esm/{middleware/multisite-middleware.js → proxy/multisite-proxy.js} +16 -16
  60. package/dist/esm/{middleware/personalize-middleware.js → proxy/personalize-proxy.js} +17 -17
  61. package/dist/esm/{middleware/middleware.js → proxy/proxy.js} +24 -24
  62. package/dist/esm/{middleware/redirects-middleware.js → proxy/redirects-proxy.js} +112 -102
  63. package/dist/esm/route-handler/editing-config-route-handler.js +4 -4
  64. package/dist/esm/route-handler/editing-render-route-handler.js +19 -11
  65. package/dist/esm/route-handler/robots-route-handler.js +8 -3
  66. package/dist/esm/route-handler/sitemap-route-handler.js +8 -3
  67. package/dist/esm/site/index.js +1 -1
  68. package/dist/esm/tools/codegen/import-map.js +1 -1
  69. package/dist/esm/tools/generate-map.js +1 -1
  70. package/dist/esm/tools/index.js +2 -1
  71. package/dist/esm/tools/templating/byoc-component.js +1 -1
  72. package/dist/esm/tools/templating/default-component.js +1 -1
  73. package/dist/esm/tools/templating/utils.js +1 -2
  74. package/dist/esm/utils/index.js +2 -2
  75. package/dist/esm/utils/utils.js +2 -2
  76. package/package.json +187 -181
  77. package/proxy.d.ts +1 -0
  78. package/types/client/index.d.ts +1 -1
  79. package/types/client/index.d.ts.map +1 -1
  80. package/types/client/sitecore-nextjs-client.d.ts +3 -3
  81. package/types/client/sitecore-nextjs-client.d.ts.map +1 -1
  82. package/types/components/BYOCWrapper.d.ts +0 -5
  83. package/types/components/BYOCWrapper.d.ts.map +1 -1
  84. package/types/components/FEaaSWrapper.d.ts +0 -5
  85. package/types/components/FEaaSWrapper.d.ts.map +1 -1
  86. package/types/components/Placeholder.d.ts +2 -2
  87. package/types/components/Placeholder.d.ts.map +1 -1
  88. package/types/config/define-config.d.ts +1 -1
  89. package/types/config/define-config.d.ts.map +1 -1
  90. package/types/config-cli/define-cli-config.d.ts +1 -1
  91. package/types/config-cli/define-cli-config.d.ts.map +1 -1
  92. package/types/debug.d.ts +7 -0
  93. package/types/debug.d.ts.map +1 -0
  94. package/types/editing/codegen/import-map-server.d.ts +1 -1
  95. package/types/editing/codegen/import-map-server.d.ts.map +1 -1
  96. package/types/editing/codegen/import-map-utils.d.ts +1 -1
  97. package/types/editing/codegen/import-map-utils.d.ts.map +1 -1
  98. package/types/editing/codegen/import-map.d.ts +1 -1
  99. package/types/editing/codegen/import-map.d.ts.map +1 -1
  100. package/types/editing/codegen/index.d.ts +1 -1
  101. package/types/editing/codegen/index.d.ts.map +1 -1
  102. package/types/editing/editing-config-middleware.d.ts +1 -1
  103. package/types/editing/editing-config-middleware.d.ts.map +1 -1
  104. package/types/editing/editing-render-middleware.d.ts +8 -1
  105. package/types/editing/editing-render-middleware.d.ts.map +1 -1
  106. package/types/editing/feaas-render-middleware.d.ts +1 -1
  107. package/types/editing/feaas-render-middleware.d.ts.map +1 -1
  108. package/types/editing/index.d.ts +3 -2
  109. package/types/editing/index.d.ts.map +1 -1
  110. package/types/editing/types.d.ts +37 -0
  111. package/types/editing/types.d.ts.map +1 -0
  112. package/types/editing/utils.d.ts +12 -1
  113. package/types/editing/utils.d.ts.map +1 -1
  114. package/types/index.d.ts +13 -11
  115. package/types/index.d.ts.map +1 -1
  116. package/types/middleware/index.d.ts +0 -9
  117. package/types/middleware/index.d.ts.map +1 -1
  118. package/types/middleware/robots-middleware.d.ts +1 -1
  119. package/types/middleware/robots-middleware.d.ts.map +1 -1
  120. package/types/middleware/sitemap-middleware.d.ts +1 -1
  121. package/types/middleware/sitemap-middleware.d.ts.map +1 -1
  122. package/types/{middleware/app-router-multisite-middleware.d.ts → proxy/app-router-multisite-proxy.d.ts} +6 -6
  123. package/types/proxy/app-router-multisite-proxy.d.ts.map +1 -0
  124. package/types/proxy/index.d.ts +10 -0
  125. package/types/proxy/index.d.ts.map +1 -0
  126. package/types/proxy/locale-proxy.d.ts +35 -0
  127. package/types/proxy/locale-proxy.d.ts.map +1 -0
  128. package/types/{middleware/multisite-middleware.d.ts → proxy/multisite-proxy.d.ts} +11 -11
  129. package/types/proxy/multisite-proxy.d.ts.map +1 -0
  130. package/types/{middleware/personalize-middleware.d.ts → proxy/personalize-proxy.d.ts} +10 -10
  131. package/types/proxy/personalize-proxy.d.ts.map +1 -0
  132. package/types/{middleware/middleware.d.ts → proxy/proxy.d.ts} +24 -26
  133. package/types/proxy/proxy.d.ts.map +1 -0
  134. package/types/{middleware/redirects-middleware.d.ts → proxy/redirects-proxy.d.ts} +11 -11
  135. package/types/proxy/redirects-proxy.d.ts.map +1 -0
  136. package/types/route-handler/editing-config-route-handler.d.ts +1 -1
  137. package/types/route-handler/editing-config-route-handler.d.ts.map +1 -1
  138. package/types/route-handler/editing-render-route-handler.d.ts +7 -0
  139. package/types/route-handler/editing-render-route-handler.d.ts.map +1 -1
  140. package/types/route-handler/robots-route-handler.d.ts +2 -2
  141. package/types/route-handler/robots-route-handler.d.ts.map +1 -1
  142. package/types/route-handler/sitemap-route-handler.d.ts +2 -2
  143. package/types/route-handler/sitemap-route-handler.d.ts.map +1 -1
  144. package/types/services/component-props-service.d.ts +1 -1
  145. package/types/services/component-props-service.d.ts.map +1 -1
  146. package/types/sharedTypes/component-props.d.ts +1 -1
  147. package/types/sharedTypes/component-props.d.ts.map +1 -1
  148. package/types/sharedTypes/sitecore-page-props.d.ts +2 -2
  149. package/types/sharedTypes/sitecore-page-props.d.ts.map +1 -1
  150. package/types/site/index.d.ts +1 -1
  151. package/types/site/index.d.ts.map +1 -1
  152. package/types/tools/codegen/import-map.d.ts +3 -3
  153. package/types/tools/codegen/import-map.d.ts.map +1 -1
  154. package/types/tools/generate-map.d.ts +1 -1
  155. package/types/tools/generate-map.d.ts.map +1 -1
  156. package/types/tools/index.d.ts +3 -1
  157. package/types/tools/index.d.ts.map +1 -1
  158. package/types/tools/templating/byoc-component.d.ts +1 -1
  159. package/types/tools/templating/byoc-component.d.ts.map +1 -1
  160. package/types/tools/templating/default-component.d.ts +1 -1
  161. package/types/tools/templating/default-component.d.ts.map +1 -1
  162. package/types/tools/templating/utils.d.ts +2 -2
  163. package/types/tools/templating/utils.d.ts.map +1 -1
  164. package/types/utils/index.d.ts +2 -2
  165. package/types/utils/index.d.ts.map +1 -1
  166. package/types/middleware/app-router-multisite-middleware.d.ts.map +0 -1
  167. package/types/middleware/locale-middleware.d.ts +0 -35
  168. package/types/middleware/locale-middleware.d.ts.map +0 -1
  169. package/types/middleware/middleware.d.ts.map +0 -1
  170. package/types/middleware/multisite-middleware.d.ts.map +0 -1
  171. package/types/middleware/personalize-middleware.d.ts.map +0 -1
  172. package/types/middleware/redirects-middleware.d.ts.map +0 -1
@@ -12,31 +12,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.RedirectsMiddleware = void 0;
16
- const core_1 = require("@sitecore-content-sdk/core");
17
- const site_1 = require("@sitecore-content-sdk/core/site");
18
- const utils_1 = require("@sitecore-content-sdk/core/utils");
15
+ exports.RedirectsProxy = void 0;
16
+ const site_1 = require("@sitecore-content-sdk/content/site");
17
+ const tools_1 = require("@sitecore-content-sdk/core/tools");
19
18
  const server_1 = require("next/server");
20
19
  const regex_parser_1 = __importDefault(require("regex-parser"));
21
- const middleware_1 = require("./middleware");
20
+ const proxy_1 = require("./proxy");
21
+ const debug_1 = __importDefault(require("../debug"));
22
22
  const REGEXP_CONTEXT_SITE_LANG = new RegExp(/\$siteLang/, 'i');
23
23
  const REGEXP_ABSOLUTE_URL = new RegExp('^(?:[a-z]+:)?//', 'i');
24
24
  /**
25
- * Middleware / handler fetches all redirects from Sitecore instance by grapqhl service
25
+ * Proxy / handler fetches all redirects from Sitecore instance by grapqhl service
26
26
  * compares with current url and redirects to target url
27
27
  * @public
28
28
  */
29
- class RedirectsMiddleware extends middleware_1.MiddlewareBase {
29
+ class RedirectsProxy extends proxy_1.ProxyBase {
30
30
  /**
31
- * @param {RedirectsMiddlewareConfig} [config] redirects middleware config
31
+ * @param {RedirectsProxyConfig} [config] redirects proxy config
32
32
  */
33
33
  constructor(config) {
34
- var _a;
35
34
  super(config);
36
35
  this.config = config;
37
36
  this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
38
37
  if (!this.config.enabled) {
39
- core_1.debug.redirects('skipped (redirects middleware is disabled globally)');
38
+ debug_1.default.redirects('skipped (redirects proxy is disabled globally)');
40
39
  return res;
41
40
  }
42
41
  try {
@@ -45,124 +44,133 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
45
44
  const hostname = this.getHostHeader(req) || this.defaultHostname;
46
45
  let site;
47
46
  const startTimestamp = Date.now();
48
- core_1.debug.redirects('redirects middleware start: %o', {
47
+ debug_1.default.redirects('redirects proxy start: %o', {
49
48
  pathname,
50
49
  language,
51
50
  hostname,
52
51
  });
53
52
  if (this.disabled(req, res)) {
54
- core_1.debug.redirects('skipped (redirects middleware is disabled)');
53
+ debug_1.default.redirects('skipped (redirects proxy is disabled)');
55
54
  return res;
56
55
  }
57
56
  const isAppRouterRequest = this.isAppRouter(res);
58
- const createResponse = () => __awaiter(this, void 0, void 0, function* () {
59
- var _a;
57
+ const validateRequest = () => {
60
58
  if (this.isPreview(req)) {
61
- core_1.debug.redirects('skipped (preview)');
62
- return res;
59
+ debug_1.default.redirects('skipped (preview)');
60
+ return false;
63
61
  }
64
62
  // Skip prefetch requests from Next.js, which are not original client requests
65
- // as they load unnecessary requests that burden the redirects middleware with meaningless traffic
63
+ // as they load unnecessary requests that burden the redirects proxy with meaningless traffic
66
64
  if (this.isPrefetch(req)) {
67
- core_1.debug.redirects('skipped (prefetch)');
68
- res.headers.set('x-middleware-cache', 'no-cache');
65
+ debug_1.default.redirects('skipped (prefetch)');
66
+ res.headers.set('x-proxy-cache', 'no-cache');
69
67
  res.headers.set('Cache-Control', 'no-store, must-revalidate');
70
- return res;
68
+ return false;
69
+ }
70
+ return true;
71
+ };
72
+ if (!validateRequest()) {
73
+ return res;
74
+ }
75
+ site = this.getSite(req, res);
76
+ // Find the redirect from result of RedirectService
77
+ const existsRedirect = yield this.getExistsRedirect(req, site.name);
78
+ if (!existsRedirect) {
79
+ debug_1.default.redirects('skipped (redirect does not exist)');
80
+ return res;
81
+ }
82
+ debug_1.default.redirects('Matched redirect rule: %o', { existsRedirect });
83
+ const processAbsoluteUrlTarget = (url, existsRedirect) => {
84
+ var _a;
85
+ // Redirect logic for absolute (external or not) URLS. To avoid locale stripping: use plain string for external URLs to prevent Next.js rewriting.
86
+ let targetUrl = existsRedirect.target;
87
+ if (url.search && existsRedirect.isQueryStringPreserved) {
88
+ const incomingQS = new URLSearchParams((_a = url.search) !== null && _a !== void 0 ? _a : '');
89
+ const [targetMainUrl, targetQS] = targetUrl.split('?');
90
+ const mergedQueryString = (0, tools_1.mergeURLSearchParams)(incomingQS, new URLSearchParams(targetQS || ''));
91
+ targetUrl = `${targetMainUrl}?${mergedQueryString}`;
71
92
  }
72
- site = this.getSite(req, res);
73
- // Find the redirect from result of RedirectService
74
- const existsRedirect = yield this.getExistsRedirect(req, site.name);
75
- if (!existsRedirect) {
76
- core_1.debug.redirects('skipped (redirect does not exist)');
77
- return res;
93
+ return this.dispatchRedirect(targetUrl, existsRedirect.redirectType, req, res, true);
94
+ };
95
+ const processRelativeUrlTarget = (url, existsRedirect) => {
96
+ var _a;
97
+ let targetUrl = existsRedirect.target;
98
+ const possiblyLocalePrefix = targetUrl.split('/')[1];
99
+ let targetLocale = '';
100
+ if (this.locales.includes(possiblyLocalePrefix)) {
101
+ targetLocale = possiblyLocalePrefix;
102
+ targetUrl = targetUrl.replace(`/${possiblyLocalePrefix}`, '');
78
103
  }
79
- core_1.debug.redirects('Matched redirect rule: %o', { existsRedirect });
80
- // Find context site language and replace token
81
- if (REGEXP_CONTEXT_SITE_LANG.test(existsRedirect.target) &&
82
- !(REGEXP_ABSOLUTE_URL.test(existsRedirect.target) &&
83
- existsRedirect.target.includes(hostname))) {
84
- existsRedirect.target = existsRedirect.target.replace(REGEXP_CONTEXT_SITE_LANG, site.language);
85
- if (!isAppRouterRequest) {
86
- req.nextUrl.locale = site.language;
87
- }
104
+ else if (existsRedirect.isLanguagePreserved) {
105
+ targetLocale = language;
88
106
  }
89
- const url = this.normalizeUrl(req.nextUrl.clone());
90
- // Redirect logic for external (absolute) URLS. To avoid locale stripping: use plain string for external URLs to prevent Next.js rewriting.
91
- if (REGEXP_ABSOLUTE_URL.test(existsRedirect.target)) {
92
- // Perform variable substitution for absolute URLs
93
- let finalTarget = existsRedirect.target;
94
- if ((0, utils_1.isRegexOrUrl)(existsRedirect.pattern) === 'regex') {
95
- const matched = url.pathname
96
- .replace(/\/*$/gi, '')
97
- .match((0, regex_parser_1.default)(existsRedirect.pattern));
98
- if (matched) {
99
- finalTarget = existsRedirect.target.replace(/\$(\d+)/g, (_, index) => {
100
- return matched[parseInt(index, 10)] || '';
101
- });
102
- }
103
- }
104
- return this.dispatchRedirect(finalTarget, existsRedirect.redirectType, req, res, true);
107
+ let [targetMainUrl, targetQS] = targetUrl.split('?');
108
+ if (url.search && existsRedirect.isQueryStringPreserved) {
109
+ const incomingQS = new URLSearchParams((_a = url.search) !== null && _a !== void 0 ? _a : '');
110
+ targetQS = (0, tools_1.mergeURLSearchParams)(incomingQS, new URLSearchParams(targetQS || ''));
111
+ }
112
+ const prepareNewURL = new URL(`${targetMainUrl}${targetQS ? '?' + targetQS : ''}`, url.origin);
113
+ const basePath = url.basePath; // setting NextUrl.href overrides basePath, so we need to store it
114
+ url.href = prepareNewURL.href;
115
+ url.pathname = prepareNewURL.pathname;
116
+ url.search = prepareNewURL.search;
117
+ // NextUrl setter sets '/' by default if basePath is empty
118
+ // this causes issues when basePath is not configured so we need to set it only if exists
119
+ if (basePath) {
120
+ url.basePath = basePath;
121
+ }
122
+ if (!isAppRouterRequest) {
123
+ // for pages router i18n implementation, apply default locale as backup
124
+ url.locale = targetLocale || req.nextUrl.defaultLocale || 'en';
105
125
  }
106
126
  else {
107
- const isUrl = (0, utils_1.isRegexOrUrl)(existsRedirect.pattern) === 'url';
108
- const targetParts = existsRedirect.target.split('/');
109
- const urlFirstPart = targetParts[1];
110
- if (this.locales.includes(urlFirstPart)) {
111
- if (!isAppRouterRequest) {
112
- req.nextUrl.locale = urlFirstPart;
113
- }
114
- existsRedirect.target = existsRedirect.target.replace(`/${urlFirstPart}`, '');
115
- }
116
- const targetSegments = isUrl
117
- ? existsRedirect.target.split('?')
118
- : url.pathname.replace(/\/*$/gi, '') + existsRedirect.matchedQueryString;
119
- const [targetPath, targetQueryString] = isUrl
120
- ? targetSegments
121
- : targetSegments
122
- .replace((0, regex_parser_1.default)(existsRedirect.pattern), existsRedirect.target)
123
- .replace(/^\/\//, '/')
124
- .split('?');
125
- const mergedQueryString = existsRedirect.isQueryStringPreserved
126
- ? (0, utils_1.mergeURLSearchParams)(new URLSearchParams((_a = url.search) !== null && _a !== void 0 ? _a : ''), new URLSearchParams(targetQueryString || ''))
127
- : targetQueryString || '';
128
- const prepareNewURL = new URL(`${targetPath}${mergedQueryString ? '?' + mergedQueryString : ''}`, url.origin);
129
- const basePath = url.basePath; // setting NextUrl.href overrides basePath, so we need to store it
130
- url.href = prepareNewURL.href;
131
- url.pathname = prepareNewURL.pathname;
132
- url.search = prepareNewURL.search;
133
- // NextUrl setter sets '/' by default if basePath is empty
134
- // this causes issues when basePath is not configured so we need to set it only if exists
135
- if (basePath) {
136
- url.basePath = basePath;
137
- }
138
- if (!isAppRouterRequest) {
139
- url.locale = req.nextUrl.locale;
140
- }
127
+ // In App Router, we need to set the locale in the pathname, if present
128
+ if (targetLocale)
129
+ url.pathname = `/${targetLocale}${url.pathname}`;
141
130
  }
142
131
  /** return Response redirect with http code of redirect type */
143
- return this.dispatchRedirect(url, existsRedirect.redirectType, req, res, false);
144
- });
145
- const response = yield createResponse();
146
- core_1.debug.redirects('redirects middleware end in %dms: %o', Date.now() - startTimestamp, {
147
- redirected: response.redirected,
148
- status: response.status,
149
- url: response.url,
150
- headers: this.extractDebugHeaders(response.headers),
132
+ return this.dispatchRedirect(this.normalizeUrl(url), existsRedirect.redirectType, req, res, false);
133
+ };
134
+ // replace $siteLang token in target if exists
135
+ existsRedirect.target = existsRedirect.target.replace(REGEXP_CONTEXT_SITE_LANG, site.language);
136
+ const reqUrl = this.normalizeUrl(req.nextUrl.clone());
137
+ // Apply regex replacements to the target URL if the pattern is a regex
138
+ const matched = reqUrl.pathname
139
+ .replace(/\/*$/gi, '')
140
+ .match((0, regex_parser_1.default)(existsRedirect.pattern));
141
+ if (matched) {
142
+ existsRedirect.target = existsRedirect.target.replace(/\$(\d+)/g, (_, index) => {
143
+ return matched[parseInt(index, 10)] || '';
144
+ });
145
+ }
146
+ const redirectedResponse = REGEXP_ABSOLUTE_URL.test(existsRedirect.target)
147
+ ? processAbsoluteUrlTarget(reqUrl, existsRedirect)
148
+ : processRelativeUrlTarget(reqUrl, existsRedirect);
149
+ debug_1.default.redirects('redirects proxy end in %dms: %o', Date.now() - startTimestamp, {
150
+ redirected: redirectedResponse.redirected,
151
+ status: redirectedResponse.status,
152
+ url: redirectedResponse.url,
153
+ headers: this.extractDebugHeaders(redirectedResponse.headers),
151
154
  });
152
- return response;
155
+ return redirectedResponse;
153
156
  }
154
157
  catch (error) {
155
- console.log('Redirect middleware failed:');
158
+ console.log('Redirect proxy failed:');
156
159
  console.log(error);
157
160
  return res;
158
161
  }
159
162
  });
160
163
  this.locales = config.locales;
164
+ // If redirectsService is provided directly (e.g., for testing), use it
165
+ if (this.config.redirectsService) {
166
+ this.redirectsService = this.config.redirectsService;
167
+ return;
168
+ }
161
169
  // Validate API config is present - redirects requires either Edge or local API configuration
162
170
  const hasEdgeConfig = !!(this.config.contextId || this.config.clientContextId);
163
171
  const hasLocalConfig = !!(this.config.apiHost && this.config.apiKey);
164
172
  if (!hasEdgeConfig && !hasLocalConfig) {
165
- console.warn('[RedirectsMiddleware] Redirects middleware requires either Edge configuration (contextId/clientContextId) or local API configuration (apiHost/apiKey). ' +
173
+ console.warn('[RedirectsProxy] Redirects proxy requires either Edge configuration (contextId/clientContextId) or local API configuration (apiHost/apiKey). ' +
166
174
  'Redirects features will be disabled. This is expected when API configuration is not available.');
167
175
  // Set to null to indicate service is disabled
168
176
  this.redirectsService = null;
@@ -185,16 +193,16 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
185
193
  };
186
194
  // NOTE: we provide native fetch for compatibility on Next.js Edge Runtime
187
195
  // (underlying default 'cross-fetch' is not currently compatible: https://github.com/lquixada/cross-fetch/issues/78)
188
- this.redirectsService =
189
- (_a = this.config.redirectsService) !== null && _a !== void 0 ? _a : new site_1.RedirectsService(Object.assign(Object.assign({}, config), { clientFactory: this.getClientFactory(graphQLOptions), fetch: fetch }));
196
+ this.redirectsService = new site_1.RedirectsService(Object.assign(Object.assign({}, config), { clientFactory: this.getClientFactory(graphQLOptions), fetch: fetch }));
190
197
  }
191
198
  disabled(req, res) {
192
- // Check if API config is missing - if so, disable the middleware
199
+ // Check if API config is missing - if so, disable the proxy
193
200
  if (!this.redirectsService) {
194
- core_1.debug.redirects('skipped (redirects service not configured - API config required)');
201
+ debug_1.default.redirects('skipped (redirects service not configured - API config required)');
195
202
  return true;
196
203
  }
197
- return super.disabled(req, res);
204
+ // ignore files
205
+ return req.nextUrl.pathname.includes('.') || super.disabled(req, res);
198
206
  }
199
207
  /**
200
208
  * Method returns RedirectInfo when matches
@@ -212,14 +220,13 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
212
220
  const locale = this.getLanguage(req);
213
221
  const normalizedPath = incomingURL.replace(/\/*$/gi, '').toLowerCase();
214
222
  const redirects = yield this.redirectsService.fetchRedirects(siteName);
215
- const language = this.getLanguage(req);
216
223
  const modifyRedirects = structuredClone(redirects);
217
224
  let matchedQueryString;
218
225
  const localePath = `/${locale.toLowerCase()}${normalizedPath}`;
219
226
  return modifyRedirects.length
220
227
  ? modifyRedirects.find((redirect) => {
221
228
  // process static URL (non-regex) rules
222
- if ((0, utils_1.isRegexOrUrl)(redirect.pattern) === 'url') {
229
+ if ((0, tools_1.isRegexOrUrl)(redirect.pattern) === 'url') {
223
230
  const urlArray = redirect.pattern.endsWith('/')
224
231
  ? redirect.pattern.slice(0, -1).split('?')
225
232
  : redirect.pattern.split('?');
@@ -234,12 +241,13 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
234
241
  }
235
242
  return ((patternPath === localePath || patternPath === normalizedPath) &&
236
243
  (!patternQS ||
237
- (0, utils_1.areURLSearchParamsEqual)(new URLSearchParams(patternQS), new URLSearchParams(incomingQS))));
244
+ (0, tools_1.areURLSearchParamsEqual)(new URLSearchParams(patternQS), new URLSearchParams(incomingQS))));
238
245
  }
239
246
  // process regex rules
240
247
  // Modify the redirect pattern to ignore the language prefix in the path
241
248
  // And escapes non-special "?" characters in a string or regex.
242
- redirect.pattern = (0, utils_1.escapeNonSpecialQuestionMarks)(redirect.pattern.replace(new RegExp(`^[^]?/${language}/`, 'gi'), ''));
249
+ redirect.pattern = (0, tools_1.escapeNonSpecialQuestionMarks)('^' + redirect.pattern.replace(new RegExp(`^[^]?/${locale}/`, 'gi'), '') // ensure function thinks input is regex
250
+ );
243
251
  // Prepare the redirect pattern as a regular expression, making it more flexible for matching URLs
244
252
  redirect.pattern = `/^\/${redirect.pattern
245
253
  .replace(/^\/|\/$/g, '') // Removes leading and trailing slashes
@@ -283,7 +291,7 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
283
291
  /**
284
292
  * Remove special parameters(Next.JS)
285
293
  * Example: /about/contact/us
286
- * When a user clicks on this link, Next.js should generate a link for the middleware, formatted like this:
294
+ * When a user clicks on this link, Next.js should generate a link for the proxy, formatted like this:
287
295
  * http://host/about/contact/us?path=about&path=contact&path=us
288
296
  */
289
297
  const newQueryString = url.search
@@ -341,7 +349,7 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
341
349
  }
342
350
  // Check if it has a site prefix
343
351
  // If so, preserve it for the redirect target to maintain proper routing
344
- const incomingRewrite = res === null || res === void 0 ? void 0 : res.headers.get(middleware_1.REWRITE_HEADER_NAME);
352
+ const incomingRewrite = res === null || res === void 0 ? void 0 : res.headers.get(proxy_1.REWRITE_HEADER_NAME);
345
353
  if (incomingRewrite && !isExternal) {
346
354
  // Extract locale from target path
347
355
  const targetPathParts = rewritePath.split('/').filter(Boolean);
@@ -363,7 +371,7 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
363
371
  }
364
372
  }
365
373
  /**
366
- * Helper function to create a redirect response and remove the x-middleware-next header.
374
+ * Helper function to create a redirect response and remove the x-proxy-next header.
367
375
  * @param {NextURL | string} url The URL to redirect to.
368
376
  * @param {Response} res The response object.
369
377
  * @param {number} status The HTTP status code of the redirect.
@@ -371,7 +379,9 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
371
379
  * @returns {NextResponse<unknown>} The redirect response.
372
380
  */
373
381
  createRedirectResponse(url, res, status, statusText) {
374
- const redirect = server_1.NextResponse.redirect(url, {
382
+ // Convert NextURL to string if needed - NextResponse.redirect requires a string URL
383
+ const urlString = typeof url === 'string' ? url : url.href;
384
+ const redirect = server_1.NextResponse.redirect(urlString, {
375
385
  status,
376
386
  statusText,
377
387
  headers: res === null || res === void 0 ? void 0 : res.headers,
@@ -379,9 +389,9 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
379
389
  if (res === null || res === void 0 ? void 0 : res.headers) {
380
390
  redirect.headers.delete('x-middleware-next');
381
391
  redirect.headers.delete('x-middleware-rewrite');
382
- redirect.headers.delete(middleware_1.REWRITE_HEADER_NAME);
392
+ redirect.headers.delete(proxy_1.REWRITE_HEADER_NAME);
383
393
  }
384
394
  return redirect;
385
395
  }
386
396
  }
387
- exports.RedirectsMiddleware = RedirectsMiddleware;
397
+ exports.RedirectsProxy = RedirectsProxy;
@@ -8,13 +8,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.createEditingConfigRouteHandler = void 0;
13
- const editing_1 = require("@sitecore-content-sdk/core/editing");
14
- const core_1 = require("@sitecore-content-sdk/core");
15
- const utils_1 = require("@sitecore-content-sdk/core/utils");
16
- const layout_1 = require("@sitecore-content-sdk/core/layout");
17
- const utils_2 = require("../utils/utils");
16
+ const editing_1 = require("@sitecore-content-sdk/content/editing");
17
+ const tools_1 = require("@sitecore-content-sdk/core/tools");
18
+ const layout_1 = require("@sitecore-content-sdk/content/layout");
19
+ const utils_1 = require("../utils/utils");
20
+ const debug_1 = __importDefault(require("../debug"));
18
21
  /**
19
22
  * Creates a route handler for the editing config API route (e.g. '/api/editing/config')
20
23
  * Provides configuration information to determine feature compatibility on Pages side.
@@ -26,7 +29,7 @@ const createEditingConfigRouteHandler = (options) => {
26
29
  const { components, metadata, clientComponents } = options;
27
30
  const validateRequest = (req) => {
28
31
  const secret = req.nextUrl.searchParams.get(editing_1.QUERY_PARAM_EDITING_SECRET);
29
- const corsHeaders = (0, utils_1.getEnforcedCorsHeaders)({
32
+ const corsHeaders = (0, tools_1.getEnforcedCorsHeaders)({
30
33
  requestMethod: req.method,
31
34
  headers: req.headers,
32
35
  presetCorsHeader: undefined,
@@ -37,10 +40,10 @@ const createEditingConfigRouteHandler = (options) => {
37
40
  const GET = (req) => __awaiter(void 0, void 0, void 0, function* () {
38
41
  try {
39
42
  const startTimestamp = Date.now();
40
- core_1.debug.editing('editing config route handler start');
43
+ debug_1.default.editing('editing config route handler start');
41
44
  const { secret, corsHeaders } = validateRequest(req);
42
45
  if (!corsHeaders) {
43
- core_1.debug.editing('invalid origin host - set allowed origins in JSS_ALLOWED_ORIGINS environment variable');
46
+ debug_1.default.editing('invalid origin host - set allowed origins in JSS_ALLOWED_ORIGINS environment variable');
44
47
  return new Response(JSON.stringify({ message: 'Invalid origin' }), {
45
48
  status: 401,
46
49
  headers: {
@@ -48,8 +51,8 @@ const createEditingConfigRouteHandler = (options) => {
48
51
  },
49
52
  });
50
53
  }
51
- if (secret !== (0, utils_2.getEditingSecret)()) {
52
- core_1.debug.editing('invalid editing secret - sent "%s" expected "%s"', secret, (0, utils_2.getEditingSecret)());
54
+ if (secret !== (0, utils_1.getEditingSecret)()) {
55
+ debug_1.default.editing('invalid editing secret - sent "%s" expected "%s"', secret, (0, utils_1.getEditingSecret)());
53
56
  return new Response(JSON.stringify({ message: 'Missing or invalid editing secret' }), {
54
57
  status: 401,
55
58
  headers: Object.assign({ 'Content-Type': 'application/json' }, corsHeaders),
@@ -64,7 +67,7 @@ const createEditingConfigRouteHandler = (options) => {
64
67
  packages: metadata.packages,
65
68
  editMode: layout_1.EditMode.Metadata,
66
69
  };
67
- core_1.debug.editing('editing config route handler end in %dms', Date.now() - startTimestamp);
70
+ debug_1.default.editing('editing config route handler end in %dms', Date.now() - startTimestamp);
68
71
  return new Response(JSON.stringify(responseData), {
69
72
  status: 200,
70
73
  headers: Object.assign({ 'Content-Type': 'application/json' }, corsHeaders),
@@ -80,10 +83,10 @@ const createEditingConfigRouteHandler = (options) => {
80
83
  });
81
84
  const OPTIONS = (req) => __awaiter(void 0, void 0, void 0, function* () {
82
85
  try {
83
- core_1.debug.editing('preflight request');
86
+ debug_1.default.editing('preflight request');
84
87
  const { corsHeaders } = validateRequest(req);
85
88
  if (!corsHeaders) {
86
- core_1.debug.editing('invalid origin host - set allowed origins in JSS_ALLOWED_ORIGINS environment variable');
89
+ debug_1.default.editing('invalid origin host - set allowed origins in JSS_ALLOWED_ORIGINS environment variable');
87
90
  return new Response(JSON.stringify({ message: 'Invalid origin' }), {
88
91
  status: 401,
89
92
  headers: {
@@ -8,17 +8,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.createEditingRenderRouteHandlers = void 0;
13
16
  exports.getNextCookies = getNextCookies;
14
17
  const core_1 = require("@sitecore-content-sdk/core");
15
- const editing_1 = require("@sitecore-content-sdk/core/editing");
16
- const utils_1 = require("@sitecore-content-sdk/core/utils");
17
- const layout_1 = require("@sitecore-content-sdk/core/layout");
18
- const utils_2 = require("../utils/utils");
18
+ const editing_1 = require("@sitecore-content-sdk/content/editing");
19
+ const tools_1 = require("@sitecore-content-sdk/core/tools");
20
+ const layout_1 = require("@sitecore-content-sdk/content/layout");
21
+ const utils_1 = require("../utils/utils");
19
22
  const headers_1 = require("next/headers");
20
- const utils_3 = require("../editing/utils");
21
- const site_1 = require("@sitecore-content-sdk/core/site");
23
+ const utils_2 = require("../editing/utils");
24
+ const site_1 = require("@sitecore-content-sdk/content/site");
25
+ const debug_1 = __importDefault(require("../debug"));
22
26
  /**
23
27
  * Helper function to handle cookie operations - can be mocked for testing
24
28
  * @returns {Promise<NextCookies>} Next cookies
@@ -39,17 +43,17 @@ function getNextCookies() {
39
43
  * @public
40
44
  */
41
45
  const createEditingRenderRouteHandlers = (options) => {
42
- const dataFetcher = new core_1.NativeDataFetcher({ debugger: core_1.debug.editing });
46
+ const dataFetcher = new core_1.NativeDataFetcher({ debugger: debug_1.default.editing });
43
47
  const getCorsHeaders = (req) => {
44
48
  var _a;
45
- const expectedCorsHeaders = (0, utils_1.getEnforcedCorsHeaders)({
49
+ const expectedCorsHeaders = (0, tools_1.getEnforcedCorsHeaders)({
46
50
  requestMethod: req.method,
47
51
  headers: req.headers,
48
52
  presetCorsHeader: (_a = req.headers) === null || _a === void 0 ? void 0 : _a.get('Access-Control-Allow-Origin'),
49
53
  allowedOrigins: editing_1.EDITING_ALLOWED_ORIGINS,
50
54
  });
51
55
  if (!expectedCorsHeaders) {
52
- core_1.debug.editing('invalid origin host - set allowed origins in JSS_ALLOWED_ORIGINS environment variable');
56
+ debug_1.default.editing('invalid origin host - set allowed origins in JSS_ALLOWED_ORIGINS environment variable');
53
57
  }
54
58
  return expectedCorsHeaders;
55
59
  };
@@ -57,10 +61,10 @@ const createEditingRenderRouteHandlers = (options) => {
57
61
  return `<html><body>Requests from origin ${origin} not allowed</body></html>`;
58
62
  };
59
63
  const validateEditingSecret = (receivedSecret) => {
60
- const editingSecret = (0, utils_2.getEditingSecret)();
64
+ const editingSecret = (0, utils_1.getEditingSecret)();
61
65
  const secretIsvalid = editingSecret === receivedSecret;
62
66
  if (!secretIsvalid) {
63
- core_1.debug.editing('invalid editing secret - sent "%s" expected "%s"', receivedSecret, editingSecret);
67
+ debug_1.default.editing('invalid editing secret - sent "%s" expected "%s"', receivedSecret, editingSecret);
64
68
  }
65
69
  return secretIsvalid;
66
70
  };
@@ -76,7 +80,7 @@ const createEditingRenderRouteHandlers = (options) => {
76
80
  status: 401,
77
81
  });
78
82
  }
79
- core_1.debug.editing('preflight request');
83
+ debug_1.default.editing('preflight request');
80
84
  return new Response(null, { status: 204, headers: expectedCorsHeaders });
81
85
  };
82
86
  const GET = (req) => __awaiter(void 0, void 0, void 0, function* () {
@@ -87,7 +91,7 @@ const createEditingRenderRouteHandlers = (options) => {
87
91
  req.nextUrl.searchParams.forEach((value, key) => {
88
92
  query[key] = value;
89
93
  });
90
- core_1.debug.editing('editing render handler start: %o', {
94
+ debug_1.default.editing('editing render handler start: %o', {
91
95
  method,
92
96
  query,
93
97
  headers,
@@ -110,21 +114,28 @@ const createEditingRenderRouteHandlers = (options) => {
110
114
  draft.enable();
111
115
  const startTimestamp = Date.now();
112
116
  const mode = query.mode;
113
- const requiredQueryParams = (0, utils_3.getRequiredEditingParamsList)(mode);
117
+ const requiredQueryParams = (0, utils_2.getRequiredEditingParamsList)(mode);
114
118
  const missingQueryParams = requiredQueryParams.filter((param) => !query[param]);
119
+ const { allowedQueryParams, missingAllowedParams } = (0, utils_2.getAllowedQueryParams)(query, options.allowedQueryParams);
115
120
  // Validate query parameters
116
- if (missingQueryParams.length) {
117
- core_1.debug.editing('missing required query parameters: %o', missingQueryParams);
121
+ if (missingQueryParams.length || missingAllowedParams.length) {
122
+ debug_1.default.editing('missing required query parameters: %o', [
123
+ ...missingQueryParams,
124
+ ...missingAllowedParams,
125
+ ]);
118
126
  return Response.json({
119
- html: `<html><body>Missing required query parameters: ${missingQueryParams.join(', ')}</body></html>`,
127
+ html: `<html><body>Missing required query parameters: ${[
128
+ ...missingQueryParams,
129
+ ...missingAllowedParams,
130
+ ].join(', ')}</body></html>`,
120
131
  }, { status: 400, headers: responseHeaders });
121
132
  }
122
133
  const encodedRoute = encodeURI(query.route);
123
134
  const route = ((_a = options === null || options === void 0 ? void 0 : options.resolvePageUrl) === null || _a === void 0 ? void 0 : _a.call(options, encodedRoute)) || encodedRoute;
124
- const base = (0, utils_3.resolveServerUrl)(req);
135
+ const base = (0, utils_2.resolveServerUrl)(req);
125
136
  const requestUrl = new URL(route, base);
126
137
  // Restrict the page to be rendered only within the allowed origins
127
- responseHeaders['Content-Security-Policy'] = (0, utils_3.getCSPHeader)();
138
+ responseHeaders['Content-Security-Policy'] = (0, utils_2.getCSPHeader)();
128
139
  const cookieStore = yield getNextCookies();
129
140
  cookieStore.set("__prerender_bypass" /* PreviewCookies.PRERENDER_BYPASS */, ((_b = cookieStore.get("__prerender_bypass" /* PreviewCookies.PRERENDER_BYPASS */)) === null || _b === void 0 ? void 0 : _b.value) || '', {
130
141
  httpOnly: true,
@@ -149,17 +160,17 @@ const createEditingRenderRouteHandlers = (options) => {
149
160
  }
150
161
  const convertedCookies = cookieStore.getAll().map((c) => `${c.name}=${c.value}`);
151
162
  try {
152
- core_1.debug.editing('fetching page route for %s', query.route);
163
+ debug_1.default.editing('fetching page route for %s', query.route);
153
164
  // Get query string parameters to propagate on subsequent requests (e.g. for deployment protection bypass)
154
165
  // Additionally ,in app router preview data is passed through query string instead of preview data cookie
155
- const propagatedQsParams = Object.assign(Object.assign({}, (0, utils_3.getQueryParamsForPropagation)(query)), (0, utils_3.mapEditingParams)(query));
166
+ const propagatedQsParams = Object.assign(Object.assign(Object.assign({}, (0, utils_2.getQueryParamsForPropagation)(query)), (0, utils_2.mapEditingParams)(query)), allowedQueryParams);
156
167
  // Get headers to propagate on subsequent requests
157
- const propagatedHeaders = (0, utils_3.getHeadersForPropagation)(headers);
158
- const html = yield (0, utils_3.getEditingRequestHtml)(requestUrl, propagatedQsParams, propagatedHeaders, convertedCookies, dataFetcher);
168
+ const propagatedHeaders = (0, utils_2.getHeadersForPropagation)(headers);
169
+ const html = yield (0, utils_2.getEditingRequestHtml)(requestUrl, propagatedQsParams, propagatedHeaders, convertedCookies, dataFetcher);
159
170
  // remove nextjs preview cookies to not leak them to the browser
160
- const filteredCookies = (0, utils_3.cleanupNextPreviewCookies)(convertedCookies);
171
+ const filteredCookies = (0, utils_2.cleanupNextPreviewCookies)(convertedCookies);
161
172
  responseHeaders['Set-Cookie'] = (filteredCookies === null || filteredCookies === void 0 ? void 0 : filteredCookies.join('; ')) || '';
162
- core_1.debug.editing('editing render handler end in %dms: %o', Date.now() - startTimestamp, {
173
+ debug_1.default.editing('editing render handler end in %dms: %o', Date.now() - startTimestamp, {
163
174
  status: 200,
164
175
  route,
165
176
  });
@@ -167,9 +178,9 @@ const createEditingRenderRouteHandlers = (options) => {
167
178
  return new Response(html, { status: 200, headers: responseHeaders });
168
179
  }
169
180
  catch (err) {
170
- core_1.debug.editing('error fetching page route %s: %o', requestUrl, err);
171
- core_1.debug.editing('falling back to redirect method... ');
172
- core_1.debug.editing('editing render handler end in %dms: redirect %o', Date.now() - startTimestamp, {
181
+ debug_1.default.editing('error fetching page route %s: %o', requestUrl, err);
182
+ debug_1.default.editing('falling back to redirect method... ');
183
+ debug_1.default.editing('editing render handler end in %dms: redirect %o', Date.now() - startTimestamp, {
173
184
  status: 307,
174
185
  route,
175
186
  });
@@ -211,8 +222,8 @@ const createEditingRenderRouteHandlers = (options) => {
211
222
  req.nextUrl.searchParams.forEach((value, key) => {
212
223
  query[key] = value;
213
224
  });
214
- const propagatedQsParams = Object.assign(Object.assign({}, (0, utils_3.getQueryParamsForPropagation)(query)), (0, utils_3.mapEditingParams)(query));
215
- const base = (0, utils_3.resolveServerUrl)(req);
225
+ const propagatedQsParams = Object.assign(Object.assign(Object.assign({}, (0, utils_2.getQueryParamsForPropagation)(query)), (0, utils_2.mapEditingParams)(query)), (0, utils_2.getAllowedQueryParams)(query, options.allowedQueryParams).allowedQueryParams);
226
+ const base = (0, utils_2.resolveServerUrl)(req);
216
227
  const targetUrl = new URL('/', base);
217
228
  for (const key in propagatedQsParams) {
218
229
  if ({}.hasOwnProperty.call(propagatedQsParams, key)) {
@@ -251,13 +262,13 @@ const createEditingRenderRouteHandlers = (options) => {
251
262
  }
252
263
  });
253
264
  // Restrict the page to be rendered only within the allowed origins
254
- filteredHeaders.set('Content-Security-Policy', (0, utils_3.getCSPHeader)());
265
+ filteredHeaders.set('Content-Security-Policy', (0, utils_2.getCSPHeader)());
255
266
  // add expected CORS headers to response
256
267
  Object.entries(expectedCorsHeaders !== null && expectedCorsHeaders !== void 0 ? expectedCorsHeaders : {}).forEach(([key, value]) => {
257
268
  filteredHeaders.set(key, value);
258
269
  });
259
270
  // remove nextjs preview cookies to not leak them to the browser
260
- const filteredCookies = (0, utils_3.cleanupNextPreviewCookies)(filteredHeaders.get('Set-Cookie'));
271
+ const filteredCookies = (0, utils_2.cleanupNextPreviewCookies)(filteredHeaders.get('Set-Cookie'));
261
272
  filteredHeaders.set('Set-Cookie', (filteredCookies === null || filteredCookies === void 0 ? void 0 : filteredCookies.join('; ')) || '');
262
273
  return new Response(forwardedResponse.data, {
263
274
  status: forwardedResponse.status,