@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,165 +1,270 @@
|
|
|
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.createEditingRenderRouteHandlers = void 0;
|
|
13
|
-
exports.getNextCookies = getNextCookies;
|
|
14
|
-
const core_1 = require("@sitecore-content-sdk/core");
|
|
15
|
-
const editing_1 = require("@sitecore-content-sdk/core/editing");
|
|
16
|
-
const utils_1 = require("@sitecore-content-sdk/core/utils");
|
|
17
|
-
const layout_1 = require("@sitecore-content-sdk/core/layout");
|
|
18
|
-
const utils_2 = require("../utils/utils");
|
|
19
|
-
const headers_1 = require("next/headers");
|
|
20
|
-
const utils_3 = require("../editing/utils");
|
|
21
|
-
const site_1 = require("@sitecore-content-sdk/core/site");
|
|
22
|
-
/**
|
|
23
|
-
* Helper function to handle cookie operations - can be mocked for testing
|
|
24
|
-
* @returns {Promise<NextCookies>} Next cookies
|
|
25
|
-
*/
|
|
26
|
-
function getNextCookies() {
|
|
27
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
-
// In test environment, use mock cookie store only if specifically provided
|
|
29
|
-
if (process.env.TEST === 'true' && global.__TEST_COOKIE_STORE__) {
|
|
30
|
-
return global.__TEST_COOKIE_STORE__;
|
|
31
|
-
}
|
|
32
|
-
return yield (0, headers_1.cookies)();
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const
|
|
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
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
core_1.debug.editing('
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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.createEditingRenderRouteHandlers = void 0;
|
|
13
|
+
exports.getNextCookies = getNextCookies;
|
|
14
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
15
|
+
const editing_1 = require("@sitecore-content-sdk/core/editing");
|
|
16
|
+
const utils_1 = require("@sitecore-content-sdk/core/utils");
|
|
17
|
+
const layout_1 = require("@sitecore-content-sdk/core/layout");
|
|
18
|
+
const utils_2 = require("../utils/utils");
|
|
19
|
+
const headers_1 = require("next/headers");
|
|
20
|
+
const utils_3 = require("../editing/utils");
|
|
21
|
+
const site_1 = require("@sitecore-content-sdk/core/site");
|
|
22
|
+
/**
|
|
23
|
+
* Helper function to handle cookie operations - can be mocked for testing
|
|
24
|
+
* @returns {Promise<NextCookies>} Next cookies
|
|
25
|
+
*/
|
|
26
|
+
function getNextCookies() {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
// In test environment, use mock cookie store only if specifically provided
|
|
29
|
+
if (process.env.TEST === 'true' && global.__TEST_COOKIE_STORE__) {
|
|
30
|
+
return global.__TEST_COOKIE_STORE__;
|
|
31
|
+
}
|
|
32
|
+
return yield (0, headers_1.cookies)();
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Creates a route handler for the editing render API route (e.g. '/api/editing/render')
|
|
37
|
+
* @param {EditingHandlerOptions} options - The options for the route handler.
|
|
38
|
+
* @returns The route handler object with GET and OPTIONS methods.
|
|
39
|
+
* @public
|
|
40
|
+
*/
|
|
41
|
+
const createEditingRenderRouteHandlers = (options) => {
|
|
42
|
+
const dataFetcher = new core_1.NativeDataFetcher({ debugger: core_1.debug.editing });
|
|
43
|
+
const getCorsHeaders = (req) => {
|
|
44
|
+
var _a;
|
|
45
|
+
const expectedCorsHeaders = (0, utils_1.getEnforcedCorsHeaders)({
|
|
46
|
+
requestMethod: req.method,
|
|
47
|
+
headers: req.headers,
|
|
48
|
+
presetCorsHeader: (_a = req.headers) === null || _a === void 0 ? void 0 : _a.get('Access-Control-Allow-Origin'),
|
|
49
|
+
allowedOrigins: editing_1.EDITING_ALLOWED_ORIGINS,
|
|
50
|
+
});
|
|
51
|
+
if (!expectedCorsHeaders) {
|
|
52
|
+
core_1.debug.editing('invalid origin host - set allowed origins in JSS_ALLOWED_ORIGINS environment variable');
|
|
53
|
+
}
|
|
54
|
+
return expectedCorsHeaders;
|
|
55
|
+
};
|
|
56
|
+
const getOriginNotAllowedMessage = (origin) => {
|
|
57
|
+
return `<html><body>Requests from origin ${origin} not allowed</body></html>`;
|
|
58
|
+
};
|
|
59
|
+
const validateEditingSecret = (receivedSecret) => {
|
|
60
|
+
const editingSecret = (0, utils_2.getEditingSecret)();
|
|
61
|
+
const secretIsvalid = editingSecret === receivedSecret;
|
|
62
|
+
if (!secretIsvalid) {
|
|
63
|
+
core_1.debug.editing('invalid editing secret - sent "%s" expected "%s"', receivedSecret, editingSecret);
|
|
64
|
+
}
|
|
65
|
+
return secretIsvalid;
|
|
66
|
+
};
|
|
67
|
+
const OPTIONS = (req) => {
|
|
68
|
+
// init query string values
|
|
69
|
+
const query = {};
|
|
70
|
+
req.nextUrl.searchParams.forEach((value, key) => {
|
|
71
|
+
query[key] = value;
|
|
72
|
+
});
|
|
73
|
+
const expectedCorsHeaders = getCorsHeaders(req);
|
|
74
|
+
if (!expectedCorsHeaders) {
|
|
75
|
+
return new Response(getOriginNotAllowedMessage(req.headers.get('origin') || ''), {
|
|
76
|
+
status: 401,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
core_1.debug.editing('preflight request');
|
|
80
|
+
return new Response(null, { status: 204, headers: expectedCorsHeaders });
|
|
81
|
+
};
|
|
82
|
+
const GET = (req) => __awaiter(void 0, void 0, void 0, function* () {
|
|
83
|
+
var _a, _b;
|
|
84
|
+
const { method, headers } = req;
|
|
85
|
+
// init query string values
|
|
86
|
+
const query = {};
|
|
87
|
+
req.nextUrl.searchParams.forEach((value, key) => {
|
|
88
|
+
query[key] = value;
|
|
89
|
+
});
|
|
90
|
+
core_1.debug.editing('editing render handler start: %o', {
|
|
91
|
+
method,
|
|
92
|
+
query,
|
|
93
|
+
headers,
|
|
94
|
+
});
|
|
95
|
+
const expectedCorsHeaders = getCorsHeaders(req);
|
|
96
|
+
if (!expectedCorsHeaders) {
|
|
97
|
+
return new Response(getOriginNotAllowedMessage(req.headers.get('origin') || ''), {
|
|
98
|
+
status: 401,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const responseHeaders = expectedCorsHeaders;
|
|
102
|
+
// Validate secret
|
|
103
|
+
if (!validateEditingSecret(query[editing_1.QUERY_PARAM_EDITING_SECRET])) {
|
|
104
|
+
return Response.json({
|
|
105
|
+
html: editing_1.INVALID_SECRET_HTML_MESSAGE,
|
|
106
|
+
}, { status: 401, headers: responseHeaders });
|
|
107
|
+
}
|
|
108
|
+
// enable preview
|
|
109
|
+
const draft = yield (0, headers_1.draftMode)();
|
|
110
|
+
draft.enable();
|
|
111
|
+
const startTimestamp = Date.now();
|
|
112
|
+
const mode = query.mode;
|
|
113
|
+
const requiredQueryParams = (0, utils_3.getRequiredEditingParamsList)(mode);
|
|
114
|
+
const missingQueryParams = requiredQueryParams.filter((param) => !query[param]);
|
|
115
|
+
// Validate query parameters
|
|
116
|
+
if (missingQueryParams.length) {
|
|
117
|
+
core_1.debug.editing('missing required query parameters: %o', missingQueryParams);
|
|
118
|
+
return Response.json({
|
|
119
|
+
html: `<html><body>Missing required query parameters: ${missingQueryParams.join(', ')}</body></html>`,
|
|
120
|
+
}, { status: 400, headers: responseHeaders });
|
|
121
|
+
}
|
|
122
|
+
const encodedRoute = encodeURI(query.route);
|
|
123
|
+
const route = ((_a = options === null || options === void 0 ? void 0 : options.resolvePageUrl) === null || _a === void 0 ? void 0 : _a.call(options, encodedRoute)) || encodedRoute;
|
|
124
|
+
const base = (0, utils_3.resolveServerUrl)(req);
|
|
125
|
+
const requestUrl = new URL(route, base);
|
|
126
|
+
// Restrict the page to be rendered only within the allowed origins
|
|
127
|
+
responseHeaders['Content-Security-Policy'] = (0, utils_3.getCSPHeader)();
|
|
128
|
+
const cookieStore = yield getNextCookies();
|
|
129
|
+
cookieStore.set("__prerender_bypass" /* PreviewCookies.PRERENDER_BYPASS */, ((_b = cookieStore.get("__prerender_bypass" /* PreviewCookies.PRERENDER_BYPASS */)) === null || _b === void 0 ? void 0 : _b.value) || '', {
|
|
130
|
+
httpOnly: true,
|
|
131
|
+
path: '/',
|
|
132
|
+
sameSite: 'none',
|
|
133
|
+
secure: true,
|
|
134
|
+
});
|
|
135
|
+
// Set Preview mode identifier cookies, if the page is rendered in Sitecore Preview mode
|
|
136
|
+
if (mode === layout_1.LayoutServicePageState.Preview) {
|
|
137
|
+
cookieStore.set(editing_1.PREVIEW_KEY, 'true', {
|
|
138
|
+
httpOnly: true,
|
|
139
|
+
path: '/',
|
|
140
|
+
sameSite: 'none',
|
|
141
|
+
secure: true,
|
|
142
|
+
});
|
|
143
|
+
cookieStore.set(site_1.SITE_KEY, query.sc_site, {
|
|
144
|
+
httpOnly: true,
|
|
145
|
+
path: '/',
|
|
146
|
+
sameSite: 'none',
|
|
147
|
+
secure: true,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
const convertedCookies = cookieStore.getAll().map((c) => `${c.name}=${c.value}`);
|
|
151
|
+
try {
|
|
152
|
+
core_1.debug.editing('fetching page route for %s', query.route);
|
|
153
|
+
// Get query string parameters to propagate on subsequent requests (e.g. for deployment protection bypass)
|
|
154
|
+
// Additionally ,in app router preview data is passed through query string instead of preview data cookie
|
|
155
|
+
const propagatedQsParams = Object.assign(Object.assign({}, (0, utils_3.getQueryParamsForPropagation)(query)), (0, utils_3.mapEditingParams)(query));
|
|
156
|
+
// Get headers to propagate on subsequent requests
|
|
157
|
+
const propagatedHeaders = (0, utils_3.getHeadersForPropagation)(headers);
|
|
158
|
+
const html = yield (0, utils_3.getEditingRequestHtml)(requestUrl, propagatedQsParams, propagatedHeaders, convertedCookies, dataFetcher);
|
|
159
|
+
// remove nextjs preview cookies to not leak them to the browser
|
|
160
|
+
const filteredCookies = (0, utils_3.cleanupNextPreviewCookies)(convertedCookies);
|
|
161
|
+
responseHeaders['Set-Cookie'] = (filteredCookies === null || filteredCookies === void 0 ? void 0 : filteredCookies.join('; ')) || '';
|
|
162
|
+
core_1.debug.editing('editing render handler end in %dms: %o', Date.now() - startTimestamp, {
|
|
163
|
+
status: 200,
|
|
164
|
+
route,
|
|
165
|
+
});
|
|
166
|
+
responseHeaders['Content-Type'] = 'text/html; charset=utf-8';
|
|
167
|
+
return new Response(html, { status: 200, headers: responseHeaders });
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
core_1.debug.editing('error fetching page route %s: %o', requestUrl, err);
|
|
171
|
+
core_1.debug.editing('falling back to redirect method... ');
|
|
172
|
+
core_1.debug.editing('editing render handler end in %dms: redirect %o', Date.now() - startTimestamp, {
|
|
173
|
+
status: 307,
|
|
174
|
+
route,
|
|
175
|
+
});
|
|
176
|
+
return Response.redirect(route);
|
|
177
|
+
}
|
|
178
|
+
finally {
|
|
179
|
+
yield draft.disable();
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
/**
|
|
183
|
+
* This POST handler serves as proxy for server action call when Design Library is rendering server component.
|
|
184
|
+
* When Design Library needs to dynamically update or render a generated variant of server component a server action {@link updateServerComponentAction} is called from the client side.
|
|
185
|
+
* The way server functions work is that the action call is made to the same URL with POST method, which in normal page render is handled internally by Next.js.
|
|
186
|
+
* However, in editing mode we are in an api route handler scenario so we need to proxy the POST request to be able to process the server action correctly.
|
|
187
|
+
* @param {NextRequest} req - The incoming request
|
|
188
|
+
*/
|
|
189
|
+
const POST = (req) => __awaiter(void 0, void 0, void 0, function* () {
|
|
190
|
+
var _a;
|
|
191
|
+
const requestOrigin = req.headers.get('origin') || '';
|
|
192
|
+
const originHost = new URL(requestOrigin).host;
|
|
193
|
+
const expectedCorsHeaders = getCorsHeaders(req);
|
|
194
|
+
// Bypass CORS if:
|
|
195
|
+
// we are in local or sitecore environment - requested hostname is 'localhost'
|
|
196
|
+
// or the request is same origin (e.g. in vercel netlify environment)
|
|
197
|
+
const bypassCors = req.nextUrl.hostname === 'localhost' || req.nextUrl.host === originHost;
|
|
198
|
+
if (!bypassCors && !expectedCorsHeaders) {
|
|
199
|
+
return new Response(getOriginNotAllowedMessage(requestOrigin), {
|
|
200
|
+
status: 401,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
// Validate secret
|
|
204
|
+
if (!validateEditingSecret(req.nextUrl.searchParams.get(editing_1.QUERY_PARAM_EDITING_SECRET) || '')) {
|
|
205
|
+
return Response.json({
|
|
206
|
+
html: editing_1.INVALID_SECRET_HTML_MESSAGE,
|
|
207
|
+
}, { status: 401, headers: expectedCorsHeaders !== null && expectedCorsHeaders !== void 0 ? expectedCorsHeaders : {} });
|
|
208
|
+
}
|
|
209
|
+
// propagate vercel protection query parameters; map query parameters for design library request
|
|
210
|
+
const query = {};
|
|
211
|
+
req.nextUrl.searchParams.forEach((value, key) => {
|
|
212
|
+
query[key] = value;
|
|
213
|
+
});
|
|
214
|
+
const propagatedQsParams = Object.assign(Object.assign({}, (0, utils_3.getQueryParamsForPropagation)(query)), (0, utils_3.mapEditingParams)(query));
|
|
215
|
+
const base = (0, utils_3.resolveServerUrl)(req);
|
|
216
|
+
const targetUrl = new URL('/', base);
|
|
217
|
+
for (const key in propagatedQsParams) {
|
|
218
|
+
if ({}.hasOwnProperty.call(propagatedQsParams, key)) {
|
|
219
|
+
propagatedQsParams[key] && targetUrl.searchParams.append(key, propagatedQsParams[key]);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
targetUrl.searchParams.append('timestamp', Date.now().toString());
|
|
223
|
+
// enable draft mode in order to get prerender bypass cookie from request
|
|
224
|
+
const draft = yield (0, headers_1.draftMode)();
|
|
225
|
+
draft.enable();
|
|
226
|
+
// add prerender bypass cookie to forwarded request in order to enable draft mode
|
|
227
|
+
const cookieStore = yield getNextCookies();
|
|
228
|
+
const reqCookie = req.headers.get('cookie') || '';
|
|
229
|
+
const prerenderBypassCookie = `${"__prerender_bypass" /* PreviewCookies.PRERENDER_BYPASS */}=${((_a = cookieStore.get("__prerender_bypass" /* PreviewCookies.PRERENDER_BYPASS */)) === null || _a === void 0 ? void 0 : _a.value) || ''}`;
|
|
230
|
+
const forwardCookie = reqCookie
|
|
231
|
+
? `${reqCookie}; ${prerenderBypassCookie}`
|
|
232
|
+
: prerenderBypassCookie;
|
|
233
|
+
const forwardHeaders = new Headers(req.headers);
|
|
234
|
+
forwardHeaders.set('cookie', forwardCookie);
|
|
235
|
+
const forwardedResponse = yield dataFetcher.fetch(targetUrl.toString(), {
|
|
236
|
+
method: req.method,
|
|
237
|
+
headers: forwardHeaders,
|
|
238
|
+
body: req.body,
|
|
239
|
+
duplex: 'half',
|
|
240
|
+
});
|
|
241
|
+
// Filter out x-middleware headers since rewrites are not allowed in route handlers
|
|
242
|
+
// Also filter out content-encoding and content-length to avoid issues when browser reads the payload
|
|
243
|
+
const filteredHeaders = new Headers();
|
|
244
|
+
const forwardedHeaders = new Headers(forwardedResponse.headers);
|
|
245
|
+
forwardedHeaders.forEach((value, key) => {
|
|
246
|
+
if (key !== 'x-middleware-next' &&
|
|
247
|
+
key !== 'x-middleware-rewrite' &&
|
|
248
|
+
key !== 'content-encoding' &&
|
|
249
|
+
key !== 'content-length') {
|
|
250
|
+
filteredHeaders.set(key, value);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
// Restrict the page to be rendered only within the allowed origins
|
|
254
|
+
filteredHeaders.set('Content-Security-Policy', (0, utils_3.getCSPHeader)());
|
|
255
|
+
// add expected CORS headers to response
|
|
256
|
+
Object.entries(expectedCorsHeaders !== null && expectedCorsHeaders !== void 0 ? expectedCorsHeaders : {}).forEach(([key, value]) => {
|
|
257
|
+
filteredHeaders.set(key, value);
|
|
258
|
+
});
|
|
259
|
+
// remove nextjs preview cookies to not leak them to the browser
|
|
260
|
+
const filteredCookies = (0, utils_3.cleanupNextPreviewCookies)(filteredHeaders.get('Set-Cookie'));
|
|
261
|
+
filteredHeaders.set('Set-Cookie', (filteredCookies === null || filteredCookies === void 0 ? void 0 : filteredCookies.join('; ')) || '');
|
|
262
|
+
return new Response(forwardedResponse.data, {
|
|
263
|
+
status: forwardedResponse.status,
|
|
264
|
+
statusText: forwardedResponse.statusText,
|
|
265
|
+
headers: filteredHeaders,
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
return { GET, POST, OPTIONS };
|
|
269
|
+
};
|
|
270
|
+
exports.createEditingRenderRouteHandlers = createEditingRenderRouteHandlers;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createEditingRenderRouteHandlers = exports.createEditingConfigRouteHandler = exports.createRobotsRouteHandler = exports.createSitemapRouteHandler = void 0;
|
|
4
|
-
var sitemap_route_handler_1 = require("./sitemap-route-handler");
|
|
5
|
-
Object.defineProperty(exports, "createSitemapRouteHandler", { enumerable: true, get: function () { return sitemap_route_handler_1.createSitemapRouteHandler; } });
|
|
6
|
-
var robots_route_handler_1 = require("./robots-route-handler");
|
|
7
|
-
Object.defineProperty(exports, "createRobotsRouteHandler", { enumerable: true, get: function () { return robots_route_handler_1.createRobotsRouteHandler; } });
|
|
8
|
-
var editing_config_route_handler_1 = require("./editing-config-route-handler");
|
|
9
|
-
Object.defineProperty(exports, "createEditingConfigRouteHandler", { enumerable: true, get: function () { return editing_config_route_handler_1.createEditingConfigRouteHandler; } });
|
|
10
|
-
var editing_render_route_handler_1 = require("./editing-render-route-handler");
|
|
11
|
-
Object.defineProperty(exports, "createEditingRenderRouteHandlers", { enumerable: true, get: function () { return editing_render_route_handler_1.createEditingRenderRouteHandlers; } });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEditingRenderRouteHandlers = exports.createEditingConfigRouteHandler = exports.createRobotsRouteHandler = exports.createSitemapRouteHandler = void 0;
|
|
4
|
+
var sitemap_route_handler_1 = require("./sitemap-route-handler");
|
|
5
|
+
Object.defineProperty(exports, "createSitemapRouteHandler", { enumerable: true, get: function () { return sitemap_route_handler_1.createSitemapRouteHandler; } });
|
|
6
|
+
var robots_route_handler_1 = require("./robots-route-handler");
|
|
7
|
+
Object.defineProperty(exports, "createRobotsRouteHandler", { enumerable: true, get: function () { return robots_route_handler_1.createRobotsRouteHandler; } });
|
|
8
|
+
var editing_config_route_handler_1 = require("./editing-config-route-handler");
|
|
9
|
+
Object.defineProperty(exports, "createEditingConfigRouteHandler", { enumerable: true, get: function () { return editing_config_route_handler_1.createEditingConfigRouteHandler; } });
|
|
10
|
+
var editing_render_route_handler_1 = require("./editing-render-route-handler");
|
|
11
|
+
Object.defineProperty(exports, "createEditingRenderRouteHandlers", { enumerable: true, get: function () { return editing_render_route_handler_1.createEditingRenderRouteHandlers; } });
|
|
@@ -1,68 +1,69 @@
|
|
|
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.createRobotsRouteHandler = void 0;
|
|
13
|
-
const site_1 = require("@sitecore-content-sdk/core/site");
|
|
14
|
-
const core_1 = require("@sitecore-content-sdk/core");
|
|
15
|
-
const cache_1 = require("next/cache");
|
|
16
|
-
/**
|
|
17
|
-
* Creates a route handler to serve the robots.txt file.
|
|
18
|
-
* @param {RouteHandlerOptions} options - The options for the route handler.
|
|
19
|
-
* @returns The route handler.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
console.log(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
};
|
|
68
|
-
|
|
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.createRobotsRouteHandler = void 0;
|
|
13
|
+
const site_1 = require("@sitecore-content-sdk/core/site");
|
|
14
|
+
const core_1 = require("@sitecore-content-sdk/core");
|
|
15
|
+
const cache_1 = require("next/cache");
|
|
16
|
+
/**
|
|
17
|
+
* Creates a route handler to serve the robots.txt file.
|
|
18
|
+
* @param {RouteHandlerOptions} options - The options for the route handler.
|
|
19
|
+
* @returns The route handler object with GET method.
|
|
20
|
+
* @public
|
|
21
|
+
*/
|
|
22
|
+
const createRobotsRouteHandler = (options) => {
|
|
23
|
+
const { client, sites, revalidate = 60 } = options;
|
|
24
|
+
const siteResolver = new site_1.SiteResolver(sites);
|
|
25
|
+
const getRobots = (0, cache_1.unstable_cache)((site) => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
|
+
return client.getRobots(site);
|
|
27
|
+
}), ['robots'], {
|
|
28
|
+
revalidate,
|
|
29
|
+
tags: ['robots'],
|
|
30
|
+
});
|
|
31
|
+
const GET = (req) => __awaiter(void 0, void 0, void 0, function* () {
|
|
32
|
+
var _a;
|
|
33
|
+
try {
|
|
34
|
+
const startTimestamp = Date.now();
|
|
35
|
+
const hostName = ((_a = req.headers.get('host')) === null || _a === void 0 ? void 0 : _a.split(':')[0]) || 'localhost';
|
|
36
|
+
const site = siteResolver.getByHost(hostName);
|
|
37
|
+
core_1.debug.robots('robots route handler start: %o', {
|
|
38
|
+
hostName,
|
|
39
|
+
siteName: site.name,
|
|
40
|
+
});
|
|
41
|
+
const robotsContent = yield getRobots(site.name);
|
|
42
|
+
if (!robotsContent) {
|
|
43
|
+
core_1.debug.robots('robots route handler end in %dms', Date.now() - startTimestamp);
|
|
44
|
+
return new Response('User-agent: *\nDisallow: /', {
|
|
45
|
+
status: 404,
|
|
46
|
+
headers: {
|
|
47
|
+
'Content-Type': 'text/plain',
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
core_1.debug.robots('robots route handler end in %dms', Date.now() - startTimestamp);
|
|
52
|
+
return new Response(robotsContent, {
|
|
53
|
+
status: 200,
|
|
54
|
+
headers: {
|
|
55
|
+
'Content-Type': 'text/plain',
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.log('Robots route handler failed:');
|
|
61
|
+
console.log(error);
|
|
62
|
+
return new Response('Internal Server Error', {
|
|
63
|
+
status: 500,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return { GET };
|
|
68
|
+
};
|
|
69
|
+
exports.createRobotsRouteHandler = createRobotsRouteHandler;
|