@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.
- package/LICENSE.txt +202 -202
- package/dist/cjs/client/index.js +1 -1
- package/dist/cjs/client/sitecore-nextjs-client.js +4 -4
- package/dist/cjs/components/BYOCWrapper.js +0 -5
- package/dist/cjs/components/FEaaSWrapper.js +0 -5
- package/dist/cjs/components/NextImage.js +2 -2
- package/dist/cjs/config/define-config.js +7 -4
- package/dist/cjs/config-cli/define-cli-config.js +1 -1
- package/dist/cjs/debug.js +11 -0
- package/dist/cjs/editing/codegen/import-map-server.js +1 -1
- package/dist/cjs/editing/editing-config-middleware.js +13 -11
- package/dist/cjs/editing/editing-render-middleware.js +41 -29
- package/dist/cjs/editing/feaas-render-middleware.js +24 -13
- package/dist/cjs/editing/index.js +2 -2
- package/dist/cjs/editing/types.js +2 -0
- package/dist/cjs/editing/utils.js +35 -6
- package/dist/cjs/index.js +17 -11
- 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 +29 -0
- package/dist/cjs/{middleware/locale-middleware.js → proxy/locale-proxy.js} +18 -15
- package/dist/cjs/{middleware/multisite-middleware.js → proxy/multisite-proxy.js} +23 -20
- package/dist/cjs/{middleware/personalize-middleware.js → proxy/personalize-proxy.js} +31 -28
- package/dist/cjs/{middleware/middleware.js → proxy/proxy.js} +31 -28
- package/dist/cjs/{middleware/redirects-middleware.js → proxy/redirects-proxy.js} +121 -111
- package/dist/cjs/route-handler/editing-config-route-handler.js +16 -13
- package/dist/cjs/route-handler/editing-render-route-handler.js +43 -32
- package/dist/cjs/route-handler/robots-route-handler.js +14 -6
- package/dist/cjs/route-handler/sitemap-route-handler.js +13 -5
- package/dist/cjs/site/index.js +1 -1
- package/dist/cjs/tools/codegen/import-map.js +2 -2
- package/dist/cjs/tools/generate-map.js +1 -1
- package/dist/cjs/tools/index.js +7 -8
- package/dist/cjs/tools/templating/byoc-component.js +1 -1
- package/dist/cjs/tools/templating/default-component.js +1 -1
- package/dist/cjs/tools/templating/utils.js +5 -6
- package/dist/cjs/utils/index.js +4 -5
- package/dist/cjs/utils/utils.js +3 -3
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/client/sitecore-nextjs-client.js +4 -4
- package/dist/esm/components/BYOCWrapper.js +0 -5
- package/dist/esm/components/FEaaSWrapper.js +0 -5
- package/dist/esm/components/NextImage.js +2 -2
- package/dist/esm/config/define-config.js +7 -4
- package/dist/esm/config-cli/define-cli-config.js +1 -1
- package/dist/esm/debug.js +9 -0
- package/dist/esm/editing/codegen/import-map-server.js +1 -1
- package/dist/esm/editing/editing-config-middleware.js +4 -5
- package/dist/esm/editing/editing-render-middleware.js +22 -13
- package/dist/esm/editing/feaas-render-middleware.js +14 -6
- package/dist/esm/editing/index.js +2 -2
- package/dist/esm/editing/types.js +1 -0
- package/dist/esm/editing/utils.js +32 -4
- package/dist/esm/index.js +11 -12
- 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} +12 -12
- package/dist/esm/{middleware/multisite-middleware.js → proxy/multisite-proxy.js} +16 -16
- package/dist/esm/{middleware/personalize-middleware.js → proxy/personalize-proxy.js} +17 -17
- package/dist/esm/{middleware/middleware.js → proxy/proxy.js} +24 -24
- package/dist/esm/{middleware/redirects-middleware.js → proxy/redirects-proxy.js} +112 -102
- package/dist/esm/route-handler/editing-config-route-handler.js +4 -4
- package/dist/esm/route-handler/editing-render-route-handler.js +19 -11
- package/dist/esm/route-handler/robots-route-handler.js +8 -3
- package/dist/esm/route-handler/sitemap-route-handler.js +8 -3
- package/dist/esm/site/index.js +1 -1
- package/dist/esm/tools/codegen/import-map.js +1 -1
- package/dist/esm/tools/generate-map.js +1 -1
- package/dist/esm/tools/index.js +2 -1
- package/dist/esm/tools/templating/byoc-component.js +1 -1
- package/dist/esm/tools/templating/default-component.js +1 -1
- package/dist/esm/tools/templating/utils.js +1 -2
- package/dist/esm/utils/index.js +2 -2
- package/dist/esm/utils/utils.js +2 -2
- package/package.json +187 -181
- package/proxy.d.ts +1 -0
- package/types/client/index.d.ts +1 -1
- package/types/client/index.d.ts.map +1 -1
- package/types/client/sitecore-nextjs-client.d.ts +3 -3
- package/types/client/sitecore-nextjs-client.d.ts.map +1 -1
- package/types/components/BYOCWrapper.d.ts +0 -5
- package/types/components/BYOCWrapper.d.ts.map +1 -1
- package/types/components/FEaaSWrapper.d.ts +0 -5
- package/types/components/FEaaSWrapper.d.ts.map +1 -1
- package/types/components/Placeholder.d.ts +2 -2
- package/types/components/Placeholder.d.ts.map +1 -1
- package/types/config/define-config.d.ts +1 -1
- package/types/config/define-config.d.ts.map +1 -1
- package/types/config-cli/define-cli-config.d.ts +1 -1
- package/types/config-cli/define-cli-config.d.ts.map +1 -1
- package/types/debug.d.ts +7 -0
- package/types/debug.d.ts.map +1 -0
- package/types/editing/codegen/import-map-server.d.ts +1 -1
- package/types/editing/codegen/import-map-server.d.ts.map +1 -1
- package/types/editing/codegen/import-map-utils.d.ts +1 -1
- package/types/editing/codegen/import-map-utils.d.ts.map +1 -1
- package/types/editing/codegen/import-map.d.ts +1 -1
- package/types/editing/codegen/import-map.d.ts.map +1 -1
- package/types/editing/codegen/index.d.ts +1 -1
- package/types/editing/codegen/index.d.ts.map +1 -1
- package/types/editing/editing-config-middleware.d.ts +1 -1
- package/types/editing/editing-config-middleware.d.ts.map +1 -1
- package/types/editing/editing-render-middleware.d.ts +8 -1
- package/types/editing/editing-render-middleware.d.ts.map +1 -1
- package/types/editing/feaas-render-middleware.d.ts +1 -1
- package/types/editing/feaas-render-middleware.d.ts.map +1 -1
- package/types/editing/index.d.ts +3 -2
- package/types/editing/index.d.ts.map +1 -1
- package/types/editing/types.d.ts +37 -0
- package/types/editing/types.d.ts.map +1 -0
- package/types/editing/utils.d.ts +12 -1
- package/types/editing/utils.d.ts.map +1 -1
- package/types/index.d.ts +13 -11
- package/types/index.d.ts.map +1 -1
- package/types/middleware/index.d.ts +0 -9
- package/types/middleware/index.d.ts.map +1 -1
- package/types/middleware/robots-middleware.d.ts +1 -1
- package/types/middleware/robots-middleware.d.ts.map +1 -1
- package/types/middleware/sitemap-middleware.d.ts +1 -1
- package/types/middleware/sitemap-middleware.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} +10 -10
- package/types/proxy/personalize-proxy.d.ts.map +1 -0
- package/types/{middleware/middleware.d.ts → proxy/proxy.d.ts} +24 -26
- package/types/proxy/proxy.d.ts.map +1 -0
- package/types/{middleware/redirects-middleware.d.ts → proxy/redirects-proxy.d.ts} +11 -11
- package/types/proxy/redirects-proxy.d.ts.map +1 -0
- package/types/route-handler/editing-config-route-handler.d.ts +1 -1
- package/types/route-handler/editing-config-route-handler.d.ts.map +1 -1
- package/types/route-handler/editing-render-route-handler.d.ts +7 -0
- package/types/route-handler/editing-render-route-handler.d.ts.map +1 -1
- package/types/route-handler/robots-route-handler.d.ts +2 -2
- package/types/route-handler/robots-route-handler.d.ts.map +1 -1
- package/types/route-handler/sitemap-route-handler.d.ts +2 -2
- package/types/route-handler/sitemap-route-handler.d.ts.map +1 -1
- package/types/services/component-props-service.d.ts +1 -1
- package/types/services/component-props-service.d.ts.map +1 -1
- package/types/sharedTypes/component-props.d.ts +1 -1
- package/types/sharedTypes/component-props.d.ts.map +1 -1
- package/types/sharedTypes/sitecore-page-props.d.ts +2 -2
- package/types/sharedTypes/sitecore-page-props.d.ts.map +1 -1
- package/types/site/index.d.ts +1 -1
- package/types/site/index.d.ts.map +1 -1
- package/types/tools/codegen/import-map.d.ts +3 -3
- package/types/tools/codegen/import-map.d.ts.map +1 -1
- package/types/tools/generate-map.d.ts +1 -1
- package/types/tools/generate-map.d.ts.map +1 -1
- package/types/tools/index.d.ts +3 -1
- package/types/tools/index.d.ts.map +1 -1
- package/types/tools/templating/byoc-component.d.ts +1 -1
- package/types/tools/templating/byoc-component.d.ts.map +1 -1
- package/types/tools/templating/default-component.d.ts +1 -1
- package/types/tools/templating/default-component.d.ts.map +1 -1
- package/types/tools/templating/utils.d.ts +2 -2
- package/types/tools/templating/utils.d.ts.map +1 -1
- package/types/utils/index.d.ts +2 -2
- package/types/utils/index.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
|
@@ -9,19 +9,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
10
|
});
|
|
11
11
|
};
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
12
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.
|
|
14
|
-
const site_1 = require("@sitecore-content-sdk/
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
16
|
+
exports.MultisiteProxy = void 0;
|
|
17
|
+
const site_1 = require("@sitecore-content-sdk/content/site");
|
|
18
|
+
const proxy_1 = require("./proxy");
|
|
19
|
+
const editing_1 = require("@sitecore-content-sdk/content/editing");
|
|
20
|
+
const debug_1 = __importDefault(require("../debug"));
|
|
18
21
|
/**
|
|
19
|
-
*
|
|
22
|
+
* Proxy / handler for multisite support
|
|
20
23
|
* @public
|
|
21
24
|
*/
|
|
22
|
-
class
|
|
25
|
+
class MultisiteProxy extends proxy_1.ProxyBase {
|
|
23
26
|
/**
|
|
24
|
-
* @param {
|
|
27
|
+
* @param {MultisiteProxyConfig} [config] Multisite proxy config
|
|
25
28
|
*/
|
|
26
29
|
constructor(config) {
|
|
27
30
|
super(config);
|
|
@@ -29,12 +32,12 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
29
32
|
this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
30
33
|
var _a, _b, _c;
|
|
31
34
|
try {
|
|
32
|
-
// Path can be rewritten by previously executed
|
|
33
|
-
const pathname = (res === null || res === void 0 ? void 0 : res.headers.get(
|
|
35
|
+
// Path can be rewritten by previously executed proxy
|
|
36
|
+
const pathname = (res === null || res === void 0 ? void 0 : res.headers.get(proxy_1.REWRITE_HEADER_NAME)) || req.nextUrl.pathname;
|
|
34
37
|
const language = this.getLanguage(req, res);
|
|
35
38
|
const hostname = this.getHostHeader(req) || this.defaultHostname;
|
|
36
39
|
const startTimestamp = Date.now();
|
|
37
|
-
|
|
40
|
+
debug_1.default.multisite('multisite proxy start: %o', {
|
|
38
41
|
pathname,
|
|
39
42
|
language,
|
|
40
43
|
hostname,
|
|
@@ -44,7 +47,7 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
44
47
|
// Additionally, App Router route structure always requires [site] segment, so disabling multisite
|
|
45
48
|
// will break regular requests even though Preview/Editing modes will still work.
|
|
46
49
|
if (this.isPreview(req) && !this.isAppRouter(res)) {
|
|
47
|
-
|
|
50
|
+
debug_1.default.multisite('skipped (preview)');
|
|
48
51
|
return res;
|
|
49
52
|
}
|
|
50
53
|
// Site name preservation is required for Sitecore Preview mode to support navigation between pages
|
|
@@ -53,13 +56,13 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
53
56
|
if (!this.config.enabled) {
|
|
54
57
|
this.shouldWarnWhenDisabled(res);
|
|
55
58
|
if (this.shouldSkipWhenDisabled()) {
|
|
56
|
-
|
|
59
|
+
debug_1.default.multisite('skipped (multisite proxy is disabled globally)');
|
|
57
60
|
return res;
|
|
58
61
|
}
|
|
59
62
|
// Continue execution if shouldSkipWhenDisabled returns false (App Router case)
|
|
60
63
|
}
|
|
61
64
|
if (this.disabled(req, res)) {
|
|
62
|
-
|
|
65
|
+
debug_1.default.multisite('skipped (multisite proxy is disabled)');
|
|
63
66
|
return res;
|
|
64
67
|
}
|
|
65
68
|
}
|
|
@@ -89,9 +92,9 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
89
92
|
httpOnly: true,
|
|
90
93
|
sameSite: 'none',
|
|
91
94
|
};
|
|
92
|
-
// Share site name with the following executed
|
|
95
|
+
// Share site name with the following executed proxies
|
|
93
96
|
response.cookies.set(site_1.SITE_KEY, siteName, defaultCookieAttributes);
|
|
94
|
-
|
|
97
|
+
debug_1.default.multisite('multisite proxy end in %dms: %o', Date.now() - startTimestamp, {
|
|
95
98
|
rewritePath,
|
|
96
99
|
siteName,
|
|
97
100
|
headers: this.extractDebugHeaders(response.headers),
|
|
@@ -100,7 +103,7 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
100
103
|
return response;
|
|
101
104
|
}
|
|
102
105
|
catch (error) {
|
|
103
|
-
console.log('Multisite
|
|
106
|
+
console.log('Multisite proxy failed:');
|
|
104
107
|
console.log(error);
|
|
105
108
|
return res;
|
|
106
109
|
}
|
|
@@ -119,9 +122,9 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
119
122
|
// Base implementation does nothing - subclasses can override to show warnings
|
|
120
123
|
}
|
|
121
124
|
/**
|
|
122
|
-
* Determines if
|
|
125
|
+
* Determines if proxy should be skipped when multisite is disabled.
|
|
123
126
|
* Override in subclasses to provide router-specific behavior.
|
|
124
|
-
* @returns {boolean} true if
|
|
127
|
+
* @returns {boolean} true if proxy should be skipped when disabled
|
|
125
128
|
*/
|
|
126
129
|
shouldSkipWhenDisabled() {
|
|
127
130
|
return true; // Base class skips when disabled
|
|
@@ -138,4 +141,4 @@ class MultisiteMiddleware extends middleware_1.MiddlewareBase {
|
|
|
138
141
|
});
|
|
139
142
|
}
|
|
140
143
|
}
|
|
141
|
-
exports.
|
|
144
|
+
exports.MultisiteProxy = MultisiteProxy;
|
|
@@ -8,20 +8,23 @@ 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
|
-
exports.
|
|
13
|
-
const personalize_1 = require("@sitecore-content-sdk/
|
|
14
|
-
const
|
|
15
|
-
const middleware_1 = require("./middleware");
|
|
15
|
+
exports.PersonalizeProxy = void 0;
|
|
16
|
+
const personalize_1 = require("@sitecore-content-sdk/content/personalize");
|
|
17
|
+
const proxy_1 = require("./proxy");
|
|
16
18
|
const server_1 = require("@sitecore-cloudsdk/core/server");
|
|
17
19
|
const server_2 = require("@sitecore-cloudsdk/personalize/server");
|
|
20
|
+
const debug_1 = __importDefault(require("../debug"));
|
|
18
21
|
/**
|
|
19
|
-
*
|
|
22
|
+
* Proxy / handler to support Sitecore Personalize
|
|
20
23
|
* @public
|
|
21
24
|
*/
|
|
22
|
-
class
|
|
25
|
+
class PersonalizeProxy extends proxy_1.ProxyBase {
|
|
23
26
|
/**
|
|
24
|
-
* @param {
|
|
27
|
+
* @param {PersonalizeProxyConfig} [config] Personalize proxy config
|
|
25
28
|
*/
|
|
26
29
|
constructor(config) {
|
|
27
30
|
var _a;
|
|
@@ -29,7 +32,7 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
29
32
|
this.config = config;
|
|
30
33
|
this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
31
34
|
if (!this.config.enabled) {
|
|
32
|
-
|
|
35
|
+
debug_1.default.personalize('skipped (personalize proxy is disabled globally)');
|
|
33
36
|
return res;
|
|
34
37
|
}
|
|
35
38
|
try {
|
|
@@ -41,17 +44,17 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
41
44
|
const geo = this.config.extractGeoDataCb
|
|
42
45
|
? yield this.config.extractGeoDataCb(req)
|
|
43
46
|
: undefined;
|
|
44
|
-
|
|
47
|
+
debug_1.default.personalize('personalize proxy start: %o', Object.assign(Object.assign({ pathname,
|
|
45
48
|
language,
|
|
46
49
|
hostname }, (geo && { geo })), { headers: this.extractDebugHeaders(req.headers) }));
|
|
47
50
|
if (this.disabled(req, res)) {
|
|
48
|
-
|
|
51
|
+
debug_1.default.personalize('skipped (personalize proxy is disabled)');
|
|
49
52
|
return res;
|
|
50
53
|
}
|
|
51
54
|
if (res.redirected || // Don't attempt to personalize a redirect
|
|
52
55
|
this.isPreview(req) // No need to personalize for preview (layout data is already prepared for preview)
|
|
53
56
|
) {
|
|
54
|
-
|
|
57
|
+
debug_1.default.personalize('skipped (%s)', res.redirected ? 'redirected' : 'preview');
|
|
55
58
|
return res;
|
|
56
59
|
}
|
|
57
60
|
const site = this.getSite(req, res);
|
|
@@ -63,20 +66,20 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
63
66
|
const personalizeInfo = yield this.personalizeService.getPersonalizeInfo(pathname, language, site.name);
|
|
64
67
|
if (!personalizeInfo) {
|
|
65
68
|
// Likely an invalid route / language
|
|
66
|
-
|
|
69
|
+
debug_1.default.personalize('skipped (personalize info not found)');
|
|
67
70
|
return res;
|
|
68
71
|
}
|
|
69
72
|
if (personalizeInfo.variantIds.length === 0) {
|
|
70
|
-
|
|
73
|
+
debug_1.default.personalize('skipped (no personalization configured)');
|
|
71
74
|
return res;
|
|
72
75
|
}
|
|
73
76
|
if (this.isPrefetch(req)) {
|
|
74
|
-
|
|
77
|
+
debug_1.default.personalize('skipped (prefetch)');
|
|
75
78
|
// Personalized, but this is a prefetch request.
|
|
76
79
|
// In this case, don't execute a personalize request; otherwise, the metrics for component A/B experiments would be inaccurate.
|
|
77
80
|
// 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-
|
|
81
|
+
// 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.
|
|
82
|
+
res.headers.set('x-proxy-cache', 'no-cache');
|
|
80
83
|
res.headers.set('Cache-Control', 'no-store, must-revalidate');
|
|
81
84
|
return res;
|
|
82
85
|
}
|
|
@@ -94,7 +97,7 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
94
97
|
const variantId = personalization.variantId;
|
|
95
98
|
if (variantId) {
|
|
96
99
|
if (!execution.variantIds.includes(variantId)) {
|
|
97
|
-
|
|
100
|
+
debug_1.default.personalize('invalid variant %s', variantId);
|
|
98
101
|
}
|
|
99
102
|
else {
|
|
100
103
|
identifiedVariantIds.push(variantId);
|
|
@@ -102,32 +105,32 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
102
105
|
}
|
|
103
106
|
})));
|
|
104
107
|
if (identifiedVariantIds.length === 0) {
|
|
105
|
-
|
|
108
|
+
debug_1.default.personalize('skipped (no variant(s) identified)');
|
|
106
109
|
return res;
|
|
107
110
|
}
|
|
108
|
-
// Path can be rewritten by previously executed
|
|
109
|
-
const basePath = (res === null || res === void 0 ? void 0 : res.headers.get(
|
|
111
|
+
// Path can be rewritten by previously executed proxy
|
|
112
|
+
const basePath = (res === null || res === void 0 ? void 0 : res.headers.get(proxy_1.REWRITE_HEADER_NAME)) || pathname;
|
|
110
113
|
// Rewrite to persononalized path
|
|
111
114
|
const rewritePath = (0, personalize_1.getPersonalizedRewrite)(basePath, identifiedVariantIds);
|
|
112
115
|
const response = this.rewrite(rewritePath, req, res);
|
|
113
116
|
// Disable preflight caching to force revalidation on client-side navigation (personalization MAY be influenced).
|
|
114
117
|
// See https://github.com/vercel/next.js/pull/32767
|
|
115
|
-
response.headers.set('x-
|
|
116
|
-
|
|
118
|
+
response.headers.set('x-proxy-cache', 'no-cache');
|
|
119
|
+
debug_1.default.personalize('personalize proxy end in %dms: %o', Date.now() - startTimestamp, {
|
|
117
120
|
rewritePath,
|
|
118
121
|
headers: this.extractDebugHeaders(response.headers),
|
|
119
122
|
});
|
|
120
123
|
return response;
|
|
121
124
|
}
|
|
122
125
|
catch (error) {
|
|
123
|
-
console.log('Personalize
|
|
126
|
+
console.log('Personalize proxy failed:');
|
|
124
127
|
console.log(error);
|
|
125
128
|
return res;
|
|
126
129
|
}
|
|
127
130
|
});
|
|
128
131
|
// Validate edge config is present - personalize requires Edge platform
|
|
129
132
|
if (!this.config.contextId && !this.config.clientContextId) {
|
|
130
|
-
console.warn('[
|
|
133
|
+
console.warn('[PersonalizeProxy] Personalize proxy requires Edge configuration (contextId/clientContextId). ' +
|
|
131
134
|
'Personalize features will be disabled. This is expected in local container development.');
|
|
132
135
|
// Set to null to indicate service is disabled
|
|
133
136
|
this.personalizeService = null;
|
|
@@ -153,9 +156,9 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
153
156
|
});
|
|
154
157
|
}
|
|
155
158
|
disabled(req, res) {
|
|
156
|
-
// Check if API config is missing - if so, disable the
|
|
159
|
+
// Check if API config is missing - if so, disable the proxy
|
|
157
160
|
if (!this.personalizeService) {
|
|
158
|
-
|
|
161
|
+
debug_1.default.personalize('skipped (personalize service not configured - edge config required)');
|
|
159
162
|
return true;
|
|
160
163
|
}
|
|
161
164
|
// ignore files
|
|
@@ -188,7 +191,7 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
188
191
|
personalize(_a, request_1) {
|
|
189
192
|
return __awaiter(this, arguments, void 0, function* ({ params, friendlyId, language, timeout, variantIds, geo, }, request) {
|
|
190
193
|
var _b;
|
|
191
|
-
|
|
194
|
+
debug_1.default.personalize('executing experience for %s %o', friendlyId, params);
|
|
192
195
|
return (yield (0, server_2.personalize)(request, Object.assign({ channel: this.config.channel || 'WEB', currency: (_b = this.config.currency) !== null && _b !== void 0 ? _b : 'USD', friendlyId,
|
|
193
196
|
params,
|
|
194
197
|
language, pageVariantIds: variantIds }, (geo && { geo })), { timeout }));
|
|
@@ -241,4 +244,4 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
241
244
|
}, results);
|
|
242
245
|
}
|
|
243
246
|
}
|
|
244
|
-
exports.
|
|
247
|
+
exports.PersonalizeProxy = PersonalizeProxy;
|
|
@@ -8,26 +8,29 @@ 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
|
-
exports.
|
|
13
|
-
const site_1 = require("@sitecore-content-sdk/
|
|
14
|
-
const core_1 = require("@sitecore-content-sdk/core");
|
|
15
|
+
exports.defineProxy = exports.ProxyBase = exports.ProxyHandler = exports.LOCALE_HEADER_NAME = exports.REWRITE_HEADER_NAME = void 0;
|
|
16
|
+
const site_1 = require("@sitecore-content-sdk/content/site");
|
|
15
17
|
const server_1 = require("next/server");
|
|
16
|
-
const client_1 = require("@sitecore-content-sdk/
|
|
18
|
+
const client_1 = require("@sitecore-content-sdk/content/client");
|
|
19
|
+
const debug_1 = __importDefault(require("../debug"));
|
|
17
20
|
exports.REWRITE_HEADER_NAME = 'x-sc-rewrite';
|
|
18
21
|
exports.LOCALE_HEADER_NAME = 'x-sc-locale';
|
|
19
22
|
/**
|
|
20
|
-
*
|
|
23
|
+
* Proxy handler class to be extended by all proxy implementations
|
|
21
24
|
* @public
|
|
22
25
|
*/
|
|
23
|
-
class
|
|
26
|
+
class ProxyHandler {
|
|
24
27
|
}
|
|
25
|
-
exports.
|
|
28
|
+
exports.ProxyHandler = ProxyHandler;
|
|
26
29
|
/**
|
|
27
|
-
* Base
|
|
30
|
+
* Base proxy class with common methods
|
|
28
31
|
* @public
|
|
29
32
|
*/
|
|
30
|
-
class
|
|
33
|
+
class ProxyBase extends ProxyHandler {
|
|
31
34
|
constructor(config) {
|
|
32
35
|
super();
|
|
33
36
|
this.config = config;
|
|
@@ -64,14 +67,14 @@ class MiddlewareBase extends Middleware {
|
|
|
64
67
|
const isKnownDevice = isMobile || isKnownPlatform;
|
|
65
68
|
const purpose = req.headers.get('purpose');
|
|
66
69
|
const nextRouterPrefetch = req.headers.get('Next-Router-Prefetch');
|
|
67
|
-
const
|
|
70
|
+
const proxyPrefetch = req.headers.get('x-middleware-prefetch');
|
|
68
71
|
// Some real navigations on different devices may incorrectly include 'prefetch' headers.
|
|
69
72
|
// To avoid skipping personalization in such cases, we treat 'x-middleware-prefetch' as a more reliable signal of true prefetch behavior.
|
|
70
|
-
if (isKnownDevice &&
|
|
73
|
+
if (isKnownDevice && proxyPrefetch === '1') {
|
|
71
74
|
return false;
|
|
72
75
|
}
|
|
73
76
|
// Otherwise, standard prefetch detection
|
|
74
|
-
return purpose === 'prefetch' || nextRouterPrefetch === '1' ||
|
|
77
|
+
return purpose === 'prefetch' || nextRouterPrefetch === '1' || proxyPrefetch === '1';
|
|
75
78
|
}
|
|
76
79
|
disabled(req, res) {
|
|
77
80
|
const { pathname } = req.nextUrl;
|
|
@@ -82,7 +85,7 @@ class MiddlewareBase extends Middleware {
|
|
|
82
85
|
}
|
|
83
86
|
/**
|
|
84
87
|
* Safely extract all headers for debug logging
|
|
85
|
-
* Necessary to avoid
|
|
88
|
+
* Necessary to avoid proxy issue https://github.com/vercel/next.js/issues/39765
|
|
86
89
|
* @param {Headers} incomingHeaders Incoming headers
|
|
87
90
|
* @returns Object with headers as key/value pairs
|
|
88
91
|
*/
|
|
@@ -106,7 +109,7 @@ class MiddlewareBase extends Middleware {
|
|
|
106
109
|
}
|
|
107
110
|
/**
|
|
108
111
|
* Extract language from locale header of the response
|
|
109
|
-
* set by
|
|
112
|
+
* set by LocaleProxy for app router application
|
|
110
113
|
* @param {NextResponse} res response
|
|
111
114
|
* @returns {string | undefined} language or undefined if not found
|
|
112
115
|
*/
|
|
@@ -160,36 +163,36 @@ class MiddlewareBase extends Middleware {
|
|
|
160
163
|
// Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
|
|
161
164
|
const rewriteUrl = req.nextUrl.clone();
|
|
162
165
|
rewriteUrl.pathname = rewritePath;
|
|
163
|
-
|
|
164
|
-
|
|
166
|
+
// NextResponse.rewrite requires a string URL, not a NextURL object
|
|
167
|
+
const response = server_1.NextResponse.rewrite(rewriteUrl.href, res);
|
|
168
|
+
// Share rewrite path with following executed proxies
|
|
165
169
|
if (!skipHeader) {
|
|
166
170
|
response.headers.set(exports.REWRITE_HEADER_NAME, rewritePath);
|
|
167
171
|
}
|
|
168
172
|
return response;
|
|
169
173
|
}
|
|
170
174
|
}
|
|
171
|
-
exports.
|
|
175
|
+
exports.ProxyBase = ProxyBase;
|
|
172
176
|
/**
|
|
173
|
-
* Define a
|
|
174
|
-
* @param {
|
|
177
|
+
* Define a proxy with a list of proxy handlers
|
|
178
|
+
* @param {ProxyHandler[]} proxies List of proxy handlers to execute
|
|
175
179
|
* @public
|
|
176
180
|
*/
|
|
177
|
-
const
|
|
181
|
+
const defineProxy = (...proxies) => {
|
|
178
182
|
return {
|
|
179
183
|
/**
|
|
180
|
-
* Execute all
|
|
184
|
+
* Execute all proxies
|
|
181
185
|
* @param {NextRequest} req request
|
|
182
|
-
* @param {NextFetchEvent} ev fetch event
|
|
183
186
|
* @param {NextResponse} [res] response
|
|
184
187
|
*/
|
|
185
|
-
exec: (req,
|
|
188
|
+
exec: (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
186
189
|
const response = res || server_1.NextResponse.next();
|
|
187
|
-
|
|
190
|
+
debug_1.default.common('proxy start');
|
|
188
191
|
const start = Date.now();
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
return
|
|
192
|
+
const proxyResponse = yield proxies.reduce((p, proxy) => p.then((res) => proxy.handle(req, res)), Promise.resolve(response));
|
|
193
|
+
debug_1.default.common('proxy end in %dms', Date.now() - start);
|
|
194
|
+
return proxyResponse;
|
|
192
195
|
}),
|
|
193
196
|
};
|
|
194
197
|
};
|
|
195
|
-
exports.
|
|
198
|
+
exports.defineProxy = defineProxy;
|