@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.
- package/dist/handler.d.mts +12 -1
- package/dist/handler.d.ts +12 -1
- package/dist/handler.js +170 -251
- package/dist/handler.mjs +172 -256
- package/dist/index.esm.js +5 -3
- package/dist/index.js +5 -3
- package/dist/index.mjs +5 -3
- package/package.json +11 -11
package/dist/handler.d.mts
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.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
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
135
|
+
if (compositionQueryParamNames.includes(name)) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (typeof value === "undefined") {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
searchParams.append(name, value);
|
|
104
142
|
}
|
|
105
|
-
|
|
106
|
-
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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(
|
|
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
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
112
|
+
if (compositionQueryParamNames.includes(name)) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (typeof value === "undefined") {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
searchParams.append(name, value);
|
|
84
119
|
}
|
|
85
|
-
|
|
86
|
-
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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(
|
|
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,
|
|
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,
|
|
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,
|
|
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.
|
|
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.
|
|
65
|
-
"@uniformdev/canvas-next-rsc-client": "^19.121.
|
|
66
|
-
"@uniformdev/canvas-next-rsc-shared": "^19.121.
|
|
67
|
-
"@uniformdev/canvas-react": "19.121.
|
|
68
|
-
"@uniformdev/context": "19.121.
|
|
69
|
-
"@uniformdev/project-map": "19.121.
|
|
70
|
-
"@uniformdev/redirect": "19.121.
|
|
71
|
-
"@uniformdev/richtext": "19.121.
|
|
72
|
-
"@uniformdev/webhooks": "19.121.
|
|
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": "
|
|
89
|
+
"gitHead": "7d8c70961033e6ec47b7f8874b5e49b224367cf5"
|
|
90
90
|
}
|