@sitecore-jss/sitecore-jss-nextjs 21.5.0-canary.7 → 21.5.0-canary.9
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/README.md
CHANGED
|
@@ -2,11 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
This module is provided as a part of Sitecore JavaScript Rendering SDK. It contains Next.js components and integration for JSS.
|
|
4
4
|
|
|
5
|
-
<!---
|
|
6
|
-
@TODO: Update to next version docs before release
|
|
7
|
-
-->
|
|
8
5
|
[Documentation (Experience Platform)](https://doc.sitecore.com/xp/en/developers/hd/21/sitecore-headless-development/sitecore-javascript-rendering-sdk--jss--for-next-js.html)
|
|
9
6
|
|
|
10
7
|
[Documentation (XM Cloud)](https://doc.sitecore.com/xmc/en/developers/xm-cloud/sitecore-javascript-rendering-sdk--jss--for-next-js.html)
|
|
11
8
|
|
|
12
|
-
[API reference documentation](/ref-docs/sitecore-jss-nextjs/)
|
|
9
|
+
[API reference documentation](/ref-docs/sitecore-jss-nextjs/)
|
|
@@ -14,7 +14,6 @@ const server_1 = require("next/server");
|
|
|
14
14
|
const personalize_1 = require("@sitecore-jss/sitecore-jss/personalize");
|
|
15
15
|
const sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
|
|
16
16
|
const middleware_1 = require("./middleware");
|
|
17
|
-
const engage_1 = require("@sitecore/engage");
|
|
18
17
|
/**
|
|
19
18
|
* Middleware / handler to support Sitecore Personalize
|
|
20
19
|
*/
|
|
@@ -26,20 +25,19 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
26
25
|
super(config);
|
|
27
26
|
this.config = config;
|
|
28
27
|
this.handler = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
29
|
-
var _a;
|
|
30
28
|
const pathname = req.nextUrl.pathname;
|
|
31
29
|
const language = this.getLanguage(req);
|
|
32
30
|
const hostname = this.getHostHeader(req) || this.defaultHostname;
|
|
33
31
|
const startTimestamp = Date.now();
|
|
34
|
-
|
|
35
|
-
// Response will be provided if other middleware is run before us (e.g. redirects)
|
|
36
|
-
let response = res || server_1.NextResponse.next();
|
|
32
|
+
let browserId = this.getBrowserId(req);
|
|
37
33
|
sitecore_jss_1.debug.personalize('personalize middleware start: %o', {
|
|
38
34
|
pathname,
|
|
39
35
|
language,
|
|
40
36
|
hostname,
|
|
41
|
-
|
|
37
|
+
browserId,
|
|
42
38
|
});
|
|
39
|
+
// Response will be provided if other middleware is run before us (e.g. redirects)
|
|
40
|
+
let response = res || server_1.NextResponse.next();
|
|
43
41
|
if (this.config.disabled && this.config.disabled(req, response)) {
|
|
44
42
|
sitecore_jss_1.debug.personalize('skipped (personalize middleware is disabled)');
|
|
45
43
|
return response;
|
|
@@ -50,17 +48,7 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
50
48
|
sitecore_jss_1.debug.personalize('skipped (%s)', response.redirected ? 'redirected' : this.isPreview(req) ? 'preview' : 'route excluded');
|
|
51
49
|
return response;
|
|
52
50
|
}
|
|
53
|
-
const site = this.getSite(req,
|
|
54
|
-
const engageServer = this.initializeEngageServer(site, language);
|
|
55
|
-
// creates the browser ID cookie on the server side
|
|
56
|
-
// and includes the cookie in the response header
|
|
57
|
-
try {
|
|
58
|
-
yield engageServer.handleCookie(req, response, timeout);
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
sitecore_jss_1.debug.personalize('skipped (browser id generation failed)');
|
|
62
|
-
throw error;
|
|
63
|
-
}
|
|
51
|
+
const site = this.getSite(req, res);
|
|
64
52
|
// Get personalization info from Experience Edge
|
|
65
53
|
const personalizeInfo = yield this.personalizeService.getPersonalizeInfo(pathname, language, site.name);
|
|
66
54
|
if (!personalizeInfo) {
|
|
@@ -72,24 +60,20 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
72
60
|
sitecore_jss_1.debug.personalize('skipped (no personalization configured)');
|
|
73
61
|
return response;
|
|
74
62
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
params,
|
|
82
|
-
language,
|
|
83
|
-
};
|
|
84
|
-
let variantId;
|
|
85
|
-
// Execute targeted experience in CDP
|
|
86
|
-
// eslint-disable-next-line no-useless-catch
|
|
87
|
-
try {
|
|
88
|
-
variantId = (yield engageServer.personalize(personalizationData, req, timeout)).variantId;
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
throw error;
|
|
63
|
+
if (!browserId) {
|
|
64
|
+
browserId = yield this.cdpService.generateBrowserId();
|
|
65
|
+
if (!browserId) {
|
|
66
|
+
sitecore_jss_1.debug.personalize('skipped (browser id generation failed)');
|
|
67
|
+
return response;
|
|
68
|
+
}
|
|
92
69
|
}
|
|
70
|
+
// Execute targeted experience in CDP
|
|
71
|
+
const { ua } = (0, server_1.userAgent)(req);
|
|
72
|
+
const params = this.getExperienceParams(req);
|
|
73
|
+
const pointOfSale = this.config.getPointOfSale
|
|
74
|
+
? this.config.getPointOfSale(site, language)
|
|
75
|
+
: personalize_1.PosResolver.resolve(site, language);
|
|
76
|
+
const variantId = yield this.cdpService.executeExperience(personalizeInfo.contentId, browserId, ua, pointOfSale, params);
|
|
93
77
|
if (!variantId) {
|
|
94
78
|
sitecore_jss_1.debug.personalize('skipped (no variant identified)');
|
|
95
79
|
return response;
|
|
@@ -111,10 +95,13 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
111
95
|
response.headers.set('x-middleware-cache', 'no-cache');
|
|
112
96
|
// Share rewrite path with following executed middlewares
|
|
113
97
|
response.headers.set('x-sc-rewrite', rewritePath);
|
|
98
|
+
// Set browserId cookie on the response
|
|
99
|
+
this.setBrowserId(response, browserId);
|
|
114
100
|
// Share site name with the following executed middlewares
|
|
115
101
|
response.cookies.set(this.SITE_SYMBOL, site.name);
|
|
116
102
|
sitecore_jss_1.debug.personalize('personalize middleware end in %dms: %o', Date.now() - startTimestamp, {
|
|
117
103
|
rewritePath,
|
|
104
|
+
browserId,
|
|
118
105
|
headers: this.extractDebugHeaders(response.headers),
|
|
119
106
|
});
|
|
120
107
|
return response;
|
|
@@ -122,6 +109,15 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
122
109
|
// NOTE: we provide native fetch for compatibility on Next.js Edge Runtime
|
|
123
110
|
// (underlying default 'cross-fetch' is not currently compatible: https://github.com/lquixada/cross-fetch/issues/78)
|
|
124
111
|
this.personalizeService = new personalize_1.GraphQLPersonalizeService(Object.assign(Object.assign({}, config.edgeConfig), { fetch: fetch }));
|
|
112
|
+
// NOTE: same here, we provide NativeDataFetcher for compatibility on Next.js Edge Runtime
|
|
113
|
+
this.cdpService = new personalize_1.CdpService(Object.assign(Object.assign({}, config.cdpConfig), { dataFetcherResolver: ({ timeout, headers, }) => {
|
|
114
|
+
const fetcher = new sitecore_jss_1.NativeDataFetcher({
|
|
115
|
+
debugger: sitecore_jss_1.debug.personalize,
|
|
116
|
+
timeout,
|
|
117
|
+
headers,
|
|
118
|
+
});
|
|
119
|
+
return (url, data) => fetcher.fetch(url, data);
|
|
120
|
+
} }));
|
|
125
121
|
}
|
|
126
122
|
/**
|
|
127
123
|
* Gets the Next.js middleware handler with error handling
|
|
@@ -139,30 +135,31 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
|
139
135
|
}
|
|
140
136
|
});
|
|
141
137
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
138
|
+
get browserIdCookieName() {
|
|
139
|
+
// Each user should have saved identifier to connect between session, CDP uses bid cookies + local storage
|
|
140
|
+
return `BID_${this.config.cdpConfig.clientKey}`;
|
|
141
|
+
}
|
|
142
|
+
getBrowserId(req) {
|
|
143
|
+
var _a;
|
|
144
|
+
return ((_a = req.cookies.get(this.browserIdCookieName)) === null || _a === void 0 ? void 0 : _a.value) || undefined;
|
|
145
|
+
}
|
|
146
|
+
setBrowserId(res, browserId) {
|
|
147
|
+
const expiryDate = new Date(new Date().setFullYear(new Date().getFullYear() + 2));
|
|
148
|
+
const options = { expires: expiryDate, secure: true };
|
|
149
|
+
res.cookies.set(this.browserIdCookieName, browserId, options);
|
|
152
150
|
}
|
|
153
151
|
getExperienceParams(req) {
|
|
154
|
-
const utm = {
|
|
155
|
-
campaign: req.nextUrl.searchParams.get('utm_campaign') || undefined,
|
|
156
|
-
content: req.nextUrl.searchParams.get('utm_content') || undefined,
|
|
157
|
-
medium: req.nextUrl.searchParams.get('utm_medium') || undefined,
|
|
158
|
-
source: req.nextUrl.searchParams.get('utm_source') || undefined,
|
|
159
|
-
};
|
|
160
152
|
return {
|
|
161
153
|
// It's expected that the header name "referer" is actually a misspelling of the word "referrer"
|
|
162
154
|
// req.referrer is used during fetching to determine the value of the Referer header of the request being made,
|
|
163
155
|
// used as a fallback
|
|
164
156
|
referrer: req.headers.get('referer') || req.referrer,
|
|
165
|
-
utm:
|
|
157
|
+
utm: {
|
|
158
|
+
campaign: req.nextUrl.searchParams.get('utm_campaign'),
|
|
159
|
+
content: req.nextUrl.searchParams.get('utm_content'),
|
|
160
|
+
medium: req.nextUrl.searchParams.get('utm_medium'),
|
|
161
|
+
source: req.nextUrl.searchParams.get('utm_source'),
|
|
162
|
+
},
|
|
166
163
|
};
|
|
167
164
|
}
|
|
168
165
|
excludeRoute(pathname) {
|
|
@@ -7,11 +7,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { NextResponse } from 'next/server';
|
|
11
|
-
import { GraphQLPersonalizeService, getPersonalizedRewrite, PosResolver, } from '@sitecore-jss/sitecore-jss/personalize';
|
|
12
|
-
import { debug } from '@sitecore-jss/sitecore-jss';
|
|
10
|
+
import { NextResponse, userAgent } from 'next/server';
|
|
11
|
+
import { GraphQLPersonalizeService, CdpService, getPersonalizedRewrite, PosResolver, } from '@sitecore-jss/sitecore-jss/personalize';
|
|
12
|
+
import { debug, NativeDataFetcher } from '@sitecore-jss/sitecore-jss';
|
|
13
13
|
import { MiddlewareBase } from './middleware';
|
|
14
|
-
import { initServer } from '@sitecore/engage';
|
|
15
14
|
/**
|
|
16
15
|
* Middleware / handler to support Sitecore Personalize
|
|
17
16
|
*/
|
|
@@ -23,20 +22,19 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
23
22
|
super(config);
|
|
24
23
|
this.config = config;
|
|
25
24
|
this.handler = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
26
|
-
var _a;
|
|
27
25
|
const pathname = req.nextUrl.pathname;
|
|
28
26
|
const language = this.getLanguage(req);
|
|
29
27
|
const hostname = this.getHostHeader(req) || this.defaultHostname;
|
|
30
28
|
const startTimestamp = Date.now();
|
|
31
|
-
|
|
32
|
-
// Response will be provided if other middleware is run before us (e.g. redirects)
|
|
33
|
-
let response = res || NextResponse.next();
|
|
29
|
+
let browserId = this.getBrowserId(req);
|
|
34
30
|
debug.personalize('personalize middleware start: %o', {
|
|
35
31
|
pathname,
|
|
36
32
|
language,
|
|
37
33
|
hostname,
|
|
38
|
-
|
|
34
|
+
browserId,
|
|
39
35
|
});
|
|
36
|
+
// Response will be provided if other middleware is run before us (e.g. redirects)
|
|
37
|
+
let response = res || NextResponse.next();
|
|
40
38
|
if (this.config.disabled && this.config.disabled(req, response)) {
|
|
41
39
|
debug.personalize('skipped (personalize middleware is disabled)');
|
|
42
40
|
return response;
|
|
@@ -47,17 +45,7 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
47
45
|
debug.personalize('skipped (%s)', response.redirected ? 'redirected' : this.isPreview(req) ? 'preview' : 'route excluded');
|
|
48
46
|
return response;
|
|
49
47
|
}
|
|
50
|
-
const site = this.getSite(req,
|
|
51
|
-
const engageServer = this.initializeEngageServer(site, language);
|
|
52
|
-
// creates the browser ID cookie on the server side
|
|
53
|
-
// and includes the cookie in the response header
|
|
54
|
-
try {
|
|
55
|
-
yield engageServer.handleCookie(req, response, timeout);
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
debug.personalize('skipped (browser id generation failed)');
|
|
59
|
-
throw error;
|
|
60
|
-
}
|
|
48
|
+
const site = this.getSite(req, res);
|
|
61
49
|
// Get personalization info from Experience Edge
|
|
62
50
|
const personalizeInfo = yield this.personalizeService.getPersonalizeInfo(pathname, language, site.name);
|
|
63
51
|
if (!personalizeInfo) {
|
|
@@ -69,24 +57,20 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
69
57
|
debug.personalize('skipped (no personalization configured)');
|
|
70
58
|
return response;
|
|
71
59
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
params,
|
|
79
|
-
language,
|
|
80
|
-
};
|
|
81
|
-
let variantId;
|
|
82
|
-
// Execute targeted experience in CDP
|
|
83
|
-
// eslint-disable-next-line no-useless-catch
|
|
84
|
-
try {
|
|
85
|
-
variantId = (yield engageServer.personalize(personalizationData, req, timeout)).variantId;
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
throw error;
|
|
60
|
+
if (!browserId) {
|
|
61
|
+
browserId = yield this.cdpService.generateBrowserId();
|
|
62
|
+
if (!browserId) {
|
|
63
|
+
debug.personalize('skipped (browser id generation failed)');
|
|
64
|
+
return response;
|
|
65
|
+
}
|
|
89
66
|
}
|
|
67
|
+
// Execute targeted experience in CDP
|
|
68
|
+
const { ua } = userAgent(req);
|
|
69
|
+
const params = this.getExperienceParams(req);
|
|
70
|
+
const pointOfSale = this.config.getPointOfSale
|
|
71
|
+
? this.config.getPointOfSale(site, language)
|
|
72
|
+
: PosResolver.resolve(site, language);
|
|
73
|
+
const variantId = yield this.cdpService.executeExperience(personalizeInfo.contentId, browserId, ua, pointOfSale, params);
|
|
90
74
|
if (!variantId) {
|
|
91
75
|
debug.personalize('skipped (no variant identified)');
|
|
92
76
|
return response;
|
|
@@ -108,10 +92,13 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
108
92
|
response.headers.set('x-middleware-cache', 'no-cache');
|
|
109
93
|
// Share rewrite path with following executed middlewares
|
|
110
94
|
response.headers.set('x-sc-rewrite', rewritePath);
|
|
95
|
+
// Set browserId cookie on the response
|
|
96
|
+
this.setBrowserId(response, browserId);
|
|
111
97
|
// Share site name with the following executed middlewares
|
|
112
98
|
response.cookies.set(this.SITE_SYMBOL, site.name);
|
|
113
99
|
debug.personalize('personalize middleware end in %dms: %o', Date.now() - startTimestamp, {
|
|
114
100
|
rewritePath,
|
|
101
|
+
browserId,
|
|
115
102
|
headers: this.extractDebugHeaders(response.headers),
|
|
116
103
|
});
|
|
117
104
|
return response;
|
|
@@ -119,6 +106,15 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
119
106
|
// NOTE: we provide native fetch for compatibility on Next.js Edge Runtime
|
|
120
107
|
// (underlying default 'cross-fetch' is not currently compatible: https://github.com/lquixada/cross-fetch/issues/78)
|
|
121
108
|
this.personalizeService = new GraphQLPersonalizeService(Object.assign(Object.assign({}, config.edgeConfig), { fetch: fetch }));
|
|
109
|
+
// NOTE: same here, we provide NativeDataFetcher for compatibility on Next.js Edge Runtime
|
|
110
|
+
this.cdpService = new CdpService(Object.assign(Object.assign({}, config.cdpConfig), { dataFetcherResolver: ({ timeout, headers, }) => {
|
|
111
|
+
const fetcher = new NativeDataFetcher({
|
|
112
|
+
debugger: debug.personalize,
|
|
113
|
+
timeout,
|
|
114
|
+
headers,
|
|
115
|
+
});
|
|
116
|
+
return (url, data) => fetcher.fetch(url, data);
|
|
117
|
+
} }));
|
|
122
118
|
}
|
|
123
119
|
/**
|
|
124
120
|
* Gets the Next.js middleware handler with error handling
|
|
@@ -136,30 +132,31 @@ export class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
136
132
|
}
|
|
137
133
|
});
|
|
138
134
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
135
|
+
get browserIdCookieName() {
|
|
136
|
+
// Each user should have saved identifier to connect between session, CDP uses bid cookies + local storage
|
|
137
|
+
return `BID_${this.config.cdpConfig.clientKey}`;
|
|
138
|
+
}
|
|
139
|
+
getBrowserId(req) {
|
|
140
|
+
var _a;
|
|
141
|
+
return ((_a = req.cookies.get(this.browserIdCookieName)) === null || _a === void 0 ? void 0 : _a.value) || undefined;
|
|
142
|
+
}
|
|
143
|
+
setBrowserId(res, browserId) {
|
|
144
|
+
const expiryDate = new Date(new Date().setFullYear(new Date().getFullYear() + 2));
|
|
145
|
+
const options = { expires: expiryDate, secure: true };
|
|
146
|
+
res.cookies.set(this.browserIdCookieName, browserId, options);
|
|
149
147
|
}
|
|
150
148
|
getExperienceParams(req) {
|
|
151
|
-
const utm = {
|
|
152
|
-
campaign: req.nextUrl.searchParams.get('utm_campaign') || undefined,
|
|
153
|
-
content: req.nextUrl.searchParams.get('utm_content') || undefined,
|
|
154
|
-
medium: req.nextUrl.searchParams.get('utm_medium') || undefined,
|
|
155
|
-
source: req.nextUrl.searchParams.get('utm_source') || undefined,
|
|
156
|
-
};
|
|
157
149
|
return {
|
|
158
150
|
// It's expected that the header name "referer" is actually a misspelling of the word "referrer"
|
|
159
151
|
// req.referrer is used during fetching to determine the value of the Referer header of the request being made,
|
|
160
152
|
// used as a fallback
|
|
161
153
|
referrer: req.headers.get('referer') || req.referrer,
|
|
162
|
-
utm:
|
|
154
|
+
utm: {
|
|
155
|
+
campaign: req.nextUrl.searchParams.get('utm_campaign'),
|
|
156
|
+
content: req.nextUrl.searchParams.get('utm_content'),
|
|
157
|
+
medium: req.nextUrl.searchParams.get('utm_medium'),
|
|
158
|
+
source: req.nextUrl.searchParams.get('utm_source'),
|
|
159
|
+
},
|
|
163
160
|
};
|
|
164
161
|
}
|
|
165
162
|
excludeRoute(pathname) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sitecore-jss/sitecore-jss-nextjs",
|
|
3
|
-
"version": "21.5.0-canary.
|
|
3
|
+
"version": "21.5.0-canary.9",
|
|
4
4
|
"main": "dist/cjs/index.js",
|
|
5
5
|
"module": "dist/esm/index.js",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -30,7 +30,6 @@
|
|
|
30
30
|
"url": "https://github.com/sitecore/jss/issues"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@sitecore/engage": "^1.4.0",
|
|
34
33
|
"@types/chai": "^4.3.4",
|
|
35
34
|
"@types/chai-as-promised": "^7.1.5",
|
|
36
35
|
"@types/chai-string": "^1.4.2",
|
|
@@ -66,15 +65,14 @@
|
|
|
66
65
|
"typescript": "~4.9.4"
|
|
67
66
|
},
|
|
68
67
|
"peerDependencies": {
|
|
69
|
-
"@sitecore/engage": "^1.4.0",
|
|
70
68
|
"next": "^13.4.16",
|
|
71
69
|
"react": "^18.2.0",
|
|
72
70
|
"react-dom": "^18.2.0"
|
|
73
71
|
},
|
|
74
72
|
"dependencies": {
|
|
75
|
-
"@sitecore-jss/sitecore-jss": "^21.5.0-canary.
|
|
76
|
-
"@sitecore-jss/sitecore-jss-dev-tools": "^21.5.0-canary.
|
|
77
|
-
"@sitecore-jss/sitecore-jss-react": "^21.5.0-canary.
|
|
73
|
+
"@sitecore-jss/sitecore-jss": "^21.5.0-canary.9",
|
|
74
|
+
"@sitecore-jss/sitecore-jss-dev-tools": "^21.5.0-canary.9",
|
|
75
|
+
"@sitecore-jss/sitecore-jss-react": "^21.5.0-canary.9",
|
|
78
76
|
"@vercel/kv": "^0.2.1",
|
|
79
77
|
"node-html-parser": "^6.1.4",
|
|
80
78
|
"prop-types": "^15.8.1",
|
|
@@ -83,7 +81,7 @@
|
|
|
83
81
|
},
|
|
84
82
|
"description": "",
|
|
85
83
|
"types": "types/index.d.ts",
|
|
86
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "d04cef72a0eafdaa6654c7741d7fa4ab325a7f38",
|
|
87
85
|
"files": [
|
|
88
86
|
"dist",
|
|
89
87
|
"types",
|
|
@@ -1,30 +1,7 @@
|
|
|
1
1
|
import { NextResponse, NextRequest } from 'next/server';
|
|
2
|
-
import { GraphQLPersonalizeServiceConfig } from '@sitecore-jss/sitecore-jss/personalize';
|
|
3
|
-
import { SiteInfo } from '@sitecore-jss/sitecore-jss/site';
|
|
2
|
+
import { GraphQLPersonalizeServiceConfig, CdpServiceConfig, ExperienceParams } from '@sitecore-jss/sitecore-jss/personalize';
|
|
4
3
|
import { MiddlewareBase, MiddlewareBaseConfig } from './middleware';
|
|
5
|
-
import {
|
|
6
|
-
export type CdpServiceConfig = {
|
|
7
|
-
/**
|
|
8
|
-
* Your Sitecore CDP API endpoint
|
|
9
|
-
*/
|
|
10
|
-
endpoint: string;
|
|
11
|
-
/**
|
|
12
|
-
* The client key to use for authentication
|
|
13
|
-
*/
|
|
14
|
-
clientKey: string;
|
|
15
|
-
/**
|
|
16
|
-
* The Sitecore CDP channel to use for events. Uses 'WEB' by default.
|
|
17
|
-
*/
|
|
18
|
-
channel?: string;
|
|
19
|
-
/**
|
|
20
|
-
* Currency for CDP request. Uses 'USA' as default.
|
|
21
|
-
*/
|
|
22
|
-
currency?: string;
|
|
23
|
-
/**
|
|
24
|
-
* Timeout (ms) for CDP request. Default is 400.
|
|
25
|
-
*/
|
|
26
|
-
timeout?: number;
|
|
27
|
-
};
|
|
4
|
+
import { SiteInfo } from '@sitecore-jss/sitecore-jss/site';
|
|
28
5
|
export type PersonalizeMiddlewareConfig = MiddlewareBaseConfig & {
|
|
29
6
|
/**
|
|
30
7
|
* Configuration for your Sitecore Experience Edge endpoint
|
|
@@ -33,7 +10,7 @@ export type PersonalizeMiddlewareConfig = MiddlewareBaseConfig & {
|
|
|
33
10
|
/**
|
|
34
11
|
* Configuration for your Sitecore CDP endpoint
|
|
35
12
|
*/
|
|
36
|
-
cdpConfig: CdpServiceConfig
|
|
13
|
+
cdpConfig: Omit<CdpServiceConfig, 'dataFetcherResolver'>;
|
|
37
14
|
/**
|
|
38
15
|
* function to resolve point of sale for a site
|
|
39
16
|
* @param {Siteinfo} site to get info from
|
|
@@ -42,25 +19,13 @@ export type PersonalizeMiddlewareConfig = MiddlewareBaseConfig & {
|
|
|
42
19
|
*/
|
|
43
20
|
getPointOfSale?: (site: SiteInfo, language: string) => string;
|
|
44
21
|
};
|
|
45
|
-
/**
|
|
46
|
-
* Object model of Experience Context data
|
|
47
|
-
*/
|
|
48
|
-
export type ExperienceParams = {
|
|
49
|
-
referrer: string;
|
|
50
|
-
utm: {
|
|
51
|
-
[key: string]: string | undefined;
|
|
52
|
-
campaign: string | undefined;
|
|
53
|
-
source: string | undefined;
|
|
54
|
-
medium: string | undefined;
|
|
55
|
-
content: string | undefined;
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
22
|
/**
|
|
59
23
|
* Middleware / handler to support Sitecore Personalize
|
|
60
24
|
*/
|
|
61
25
|
export declare class PersonalizeMiddleware extends MiddlewareBase {
|
|
62
26
|
protected config: PersonalizeMiddlewareConfig;
|
|
63
27
|
private personalizeService;
|
|
28
|
+
private cdpService;
|
|
64
29
|
/**
|
|
65
30
|
* @param {PersonalizeMiddlewareConfig} [config] Personalize middleware config
|
|
66
31
|
*/
|
|
@@ -70,7 +35,9 @@ export declare class PersonalizeMiddleware extends MiddlewareBase {
|
|
|
70
35
|
* @returns middleware handler
|
|
71
36
|
*/
|
|
72
37
|
getHandler(): (req: NextRequest, res?: NextResponse) => Promise<NextResponse>;
|
|
73
|
-
protected
|
|
38
|
+
protected get browserIdCookieName(): string;
|
|
39
|
+
protected getBrowserId(req: NextRequest): string | undefined;
|
|
40
|
+
protected setBrowserId(res: NextResponse, browserId: string): void;
|
|
74
41
|
protected getExperienceParams(req: NextRequest): ExperienceParams;
|
|
75
42
|
protected excludeRoute(pathname: string): boolean | undefined;
|
|
76
43
|
private handler;
|