@uniformdev/canvas-next-rsc 19.121.0 → 19.121.1-alpha.3

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.
@@ -1,9 +1,20 @@
1
1
  import { NextRequest } from 'next/server';
2
2
 
3
+ type ResolveFullPath = (options: {
4
+ /** The ID of the composition */
5
+ id?: string;
6
+ /** The slug of the composition */
7
+ slug?: string;
8
+ /** The path of the project map node attached to the composition, if there is one */
9
+ path?: string;
10
+ /** The preview locale selected in Visual Canvas, available only if Localization is set up */
11
+ locale?: string;
12
+ }) => string | undefined;
3
13
  type CreatePreviewGETRouteHandlerOptions = {
14
+ resolveFullPath?: ResolveFullPath;
4
15
  playgroundPath?: string;
5
16
  };
6
- declare const createPreviewGETRouteHandler: (options?: CreatePreviewGETRouteHandlerOptions) => (request: NextRequest) => Promise<Response>;
17
+ declare const createPreviewGETRouteHandler: (options?: CreatePreviewGETRouteHandlerOptions) => (request: NextRequest) => Promise<Response | undefined>;
7
18
 
8
19
  declare const createPreviewOPTIONSRouteHandler: () => () => Promise<Response>;
9
20
 
package/dist/handler.d.ts CHANGED
@@ -1,9 +1,20 @@
1
1
  import { NextRequest } from 'next/server';
2
2
 
3
+ type ResolveFullPath = (options: {
4
+ /** The ID of the composition */
5
+ id?: string;
6
+ /** The slug of the composition */
7
+ slug?: string;
8
+ /** The path of the project map node attached to the composition, if there is one */
9
+ path?: string;
10
+ /** The preview locale selected in Visual Canvas, available only if Localization is set up */
11
+ locale?: string;
12
+ }) => string | undefined;
3
13
  type CreatePreviewGETRouteHandlerOptions = {
14
+ resolveFullPath?: ResolveFullPath;
4
15
  playgroundPath?: string;
5
16
  };
6
- declare const createPreviewGETRouteHandler: (options?: CreatePreviewGETRouteHandlerOptions) => (request: NextRequest) => Promise<Response>;
17
+ declare const createPreviewGETRouteHandler: (options?: CreatePreviewGETRouteHandlerOptions) => (request: NextRequest) => Promise<Response | undefined>;
7
18
 
8
19
  declare const createPreviewOPTIONSRouteHandler: () => () => Promise<Response>;
9
20
 
package/dist/handler.js CHANGED
@@ -27,86 +27,147 @@ __export(handler_exports, {
27
27
  module.exports = __toCommonJS(handler_exports);
28
28
 
29
29
  // src/handler/createPreviewGETRouteHandler.ts
30
- var import_canvas5 = require("@uniformdev/canvas");
31
- var import_headers2 = require("next/headers");
32
- var import_navigation = require("next/navigation");
33
-
34
- // src/utils/route.ts
35
- var import_canvas4 = require("@uniformdev/canvas");
36
- var import_canvas_next_rsc_shared2 = require("@uniformdev/canvas-next-rsc-shared");
37
- var import_redirect = require("@uniformdev/redirect");
38
-
39
- // src/clients/canvasClient.ts
40
- var import_canvas2 = require("@uniformdev/canvas");
41
-
42
- // src/config/helpers.ts
43
- var import_canvas_next_rsc_shared = require("@uniformdev/canvas-next-rsc-shared");
44
-
45
- // src/utils/draft.ts
46
30
  var import_canvas = require("@uniformdev/canvas");
47
31
  var import_headers = require("next/headers");
48
- var isDraftModeEnabled = ({
49
- searchParams
50
- }) => {
51
- if (isDevelopmentEnvironment()) {
52
- return isIncontextEditingEnabled({ searchParams });
53
- }
54
- let draftModeEnabled = false;
55
- try {
56
- draftModeEnabled = (0, import_headers.draftMode)().isEnabled;
57
- } catch (e) {
32
+ var import_navigation = require("next/navigation");
33
+ var BASE_URL_EXAMPLE = "https://example.com";
34
+ var getQueryParam = (req, paramName) => {
35
+ const value = req.nextUrl.searchParams.get(paramName);
36
+ if (typeof value === "undefined") {
37
+ return void 0;
58
38
  }
59
- return draftModeEnabled || isIncontextEditingEnabled({ searchParams });
60
- };
61
- var isIncontextEditingEnabled = ({
62
- searchParams
63
- }) => {
64
- const containsKey = typeof (searchParams == null ? void 0 : searchParams[import_canvas.IN_CONTEXT_EDITOR_QUERY_STRING_PARAM]) !== "undefined";
65
- return containsKey;
66
- };
67
- var isOnVercelPreviewEnvironment = () => {
68
- return process.env.VERCEL_ENV === "preview";
69
- };
70
- var isDevelopmentEnvironment = () => {
71
- return process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test";
39
+ return Array.isArray(value) ? value[0] : value;
72
40
  };
73
-
74
- // src/config/helpers.ts
75
- var shouldCacheBeDisabled = (options) => {
76
- if (isDraftModeEnabled(options)) {
77
- return { disabled: true, reason: "DRAFT" };
78
- }
79
- if (isIncontextEditingEnabled(options)) {
80
- return { disabled: true, reason: "INCONTEXT" };
81
- }
82
- if (isDevelopmentEnvironment()) {
83
- return { disabled: true, reason: "DEV" };
84
- }
85
- return {
86
- disabled: false,
87
- reason: void 0
41
+ var contextualEditingQueryParams = [
42
+ import_canvas.IN_CONTEXT_EDITOR_QUERY_STRING_PARAM,
43
+ import_canvas.IN_CONTEXT_EDITOR_PLAYGROUND_QUERY_STRING_PARAM
44
+ ];
45
+ var createPreviewGETRouteHandler = (options) => {
46
+ return async (request) => {
47
+ const isConfigCheck = getQueryParam(request, "is_config_check") === "true";
48
+ if (isConfigCheck) {
49
+ return Response.json(
50
+ {
51
+ hasPlayground: Boolean(options == null ? void 0 : options.playgroundPath),
52
+ isUsingCustomFullPathResolver: false
53
+ },
54
+ {
55
+ headers: {
56
+ "Access-Control-Allow-Origin": process.env.UNIFORM_CLI_BASE_URL || "https://uniform.app"
57
+ }
58
+ }
59
+ );
60
+ }
61
+ if (request.headers.get("sec-fetch-mode") === "no-cors") {
62
+ return new Response(null, { status: 204 });
63
+ }
64
+ if (!process.env.UNIFORM_PREVIEW_SECRET) {
65
+ return new Response("No preview secret is configured", { status: 401 });
66
+ }
67
+ const { searchParams } = new URL(request.url);
68
+ const isPlayground = searchParams.get(import_canvas.IN_CONTEXT_EDITOR_PLAYGROUND_QUERY_STRING_PARAM) === "true";
69
+ let pathToRedirectTo;
70
+ if (isPlayground) {
71
+ if (!(options == null ? void 0 : options.playgroundPath)) {
72
+ return new Response("No playground path is configured", { status: 401 });
73
+ }
74
+ pathToRedirectTo = options.playgroundPath;
75
+ }
76
+ const id = getQueryParam(request, compositionQueryParam.id);
77
+ const slug = getQueryParam(request, compositionQueryParam.slug);
78
+ const path = getQueryParam(request, compositionQueryParam.path);
79
+ const locale = getQueryParam(request, compositionQueryParam.locale);
80
+ const disable = getQueryParam(request, "disable");
81
+ const secret = getQueryParam(request, import_canvas.SECRET_QUERY_STRING_PARAM);
82
+ const referer = request.headers.get("referer");
83
+ const isUniformContextualEditing = getQueryParam(request, import_canvas.IN_CONTEXT_EDITOR_QUERY_STRING_PARAM) === "true" && (0, import_canvas.isAllowedReferrer)(referer || void 0);
84
+ if (typeof pathToRedirectTo === "undefined") {
85
+ const resolveFullPath = (options == null ? void 0 : options.resolveFullPath) || resolveFullPathDefault;
86
+ pathToRedirectTo = resolveFullPath({ id, slug, path, locale });
87
+ }
88
+ validateLocalRedirectUrl(pathToRedirectTo);
89
+ if (!pathToRedirectTo) {
90
+ return new Response("Could not resolve the full path of the preview page", { status: 400 });
91
+ }
92
+ if (disable) {
93
+ (0, import_headers.draftMode)().disable();
94
+ (0, import_navigation.redirect)(pathToRedirectTo);
95
+ return;
96
+ }
97
+ if (secret !== process.env.UNIFORM_PREVIEW_SECRET) {
98
+ return new Response("Invalid preview secret", { status: 401 });
99
+ }
100
+ (0, import_headers.draftMode)().enable();
101
+ const redirectionUrl = new URL(pathToRedirectTo, BASE_URL_EXAMPLE);
102
+ assignRequestQueryToSearchParams(redirectionUrl.searchParams, searchParams);
103
+ if (isPlayground) {
104
+ redirectionUrl.searchParams.set("id", searchParams.get("id") || "");
105
+ }
106
+ if (!isUniformContextualEditing) {
107
+ contextualEditingQueryParams.forEach((param) => {
108
+ redirectionUrl.searchParams.delete(param);
109
+ });
110
+ }
111
+ const fullPathToRedirectTo = redirectionUrl.href.replace(BASE_URL_EXAMPLE, "");
112
+ (0, import_navigation.redirect)(fullPathToRedirectTo);
88
113
  };
89
114
  };
90
- var getCanvasCacheStrategy = (options) => {
91
- const { disabled, reason } = shouldCacheBeDisabled(options);
92
- const config = (0, import_canvas_next_rsc_shared.getServerConfig)();
93
- if (disabled) {
94
- if (reason === "DEV" && config.canvasCache) {
95
- console.warn("Canvas cache (disabled) has been overridden by canvasCache config.");
96
- return config.canvasCache;
115
+ function validateLocalRedirectUrl(pathToRedirectTo) {
116
+ if (pathToRedirectTo == null ? void 0 : pathToRedirectTo.match(/^[a-z]+:\/\//g)) {
117
+ throw new Error("Tried to redirect to absolute URL with protocol. Disallowing open redirect.");
118
+ }
119
+ }
120
+ var resolveFullPathDefault = ({ slug, path }) => {
121
+ return path || slug;
122
+ };
123
+ var compositionQueryParam = {
124
+ id: "id",
125
+ slug: "slug",
126
+ path: "path",
127
+ locale: "locale"
128
+ };
129
+ var assignRequestQueryToSearchParams = (searchParams, query) => {
130
+ const compositionQueryParamNames = Object.values(compositionQueryParam);
131
+ for (const [name, value] of query.entries()) {
132
+ if (name === import_canvas.SECRET_QUERY_STRING_PARAM) {
133
+ continue;
97
134
  }
98
- return {
99
- type: "no-cache"
100
- };
101
- }
102
- if (config.canvasCache) {
103
- return config.canvasCache;
135
+ if (compositionQueryParamNames.includes(name)) {
136
+ continue;
137
+ }
138
+ if (typeof value === "undefined") {
139
+ continue;
140
+ }
141
+ searchParams.append(name, value);
104
142
  }
105
- return {
106
- type: "force-cache"
143
+ };
144
+
145
+ // src/handler/createPreviewOPTIONSRouteHandler.ts
146
+ var createPreviewOPTIONSRouteHandler = () => {
147
+ return async () => {
148
+ return new Response(null, {
149
+ headers: {
150
+ "Access-Control-Allow-Origin": process.env.UNIFORM_CLI_BASE_URL || "https://uniform.app",
151
+ "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
152
+ "Access-Control-Allow-Headers": "*"
153
+ }
154
+ });
107
155
  };
108
156
  };
109
157
 
158
+ // src/handler/createPreviewPOSTRouteHandler.ts
159
+ var import_canvas5 = require("@uniformdev/canvas");
160
+ var import_cache = require("next/cache");
161
+
162
+ // src/handler/helpers.ts
163
+ var import_canvas4 = require("@uniformdev/canvas");
164
+ var import_canvas_next_rsc_shared = require("@uniformdev/canvas-next-rsc-shared");
165
+ var import_edge_config = require("@vercel/edge-config");
166
+ var import_svix = require("svix");
167
+
168
+ // src/clients/canvasClient.ts
169
+ var import_canvas2 = require("@uniformdev/canvas");
170
+
110
171
  // src/env/index.ts
111
172
  var env = {
112
173
  getProjectId: () => {
@@ -196,6 +257,31 @@ var getCanvasClient = (options) => {
196
257
  });
197
258
  };
198
259
 
260
+ // src/clients/projectMapClient.ts
261
+ var import_project_map = require("@uniformdev/project-map");
262
+ var getProjectMapClient = (options) => {
263
+ const manifestClient = new import_project_map.ProjectMapClient({
264
+ apiHost: env.getApiHost(),
265
+ apiKey: env.getApiKey(),
266
+ projectId: env.getProjectId(),
267
+ fetch: (req, init) => {
268
+ const { cache, revalidate } = determineFetchCacheOptions(options.cache);
269
+ return fetch(req, {
270
+ ...init,
271
+ headers: {
272
+ ...init == null ? void 0 : init.headers,
273
+ "x-bypass-cache": "true"
274
+ },
275
+ cache,
276
+ next: {
277
+ revalidate
278
+ }
279
+ });
280
+ }
281
+ });
282
+ return manifestClient;
283
+ };
284
+
199
285
  // src/clients/routeClient.ts
200
286
  var import_canvas3 = require("@uniformdev/canvas");
201
287
  var getRouteClient = (options) => {
@@ -242,173 +328,6 @@ var getRouteClient = (options) => {
242
328
  });
243
329
  return client;
244
330
  };
245
- var getDefaultRouteClient = ({ searchParams }) => {
246
- return getRouteClient({
247
- cache: getCanvasCacheStrategy({
248
- searchParams
249
- })
250
- });
251
- };
252
-
253
- // src/utils/route.ts
254
- var retrieveRouteByPath = async ({
255
- path,
256
- state,
257
- searchParams,
258
- fetchOptions
259
- }) => {
260
- var _a;
261
- const client = getDefaultRouteClient({
262
- searchParams
263
- });
264
- let queryPath = path;
265
- if (searchParams && Object.keys(searchParams).length > 0) {
266
- const helper = new URL((0, import_canvas_next_rsc_shared2.getBaseUrl)());
267
- helper.pathname = path;
268
- Object.entries(searchParams).forEach(([key, value]) => {
269
- if (typeof value === "string") {
270
- helper.searchParams.set(key, value);
271
- }
272
- });
273
- if (helper.searchParams.size > 0) {
274
- queryPath = `${helper.pathname}${helper.search}`;
275
- }
276
- }
277
- return await client.getRoute({
278
- ...fetchOptions,
279
- path: queryPath,
280
- state,
281
- withComponentIDs: true,
282
- withContentSourceMap: isOnVercelPreviewEnvironment() && ((_a = (0, import_canvas_next_rsc_shared2.getServerConfig)().experimental) == null ? void 0 : _a.vercelVisualEditing)
283
- });
284
- };
285
- var resolveRedirectHref = (resolveResult, path) => {
286
- const requestUrl = `${(0, import_canvas_next_rsc_shared2.getBaseUrl)()}${path}`;
287
- const expandedUrl = (0, import_redirect.getTargetVariableExpandedUrl)(requestUrl, resolveResult.redirect);
288
- const url = new URL(expandedUrl);
289
- return url.pathname;
290
- };
291
-
292
- // src/handler/createPreviewGETRouteHandler.ts
293
- var getQueryParam = (req, paramName) => {
294
- const value = req.nextUrl.searchParams.get(paramName);
295
- if (typeof value === "undefined") {
296
- return void 0;
297
- }
298
- return Array.isArray(value) ? value[0] : value;
299
- };
300
- var createPreviewGETRouteHandler = (options) => {
301
- return async (request) => {
302
- const isConfigCheck = getQueryParam(request, "is_config_check") === "true";
303
- if (isConfigCheck) {
304
- return Response.json(
305
- {
306
- hasPlayground: Boolean(options == null ? void 0 : options.playgroundPath),
307
- isUsingCustomFullPathResolver: false
308
- },
309
- {
310
- headers: {
311
- "Access-Control-Allow-Origin": process.env.UNIFORM_CLI_BASE_URL || "https://uniform.app"
312
- }
313
- }
314
- );
315
- }
316
- if (request.headers.get("sec-fetch-mode") === "no-cors") {
317
- return new Response(null, { status: 204 });
318
- }
319
- if (!process.env.UNIFORM_PREVIEW_SECRET) {
320
- return new Response("No preview secret is configured", { status: 401 });
321
- }
322
- const { searchParams } = new URL(request.url);
323
- const secret = searchParams.get("secret");
324
- const path = searchParams.get("path");
325
- const isPlayground = searchParams.get(import_canvas5.IN_CONTEXT_EDITOR_PLAYGROUND_QUERY_STRING_PARAM) === "true";
326
- const id = searchParams.get("id");
327
- if (secret !== process.env.UNIFORM_PREVIEW_SECRET) {
328
- return new Response("Invalid preview secret", { status: 401 });
329
- }
330
- if (!isPlayground) {
331
- if (!path) {
332
- return new Response("Path not provided", { status: 401 });
333
- }
334
- const resolveResult = await retrieveRouteByPath({
335
- path,
336
- state: import_canvas5.CANVAS_DRAFT_STATE,
337
- searchParams: {
338
- // about to be in draft mode so pretend for now.
339
- [import_canvas5.IN_CONTEXT_EDITOR_QUERY_STRING_PARAM]: "true"
340
- }
341
- });
342
- (0, import_headers2.draftMode)().enable();
343
- if (resolveResult.type === "redirect") {
344
- const href = resolveRedirectHref(resolveResult, path);
345
- if (resolveResult.redirect.targetProjectMapNodeId) {
346
- (0, import_navigation.redirect)(`${href}?${import_canvas5.IN_CONTEXT_EDITOR_QUERY_STRING_PARAM}=true`);
347
- } else {
348
- (0, import_navigation.redirect)(href);
349
- }
350
- }
351
- if (resolveResult.type === "notFound") {
352
- return new Response("Invalid path", { status: 401 });
353
- }
354
- (0, import_navigation.redirect)(`${path}?${import_canvas5.IN_CONTEXT_EDITOR_QUERY_STRING_PARAM}=true`);
355
- } else {
356
- if (!(options == null ? void 0 : options.playgroundPath)) {
357
- return new Response("No playground path is configured", { status: 401 });
358
- }
359
- (0, import_headers2.draftMode)().enable();
360
- (0, import_navigation.redirect)(`${options.playgroundPath}?id=${id}&${import_canvas5.IN_CONTEXT_EDITOR_QUERY_STRING_PARAM}=true`);
361
- }
362
- };
363
- };
364
-
365
- // src/handler/createPreviewOPTIONSRouteHandler.ts
366
- var createPreviewOPTIONSRouteHandler = () => {
367
- return async () => {
368
- return new Response(null, {
369
- headers: {
370
- "Access-Control-Allow-Origin": process.env.UNIFORM_CLI_BASE_URL || "https://uniform.app",
371
- "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
372
- "Access-Control-Allow-Headers": "*"
373
- }
374
- });
375
- };
376
- };
377
-
378
- // src/handler/createPreviewPOSTRouteHandler.ts
379
- var import_canvas7 = require("@uniformdev/canvas");
380
- var import_cache = require("next/cache");
381
-
382
- // src/handler/helpers.ts
383
- var import_canvas6 = require("@uniformdev/canvas");
384
- var import_canvas_next_rsc_shared3 = require("@uniformdev/canvas-next-rsc-shared");
385
- var import_edge_config = require("@vercel/edge-config");
386
- var import_svix = require("svix");
387
-
388
- // src/clients/projectMapClient.ts
389
- var import_project_map = require("@uniformdev/project-map");
390
- var getProjectMapClient = (options) => {
391
- const manifestClient = new import_project_map.ProjectMapClient({
392
- apiHost: env.getApiHost(),
393
- apiKey: env.getApiKey(),
394
- projectId: env.getProjectId(),
395
- fetch: (req, init) => {
396
- const { cache, revalidate } = determineFetchCacheOptions(options.cache);
397
- return fetch(req, {
398
- ...init,
399
- headers: {
400
- ...init == null ? void 0 : init.headers,
401
- "x-bypass-cache": "true"
402
- },
403
- cache,
404
- next: {
405
- revalidate
406
- }
407
- });
408
- }
409
- });
410
- return manifestClient;
411
- };
412
331
 
413
332
  // src/handler/helpers.ts
414
333
  var isSvixMessage = async (request) => {
@@ -480,7 +399,7 @@ var getComposition = async ({ compositionId }) => {
480
399
  });
481
400
  return composition;
482
401
  } catch (err) {
483
- if (err instanceof import_canvas6.ApiClientError && err.statusCode === 404) {
402
+ if (err instanceof import_canvas4.ApiClientError && err.statusCode === 404) {
484
403
  return null;
485
404
  }
486
405
  throw err;
@@ -528,7 +447,7 @@ var processEdgeConfigChange = async ({ source_url }) => {
528
447
  console.warn("UNIFORM_VERCEL_EDGE_CONFIG_TOKEN is not set, skipping edge redirect upsert");
529
448
  return;
530
449
  }
531
- const config = (0, import_canvas_next_rsc_shared3.getServerConfig)();
450
+ const config = (0, import_canvas_next_rsc_shared.getServerConfig)();
532
451
  const routeClient = getRouteClient({
533
452
  cache: {
534
453
  type: "no-cache"
@@ -618,7 +537,7 @@ var handleManifestPublished = async (body) => {
618
537
  };
619
538
 
620
539
  // src/handler/messages/handleProjectMapNodeDelete.ts
621
- var import_canvas_next_rsc_shared4 = require("@uniformdev/canvas-next-rsc-shared");
540
+ var import_canvas_next_rsc_shared2 = require("@uniformdev/canvas-next-rsc-shared");
622
541
  var import_webhooks5 = require("@uniformdev/webhooks");
623
542
  var handleProjectMapNodeDelete = async (body) => {
624
543
  var _a;
@@ -628,7 +547,7 @@ var handleProjectMapNodeDelete = async (body) => {
628
547
  }
629
548
  const tags = [];
630
549
  tags.push(...buildProjectMapNodePaths(parsed.data.path));
631
- const config = (0, import_canvas_next_rsc_shared4.getServerConfig)();
550
+ const config = (0, import_canvas_next_rsc_shared2.getServerConfig)();
632
551
  if ((_a = config.experimental) == null ? void 0 : _a.edgeCompositions) {
633
552
  await processEdgeConfigChange({
634
553
  source_url: parsed.data.path
@@ -640,7 +559,7 @@ var handleProjectMapNodeDelete = async (body) => {
640
559
  };
641
560
 
642
561
  // src/handler/messages/handleProjectMapNodeInsert.ts
643
- var import_canvas_next_rsc_shared5 = require("@uniformdev/canvas-next-rsc-shared");
562
+ var import_canvas_next_rsc_shared3 = require("@uniformdev/canvas-next-rsc-shared");
644
563
  var import_webhooks6 = require("@uniformdev/webhooks");
645
564
  var handleProjectMapNodeInsert = async (body) => {
646
565
  var _a;
@@ -650,7 +569,7 @@ var handleProjectMapNodeInsert = async (body) => {
650
569
  }
651
570
  const tags = [];
652
571
  tags.push(...buildProjectMapNodePaths(parsed.data.path));
653
- const config = (0, import_canvas_next_rsc_shared5.getServerConfig)();
572
+ const config = (0, import_canvas_next_rsc_shared3.getServerConfig)();
654
573
  if ((_a = config.experimental) == null ? void 0 : _a.edgeCompositions) {
655
574
  await processEdgeConfigChange({
656
575
  source_url: parsed.data.path
@@ -662,7 +581,7 @@ var handleProjectMapNodeInsert = async (body) => {
662
581
  };
663
582
 
664
583
  // src/handler/messages/handleProjectMapNodeUpdate.ts
665
- var import_canvas_next_rsc_shared6 = require("@uniformdev/canvas-next-rsc-shared");
584
+ var import_canvas_next_rsc_shared4 = require("@uniformdev/canvas-next-rsc-shared");
666
585
  var import_webhooks7 = require("@uniformdev/webhooks");
667
586
  var handleProjectMapNodeUpdate = async (body) => {
668
587
  var _a;
@@ -673,7 +592,7 @@ var handleProjectMapNodeUpdate = async (body) => {
673
592
  const tags = [];
674
593
  tags.push(...buildProjectMapNodePaths(parsed.data.path));
675
594
  tags.push(...buildProjectMapNodePaths(parsed.data.previous_path));
676
- const config = (0, import_canvas_next_rsc_shared6.getServerConfig)();
595
+ const config = (0, import_canvas_next_rsc_shared4.getServerConfig)();
677
596
  if ((_a = config.experimental) == null ? void 0 : _a.edgeCompositions) {
678
597
  await processEdgeConfigChange({
679
598
  source_url: parsed.data.path
@@ -685,7 +604,7 @@ var handleProjectMapNodeUpdate = async (body) => {
685
604
  };
686
605
 
687
606
  // src/handler/messages/handleRedirectDelete.ts
688
- var import_canvas_next_rsc_shared7 = require("@uniformdev/canvas-next-rsc-shared");
607
+ var import_canvas_next_rsc_shared5 = require("@uniformdev/canvas-next-rsc-shared");
689
608
  var import_webhooks8 = require("@uniformdev/webhooks");
690
609
  var handleRedirectDelete = async (body) => {
691
610
  var _a;
@@ -693,7 +612,7 @@ var handleRedirectDelete = async (body) => {
693
612
  if (!parsed.success) {
694
613
  return void 0;
695
614
  }
696
- const config = (0, import_canvas_next_rsc_shared7.getServerConfig)();
615
+ const config = (0, import_canvas_next_rsc_shared5.getServerConfig)();
697
616
  if ((_a = config.experimental) == null ? void 0 : _a.edgeRedirects) {
698
617
  await processEdgeConfigChange(parsed.data);
699
618
  }
@@ -701,7 +620,7 @@ var handleRedirectDelete = async (body) => {
701
620
  };
702
621
 
703
622
  // src/handler/messages/handleRedirectInsert.ts
704
- var import_canvas_next_rsc_shared8 = require("@uniformdev/canvas-next-rsc-shared");
623
+ var import_canvas_next_rsc_shared6 = require("@uniformdev/canvas-next-rsc-shared");
705
624
  var import_webhooks9 = require("@uniformdev/webhooks");
706
625
  var handleRedirectInsert = async (body) => {
707
626
  var _a;
@@ -709,7 +628,7 @@ var handleRedirectInsert = async (body) => {
709
628
  if (!parsed.success) {
710
629
  return void 0;
711
630
  }
712
- const config = (0, import_canvas_next_rsc_shared8.getServerConfig)();
631
+ const config = (0, import_canvas_next_rsc_shared6.getServerConfig)();
713
632
  if ((_a = config.experimental) == null ? void 0 : _a.edgeRedirects) {
714
633
  await processEdgeConfigChange(parsed.data);
715
634
  }
@@ -717,7 +636,7 @@ var handleRedirectInsert = async (body) => {
717
636
  };
718
637
 
719
638
  // src/handler/messages/handleRedirectUpdate.ts
720
- var import_canvas_next_rsc_shared9 = require("@uniformdev/canvas-next-rsc-shared");
639
+ var import_canvas_next_rsc_shared7 = require("@uniformdev/canvas-next-rsc-shared");
721
640
  var import_webhooks10 = require("@uniformdev/webhooks");
722
641
  var handleRedirectUpdate = async (body) => {
723
642
  var _a;
@@ -725,7 +644,7 @@ var handleRedirectUpdate = async (body) => {
725
644
  if (!parsed.success) {
726
645
  return void 0;
727
646
  }
728
- const config = (0, import_canvas_next_rsc_shared9.getServerConfig)();
647
+ const config = (0, import_canvas_next_rsc_shared7.getServerConfig)();
729
648
  if ((_a = config.experimental) == null ? void 0 : _a.edgeRedirects) {
730
649
  await processEdgeConfigChange(parsed.data);
731
650
  }
@@ -737,7 +656,7 @@ var createPreviewPOSTRouteHandler = () => {
737
656
  return async (request) => {
738
657
  let previewSecretPassed = false;
739
658
  if (process.env.UNIFORM_PREVIEW_SECRET) {
740
- const secretValue = request.nextUrl.searchParams.get(import_canvas7.SECRET_QUERY_STRING_PARAM);
659
+ const secretValue = request.nextUrl.searchParams.get(import_canvas5.SECRET_QUERY_STRING_PARAM);
741
660
  if (secretValue !== process.env.UNIFORM_PREVIEW_SECRET) {
742
661
  console.warn(
743
662
  "The preview secret passed in the query string does not match the UNIFORM_PREVIEW_SECRET env var."
package/dist/handler.mjs CHANGED
@@ -1,92 +1,150 @@
1
1
  // src/handler/createPreviewGETRouteHandler.ts
2
2
  import {
3
- CANVAS_DRAFT_STATE as CANVAS_DRAFT_STATE2,
4
3
  IN_CONTEXT_EDITOR_PLAYGROUND_QUERY_STRING_PARAM,
5
- IN_CONTEXT_EDITOR_QUERY_STRING_PARAM as IN_CONTEXT_EDITOR_QUERY_STRING_PARAM2
4
+ IN_CONTEXT_EDITOR_QUERY_STRING_PARAM,
5
+ isAllowedReferrer,
6
+ SECRET_QUERY_STRING_PARAM
6
7
  } from "@uniformdev/canvas";
7
- import { draftMode as draftMode2 } from "next/headers";
8
- import { redirect } from "next/navigation";
9
-
10
- // src/utils/route.ts
11
- import {
12
- CANVAS_DRAFT_STATE,
13
- CANVAS_EDITOR_STATE,
14
- CANVAS_PUBLISHED_STATE
15
- } from "@uniformdev/canvas";
16
- import { getBaseUrl, getServerConfig as getServerConfig2, resolvePath } from "@uniformdev/canvas-next-rsc-shared";
17
- import { getTargetVariableExpandedUrl } from "@uniformdev/redirect";
18
-
19
- // src/clients/canvasClient.ts
20
- import { CanvasClient } from "@uniformdev/canvas";
21
-
22
- // src/config/helpers.ts
23
- import { getServerConfig } from "@uniformdev/canvas-next-rsc-shared";
24
-
25
- // src/utils/draft.ts
26
- import { IN_CONTEXT_EDITOR_QUERY_STRING_PARAM } from "@uniformdev/canvas";
27
8
  import { draftMode } from "next/headers";
28
- var isDraftModeEnabled = ({
29
- searchParams
30
- }) => {
31
- if (isDevelopmentEnvironment()) {
32
- return isIncontextEditingEnabled({ searchParams });
33
- }
34
- let draftModeEnabled = false;
35
- try {
36
- draftModeEnabled = draftMode().isEnabled;
37
- } catch (e) {
9
+ import { redirect } from "next/navigation";
10
+ var BASE_URL_EXAMPLE = "https://example.com";
11
+ var getQueryParam = (req, paramName) => {
12
+ const value = req.nextUrl.searchParams.get(paramName);
13
+ if (typeof value === "undefined") {
14
+ return void 0;
38
15
  }
39
- return draftModeEnabled || isIncontextEditingEnabled({ searchParams });
40
- };
41
- var isIncontextEditingEnabled = ({
42
- searchParams
43
- }) => {
44
- const containsKey = typeof (searchParams == null ? void 0 : searchParams[IN_CONTEXT_EDITOR_QUERY_STRING_PARAM]) !== "undefined";
45
- return containsKey;
46
- };
47
- var isOnVercelPreviewEnvironment = () => {
48
- return process.env.VERCEL_ENV === "preview";
49
- };
50
- var isDevelopmentEnvironment = () => {
51
- return process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test";
16
+ return Array.isArray(value) ? value[0] : value;
52
17
  };
53
-
54
- // src/config/helpers.ts
55
- var shouldCacheBeDisabled = (options) => {
56
- if (isDraftModeEnabled(options)) {
57
- return { disabled: true, reason: "DRAFT" };
58
- }
59
- if (isIncontextEditingEnabled(options)) {
60
- return { disabled: true, reason: "INCONTEXT" };
61
- }
62
- if (isDevelopmentEnvironment()) {
63
- return { disabled: true, reason: "DEV" };
64
- }
65
- return {
66
- disabled: false,
67
- reason: void 0
18
+ var contextualEditingQueryParams = [
19
+ IN_CONTEXT_EDITOR_QUERY_STRING_PARAM,
20
+ IN_CONTEXT_EDITOR_PLAYGROUND_QUERY_STRING_PARAM
21
+ ];
22
+ var createPreviewGETRouteHandler = (options) => {
23
+ return async (request) => {
24
+ const isConfigCheck = getQueryParam(request, "is_config_check") === "true";
25
+ if (isConfigCheck) {
26
+ return Response.json(
27
+ {
28
+ hasPlayground: Boolean(options == null ? void 0 : options.playgroundPath),
29
+ isUsingCustomFullPathResolver: false
30
+ },
31
+ {
32
+ headers: {
33
+ "Access-Control-Allow-Origin": process.env.UNIFORM_CLI_BASE_URL || "https://uniform.app"
34
+ }
35
+ }
36
+ );
37
+ }
38
+ if (request.headers.get("sec-fetch-mode") === "no-cors") {
39
+ return new Response(null, { status: 204 });
40
+ }
41
+ if (!process.env.UNIFORM_PREVIEW_SECRET) {
42
+ return new Response("No preview secret is configured", { status: 401 });
43
+ }
44
+ const { searchParams } = new URL(request.url);
45
+ const isPlayground = searchParams.get(IN_CONTEXT_EDITOR_PLAYGROUND_QUERY_STRING_PARAM) === "true";
46
+ let pathToRedirectTo;
47
+ if (isPlayground) {
48
+ if (!(options == null ? void 0 : options.playgroundPath)) {
49
+ return new Response("No playground path is configured", { status: 401 });
50
+ }
51
+ pathToRedirectTo = options.playgroundPath;
52
+ }
53
+ const id = getQueryParam(request, compositionQueryParam.id);
54
+ const slug = getQueryParam(request, compositionQueryParam.slug);
55
+ const path = getQueryParam(request, compositionQueryParam.path);
56
+ const locale = getQueryParam(request, compositionQueryParam.locale);
57
+ const disable = getQueryParam(request, "disable");
58
+ const secret = getQueryParam(request, SECRET_QUERY_STRING_PARAM);
59
+ const referer = request.headers.get("referer");
60
+ const isUniformContextualEditing = getQueryParam(request, IN_CONTEXT_EDITOR_QUERY_STRING_PARAM) === "true" && isAllowedReferrer(referer || void 0);
61
+ if (typeof pathToRedirectTo === "undefined") {
62
+ const resolveFullPath = (options == null ? void 0 : options.resolveFullPath) || resolveFullPathDefault;
63
+ pathToRedirectTo = resolveFullPath({ id, slug, path, locale });
64
+ }
65
+ validateLocalRedirectUrl(pathToRedirectTo);
66
+ if (!pathToRedirectTo) {
67
+ return new Response("Could not resolve the full path of the preview page", { status: 400 });
68
+ }
69
+ if (disable) {
70
+ draftMode().disable();
71
+ redirect(pathToRedirectTo);
72
+ return;
73
+ }
74
+ if (secret !== process.env.UNIFORM_PREVIEW_SECRET) {
75
+ return new Response("Invalid preview secret", { status: 401 });
76
+ }
77
+ draftMode().enable();
78
+ const redirectionUrl = new URL(pathToRedirectTo, BASE_URL_EXAMPLE);
79
+ assignRequestQueryToSearchParams(redirectionUrl.searchParams, searchParams);
80
+ if (isPlayground) {
81
+ redirectionUrl.searchParams.set("id", searchParams.get("id") || "");
82
+ }
83
+ if (!isUniformContextualEditing) {
84
+ contextualEditingQueryParams.forEach((param) => {
85
+ redirectionUrl.searchParams.delete(param);
86
+ });
87
+ }
88
+ const fullPathToRedirectTo = redirectionUrl.href.replace(BASE_URL_EXAMPLE, "");
89
+ redirect(fullPathToRedirectTo);
68
90
  };
69
91
  };
70
- var getCanvasCacheStrategy = (options) => {
71
- const { disabled, reason } = shouldCacheBeDisabled(options);
72
- const config = getServerConfig();
73
- if (disabled) {
74
- if (reason === "DEV" && config.canvasCache) {
75
- console.warn("Canvas cache (disabled) has been overridden by canvasCache config.");
76
- return config.canvasCache;
92
+ function validateLocalRedirectUrl(pathToRedirectTo) {
93
+ if (pathToRedirectTo == null ? void 0 : pathToRedirectTo.match(/^[a-z]+:\/\//g)) {
94
+ throw new Error("Tried to redirect to absolute URL with protocol. Disallowing open redirect.");
95
+ }
96
+ }
97
+ var resolveFullPathDefault = ({ slug, path }) => {
98
+ return path || slug;
99
+ };
100
+ var compositionQueryParam = {
101
+ id: "id",
102
+ slug: "slug",
103
+ path: "path",
104
+ locale: "locale"
105
+ };
106
+ var assignRequestQueryToSearchParams = (searchParams, query) => {
107
+ const compositionQueryParamNames = Object.values(compositionQueryParam);
108
+ for (const [name, value] of query.entries()) {
109
+ if (name === SECRET_QUERY_STRING_PARAM) {
110
+ continue;
77
111
  }
78
- return {
79
- type: "no-cache"
80
- };
81
- }
82
- if (config.canvasCache) {
83
- return config.canvasCache;
112
+ if (compositionQueryParamNames.includes(name)) {
113
+ continue;
114
+ }
115
+ if (typeof value === "undefined") {
116
+ continue;
117
+ }
118
+ searchParams.append(name, value);
84
119
  }
85
- return {
86
- type: "force-cache"
120
+ };
121
+
122
+ // src/handler/createPreviewOPTIONSRouteHandler.ts
123
+ var createPreviewOPTIONSRouteHandler = () => {
124
+ return async () => {
125
+ return new Response(null, {
126
+ headers: {
127
+ "Access-Control-Allow-Origin": process.env.UNIFORM_CLI_BASE_URL || "https://uniform.app",
128
+ "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
129
+ "Access-Control-Allow-Headers": "*"
130
+ }
131
+ });
87
132
  };
88
133
  };
89
134
 
135
+ // src/handler/createPreviewPOSTRouteHandler.ts
136
+ import { SECRET_QUERY_STRING_PARAM as SECRET_QUERY_STRING_PARAM2 } from "@uniformdev/canvas";
137
+ import { revalidateTag } from "next/cache";
138
+
139
+ // src/handler/helpers.ts
140
+ import { ApiClientError } from "@uniformdev/canvas";
141
+ import { getServerConfig } from "@uniformdev/canvas-next-rsc-shared";
142
+ import { parseConnectionString } from "@vercel/edge-config";
143
+ import { Webhook } from "svix";
144
+
145
+ // src/clients/canvasClient.ts
146
+ import { CanvasClient } from "@uniformdev/canvas";
147
+
90
148
  // src/env/index.ts
91
149
  var env = {
92
150
  getProjectId: () => {
@@ -176,6 +234,31 @@ var getCanvasClient = (options) => {
176
234
  });
177
235
  };
178
236
 
237
+ // src/clients/projectMapClient.ts
238
+ import { ProjectMapClient } from "@uniformdev/project-map";
239
+ var getProjectMapClient = (options) => {
240
+ const manifestClient = new ProjectMapClient({
241
+ apiHost: env.getApiHost(),
242
+ apiKey: env.getApiKey(),
243
+ projectId: env.getProjectId(),
244
+ fetch: (req, init) => {
245
+ const { cache, revalidate } = determineFetchCacheOptions(options.cache);
246
+ return fetch(req, {
247
+ ...init,
248
+ headers: {
249
+ ...init == null ? void 0 : init.headers,
250
+ "x-bypass-cache": "true"
251
+ },
252
+ cache,
253
+ next: {
254
+ revalidate
255
+ }
256
+ });
257
+ }
258
+ });
259
+ return manifestClient;
260
+ };
261
+
179
262
  // src/clients/routeClient.ts
180
263
  import { RouteClient } from "@uniformdev/canvas";
181
264
  var getRouteClient = (options) => {
@@ -222,173 +305,6 @@ var getRouteClient = (options) => {
222
305
  });
223
306
  return client;
224
307
  };
225
- var getDefaultRouteClient = ({ searchParams }) => {
226
- return getRouteClient({
227
- cache: getCanvasCacheStrategy({
228
- searchParams
229
- })
230
- });
231
- };
232
-
233
- // src/utils/route.ts
234
- var retrieveRouteByPath = async ({
235
- path,
236
- state,
237
- searchParams,
238
- fetchOptions
239
- }) => {
240
- var _a;
241
- const client = getDefaultRouteClient({
242
- searchParams
243
- });
244
- let queryPath = path;
245
- if (searchParams && Object.keys(searchParams).length > 0) {
246
- const helper = new URL(getBaseUrl());
247
- helper.pathname = path;
248
- Object.entries(searchParams).forEach(([key, value]) => {
249
- if (typeof value === "string") {
250
- helper.searchParams.set(key, value);
251
- }
252
- });
253
- if (helper.searchParams.size > 0) {
254
- queryPath = `${helper.pathname}${helper.search}`;
255
- }
256
- }
257
- return await client.getRoute({
258
- ...fetchOptions,
259
- path: queryPath,
260
- state,
261
- withComponentIDs: true,
262
- withContentSourceMap: isOnVercelPreviewEnvironment() && ((_a = getServerConfig2().experimental) == null ? void 0 : _a.vercelVisualEditing)
263
- });
264
- };
265
- var resolveRedirectHref = (resolveResult, path) => {
266
- const requestUrl = `${getBaseUrl()}${path}`;
267
- const expandedUrl = getTargetVariableExpandedUrl(requestUrl, resolveResult.redirect);
268
- const url = new URL(expandedUrl);
269
- return url.pathname;
270
- };
271
-
272
- // src/handler/createPreviewGETRouteHandler.ts
273
- var getQueryParam = (req, paramName) => {
274
- const value = req.nextUrl.searchParams.get(paramName);
275
- if (typeof value === "undefined") {
276
- return void 0;
277
- }
278
- return Array.isArray(value) ? value[0] : value;
279
- };
280
- var createPreviewGETRouteHandler = (options) => {
281
- return async (request) => {
282
- const isConfigCheck = getQueryParam(request, "is_config_check") === "true";
283
- if (isConfigCheck) {
284
- return Response.json(
285
- {
286
- hasPlayground: Boolean(options == null ? void 0 : options.playgroundPath),
287
- isUsingCustomFullPathResolver: false
288
- },
289
- {
290
- headers: {
291
- "Access-Control-Allow-Origin": process.env.UNIFORM_CLI_BASE_URL || "https://uniform.app"
292
- }
293
- }
294
- );
295
- }
296
- if (request.headers.get("sec-fetch-mode") === "no-cors") {
297
- return new Response(null, { status: 204 });
298
- }
299
- if (!process.env.UNIFORM_PREVIEW_SECRET) {
300
- return new Response("No preview secret is configured", { status: 401 });
301
- }
302
- const { searchParams } = new URL(request.url);
303
- const secret = searchParams.get("secret");
304
- const path = searchParams.get("path");
305
- const isPlayground = searchParams.get(IN_CONTEXT_EDITOR_PLAYGROUND_QUERY_STRING_PARAM) === "true";
306
- const id = searchParams.get("id");
307
- if (secret !== process.env.UNIFORM_PREVIEW_SECRET) {
308
- return new Response("Invalid preview secret", { status: 401 });
309
- }
310
- if (!isPlayground) {
311
- if (!path) {
312
- return new Response("Path not provided", { status: 401 });
313
- }
314
- const resolveResult = await retrieveRouteByPath({
315
- path,
316
- state: CANVAS_DRAFT_STATE2,
317
- searchParams: {
318
- // about to be in draft mode so pretend for now.
319
- [IN_CONTEXT_EDITOR_QUERY_STRING_PARAM2]: "true"
320
- }
321
- });
322
- draftMode2().enable();
323
- if (resolveResult.type === "redirect") {
324
- const href = resolveRedirectHref(resolveResult, path);
325
- if (resolveResult.redirect.targetProjectMapNodeId) {
326
- redirect(`${href}?${IN_CONTEXT_EDITOR_QUERY_STRING_PARAM2}=true`);
327
- } else {
328
- redirect(href);
329
- }
330
- }
331
- if (resolveResult.type === "notFound") {
332
- return new Response("Invalid path", { status: 401 });
333
- }
334
- redirect(`${path}?${IN_CONTEXT_EDITOR_QUERY_STRING_PARAM2}=true`);
335
- } else {
336
- if (!(options == null ? void 0 : options.playgroundPath)) {
337
- return new Response("No playground path is configured", { status: 401 });
338
- }
339
- draftMode2().enable();
340
- redirect(`${options.playgroundPath}?id=${id}&${IN_CONTEXT_EDITOR_QUERY_STRING_PARAM2}=true`);
341
- }
342
- };
343
- };
344
-
345
- // src/handler/createPreviewOPTIONSRouteHandler.ts
346
- var createPreviewOPTIONSRouteHandler = () => {
347
- return async () => {
348
- return new Response(null, {
349
- headers: {
350
- "Access-Control-Allow-Origin": process.env.UNIFORM_CLI_BASE_URL || "https://uniform.app",
351
- "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
352
- "Access-Control-Allow-Headers": "*"
353
- }
354
- });
355
- };
356
- };
357
-
358
- // src/handler/createPreviewPOSTRouteHandler.ts
359
- import { SECRET_QUERY_STRING_PARAM } from "@uniformdev/canvas";
360
- import { revalidateTag } from "next/cache";
361
-
362
- // src/handler/helpers.ts
363
- import { ApiClientError } from "@uniformdev/canvas";
364
- import { getServerConfig as getServerConfig3 } from "@uniformdev/canvas-next-rsc-shared";
365
- import { parseConnectionString } from "@vercel/edge-config";
366
- import { Webhook } from "svix";
367
-
368
- // src/clients/projectMapClient.ts
369
- import { ProjectMapClient } from "@uniformdev/project-map";
370
- var getProjectMapClient = (options) => {
371
- const manifestClient = new ProjectMapClient({
372
- apiHost: env.getApiHost(),
373
- apiKey: env.getApiKey(),
374
- projectId: env.getProjectId(),
375
- fetch: (req, init) => {
376
- const { cache, revalidate } = determineFetchCacheOptions(options.cache);
377
- return fetch(req, {
378
- ...init,
379
- headers: {
380
- ...init == null ? void 0 : init.headers,
381
- "x-bypass-cache": "true"
382
- },
383
- cache,
384
- next: {
385
- revalidate
386
- }
387
- });
388
- }
389
- });
390
- return manifestClient;
391
- };
392
308
 
393
309
  // src/handler/helpers.ts
394
310
  var isSvixMessage = async (request) => {
@@ -508,7 +424,7 @@ var processEdgeConfigChange = async ({ source_url }) => {
508
424
  console.warn("UNIFORM_VERCEL_EDGE_CONFIG_TOKEN is not set, skipping edge redirect upsert");
509
425
  return;
510
426
  }
511
- const config = getServerConfig3();
427
+ const config = getServerConfig();
512
428
  const routeClient = getRouteClient({
513
429
  cache: {
514
430
  type: "no-cache"
@@ -598,7 +514,7 @@ var handleManifestPublished = async (body) => {
598
514
  };
599
515
 
600
516
  // src/handler/messages/handleProjectMapNodeDelete.ts
601
- import { getServerConfig as getServerConfig4 } from "@uniformdev/canvas-next-rsc-shared";
517
+ import { getServerConfig as getServerConfig2 } from "@uniformdev/canvas-next-rsc-shared";
602
518
  import { ProjectMapNodeDeleteDefinition } from "@uniformdev/webhooks";
603
519
  var handleProjectMapNodeDelete = async (body) => {
604
520
  var _a;
@@ -608,7 +524,7 @@ var handleProjectMapNodeDelete = async (body) => {
608
524
  }
609
525
  const tags = [];
610
526
  tags.push(...buildProjectMapNodePaths(parsed.data.path));
611
- const config = getServerConfig4();
527
+ const config = getServerConfig2();
612
528
  if ((_a = config.experimental) == null ? void 0 : _a.edgeCompositions) {
613
529
  await processEdgeConfigChange({
614
530
  source_url: parsed.data.path
@@ -620,7 +536,7 @@ var handleProjectMapNodeDelete = async (body) => {
620
536
  };
621
537
 
622
538
  // src/handler/messages/handleProjectMapNodeInsert.ts
623
- import { getServerConfig as getServerConfig5 } from "@uniformdev/canvas-next-rsc-shared";
539
+ import { getServerConfig as getServerConfig3 } from "@uniformdev/canvas-next-rsc-shared";
624
540
  import { ProjectMapNodeInsertDefinition } from "@uniformdev/webhooks";
625
541
  var handleProjectMapNodeInsert = async (body) => {
626
542
  var _a;
@@ -630,7 +546,7 @@ var handleProjectMapNodeInsert = async (body) => {
630
546
  }
631
547
  const tags = [];
632
548
  tags.push(...buildProjectMapNodePaths(parsed.data.path));
633
- const config = getServerConfig5();
549
+ const config = getServerConfig3();
634
550
  if ((_a = config.experimental) == null ? void 0 : _a.edgeCompositions) {
635
551
  await processEdgeConfigChange({
636
552
  source_url: parsed.data.path
@@ -642,7 +558,7 @@ var handleProjectMapNodeInsert = async (body) => {
642
558
  };
643
559
 
644
560
  // src/handler/messages/handleProjectMapNodeUpdate.ts
645
- import { getServerConfig as getServerConfig6 } from "@uniformdev/canvas-next-rsc-shared";
561
+ import { getServerConfig as getServerConfig4 } from "@uniformdev/canvas-next-rsc-shared";
646
562
  import { ProjectMapNodeUpdateDefinition } from "@uniformdev/webhooks";
647
563
  var handleProjectMapNodeUpdate = async (body) => {
648
564
  var _a;
@@ -653,7 +569,7 @@ var handleProjectMapNodeUpdate = async (body) => {
653
569
  const tags = [];
654
570
  tags.push(...buildProjectMapNodePaths(parsed.data.path));
655
571
  tags.push(...buildProjectMapNodePaths(parsed.data.previous_path));
656
- const config = getServerConfig6();
572
+ const config = getServerConfig4();
657
573
  if ((_a = config.experimental) == null ? void 0 : _a.edgeCompositions) {
658
574
  await processEdgeConfigChange({
659
575
  source_url: parsed.data.path
@@ -665,7 +581,7 @@ var handleProjectMapNodeUpdate = async (body) => {
665
581
  };
666
582
 
667
583
  // src/handler/messages/handleRedirectDelete.ts
668
- import { getServerConfig as getServerConfig7 } from "@uniformdev/canvas-next-rsc-shared";
584
+ import { getServerConfig as getServerConfig5 } from "@uniformdev/canvas-next-rsc-shared";
669
585
  import { RedirectDeleteDefinition } from "@uniformdev/webhooks";
670
586
  var handleRedirectDelete = async (body) => {
671
587
  var _a;
@@ -673,7 +589,7 @@ var handleRedirectDelete = async (body) => {
673
589
  if (!parsed.success) {
674
590
  return void 0;
675
591
  }
676
- const config = getServerConfig7();
592
+ const config = getServerConfig5();
677
593
  if ((_a = config.experimental) == null ? void 0 : _a.edgeRedirects) {
678
594
  await processEdgeConfigChange(parsed.data);
679
595
  }
@@ -681,7 +597,7 @@ var handleRedirectDelete = async (body) => {
681
597
  };
682
598
 
683
599
  // src/handler/messages/handleRedirectInsert.ts
684
- import { getServerConfig as getServerConfig8 } from "@uniformdev/canvas-next-rsc-shared";
600
+ import { getServerConfig as getServerConfig6 } from "@uniformdev/canvas-next-rsc-shared";
685
601
  import { RedirectInsertDefinition } from "@uniformdev/webhooks";
686
602
  var handleRedirectInsert = async (body) => {
687
603
  var _a;
@@ -689,7 +605,7 @@ var handleRedirectInsert = async (body) => {
689
605
  if (!parsed.success) {
690
606
  return void 0;
691
607
  }
692
- const config = getServerConfig8();
608
+ const config = getServerConfig6();
693
609
  if ((_a = config.experimental) == null ? void 0 : _a.edgeRedirects) {
694
610
  await processEdgeConfigChange(parsed.data);
695
611
  }
@@ -697,7 +613,7 @@ var handleRedirectInsert = async (body) => {
697
613
  };
698
614
 
699
615
  // src/handler/messages/handleRedirectUpdate.ts
700
- import { getServerConfig as getServerConfig9 } from "@uniformdev/canvas-next-rsc-shared";
616
+ import { getServerConfig as getServerConfig7 } from "@uniformdev/canvas-next-rsc-shared";
701
617
  import { RedirectUpdateDefinition } from "@uniformdev/webhooks";
702
618
  var handleRedirectUpdate = async (body) => {
703
619
  var _a;
@@ -705,7 +621,7 @@ var handleRedirectUpdate = async (body) => {
705
621
  if (!parsed.success) {
706
622
  return void 0;
707
623
  }
708
- const config = getServerConfig9();
624
+ const config = getServerConfig7();
709
625
  if ((_a = config.experimental) == null ? void 0 : _a.edgeRedirects) {
710
626
  await processEdgeConfigChange(parsed.data);
711
627
  }
@@ -717,7 +633,7 @@ var createPreviewPOSTRouteHandler = () => {
717
633
  return async (request) => {
718
634
  let previewSecretPassed = false;
719
635
  if (process.env.UNIFORM_PREVIEW_SECRET) {
720
- const secretValue = request.nextUrl.searchParams.get(SECRET_QUERY_STRING_PARAM);
636
+ const secretValue = request.nextUrl.searchParams.get(SECRET_QUERY_STRING_PARAM2);
721
637
  if (secretValue !== process.env.UNIFORM_PREVIEW_SECRET) {
722
638
  console.warn(
723
639
  "The preview secret passed in the query string does not match the UNIFORM_PREVIEW_SECRET env var."
package/dist/index.esm.js CHANGED
@@ -551,8 +551,8 @@ var determineState = ({ searchParams }) => {
551
551
  // src/components/ContextUpdateTrigger.tsx
552
552
  import { ClientContextUpdate } from "@uniformdev/canvas-next-rsc-client";
553
553
  import React2 from "react";
554
- var ContextUpdateTrigger = () => {
555
- return /* @__PURE__ */ React2.createElement(ClientContextUpdate, null);
554
+ var ContextUpdateTrigger = ({ path }) => {
555
+ return /* @__PURE__ */ React2.createElement(ClientContextUpdate, { path });
556
556
  };
557
557
 
558
558
  // src/components/PersonalizeClientWrapper.tsx
@@ -703,7 +703,9 @@ var UniformComposition = async ({
703
703
  }
704
704
  });
705
705
  } else if (props.mode === "static") {
706
- transfer = createElement3(ContextUpdateTrigger);
706
+ transfer = createElement3(ContextUpdateTrigger, {
707
+ path
708
+ });
707
709
  }
708
710
  return createElement3(Fragment3, void 0, transfer, resolved);
709
711
  };
package/dist/index.js CHANGED
@@ -589,8 +589,8 @@ var determineState = ({ searchParams }) => {
589
589
  // src/components/ContextUpdateTrigger.tsx
590
590
  var import_canvas_next_rsc_client2 = require("@uniformdev/canvas-next-rsc-client");
591
591
  var import_react2 = __toESM(require("react"));
592
- var ContextUpdateTrigger = () => {
593
- return /* @__PURE__ */ import_react2.default.createElement(import_canvas_next_rsc_client2.ClientContextUpdate, null);
592
+ var ContextUpdateTrigger = ({ path }) => {
593
+ return /* @__PURE__ */ import_react2.default.createElement(import_canvas_next_rsc_client2.ClientContextUpdate, { path });
594
594
  };
595
595
 
596
596
  // src/components/PersonalizeClientWrapper.tsx
@@ -739,7 +739,9 @@ var UniformComposition = async ({
739
739
  }
740
740
  });
741
741
  } else if (props.mode === "static") {
742
- transfer = (0, import_react8.createElement)(ContextUpdateTrigger);
742
+ transfer = (0, import_react8.createElement)(ContextUpdateTrigger, {
743
+ path
744
+ });
743
745
  }
744
746
  return (0, import_react8.createElement)(import_react8.Fragment, void 0, transfer, resolved);
745
747
  };
package/dist/index.mjs CHANGED
@@ -551,8 +551,8 @@ var determineState = ({ searchParams }) => {
551
551
  // src/components/ContextUpdateTrigger.tsx
552
552
  import { ClientContextUpdate } from "@uniformdev/canvas-next-rsc-client";
553
553
  import React2 from "react";
554
- var ContextUpdateTrigger = () => {
555
- return /* @__PURE__ */ React2.createElement(ClientContextUpdate, null);
554
+ var ContextUpdateTrigger = ({ path }) => {
555
+ return /* @__PURE__ */ React2.createElement(ClientContextUpdate, { path });
556
556
  };
557
557
 
558
558
  // src/components/PersonalizeClientWrapper.tsx
@@ -703,7 +703,9 @@ var UniformComposition = async ({
703
703
  }
704
704
  });
705
705
  } else if (props.mode === "static") {
706
- transfer = createElement3(ContextUpdateTrigger);
706
+ transfer = createElement3(ContextUpdateTrigger, {
707
+ path
708
+ });
707
709
  }
708
710
  return createElement3(Fragment3, void 0, transfer, resolved);
709
711
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/canvas-next-rsc",
3
- "version": "19.121.0",
3
+ "version": "19.121.1-alpha.3+7d8c709610",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "scripts": {
6
6
  "build": "tsup",
@@ -61,15 +61,15 @@
61
61
  "react-dom": "18.2.0"
62
62
  },
63
63
  "dependencies": {
64
- "@uniformdev/canvas": "19.121.0",
65
- "@uniformdev/canvas-next-rsc-client": "^19.121.0",
66
- "@uniformdev/canvas-next-rsc-shared": "^19.121.0",
67
- "@uniformdev/canvas-react": "19.121.0",
68
- "@uniformdev/context": "19.121.0",
69
- "@uniformdev/project-map": "19.121.0",
70
- "@uniformdev/redirect": "19.121.0",
71
- "@uniformdev/richtext": "19.121.0",
72
- "@uniformdev/webhooks": "19.121.0",
64
+ "@uniformdev/canvas": "19.121.1-alpha.3+7d8c709610",
65
+ "@uniformdev/canvas-next-rsc-client": "^19.121.1-alpha.3+7d8c709610",
66
+ "@uniformdev/canvas-next-rsc-shared": "^19.121.1-alpha.3+7d8c709610",
67
+ "@uniformdev/canvas-react": "19.121.1-alpha.3+7d8c709610",
68
+ "@uniformdev/context": "19.121.1-alpha.3+7d8c709610",
69
+ "@uniformdev/project-map": "19.121.1-alpha.3+7d8c709610",
70
+ "@uniformdev/redirect": "19.121.1-alpha.3+7d8c709610",
71
+ "@uniformdev/richtext": "19.121.1-alpha.3+7d8c709610",
72
+ "@uniformdev/webhooks": "19.121.1-alpha.3+7d8c709610",
73
73
  "@vercel/edge-config": "^0.4.0",
74
74
  "encoding": "^0.1.13",
75
75
  "server-only": "^0.0.1",
@@ -86,5 +86,5 @@
86
86
  "publishConfig": {
87
87
  "access": "public"
88
88
  },
89
- "gitHead": "4bab305415aa38c7d473a08c15bcd78fcb7d8d88"
89
+ "gitHead": "7d8c70961033e6ec47b7f8874b5e49b224367cf5"
90
90
  }