@sitecore-jss/sitecore-jss-nextjs 21.6.0-canary.2 → 21.6.0-canary.22

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/)
@@ -51,16 +51,6 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
51
51
  return response;
52
52
  }
53
53
  const site = this.getSite(req, response);
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
- }
64
54
  // Get personalization info from Experience Edge
65
55
  const personalizeInfo = yield this.personalizeService.getPersonalizeInfo(pathname, language, site.name);
66
56
  if (!personalizeInfo) {
@@ -72,6 +62,16 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
72
62
  sitecore_jss_1.debug.personalize('skipped (no personalization configured)');
73
63
  return response;
74
64
  }
65
+ const engageServer = this.initializeEngageServer(hostname, site, language);
66
+ // creates the browser ID cookie on the server side
67
+ // and includes the cookie in the response header
68
+ try {
69
+ yield engageServer.handleCookie(req, response, timeout);
70
+ }
71
+ catch (error) {
72
+ sitecore_jss_1.debug.personalize('skipped (browser id generation failed)');
73
+ throw error;
74
+ }
75
75
  const params = this.getExperienceParams(req);
76
76
  sitecore_jss_1.debug.personalize('executing experience for %s %s %o', personalizeInfo.contentId, params);
77
77
  const personalizationData = {
@@ -104,15 +104,22 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
104
104
  const rewritePath = (0, personalize_1.getPersonalizedRewrite)(basePath, { variantId });
105
105
  // Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
106
106
  const rewriteUrl = req.nextUrl.clone();
107
+ // Preserve cookies from previous response
108
+ const cookies = response.cookies.getAll();
107
109
  rewriteUrl.pathname = rewritePath;
108
- response = server_1.NextResponse.rewrite(rewriteUrl);
110
+ response = server_1.NextResponse.rewrite(rewriteUrl, response);
109
111
  // Disable preflight caching to force revalidation on client-side navigation (personalization may be influenced)
110
112
  // See https://github.com/vercel/next.js/issues/32727
111
113
  response.headers.set('x-middleware-cache', 'no-cache');
112
- // Share rewrite path with following executed middlewares
114
+ // Share rewrite path with following executed middleware
113
115
  response.headers.set('x-sc-rewrite', rewritePath);
114
116
  // Share site name with the following executed middlewares
115
117
  response.cookies.set(this.SITE_SYMBOL, site.name);
118
+ // Restore cookies from previous response since
119
+ // browserId cookie gets omitted after rewrite
120
+ cookies.forEach((cookie) => {
121
+ response.cookies.set(cookie);
122
+ });
116
123
  sitecore_jss_1.debug.personalize('personalize middleware end in %dms: %o', Date.now() - startTimestamp, {
117
124
  rewritePath,
118
125
  headers: this.extractDebugHeaders(response.headers),
@@ -139,13 +146,14 @@ class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
139
146
  }
140
147
  });
141
148
  }
142
- initializeEngageServer(site, language) {
149
+ initializeEngageServer(hostName, site, language) {
143
150
  const engageServer = (0, engage_1.initServer)({
144
151
  clientKey: this.config.cdpConfig.clientKey,
145
152
  targetURL: this.config.cdpConfig.endpoint,
146
153
  pointOfSale: this.config.getPointOfSale
147
154
  ? this.config.getPointOfSale(site, language)
148
155
  : personalize_1.PosResolver.resolve(site, language),
156
+ cookieDomain: hostName,
149
157
  forceServerCookieMode: true,
150
158
  });
151
159
  return engageServer;
@@ -141,7 +141,8 @@ class RedirectsMiddleware extends middleware_1.MiddlewareBase {
141
141
  redirect.pattern = `/^\/${redirect.pattern
142
142
  .replace(/^\/|\/$/g, '')
143
143
  .replace(/^\^\/|\/\$$/g, '')
144
- .replace(/^\^|\$$/g, '')}$/gi`;
144
+ .replace(/^\^|\$$/g, '')
145
+ .replace(/\$\/gi$/g, '')}$/gi`;
145
146
  return (((0, regex_parser_1.default)(redirect.pattern).test(tragetURL) ||
146
147
  (0, regex_parser_1.default)(redirect.pattern).test(`${tragetURL}${targetQS}`) ||
147
148
  (0, regex_parser_1.default)(redirect.pattern).test(`/${req.nextUrl.locale}${tragetURL}`) ||
@@ -48,16 +48,6 @@ export class PersonalizeMiddleware extends MiddlewareBase {
48
48
  return response;
49
49
  }
50
50
  const site = this.getSite(req, response);
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
- }
61
51
  // Get personalization info from Experience Edge
62
52
  const personalizeInfo = yield this.personalizeService.getPersonalizeInfo(pathname, language, site.name);
63
53
  if (!personalizeInfo) {
@@ -69,6 +59,16 @@ export class PersonalizeMiddleware extends MiddlewareBase {
69
59
  debug.personalize('skipped (no personalization configured)');
70
60
  return response;
71
61
  }
62
+ const engageServer = this.initializeEngageServer(hostname, site, language);
63
+ // creates the browser ID cookie on the server side
64
+ // and includes the cookie in the response header
65
+ try {
66
+ yield engageServer.handleCookie(req, response, timeout);
67
+ }
68
+ catch (error) {
69
+ debug.personalize('skipped (browser id generation failed)');
70
+ throw error;
71
+ }
72
72
  const params = this.getExperienceParams(req);
73
73
  debug.personalize('executing experience for %s %s %o', personalizeInfo.contentId, params);
74
74
  const personalizationData = {
@@ -101,15 +101,22 @@ export class PersonalizeMiddleware extends MiddlewareBase {
101
101
  const rewritePath = getPersonalizedRewrite(basePath, { variantId });
102
102
  // Note an absolute URL is required: https://nextjs.org/docs/messages/middleware-relative-urls
103
103
  const rewriteUrl = req.nextUrl.clone();
104
+ // Preserve cookies from previous response
105
+ const cookies = response.cookies.getAll();
104
106
  rewriteUrl.pathname = rewritePath;
105
- response = NextResponse.rewrite(rewriteUrl);
107
+ response = NextResponse.rewrite(rewriteUrl, response);
106
108
  // Disable preflight caching to force revalidation on client-side navigation (personalization may be influenced)
107
109
  // See https://github.com/vercel/next.js/issues/32727
108
110
  response.headers.set('x-middleware-cache', 'no-cache');
109
- // Share rewrite path with following executed middlewares
111
+ // Share rewrite path with following executed middleware
110
112
  response.headers.set('x-sc-rewrite', rewritePath);
111
113
  // Share site name with the following executed middlewares
112
114
  response.cookies.set(this.SITE_SYMBOL, site.name);
115
+ // Restore cookies from previous response since
116
+ // browserId cookie gets omitted after rewrite
117
+ cookies.forEach((cookie) => {
118
+ response.cookies.set(cookie);
119
+ });
113
120
  debug.personalize('personalize middleware end in %dms: %o', Date.now() - startTimestamp, {
114
121
  rewritePath,
115
122
  headers: this.extractDebugHeaders(response.headers),
@@ -136,13 +143,14 @@ export class PersonalizeMiddleware extends MiddlewareBase {
136
143
  }
137
144
  });
138
145
  }
139
- initializeEngageServer(site, language) {
146
+ initializeEngageServer(hostName, site, language) {
140
147
  const engageServer = initServer({
141
148
  clientKey: this.config.cdpConfig.clientKey,
142
149
  targetURL: this.config.cdpConfig.endpoint,
143
150
  pointOfSale: this.config.getPointOfSale
144
151
  ? this.config.getPointOfSale(site, language)
145
152
  : PosResolver.resolve(site, language),
153
+ cookieDomain: hostName,
146
154
  forceServerCookieMode: true,
147
155
  });
148
156
  return engageServer;
@@ -135,7 +135,8 @@ export class RedirectsMiddleware extends MiddlewareBase {
135
135
  redirect.pattern = `/^\/${redirect.pattern
136
136
  .replace(/^\/|\/$/g, '')
137
137
  .replace(/^\^\/|\/\$$/g, '')
138
- .replace(/^\^|\$$/g, '')}$/gi`;
138
+ .replace(/^\^|\$$/g, '')
139
+ .replace(/\$\/gi$/g, '')}$/gi`;
139
140
  return ((regexParser(redirect.pattern).test(tragetURL) ||
140
141
  regexParser(redirect.pattern).test(`${tragetURL}${targetQS}`) ||
141
142
  regexParser(redirect.pattern).test(`/${req.nextUrl.locale}${tragetURL}`) ||
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sitecore-jss/sitecore-jss-nextjs",
3
- "version": "21.6.0-canary.2",
3
+ "version": "21.6.0-canary.22",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "sideEffects": false,
@@ -30,7 +30,7 @@
30
30
  "url": "https://github.com/sitecore/jss/issues"
31
31
  },
32
32
  "devDependencies": {
33
- "@sitecore/engage": "^1.4.0",
33
+ "@sitecore/engage": "^1.4.1",
34
34
  "@types/chai": "^4.3.4",
35
35
  "@types/chai-as-promised": "^7.1.5",
36
36
  "@types/chai-string": "^1.4.2",
@@ -66,15 +66,15 @@
66
66
  "typescript": "~4.9.4"
67
67
  },
68
68
  "peerDependencies": {
69
- "@sitecore/engage": "^1.4.0",
69
+ "@sitecore/engage": "^1.4.1",
70
70
  "next": "^13.4.16",
71
71
  "react": "^18.2.0",
72
72
  "react-dom": "^18.2.0"
73
73
  },
74
74
  "dependencies": {
75
- "@sitecore-jss/sitecore-jss": "^21.6.0-canary.2",
76
- "@sitecore-jss/sitecore-jss-dev-tools": "^21.6.0-canary.2",
77
- "@sitecore-jss/sitecore-jss-react": "^21.6.0-canary.2",
75
+ "@sitecore-jss/sitecore-jss": "^21.6.0-canary.22",
76
+ "@sitecore-jss/sitecore-jss-dev-tools": "^21.6.0-canary.22",
77
+ "@sitecore-jss/sitecore-jss-react": "^21.6.0-canary.22",
78
78
  "@vercel/kv": "^0.2.1",
79
79
  "node-html-parser": "^6.1.4",
80
80
  "prop-types": "^15.8.1",
@@ -83,7 +83,7 @@
83
83
  },
84
84
  "description": "",
85
85
  "types": "types/index.d.ts",
86
- "gitHead": "64982477467fe33214a11d7bb37fb7fda1f57154",
86
+ "gitHead": "4f902b49bd406cec630749bb1b192c3e3370a0a3",
87
87
  "files": [
88
88
  "dist",
89
89
  "types",
@@ -70,7 +70,7 @@ export declare class PersonalizeMiddleware extends MiddlewareBase {
70
70
  * @returns middleware handler
71
71
  */
72
72
  getHandler(): (req: NextRequest, res?: NextResponse) => Promise<NextResponse>;
73
- protected initializeEngageServer(site: SiteInfo, language: string): EngageServer;
73
+ protected initializeEngageServer(hostName: string, site: SiteInfo, language: string): EngageServer;
74
74
  protected getExperienceParams(req: NextRequest): ExperienceParams;
75
75
  protected excludeRoute(pathname: string): boolean | undefined;
76
76
  private handler;