@sitecore-content-sdk/nextjs 1.4.0-canary.16 → 1.4.0-canary.18
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.
- package/dist/cjs/client/sitecore-nextjs-client.js +1 -1
- package/dist/cjs/editing/feaas-render-middleware.js +1 -1
- package/dist/cjs/middleware/index.js +1 -24
- package/dist/cjs/{middleware/app-router-multisite-middleware.js → proxy/app-router-multisite-proxy.js} +8 -8
- package/dist/cjs/proxy/index.js +26 -0
- package/dist/cjs/{middleware/locale-middleware.js → proxy/locale-proxy.js} +13 -13
- package/dist/cjs/{middleware/multisite-middleware.js → proxy/multisite-proxy.js} +16 -16
- package/dist/cjs/{middleware/personalize-middleware.js → proxy/personalize-proxy.js} +20 -20
- package/dist/cjs/{middleware/middleware.js → proxy/proxy.js} +25 -25
- package/dist/cjs/{middleware/redirects-middleware.js → proxy/redirects-proxy.js} +32 -26
- package/dist/cjs/route-handler/robots-route-handler.js +6 -1
- package/dist/cjs/route-handler/sitemap-route-handler.js +6 -1
- package/dist/cjs/utils/utils.js +2 -2
- package/dist/esm/client/sitecore-nextjs-client.js +1 -1
- package/dist/esm/editing/feaas-render-middleware.js +1 -1
- package/dist/esm/middleware/index.js +0 -9
- package/dist/esm/{middleware/app-router-multisite-middleware.js → proxy/app-router-multisite-proxy.js} +6 -6
- package/dist/esm/proxy/index.js +9 -0
- package/dist/esm/{middleware/locale-middleware.js → proxy/locale-proxy.js} +10 -10
- package/dist/esm/{middleware/multisite-middleware.js → proxy/multisite-proxy.js} +13 -13
- package/dist/esm/{middleware/personalize-middleware.js → proxy/personalize-proxy.js} +17 -17
- package/dist/esm/{middleware/middleware.js → proxy/proxy.js} +21 -21
- package/dist/esm/{middleware/redirects-middleware.js → proxy/redirects-proxy.js} +28 -22
- package/dist/esm/route-handler/robots-route-handler.js +6 -1
- package/dist/esm/route-handler/sitemap-route-handler.js +6 -1
- package/dist/esm/utils/utils.js +1 -1
- package/package.json +17 -12
- package/proxy.d.ts +1 -0
- package/types/editing/editing-config-middleware.d.ts.map +1 -1
- package/types/editing/feaas-render-middleware.d.ts +1 -1
- package/types/middleware/index.d.ts +0 -9
- package/types/middleware/index.d.ts.map +1 -1
- package/types/{middleware/app-router-multisite-middleware.d.ts → proxy/app-router-multisite-proxy.d.ts} +6 -6
- package/types/proxy/app-router-multisite-proxy.d.ts.map +1 -0
- package/types/proxy/index.d.ts +10 -0
- package/types/proxy/index.d.ts.map +1 -0
- package/types/proxy/locale-proxy.d.ts +35 -0
- package/types/proxy/locale-proxy.d.ts.map +1 -0
- package/types/{middleware/multisite-middleware.d.ts → proxy/multisite-proxy.d.ts} +11 -11
- package/types/proxy/multisite-proxy.d.ts.map +1 -0
- package/types/{middleware/personalize-middleware.d.ts → proxy/personalize-proxy.d.ts} +9 -9
- package/types/proxy/personalize-proxy.d.ts.map +1 -0
- package/types/{middleware/middleware.d.ts → proxy/proxy.d.ts} +22 -24
- package/types/proxy/proxy.d.ts.map +1 -0
- package/types/{middleware/redirects-middleware.d.ts → proxy/redirects-proxy.d.ts} +10 -10
- package/types/proxy/redirects-proxy.d.ts.map +1 -0
- package/types/route-handler/robots-route-handler.d.ts.map +1 -1
- package/types/route-handler/sitemap-route-handler.d.ts.map +1 -1
- package/types/middleware/app-router-multisite-middleware.d.ts.map +0 -1
- package/types/middleware/locale-middleware.d.ts +0 -35
- package/types/middleware/locale-middleware.d.ts.map +0 -1
- package/types/middleware/middleware.d.ts.map +0 -1
- package/types/middleware/multisite-middleware.d.ts.map +0 -1
- package/types/middleware/personalize-middleware.d.ts.map +0 -1
- package/types/middleware/redirects-middleware.d.ts.map +0 -1
|
@@ -31,7 +31,7 @@ class SitecoreNextjsClient extends client_1.SitecoreClient {
|
|
|
31
31
|
*/
|
|
32
32
|
getSiteNameFromPath(path) {
|
|
33
33
|
const resolvedPath = super.parsePath(path);
|
|
34
|
-
// Get site name (from path rewritten in
|
|
34
|
+
// Get site name (from path rewritten in proxy)
|
|
35
35
|
const siteData = (0, site_1.getSiteRewriteData)(resolvedPath, this.initOptions.defaultSite);
|
|
36
36
|
return siteData.siteName;
|
|
37
37
|
}
|
|
@@ -22,7 +22,7 @@ const utils_2 = require("@sitecore-content-sdk/core/utils");
|
|
|
22
22
|
*/
|
|
23
23
|
class FEAASRenderMiddleware extends render_middleware_1.RenderMiddlewareBase {
|
|
24
24
|
/**
|
|
25
|
-
* @param {
|
|
25
|
+
* @param {FEAASRenderMiddlewareConfig} [config] FEAAS render middleware config
|
|
26
26
|
*/
|
|
27
27
|
constructor(config) {
|
|
28
28
|
var _a;
|
|
@@ -1,30 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
var core_1 = require("@sitecore-content-sdk/core");
|
|
5
|
-
Object.defineProperty(exports, "debug", { enumerable: true, get: function () { return core_1.debug; } });
|
|
6
|
-
var middleware_1 = require("./middleware");
|
|
7
|
-
Object.defineProperty(exports, "MiddlewareBase", { enumerable: true, get: function () { return middleware_1.MiddlewareBase; } });
|
|
8
|
-
Object.defineProperty(exports, "Middleware", { enumerable: true, get: function () { return middleware_1.Middleware; } });
|
|
9
|
-
Object.defineProperty(exports, "defineMiddleware", { enumerable: true, get: function () { return middleware_1.defineMiddleware; } });
|
|
10
|
-
var redirects_middleware_1 = require("./redirects-middleware");
|
|
11
|
-
Object.defineProperty(exports, "RedirectsMiddleware", { enumerable: true, get: function () { return redirects_middleware_1.RedirectsMiddleware; } });
|
|
12
|
-
var personalize_middleware_1 = require("./personalize-middleware");
|
|
13
|
-
Object.defineProperty(exports, "PersonalizeMiddleware", { enumerable: true, get: function () { return personalize_middleware_1.PersonalizeMiddleware; } });
|
|
14
|
-
var multisite_middleware_1 = require("./multisite-middleware");
|
|
15
|
-
Object.defineProperty(exports, "MultisiteMiddleware", { enumerable: true, get: function () { return multisite_middleware_1.MultisiteMiddleware; } });
|
|
16
|
-
var app_router_multisite_middleware_1 = require("./app-router-multisite-middleware");
|
|
17
|
-
Object.defineProperty(exports, "AppRouterMultisiteMiddleware", { enumerable: true, get: function () { return app_router_multisite_middleware_1.AppRouterMultisiteMiddleware; } });
|
|
3
|
+
exports.RobotsMiddleware = exports.SitemapMiddleware = void 0;
|
|
18
4
|
var sitemap_middleware_1 = require("./sitemap-middleware");
|
|
19
5
|
Object.defineProperty(exports, "SitemapMiddleware", { enumerable: true, get: function () { return sitemap_middleware_1.SitemapMiddleware; } });
|
|
20
6
|
var robots_middleware_1 = require("./robots-middleware");
|
|
21
7
|
Object.defineProperty(exports, "RobotsMiddleware", { enumerable: true, get: function () { return robots_middleware_1.RobotsMiddleware; } });
|
|
22
|
-
var locale_middleware_1 = require("./locale-middleware");
|
|
23
|
-
Object.defineProperty(exports, "LocaleMiddleware", { enumerable: true, get: function () { return locale_middleware_1.LocaleMiddleware; } });
|
|
24
|
-
var personalize_1 = require("@sitecore-content-sdk/core/personalize");
|
|
25
|
-
Object.defineProperty(exports, "PersonalizeService", { enumerable: true, get: function () { return personalize_1.PersonalizeService; } });
|
|
26
|
-
var site_1 = require("@sitecore-content-sdk/core/site");
|
|
27
|
-
Object.defineProperty(exports, "RedirectsService", { enumerable: true, get: function () { return site_1.RedirectsService; } });
|
|
28
|
-
Object.defineProperty(exports, "REDIRECT_TYPE_301", { enumerable: true, get: function () { return site_1.REDIRECT_TYPE_301; } });
|
|
29
|
-
Object.defineProperty(exports, "REDIRECT_TYPE_302", { enumerable: true, get: function () { return site_1.REDIRECT_TYPE_302; } });
|
|
30
|
-
Object.defineProperty(exports, "REDIRECT_TYPE_SERVER_TRANSFER", { enumerable: true, get: function () { return site_1.REDIRECT_TYPE_SERVER_TRANSFER; } });
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
3
|
+
exports.AppRouterMultisiteProxy = void 0;
|
|
4
|
+
const multisite_proxy_1 = require("./multisite-proxy");
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Proxy/handler for enabling multisite support in the Next.js App Router.
|
|
7
7
|
* @public
|
|
8
8
|
*/
|
|
9
|
-
class
|
|
9
|
+
class AppRouterMultisiteProxy extends multisite_proxy_1.MultisiteProxy {
|
|
10
10
|
/**
|
|
11
11
|
* Warns when multisite is disabled in App Router.
|
|
12
|
-
* The
|
|
12
|
+
* The proxy will still run to prevent routing errors.
|
|
13
13
|
* @param {NextResponse} _res response (unused, kept for method signature compatibility)
|
|
14
14
|
*/
|
|
15
15
|
// eslint-disable-next-line no-unused-vars
|
|
16
16
|
shouldWarnWhenDisabled(_res) {
|
|
17
|
-
console.warn('⚠️ Warning: Multisite is disabled in App Router configuration, but the
|
|
17
|
+
console.warn('⚠️ Warning: Multisite is disabled in App Router configuration, but the proxy will continue running. ' +
|
|
18
18
|
'Disabling multisite in App Router would cause 404 errors for regular page requests because the route structure requires the [site] segment. ' +
|
|
19
19
|
'Preview/Editing modes will still work. ' +
|
|
20
20
|
'For single-site setups, keep multisite enabled and configure only one site.');
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* In App Router, we cannot skip the
|
|
23
|
+
* In App Router, we cannot skip the proxy even if enabled is false,
|
|
24
24
|
* because the route structure requires the [site] segment.
|
|
25
25
|
* @returns {boolean} always returns false (never skip) for App Router
|
|
26
26
|
*/
|
|
@@ -38,4 +38,4 @@ class AppRouterMultisiteMiddleware extends multisite_middleware_1.MultisiteMiddl
|
|
|
38
38
|
return `/${siteName}${path}`;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
exports.
|
|
41
|
+
exports.AppRouterMultisiteProxy = AppRouterMultisiteProxy;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REDIRECT_TYPE_SERVER_TRANSFER = exports.REDIRECT_TYPE_302 = exports.REDIRECT_TYPE_301 = exports.RedirectsService = exports.PersonalizeService = exports.LocaleProxy = exports.AppRouterMultisiteProxy = exports.MultisiteProxy = exports.PersonalizeProxy = exports.RedirectsProxy = exports.defineProxy = exports.ProxyHandler = exports.ProxyBase = exports.debug = void 0;
|
|
4
|
+
var core_1 = require("@sitecore-content-sdk/core");
|
|
5
|
+
Object.defineProperty(exports, "debug", { enumerable: true, get: function () { return core_1.debug; } });
|
|
6
|
+
var proxy_1 = require("./proxy");
|
|
7
|
+
Object.defineProperty(exports, "ProxyBase", { enumerable: true, get: function () { return proxy_1.ProxyBase; } });
|
|
8
|
+
Object.defineProperty(exports, "ProxyHandler", { enumerable: true, get: function () { return proxy_1.ProxyHandler; } });
|
|
9
|
+
Object.defineProperty(exports, "defineProxy", { enumerable: true, get: function () { return proxy_1.defineProxy; } });
|
|
10
|
+
var redirects_proxy_1 = require("./redirects-proxy");
|
|
11
|
+
Object.defineProperty(exports, "RedirectsProxy", { enumerable: true, get: function () { return redirects_proxy_1.RedirectsProxy; } });
|
|
12
|
+
var personalize_proxy_1 = require("./personalize-proxy");
|
|
13
|
+
Object.defineProperty(exports, "PersonalizeProxy", { enumerable: true, get: function () { return personalize_proxy_1.PersonalizeProxy; } });
|
|
14
|
+
var multisite_proxy_1 = require("./multisite-proxy");
|
|
15
|
+
Object.defineProperty(exports, "MultisiteProxy", { enumerable: true, get: function () { return multisite_proxy_1.MultisiteProxy; } });
|
|
16
|
+
var app_router_multisite_proxy_1 = require("./app-router-multisite-proxy");
|
|
17
|
+
Object.defineProperty(exports, "AppRouterMultisiteProxy", { enumerable: true, get: function () { return app_router_multisite_proxy_1.AppRouterMultisiteProxy; } });
|
|
18
|
+
var locale_proxy_1 = require("./locale-proxy");
|
|
19
|
+
Object.defineProperty(exports, "LocaleProxy", { enumerable: true, get: function () { return locale_proxy_1.LocaleProxy; } });
|
|
20
|
+
var personalize_1 = require("@sitecore-content-sdk/core/personalize");
|
|
21
|
+
Object.defineProperty(exports, "PersonalizeService", { enumerable: true, get: function () { return personalize_1.PersonalizeService; } });
|
|
22
|
+
var site_1 = require("@sitecore-content-sdk/core/site");
|
|
23
|
+
Object.defineProperty(exports, "RedirectsService", { enumerable: true, get: function () { return site_1.RedirectsService; } });
|
|
24
|
+
Object.defineProperty(exports, "REDIRECT_TYPE_301", { enumerable: true, get: function () { return site_1.REDIRECT_TYPE_301; } });
|
|
25
|
+
Object.defineProperty(exports, "REDIRECT_TYPE_302", { enumerable: true, get: function () { return site_1.REDIRECT_TYPE_302; } });
|
|
26
|
+
Object.defineProperty(exports, "REDIRECT_TYPE_SERVER_TRANSFER", { enumerable: true, get: function () { return site_1.REDIRECT_TYPE_SERVER_TRANSFER; } });
|
|
@@ -10,19 +10,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
});
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.
|
|
13
|
+
exports.LocaleProxy = void 0;
|
|
14
14
|
const core_1 = require("@sitecore-content-sdk/core");
|
|
15
15
|
const i18n_1 = require("@sitecore-content-sdk/core/i18n");
|
|
16
|
-
const
|
|
16
|
+
const proxy_1 = require("./proxy");
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
19
|
-
* This
|
|
18
|
+
* Proxy/handler for handling locale-based routing in the Next.js App Router.
|
|
19
|
+
* This proxy is responsible for extracting the locale from the request path and rewriting it if necessary.
|
|
20
20
|
* It also sets the locale header in the response.
|
|
21
21
|
* @public
|
|
22
22
|
*/
|
|
23
|
-
class
|
|
23
|
+
class LocaleProxy extends proxy_1.ProxyBase {
|
|
24
24
|
/**
|
|
25
|
-
* @param {
|
|
25
|
+
* @param {LocaleProxyConfig} config Locale proxy config
|
|
26
26
|
*/
|
|
27
27
|
constructor(config) {
|
|
28
28
|
super(config);
|
|
@@ -32,12 +32,12 @@ class LocaleMiddleware extends middleware_1.MiddlewareBase {
|
|
|
32
32
|
const { pathname } = req.nextUrl;
|
|
33
33
|
const localeFromPath = this.getLocaleFromPath(pathname);
|
|
34
34
|
const locale = localeFromPath || this.getLanguage(req, res);
|
|
35
|
-
core_1.debug.locale('locale
|
|
35
|
+
core_1.debug.locale('locale proxy start: %o', {
|
|
36
36
|
pathname,
|
|
37
37
|
locale,
|
|
38
38
|
});
|
|
39
39
|
if (this.disabled(req, res)) {
|
|
40
|
-
core_1.debug.locale('skipped (locale
|
|
40
|
+
core_1.debug.locale('skipped (locale proxy is disabled)');
|
|
41
41
|
return res;
|
|
42
42
|
}
|
|
43
43
|
if (!localeFromPath) {
|
|
@@ -45,7 +45,7 @@ class LocaleMiddleware extends middleware_1.MiddlewareBase {
|
|
|
45
45
|
const rewritePath = (0, i18n_1.getLocaleRewrite)(pathname, locale);
|
|
46
46
|
const response = this.rewrite(rewritePath, req, res);
|
|
47
47
|
this.setLocaleHeader(response, locale);
|
|
48
|
-
core_1.debug.locale('locale
|
|
48
|
+
core_1.debug.locale('locale proxy end, with rewrite: %o', {
|
|
49
49
|
pathname,
|
|
50
50
|
locale,
|
|
51
51
|
rewritePath,
|
|
@@ -53,14 +53,14 @@ class LocaleMiddleware extends middleware_1.MiddlewareBase {
|
|
|
53
53
|
return response;
|
|
54
54
|
}
|
|
55
55
|
this.setLocaleHeader(res, locale);
|
|
56
|
-
core_1.debug.locale('locale
|
|
56
|
+
core_1.debug.locale('locale proxy end, no rewrite: %o', {
|
|
57
57
|
pathname,
|
|
58
58
|
locale,
|
|
59
59
|
});
|
|
60
60
|
return res;
|
|
61
61
|
}
|
|
62
62
|
catch (error) {
|
|
63
|
-
console.log('Locale
|
|
63
|
+
console.log('Locale proxy failed:');
|
|
64
64
|
console.log(error);
|
|
65
65
|
return res;
|
|
66
66
|
}
|
|
@@ -79,7 +79,7 @@ class LocaleMiddleware extends middleware_1.MiddlewareBase {
|
|
|
79
79
|
return this.config.locales.find((locale) => path.includes(`/${locale}/`) || path.endsWith(`/${locale}`));
|
|
80
80
|
}
|
|
81
81
|
setLocaleHeader(res, locale) {
|
|
82
|
-
res.headers.set(
|
|
82
|
+
res.headers.set(proxy_1.LOCALE_HEADER_NAME, locale);
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
-
exports.
|
|
85
|
+
exports.LocaleProxy = LocaleProxy;
|
|
@@ -10,18 +10,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
});
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.
|
|
13
|
+
exports.MultisiteProxy = void 0;
|
|
14
14
|
const site_1 = require("@sitecore-content-sdk/core/site");
|
|
15
15
|
const core_1 = require("@sitecore-content-sdk/core");
|
|
16
|
-
const
|
|
16
|
+
const proxy_1 = require("./proxy");
|
|
17
17
|
const editing_1 = require("@sitecore-content-sdk/core/editing");
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Proxy / handler for multisite support
|
|
20
20
|
* @public
|
|
21
21
|
*/
|
|
22
|
-
class
|
|
22
|
+
class MultisiteProxy extends proxy_1.ProxyBase {
|
|
23
23
|
/**
|
|
24
|
-
* @param {
|
|
24
|
+
* @param {MultisiteProxyConfig} [config] Multisite proxy config
|
|
25
25
|
*/
|
|
26
26
|
constructor(config) {
|
|
27
27
|
super(config);
|
|
@@ -29,12 +29,12 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
29
29
|
this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
30
30
|
var _a, _b, _c;
|
|
31
31
|
try {
|
|
32
|
-
// Path can be rewritten by previously executed
|
|
33
|
-
const pathname = (res === null || res === void 0 ? void 0 : res.headers.get(
|
|
32
|
+
// Path can be rewritten by previously executed proxy
|
|
33
|
+
const pathname = (res === null || res === void 0 ? void 0 : res.headers.get(proxy_1.REWRITE_HEADER_NAME)) || req.nextUrl.pathname;
|
|
34
34
|
const language = this.getLanguage(req, res);
|
|
35
35
|
const hostname = this.getHostHeader(req) || this.defaultHostname;
|
|
36
36
|
const startTimestamp = Date.now();
|
|
37
|
-
core_1.debug.multisite('multisite
|
|
37
|
+
core_1.debug.multisite('multisite proxy start: %o', {
|
|
38
38
|
pathname,
|
|
39
39
|
language,
|
|
40
40
|
hostname,
|
|
@@ -53,13 +53,13 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
53
53
|
if (!this.config.enabled) {
|
|
54
54
|
this.shouldWarnWhenDisabled(res);
|
|
55
55
|
if (this.shouldSkipWhenDisabled()) {
|
|
56
|
-
core_1.debug.multisite('skipped (multisite
|
|
56
|
+
core_1.debug.multisite('skipped (multisite proxy is disabled globally)');
|
|
57
57
|
return res;
|
|
58
58
|
}
|
|
59
59
|
// Continue execution if shouldSkipWhenDisabled returns false (App Router case)
|
|
60
60
|
}
|
|
61
61
|
if (this.disabled(req, res)) {
|
|
62
|
-
core_1.debug.multisite('skipped (multisite
|
|
62
|
+
core_1.debug.multisite('skipped (multisite proxy is disabled)');
|
|
63
63
|
return res;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -89,9 +89,9 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
89
89
|
httpOnly: true,
|
|
90
90
|
sameSite: 'none',
|
|
91
91
|
};
|
|
92
|
-
// Share site name with the following executed
|
|
92
|
+
// Share site name with the following executed proxies
|
|
93
93
|
response.cookies.set(site_1.SITE_KEY, siteName, defaultCookieAttributes);
|
|
94
|
-
core_1.debug.multisite('multisite
|
|
94
|
+
core_1.debug.multisite('multisite proxy end in %dms: %o', Date.now() - startTimestamp, {
|
|
95
95
|
rewritePath,
|
|
96
96
|
siteName,
|
|
97
97
|
headers: this.extractDebugHeaders(response.headers),
|
|
@@ -100,7 +100,7 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
100
100
|
return response;
|
|
101
101
|
}
|
|
102
102
|
catch (error) {
|
|
103
|
-
console.log('Multisite
|
|
103
|
+
console.log('Multisite proxy failed:');
|
|
104
104
|
console.log(error);
|
|
105
105
|
return res;
|
|
106
106
|
}
|
|
@@ -119,9 +119,9 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
119
119
|
// Base implementation does nothing - subclasses can override to show warnings
|
|
120
120
|
}
|
|
121
121
|
/**
|
|
122
|
-
* Determines if
|
|
122
|
+
* Determines if proxy should be skipped when multisite is disabled.
|
|
123
123
|
* Override in subclasses to provide router-specific behavior.
|
|
124
|
-
* @returns {boolean} true if
|
|
124
|
+
* @returns {boolean} true if proxy should be skipped when disabled
|
|
125
125
|
*/
|
|
126
126
|
shouldSkipWhenDisabled() {
|
|
127
127
|
return true; // Base class skips when disabled
|
|
@@ -138,4 +138,4 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
138
138
|
});
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
|
-
exports.
|
|
141
|
+
exports.MultisiteProxy = MultisiteProxy;
|
|
@@ -9,19 +9,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.PersonalizeProxy = void 0;
|
|
13
13
|
const personalize_1 = require("@sitecore-content-sdk/core/personalize");
|
|
14
14
|
const core_1 = require("@sitecore-content-sdk/core");
|
|
15
|
-
const
|
|
16
|
-
const server_1 = require("@sitecore-
|
|
17
|
-
const server_2 = require("@sitecore-
|
|
15
|
+
const proxy_1 = require("./proxy");
|
|
16
|
+
const server_1 = require("@sitecore-content-sdk/analytics-core/server");
|
|
17
|
+
const server_2 = require("@sitecore-content-sdk/personalize/server");
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Proxy / handler to support Sitecore Personalize
|
|
20
20
|
* @public
|
|
21
21
|
*/
|
|
22
|
-
class
|
|
22
|
+
class PersonalizeProxy extends proxy_1.ProxyBase {
|
|
23
23
|
/**
|
|
24
|
-
* @param {
|
|
24
|
+
* @param {PersonalizeProxyConfig} [config] Personalize proxy config
|
|
25
25
|
*/
|
|
26
26
|
constructor(config) {
|
|
27
27
|
var _a;
|
|
@@ -29,7 +29,7 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
29
29
|
this.config = config;
|
|
30
30
|
this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
31
31
|
if (!this.config.enabled) {
|
|
32
|
-
core_1.debug.personalize('skipped (personalize
|
|
32
|
+
core_1.debug.personalize('skipped (personalize proxy is disabled globally)');
|
|
33
33
|
return res;
|
|
34
34
|
}
|
|
35
35
|
try {
|
|
@@ -41,11 +41,11 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
41
41
|
const geo = this.config.extractGeoDataCb
|
|
42
42
|
? yield this.config.extractGeoDataCb(req)
|
|
43
43
|
: undefined;
|
|
44
|
-
core_1.debug.personalize('personalize
|
|
44
|
+
core_1.debug.personalize('personalize proxy start: %o', Object.assign(Object.assign({ pathname,
|
|
45
45
|
language,
|
|
46
46
|
hostname }, (geo && { geo })), { headers: this.extractDebugHeaders(req.headers) }));
|
|
47
47
|
if (this.disabled(req, res)) {
|
|
48
|
-
core_1.debug.personalize('skipped (personalize
|
|
48
|
+
core_1.debug.personalize('skipped (personalize proxy is disabled)');
|
|
49
49
|
return res;
|
|
50
50
|
}
|
|
51
51
|
if (res.redirected || // Don't attempt to personalize a redirect
|
|
@@ -75,8 +75,8 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
75
75
|
// Personalized, but this is a prefetch request.
|
|
76
76
|
// In this case, don't execute a personalize request; otherwise, the metrics for component A/B experiments would be inaccurate.
|
|
77
77
|
// Disable preflight caching to force revalidation on client-side navigation (personalization WILL be influenced).
|
|
78
|
-
// Note the reason we don't move this any earlier in the
|
|
79
|
-
res.headers.set('x-
|
|
78
|
+
// Note the reason we don't move this any earlier in the proxy is that we would then be sacrificing performance for non-personalized pages.
|
|
79
|
+
res.headers.set('x-proxy-cache', 'no-cache');
|
|
80
80
|
res.headers.set('Cache-Control', 'no-store, must-revalidate');
|
|
81
81
|
return res;
|
|
82
82
|
}
|
|
@@ -105,29 +105,29 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
105
105
|
core_1.debug.personalize('skipped (no variant(s) identified)');
|
|
106
106
|
return res;
|
|
107
107
|
}
|
|
108
|
-
// Path can be rewritten by previously executed
|
|
109
|
-
const basePath = (res === null || res === void 0 ? void 0 : res.headers.get(
|
|
108
|
+
// Path can be rewritten by previously executed proxy
|
|
109
|
+
const basePath = (res === null || res === void 0 ? void 0 : res.headers.get(proxy_1.REWRITE_HEADER_NAME)) || pathname;
|
|
110
110
|
// Rewrite to persononalized path
|
|
111
111
|
const rewritePath = (0, personalize_1.getPersonalizedRewrite)(basePath, identifiedVariantIds);
|
|
112
112
|
const response = this.rewrite(rewritePath, req, res);
|
|
113
113
|
// Disable preflight caching to force revalidation on client-side navigation (personalization MAY be influenced).
|
|
114
114
|
// See https://github.com/vercel/next.js/pull/32767
|
|
115
|
-
response.headers.set('x-
|
|
116
|
-
core_1.debug.personalize('personalize
|
|
115
|
+
response.headers.set('x-proxy-cache', 'no-cache');
|
|
116
|
+
core_1.debug.personalize('personalize proxy end in %dms: %o', Date.now() - startTimestamp, {
|
|
117
117
|
rewritePath,
|
|
118
118
|
headers: this.extractDebugHeaders(response.headers),
|
|
119
119
|
});
|
|
120
120
|
return response;
|
|
121
121
|
}
|
|
122
122
|
catch (error) {
|
|
123
|
-
console.log('Personalize
|
|
123
|
+
console.log('Personalize proxy failed:');
|
|
124
124
|
console.log(error);
|
|
125
125
|
return res;
|
|
126
126
|
}
|
|
127
127
|
});
|
|
128
128
|
// Validate edge config is present - personalize requires Edge platform
|
|
129
129
|
if (!this.config.contextId && !this.config.clientContextId) {
|
|
130
|
-
console.warn('[
|
|
130
|
+
console.warn('[PersonalizeProxy] Personalize proxy requires Edge configuration (contextId/clientContextId). ' +
|
|
131
131
|
'Personalize features will be disabled. This is expected in local container development.');
|
|
132
132
|
// Set to null to indicate service is disabled
|
|
133
133
|
this.personalizeService = null;
|
|
@@ -153,7 +153,7 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
153
153
|
});
|
|
154
154
|
}
|
|
155
155
|
disabled(req, res) {
|
|
156
|
-
// Check if API config is missing - if so, disable the
|
|
156
|
+
// Check if API config is missing - if so, disable the proxy
|
|
157
157
|
if (!this.personalizeService) {
|
|
158
158
|
core_1.debug.personalize('skipped (personalize service not configured - edge config required)');
|
|
159
159
|
return true;
|
|
@@ -241,4 +241,4 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
241
241
|
}, results);
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
|
-
exports.
|
|
244
|
+
exports.PersonalizeProxy = PersonalizeProxy;
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.defineProxy = exports.ProxyBase = exports.ProxyHandler = exports.LOCALE_HEADER_NAME = exports.REWRITE_HEADER_NAME = void 0;
|
|
13
13
|
const site_1 = require("@sitecore-content-sdk/core/site");
|
|
14
14
|
const core_1 = require("@sitecore-content-sdk/core");
|
|
15
15
|
const server_1 = require("next/server");
|
|
@@ -17,17 +17,17 @@ const client_1 = require("@sitecore-content-sdk/core/client");
|
|
|
17
17
|
exports.REWRITE_HEADER_NAME = 'x-sc-rewrite';
|
|
18
18
|
exports.LOCALE_HEADER_NAME = 'x-sc-locale';
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* Proxy handler class to be extended by all proxy implementations
|
|
21
21
|
* @public
|
|
22
22
|
*/
|
|
23
|
-
class
|
|
23
|
+
class ProxyHandler {
|
|
24
24
|
}
|
|
25
|
-
exports.
|
|
25
|
+
exports.ProxyHandler = ProxyHandler;
|
|
26
26
|
/**
|
|
27
|
-
* Base
|
|
27
|
+
* Base proxy class with common methods
|
|
28
28
|
* @public
|
|
29
29
|
*/
|
|
30
|
-
class
|
|
30
|
+
class ProxyBase extends ProxyHandler {
|
|
31
31
|
constructor(config) {
|
|
32
32
|
super();
|
|
33
33
|
this.config = config;
|
|
@@ -64,14 +64,14 @@ class MiddlewareBase extends Middleware {
|
|
|
64
64
|
const isKnownDevice = isMobile || isKnownPlatform;
|
|
65
65
|
const purpose = req.headers.get('purpose');
|
|
66
66
|
const nextRouterPrefetch = req.headers.get('Next-Router-Prefetch');
|
|
67
|
-
const
|
|
67
|
+
const proxyPrefetch = req.headers.get('x-middleware-prefetch');
|
|
68
68
|
// Some real navigations on different devices may incorrectly include 'prefetch' headers.
|
|
69
69
|
// To avoid skipping personalization in such cases, we treat 'x-middleware-prefetch' as a more reliable signal of true prefetch behavior.
|
|
70
|
-
if (isKnownDevice &&
|
|
70
|
+
if (isKnownDevice && proxyPrefetch === '1') {
|
|
71
71
|
return false;
|
|
72
72
|
}
|
|
73
73
|
// Otherwise, standard prefetch detection
|
|
74
|
-
return purpose === 'prefetch' || nextRouterPrefetch === '1' ||
|
|
74
|
+
return purpose === 'prefetch' || nextRouterPrefetch === '1' || proxyPrefetch === '1';
|
|
75
75
|
}
|
|
76
76
|
disabled(req, res) {
|
|
77
77
|
const { pathname } = req.nextUrl;
|
|
@@ -82,7 +82,7 @@ class MiddlewareBase extends Middleware {
|
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
84
84
|
* Safely extract all headers for debug logging
|
|
85
|
-
* Necessary to avoid
|
|
85
|
+
* Necessary to avoid proxy issue https://github.com/vercel/next.js/issues/39765
|
|
86
86
|
* @param {Headers} incomingHeaders Incoming headers
|
|
87
87
|
* @returns Object with headers as key/value pairs
|
|
88
88
|
*/
|
|
@@ -106,7 +106,7 @@ class MiddlewareBase extends Middleware {
|
|
|
106
106
|
}
|
|
107
107
|
/**
|
|
108
108
|
* Extract language from locale header of the response
|
|
109
|
-
* set by
|
|
109
|
+
* set by LocaleProxy for app router application
|
|
110
110
|
* @param {NextResponse} res response
|
|
111
111
|
* @returns {string | undefined} language or undefined if not found
|
|
112
112
|
*/
|
|
@@ -160,36 +160,36 @@ class MiddlewareBase extends Middleware {
|
|
|
160
160
|
// Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
|
|
161
161
|
const rewriteUrl = req.nextUrl.clone();
|
|
162
162
|
rewriteUrl.pathname = rewritePath;
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
// NextResponse.rewrite requires a string URL, not a NextURL object
|
|
164
|
+
const response = server_1.NextResponse.rewrite(rewriteUrl.href, res);
|
|
165
|
+
// Share rewrite path with following executed proxies
|
|
165
166
|
if (!skipHeader) {
|
|
166
167
|
response.headers.set(exports.REWRITE_HEADER_NAME, rewritePath);
|
|
167
168
|
}
|
|
168
169
|
return response;
|
|
169
170
|
}
|
|
170
171
|
}
|
|
171
|
-
exports.
|
|
172
|
+
exports.ProxyBase = ProxyBase;
|
|
172
173
|
/**
|
|
173
|
-
* Define a
|
|
174
|
-
* @param {
|
|
174
|
+
* Define a proxy with a list of proxy handlers
|
|
175
|
+
* @param {ProxyHandler[]} proxies List of proxy handlers to execute
|
|
175
176
|
* @public
|
|
176
177
|
*/
|
|
177
|
-
const
|
|
178
|
+
const defineProxy = (...proxies) => {
|
|
178
179
|
return {
|
|
179
180
|
/**
|
|
180
|
-
* Execute all
|
|
181
|
+
* Execute all proxies
|
|
181
182
|
* @param {NextRequest} req request
|
|
182
|
-
* @param {NextFetchEvent} ev fetch event
|
|
183
183
|
* @param {NextResponse} [res] response
|
|
184
184
|
*/
|
|
185
|
-
exec: (req,
|
|
185
|
+
exec: (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
186
186
|
const response = res || server_1.NextResponse.next();
|
|
187
|
-
core_1.debug.common('
|
|
187
|
+
core_1.debug.common('proxy start');
|
|
188
188
|
const start = Date.now();
|
|
189
|
-
const
|
|
190
|
-
core_1.debug.common('
|
|
191
|
-
return
|
|
189
|
+
const proxyResponse = yield proxies.reduce((p, proxy) => p.then((res) => proxy.handle(req, res)), Promise.resolve(response));
|
|
190
|
+
core_1.debug.common('proxy end in %dms', Date.now() - start);
|
|
191
|
+
return proxyResponse;
|
|
192
192
|
}),
|
|
193
193
|
};
|
|
194
194
|
};
|
|
195
|
-
exports.
|
|
195
|
+
exports.defineProxy = defineProxy;
|