@sitecore-content-sdk/nextjs 1.3.0-canary.9 → 1.4.0-canary.2
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 +11 -11
- package/dist/cjs/client/index.js +10 -10
- package/dist/cjs/client/models.js +2 -2
- package/dist/cjs/client/sitecore-nextjs-client.js +160 -156
- package/dist/cjs/components/BYOCWrapper.js +31 -30
- package/dist/cjs/components/ComponentPropsContext.js +66 -59
- package/dist/cjs/components/FEaaSWrapper.js +33 -32
- package/dist/cjs/components/Link.js +117 -90
- package/dist/cjs/components/NextImage.js +66 -62
- package/dist/cjs/components/Placeholder.js +55 -50
- package/dist/cjs/components/RichText.js +133 -128
- package/dist/cjs/config/define-config.js +26 -25
- package/dist/cjs/config/index.js +5 -5
- package/dist/cjs/config-cli/define-cli-config.js +40 -39
- package/dist/cjs/config-cli/index.js +5 -5
- package/dist/cjs/editing/codegen/import-map.js +129 -118
- package/dist/cjs/editing/codegen/index.js +6 -6
- package/dist/cjs/editing/constants.js +10 -10
- package/dist/cjs/editing/editing-config-middleware.js +70 -69
- package/dist/cjs/editing/editing-render-middleware.js +145 -144
- package/dist/cjs/editing/feaas-render-middleware.js +102 -101
- package/dist/cjs/editing/index.js +19 -19
- package/dist/cjs/editing/render-middleware.js +46 -46
- package/dist/cjs/editing/utils.js +260 -257
- package/dist/cjs/index.js +132 -131
- package/dist/cjs/middleware/app-router-multisite-middleware.js +41 -20
- package/dist/cjs/middleware/index.js +30 -30
- package/dist/cjs/middleware/locale-middleware.js +85 -84
- package/dist/cjs/middleware/middleware.js +195 -192
- package/dist/cjs/middleware/multisite-middleware.js +141 -118
- package/dist/cjs/middleware/personalize-middleware.js +240 -236
- package/dist/cjs/middleware/redirects-middleware.js +323 -297
- package/dist/cjs/middleware/robots-middleware.js +45 -44
- package/dist/cjs/middleware/sitemap-middleware.js +50 -49
- package/dist/cjs/monitoring/healthcheck-middleware.js +31 -30
- package/dist/cjs/monitoring/index.js +5 -5
- package/dist/cjs/route-handler/editing-config-route-handler.js +110 -106
- package/dist/cjs/route-handler/editing-render-route-handler.js +270 -165
- package/dist/cjs/route-handler/index.js +11 -11
- package/dist/cjs/route-handler/robots-route-handler.js +69 -68
- package/dist/cjs/route-handler/sitemap-route-handler.js +66 -65
- package/dist/cjs/search/index.js +17 -0
- package/dist/cjs/services/component-props-service.js +142 -138
- package/dist/cjs/sharedTypes/component-props.js +2 -2
- package/dist/cjs/sharedTypes/sitecore-page-props.js +2 -2
- package/dist/cjs/site/index.js +5 -5
- package/dist/cjs/tools/codegen/import-map.js +15 -0
- package/dist/cjs/tools/component-props.loader.js +95 -95
- package/dist/cjs/tools/generate-map.js +317 -317
- package/dist/cjs/tools/index.js +14 -13
- package/dist/cjs/tools/templating/byoc-component.js +36 -36
- package/dist/cjs/tools/templating/constants.js +7 -7
- package/dist/cjs/tools/templating/default-component.js +35 -35
- package/dist/cjs/tools/templating/utils.js +200 -0
- package/dist/cjs/utils/index.js +14 -14
- package/dist/cjs/utils/utils.js +82 -73
- package/dist/esm/client/index.js +2 -2
- package/dist/esm/client/models.js +1 -1
- package/dist/esm/client/sitecore-nextjs-client.js +156 -152
- package/dist/esm/components/BYOCWrapper.js +27 -26
- package/dist/esm/components/ComponentPropsContext.js +28 -21
- package/dist/esm/components/FEaaSWrapper.js +29 -28
- package/dist/esm/components/Link.js +78 -51
- package/dist/esm/components/NextImage.js +60 -56
- package/dist/esm/components/Placeholder.js +18 -13
- package/dist/esm/components/RichText.js +96 -91
- package/dist/esm/config/define-config.js +21 -20
- package/dist/esm/config/index.js +1 -1
- package/dist/esm/config-cli/define-cli-config.js +36 -35
- package/dist/esm/config-cli/index.js +1 -1
- package/dist/esm/editing/codegen/import-map.js +92 -81
- package/dist/esm/editing/codegen/index.js +1 -1
- package/dist/esm/editing/constants.js +7 -7
- package/dist/esm/editing/editing-config-middleware.js +66 -65
- package/dist/esm/editing/editing-render-middleware.js +141 -140
- package/dist/esm/editing/feaas-render-middleware.js +98 -97
- package/dist/esm/editing/index.js +6 -6
- package/dist/esm/editing/render-middleware.js +42 -42
- package/dist/esm/editing/utils.js +246 -243
- package/dist/esm/index.js +25 -25
- package/dist/esm/middleware/app-router-multisite-middleware.js +37 -16
- package/dist/esm/middleware/index.js +11 -11
- package/dist/esm/middleware/locale-middleware.js +81 -80
- package/dist/esm/middleware/middleware.js +189 -186
- package/dist/esm/middleware/multisite-middleware.js +137 -114
- package/dist/esm/middleware/personalize-middleware.js +236 -232
- package/dist/esm/middleware/redirects-middleware.js +316 -290
- package/dist/esm/middleware/robots-middleware.js +41 -40
- package/dist/esm/middleware/sitemap-middleware.js +46 -45
- package/dist/esm/monitoring/healthcheck-middleware.js +27 -26
- package/dist/esm/monitoring/index.js +1 -1
- package/dist/esm/route-handler/editing-config-route-handler.js +106 -102
- package/dist/esm/route-handler/editing-render-route-handler.js +265 -160
- package/dist/esm/route-handler/index.js +4 -4
- package/dist/esm/route-handler/robots-route-handler.js +65 -64
- package/dist/esm/route-handler/sitemap-route-handler.js +63 -62
- package/dist/esm/search/index.js +1 -0
- package/dist/esm/services/component-props-service.js +135 -131
- package/dist/esm/sharedTypes/component-props.js +1 -1
- package/dist/esm/sharedTypes/sitecore-page-props.js +1 -1
- package/dist/esm/site/index.js +1 -1
- package/dist/esm/tools/codegen/import-map.js +11 -0
- package/dist/esm/tools/component-props.loader.js +59 -59
- package/dist/esm/tools/generate-map.js +279 -279
- package/dist/esm/tools/index.js +3 -2
- package/dist/esm/tools/templating/byoc-component.js +30 -30
- package/dist/esm/tools/templating/constants.js +4 -4
- package/dist/esm/tools/templating/default-component.js +29 -29
- package/dist/esm/tools/templating/utils.js +190 -0
- package/dist/esm/utils/index.js +3 -3
- package/dist/esm/utils/utils.js +74 -65
- package/package.json +87 -13
- package/search.d.ts +1 -0
- package/types/client/index.d.ts +3 -2
- package/types/client/index.d.ts.map +1 -0
- package/types/client/models.d.ts +9 -8
- package/types/client/models.d.ts.map +1 -0
- package/types/client/sitecore-nextjs-client.d.ts +68 -63
- package/types/client/sitecore-nextjs-client.d.ts.map +1 -0
- package/types/components/BYOCWrapper.d.ts +16 -14
- package/types/components/BYOCWrapper.d.ts.map +1 -0
- package/types/components/ComponentPropsContext.d.ts +30 -18
- package/types/components/ComponentPropsContext.d.ts.map +1 -0
- package/types/components/FEaaSWrapper.d.ts +17 -15
- package/types/components/FEaaSWrapper.d.ts.map +1 -0
- package/types/components/Link.d.ts +25 -15
- package/types/components/Link.d.ts.map +1 -0
- package/types/components/NextImage.d.ts +11 -6
- package/types/components/NextImage.d.ts.map +1 -0
- package/types/components/Placeholder.d.ts +14 -8
- package/types/components/Placeholder.d.ts.map +1 -0
- package/types/components/RichText.d.ts +35 -25
- package/types/components/RichText.d.ts.map +1 -0
- package/types/config/define-config.d.ts +42 -38
- package/types/config/define-config.d.ts.map +1 -0
- package/types/config/index.d.ts +2 -1
- package/types/config/index.d.ts.map +1 -0
- package/types/config-cli/define-cli-config.d.ts +10 -8
- package/types/config-cli/define-cli-config.d.ts.map +1 -0
- package/types/config-cli/index.d.ts +2 -1
- package/types/config-cli/index.d.ts.map +1 -0
- package/types/editing/codegen/import-map.d.ts +15 -3
- package/types/editing/codegen/import-map.d.ts.map +1 -0
- package/types/editing/codegen/index.d.ts +3 -2
- package/types/editing/codegen/index.d.ts.map +1 -0
- package/types/editing/constants.d.ts +8 -7
- package/types/editing/constants.d.ts.map +1 -0
- package/types/editing/editing-config-middleware.d.ts +37 -31
- package/types/editing/editing-config-middleware.d.ts.map +1 -0
- package/types/editing/editing-render-middleware.d.ts +47 -44
- package/types/editing/editing-render-middleware.d.ts.map +1 -0
- package/types/editing/feaas-render-middleware.d.ts +35 -32
- package/types/editing/feaas-render-middleware.d.ts.map +1 -0
- package/types/editing/index.d.ts +7 -6
- package/types/editing/index.d.ts.map +1 -0
- package/types/editing/render-middleware.d.ts +26 -25
- package/types/editing/render-middleware.d.ts.map +1 -0
- package/types/editing/utils.d.ts +110 -106
- package/types/editing/utils.d.ts.map +1 -0
- package/types/index.d.ts +25 -24
- package/types/index.d.ts.map +1 -0
- package/types/middleware/app-router-multisite-middleware.d.ts +28 -13
- package/types/middleware/app-router-multisite-middleware.d.ts.map +1 -0
- package/types/middleware/index.d.ts +12 -11
- package/types/middleware/index.d.ts.map +1 -0
- package/types/middleware/locale-middleware.d.ts +35 -32
- package/types/middleware/locale-middleware.d.ts.map +1 -0
- package/types/middleware/middleware.d.ts +135 -127
- package/types/middleware/middleware.d.ts.map +1 -0
- package/types/middleware/multisite-middleware.d.ts +54 -37
- package/types/middleware/multisite-middleware.d.ts.map +1 -0
- package/types/middleware/personalize-middleware.d.ts +81 -65
- package/types/middleware/personalize-middleware.d.ts.map +1 -0
- package/types/middleware/redirects-middleware.d.ts +68 -65
- package/types/middleware/redirects-middleware.d.ts.map +1 -0
- package/types/middleware/robots-middleware.d.ts +15 -13
- package/types/middleware/robots-middleware.d.ts.map +1 -0
- package/types/middleware/sitemap-middleware.d.ts +16 -14
- package/types/middleware/sitemap-middleware.d.ts.map +1 -0
- package/types/monitoring/healthcheck-middleware.d.ts +14 -12
- package/types/monitoring/healthcheck-middleware.d.ts.map +1 -0
- package/types/monitoring/index.d.ts +2 -1
- package/types/monitoring/index.d.ts.map +1 -0
- package/types/route-handler/editing-config-route-handler.d.ts +30 -24
- package/types/route-handler/editing-config-route-handler.d.ts.map +1 -0
- package/types/route-handler/editing-render-route-handler.d.ts +33 -25
- package/types/route-handler/editing-render-route-handler.d.ts.map +1 -0
- package/types/route-handler/index.d.ts +5 -4
- package/types/route-handler/index.d.ts.map +1 -0
- package/types/route-handler/robots-route-handler.d.ts +30 -28
- package/types/route-handler/robots-route-handler.d.ts.map +1 -0
- package/types/route-handler/sitemap-route-handler.d.ts +30 -28
- package/types/route-handler/sitemap-route-handler.d.ts.map +1 -0
- package/types/search/index.d.ts +2 -0
- package/types/search/index.d.ts.map +1 -0
- package/types/services/component-props-service.d.ts +62 -57
- package/types/services/component-props-service.d.ts.map +1 -0
- package/types/sharedTypes/component-props.d.ts +62 -47
- package/types/sharedTypes/component-props.d.ts.map +1 -0
- package/types/sharedTypes/sitecore-page-props.d.ts +14 -9
- package/types/sharedTypes/sitecore-page-props.d.ts.map +1 -0
- package/types/site/index.d.ts +2 -1
- package/types/site/index.d.ts.map +1 -0
- package/types/tools/codegen/import-map.d.ts +10 -0
- package/types/tools/codegen/import-map.d.ts.map +1 -0
- package/types/tools/component-props.loader.d.ts +8 -7
- package/types/tools/component-props.loader.d.ts.map +1 -0
- package/types/tools/generate-map.d.ts +26 -24
- package/types/tools/generate-map.d.ts.map +1 -0
- package/types/tools/index.d.ts +4 -2
- package/types/tools/index.d.ts.map +1 -0
- package/types/tools/templating/byoc-component.d.ts +3 -2
- package/types/tools/templating/byoc-component.d.ts.map +1 -0
- package/types/tools/templating/constants.d.ts +5 -4
- package/types/tools/templating/constants.d.ts.map +1 -0
- package/types/tools/templating/default-component.d.ts +3 -2
- package/types/tools/templating/default-component.d.ts.map +1 -0
- package/types/tools/templating/utils.d.ts +44 -0
- package/types/tools/templating/utils.d.ts.map +1 -0
- package/types/utils/index.d.ts +4 -3
- package/types/utils/index.d.ts.map +1 -0
- package/types/utils/utils.d.ts +34 -24
- package/types/utils/utils.d.ts.map +1 -0
- package/client.js +0 -1
- package/codegen.js +0 -1
- package/config-cli.js +0 -1
- package/config.js +0 -1
- package/editing.js +0 -1
- package/middleware.js +0 -1
- package/monitoring.js +0 -1
- package/route-handler.js +0 -1
- package/site.js +0 -1
- package/tools.js +0 -1
- package/utils.js +0 -1
|
@@ -1,236 +1,240 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.PersonalizeMiddleware = void 0;
|
|
13
|
-
const personalize_1 = require("@sitecore-content-sdk/core/personalize");
|
|
14
|
-
const core_1 = require("@sitecore-content-sdk/core");
|
|
15
|
-
const middleware_1 = require("./middleware");
|
|
16
|
-
const server_1 = require("@sitecore-cloudsdk/core/server");
|
|
17
|
-
const server_2 = require("@sitecore-cloudsdk/personalize/server");
|
|
18
|
-
/**
|
|
19
|
-
* Middleware / handler to support Sitecore Personalize
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
) {
|
|
53
|
-
core_1.debug.personalize('skipped (
|
|
54
|
-
return res;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
console.log(
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
236
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PersonalizeMiddleware = void 0;
|
|
13
|
+
const personalize_1 = require("@sitecore-content-sdk/core/personalize");
|
|
14
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
15
|
+
const middleware_1 = require("./middleware");
|
|
16
|
+
const server_1 = require("@sitecore-cloudsdk/core/server");
|
|
17
|
+
const server_2 = require("@sitecore-cloudsdk/personalize/server");
|
|
18
|
+
/**
|
|
19
|
+
* Middleware / handler to support Sitecore Personalize
|
|
20
|
+
* @public
|
|
21
|
+
*/
|
|
22
|
+
class PersonalizeMiddleware extends middleware_1.MiddlewareBase {
|
|
23
|
+
/**
|
|
24
|
+
* @param {PersonalizeMiddlewareConfig} [config] Personalize middleware config
|
|
25
|
+
*/
|
|
26
|
+
constructor(config) {
|
|
27
|
+
var _a;
|
|
28
|
+
super(config);
|
|
29
|
+
this.config = config;
|
|
30
|
+
this.handle = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
// Skip if service wasn't initialized (no edge config)
|
|
32
|
+
if (!this.personalizeService) {
|
|
33
|
+
core_1.debug.personalize('skipped (personalize service not configured - edge config required)');
|
|
34
|
+
return res;
|
|
35
|
+
}
|
|
36
|
+
if (!this.config.enabled) {
|
|
37
|
+
core_1.debug.personalize('skipped (personalize middleware is disabled globally)');
|
|
38
|
+
return res;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const pathname = req.nextUrl.pathname;
|
|
42
|
+
const language = this.getLanguage(req, res);
|
|
43
|
+
const hostname = this.getHostHeader(req) || this.defaultHostname;
|
|
44
|
+
const startTimestamp = Date.now();
|
|
45
|
+
const cdpTimeout = this.config.cdpTimeout;
|
|
46
|
+
const geo = this.config.extractGeoDataCb
|
|
47
|
+
? yield this.config.extractGeoDataCb(req)
|
|
48
|
+
: undefined;
|
|
49
|
+
core_1.debug.personalize('personalize middleware start: %o', Object.assign(Object.assign({ pathname,
|
|
50
|
+
language,
|
|
51
|
+
hostname }, (geo && { geo })), { headers: this.extractDebugHeaders(req.headers) }));
|
|
52
|
+
if (this.disabled(req, res)) {
|
|
53
|
+
core_1.debug.personalize('skipped (personalize middleware is disabled)');
|
|
54
|
+
return res;
|
|
55
|
+
}
|
|
56
|
+
if (res.redirected || // Don't attempt to personalize a redirect
|
|
57
|
+
this.isPreview(req) // No need to personalize for preview (layout data is already prepared for preview)
|
|
58
|
+
) {
|
|
59
|
+
core_1.debug.personalize('skipped (%s)', res.redirected ? 'redirected' : 'preview');
|
|
60
|
+
return res;
|
|
61
|
+
}
|
|
62
|
+
const site = this.getSite(req, res);
|
|
63
|
+
// Get personalization info from Experience Edge
|
|
64
|
+
const personalizeInfo = yield this.personalizeService.getPersonalizeInfo(pathname, language, site.name);
|
|
65
|
+
if (!personalizeInfo) {
|
|
66
|
+
// Likely an invalid route / language
|
|
67
|
+
core_1.debug.personalize('skipped (personalize info not found)');
|
|
68
|
+
return res;
|
|
69
|
+
}
|
|
70
|
+
if (personalizeInfo.variantIds.length === 0) {
|
|
71
|
+
core_1.debug.personalize('skipped (no personalization configured)');
|
|
72
|
+
return res;
|
|
73
|
+
}
|
|
74
|
+
if (this.isPrefetch(req)) {
|
|
75
|
+
core_1.debug.personalize('skipped (prefetch)');
|
|
76
|
+
// Personalized, but this is a prefetch request.
|
|
77
|
+
// In this case, don't execute a personalize request; otherwise, the metrics for component A/B experiments would be inaccurate.
|
|
78
|
+
// Disable preflight caching to force revalidation on client-side navigation (personalization WILL be influenced).
|
|
79
|
+
// Note the reason we don't move this any earlier in the middleware is that we would then be sacrificing performance for non-personalized pages.
|
|
80
|
+
res.headers.set('x-middleware-cache', 'no-cache');
|
|
81
|
+
res.headers.set('Cache-Control', 'no-store, must-revalidate');
|
|
82
|
+
return res;
|
|
83
|
+
}
|
|
84
|
+
yield this.initPersonalizeServer({
|
|
85
|
+
hostname,
|
|
86
|
+
siteName: site.name,
|
|
87
|
+
request: req,
|
|
88
|
+
response: res,
|
|
89
|
+
});
|
|
90
|
+
const params = this.getExperienceParams(req);
|
|
91
|
+
const executions = this.getPersonalizeExecutions(personalizeInfo, language);
|
|
92
|
+
const identifiedVariantIds = [];
|
|
93
|
+
yield Promise.all(executions.map((execution) => this.personalize(Object.assign({ friendlyId: execution.friendlyId, variantIds: execution.variantIds, params,
|
|
94
|
+
language, timeout: cdpTimeout }, (geo && { geo })), req).then((personalization) => {
|
|
95
|
+
const variantId = personalization.variantId;
|
|
96
|
+
if (variantId) {
|
|
97
|
+
if (!execution.variantIds.includes(variantId)) {
|
|
98
|
+
core_1.debug.personalize('invalid variant %s', variantId);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
identifiedVariantIds.push(variantId);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
})));
|
|
105
|
+
if (identifiedVariantIds.length === 0) {
|
|
106
|
+
core_1.debug.personalize('skipped (no variant(s) identified)');
|
|
107
|
+
return res;
|
|
108
|
+
}
|
|
109
|
+
// Path can be rewritten by previously executed middleware
|
|
110
|
+
const basePath = (res === null || res === void 0 ? void 0 : res.headers.get(middleware_1.REWRITE_HEADER_NAME)) || pathname;
|
|
111
|
+
// Rewrite to persononalized path
|
|
112
|
+
const rewritePath = (0, personalize_1.getPersonalizedRewrite)(basePath, identifiedVariantIds);
|
|
113
|
+
const response = this.rewrite(rewritePath, req, res);
|
|
114
|
+
// Disable preflight caching to force revalidation on client-side navigation (personalization MAY be influenced).
|
|
115
|
+
// See https://github.com/vercel/next.js/pull/32767
|
|
116
|
+
response.headers.set('x-middleware-cache', 'no-cache');
|
|
117
|
+
core_1.debug.personalize('personalize middleware end in %dms: %o', Date.now() - startTimestamp, {
|
|
118
|
+
rewritePath,
|
|
119
|
+
headers: this.extractDebugHeaders(response.headers),
|
|
120
|
+
});
|
|
121
|
+
return response;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.log('Personalize middleware failed:');
|
|
125
|
+
console.log(error);
|
|
126
|
+
return res;
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
// Validate edge config is present - personalize requires Edge platform
|
|
130
|
+
if (!this.config.contextId && !this.config.clientContextId) {
|
|
131
|
+
console.warn('[PersonalizeMiddleware] Personalize middleware requires Edge configuration (contextId/clientContextId). ' +
|
|
132
|
+
'Personalize features will be disabled. This is expected in local container development.');
|
|
133
|
+
// Set to null to indicate service is disabled
|
|
134
|
+
this.personalizeService = null;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const graphQLOptions = {
|
|
138
|
+
api: {
|
|
139
|
+
edge: {
|
|
140
|
+
contextId: this.config.contextId,
|
|
141
|
+
clientContextId: this.config.clientContextId,
|
|
142
|
+
edgeUrl: this.config.edgeUrl,
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
// NOTE: we provide native fetch for compatibility on Next.js Edge Runtime
|
|
147
|
+
// (underlying default 'cross-fetch' is not currently compatible: https://github.com/lquixada/cross-fetch/issues/78)
|
|
148
|
+
this.personalizeService =
|
|
149
|
+
(_a = this.config.personalizeService) !== null && _a !== void 0 ? _a : new personalize_1.PersonalizeService({
|
|
150
|
+
clientFactory: this.getClientFactory(graphQLOptions),
|
|
151
|
+
timeout: this.config.edgeTimeout,
|
|
152
|
+
scope: this.config.scope,
|
|
153
|
+
fetch: fetch,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
getExperienceParams(req) {
|
|
157
|
+
const extraParams = this.config.getExtraUtmParams ? this.config.getExtraUtmParams(req) : {};
|
|
158
|
+
const utm = Object.assign({ campaign: req.nextUrl.searchParams.get('utm_campaign') || undefined, content: req.nextUrl.searchParams.get('utm_content') || undefined, medium: req.nextUrl.searchParams.get('utm_medium') || undefined, source: req.nextUrl.searchParams.get('utm_source') || undefined }, extraParams);
|
|
159
|
+
return {
|
|
160
|
+
// It's expected that the header name "referer" is actually a misspelling of the word "referrer"
|
|
161
|
+
// req.referrer is used during fetching to determine the value of the Referer header of the request being made,
|
|
162
|
+
// used as a fallback
|
|
163
|
+
referrer: req.headers.get('referer') || req.referrer,
|
|
164
|
+
utm,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
disabled(req, res) {
|
|
168
|
+
// ignore files
|
|
169
|
+
return req.nextUrl.pathname.includes('.') || super.disabled(req, res);
|
|
170
|
+
}
|
|
171
|
+
initPersonalizeServer(_a) {
|
|
172
|
+
return __awaiter(this, arguments, void 0, function* ({ hostname, siteName, request, response, }) {
|
|
173
|
+
yield (0, server_1.CloudSDK)(request, response, {
|
|
174
|
+
sitecoreEdgeUrl: this.config.edgeUrl,
|
|
175
|
+
sitecoreEdgeContextId: this.config.contextId,
|
|
176
|
+
siteName,
|
|
177
|
+
cookieDomain: hostname,
|
|
178
|
+
enableServerCookie: true,
|
|
179
|
+
})
|
|
180
|
+
.addPersonalize({ enablePersonalizeCookie: true })
|
|
181
|
+
.initialize();
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
personalize(_a, request_1) {
|
|
185
|
+
return __awaiter(this, arguments, void 0, function* ({ params, friendlyId, language, timeout, variantIds, geo, }, request) {
|
|
186
|
+
var _b;
|
|
187
|
+
core_1.debug.personalize('executing experience for %s %o', friendlyId, params);
|
|
188
|
+
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,
|
|
189
|
+
params,
|
|
190
|
+
language, pageVariantIds: variantIds }, (geo && { geo })), { timeout }));
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Aggregates personalize executions based on the provided route personalize information and language
|
|
195
|
+
* @param {PersonalizeInfo} personalizeInfo the route personalize information
|
|
196
|
+
* @param {string} language the language
|
|
197
|
+
* @returns An array of personalize executions
|
|
198
|
+
*/
|
|
199
|
+
getPersonalizeExecutions(personalizeInfo, language) {
|
|
200
|
+
if (personalizeInfo.variantIds.length === 0) {
|
|
201
|
+
return [];
|
|
202
|
+
}
|
|
203
|
+
const results = [];
|
|
204
|
+
return personalizeInfo.variantIds.reduce((results, variantId) => {
|
|
205
|
+
if (variantId.includes('_')) {
|
|
206
|
+
// Component-level personalization in format "<ComponentID>_<VariantID>"
|
|
207
|
+
const componentId = variantId.split('_')[0];
|
|
208
|
+
const friendlyId = personalize_1.CdpHelper.getComponentFriendlyId(personalizeInfo.pageId, componentId, language, this.config.scope);
|
|
209
|
+
const execution = results.find((x) => x.friendlyId === friendlyId);
|
|
210
|
+
if (execution) {
|
|
211
|
+
execution.variantIds.push(variantId);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
// The default/control variant (format "<ComponentID>_default") is also a valid value returned by the execution
|
|
215
|
+
const defaultVariant = `${componentId}${personalize_1.DEFAULT_VARIANT}`;
|
|
216
|
+
results.push({
|
|
217
|
+
friendlyId,
|
|
218
|
+
variantIds: [defaultVariant, variantId],
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// Embedded (page-level) personalization in format "<VariantID>"
|
|
224
|
+
const friendlyId = personalize_1.CdpHelper.getPageFriendlyId(personalizeInfo.pageId, language, this.config.scope);
|
|
225
|
+
const execution = results.find((x) => x.friendlyId === friendlyId);
|
|
226
|
+
if (execution) {
|
|
227
|
+
execution.variantIds.push(variantId);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
results.push({
|
|
231
|
+
friendlyId,
|
|
232
|
+
variantIds: [variantId],
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return results;
|
|
237
|
+
}, results);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
exports.PersonalizeMiddleware = PersonalizeMiddleware;
|