@amplifyup/sdk 0.1.32 → 0.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/AmplifyRenderer.d.mts +1 -1
- package/dist/AmplifyRenderer.d.ts +1 -1
- package/dist/AmplifyRenderer.js +42 -9
- package/dist/AmplifyRenderer.js.map +1 -1
- package/dist/AmplifyRenderer.mjs +42 -9
- package/dist/AmplifyRenderer.mjs.map +1 -1
- package/dist/index.d.mts +14 -3
- package/dist/index.d.ts +14 -3
- package/dist/index.js +74 -14
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +74 -15
- package/dist/index.mjs.map +1 -1
- package/dist/middleware.d.mts +22 -0
- package/dist/middleware.d.ts +22 -0
- package/dist/middleware.js +198 -0
- package/dist/middleware.js.map +1 -0
- package/dist/middleware.mjs +193 -0
- package/dist/middleware.mjs.map +1 -0
- package/dist/{preview-BMrIgUvp.d.mts → preview-_vHmzRen.d.mts} +6 -1
- package/dist/{preview-BMrIgUvp.d.ts → preview-_vHmzRen.d.ts} +6 -1
- package/dist/react.d.mts +7 -4
- package/dist/react.d.ts +7 -4
- package/dist/react.js +124 -22
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +124 -23
- package/dist/react.mjs.map +1 -1
- package/dist/server.d.mts +41 -5
- package/dist/server.d.ts +41 -5
- package/dist/server.js +144 -11
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +139 -12
- package/dist/server.mjs.map +1 -1
- package/dist/{types-npF_lNoq.d.mts → types-CBoVIFI8.d.mts} +6 -0
- package/dist/{types-npF_lNoq.d.ts → types-CBoVIFI8.d.ts} +6 -0
- package/package.json +6 -1
package/dist/server.d.mts
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import { f as AmplifyUpTarget, P as PageConfig, A as AmplifyContentMeta } from './types-
|
|
2
|
-
export { r as resolveAmplifyUpTarget, g as resolveAmplifyUpUrls } from './types-
|
|
1
|
+
import { f as AmplifyUpTarget, P as PageConfig, A as AmplifyContentMeta } from './types-CBoVIFI8.mjs';
|
|
2
|
+
export { r as resolveAmplifyUpTarget, g as resolveAmplifyUpUrls } from './types-CBoVIFI8.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Compact variant-key codec for URLs and Edge `variants` query params.
|
|
6
|
+
* Default variants are omitted so equivalent assignments share one cache entry.
|
|
7
|
+
*/
|
|
8
|
+
declare function serializeVariantKeys(keys: Record<string, string> | null | undefined): string;
|
|
9
|
+
declare function parseVariantKeys(raw: string | null | undefined): Record<string, string>;
|
|
10
|
+
declare function isDefaultVariantKeys(keys: Record<string, string> | null | undefined): boolean;
|
|
3
11
|
|
|
4
12
|
/**
|
|
5
13
|
* Server-side utilities for AmplifyUp SDK
|
|
6
14
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
15
|
+
* Production: SSG at build (Edge /v1/routes + /v1/resolve), then ISR for
|
|
16
|
+
* unknown routes (SSR once → static). Composer preview stays dynamic.
|
|
9
17
|
*/
|
|
10
18
|
|
|
19
|
+
/** Default ISR window for published Edge pages (seconds). */
|
|
20
|
+
declare const AMPLIFY_DEFAULT_REVALIDATE = 60;
|
|
11
21
|
/**
|
|
12
22
|
* Fetch page configuration on the server.
|
|
13
23
|
* Production visitors resolve via Edge; Composer preview uses the orchestrator.
|
|
@@ -23,6 +33,10 @@ declare function fetchPageConfigServer(route: string, trackingId: string, previe
|
|
|
23
33
|
siteId?: string | null;
|
|
24
34
|
/** Raw search params — used to detect Composer preview when preview flag omitted. */
|
|
25
35
|
searchParams?: URLSearchParams | Record<string, string | string[] | undefined>;
|
|
36
|
+
/** Next.js ISR for Edge resolve. Ignored in preview. Default 60s. */
|
|
37
|
+
revalidate?: number | false;
|
|
38
|
+
/** Cacheable variant combo (personalized ISR). Do not pass anonId with this. */
|
|
39
|
+
variantKeys?: Record<string, string> | null;
|
|
26
40
|
}): Promise<PageConfig | null>;
|
|
27
41
|
/**
|
|
28
42
|
* Same as fetchPageConfigServer but also returns content source meta
|
|
@@ -34,10 +48,32 @@ declare function fetchContentServer(route: string, trackingId: string, options?:
|
|
|
34
48
|
anonId?: string | null;
|
|
35
49
|
siteId?: string | null;
|
|
36
50
|
searchParams?: URLSearchParams | Record<string, string | string[] | undefined>;
|
|
51
|
+
revalidate?: number | false;
|
|
52
|
+
variantKeys?: Record<string, string> | null;
|
|
37
53
|
}): Promise<{
|
|
38
54
|
pageConfig: PageConfig | null;
|
|
39
55
|
meta: AmplifyContentMeta | null;
|
|
40
56
|
error: string | null;
|
|
41
57
|
}>;
|
|
58
|
+
/**
|
|
59
|
+
* Published routes for a tracking id (Edge KV). Soft-fails to [] if Edge is down.
|
|
60
|
+
*/
|
|
61
|
+
declare function listPublishedRoutes(trackingId: string, options?: {
|
|
62
|
+
target?: AmplifyUpTarget;
|
|
63
|
+
siteId?: string | null;
|
|
64
|
+
}): Promise<string[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Use from Next.js `generateStaticParams` on a catch-all page.
|
|
67
|
+
* Always includes `/`. Soft-fails to home-only if Edge is unreachable at build.
|
|
68
|
+
*
|
|
69
|
+
* Skips the Edge route list during `next dev` unless `generateStaticPaths: true`.
|
|
70
|
+
*/
|
|
71
|
+
declare function generateAmplifyStaticParams(trackingId: string, options?: {
|
|
72
|
+
target?: AmplifyUpTarget;
|
|
73
|
+
siteId?: string | null;
|
|
74
|
+
generateStaticPaths?: boolean;
|
|
75
|
+
}): Promise<{
|
|
76
|
+
slug: string[];
|
|
77
|
+
}[]>;
|
|
42
78
|
|
|
43
|
-
export { fetchContentServer, fetchPageConfigServer };
|
|
79
|
+
export { AMPLIFY_DEFAULT_REVALIDATE, fetchContentServer, fetchPageConfigServer, generateAmplifyStaticParams, isDefaultVariantKeys, listPublishedRoutes, parseVariantKeys, serializeVariantKeys };
|
package/dist/server.d.ts
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import { f as AmplifyUpTarget, P as PageConfig, A as AmplifyContentMeta } from './types-
|
|
2
|
-
export { r as resolveAmplifyUpTarget, g as resolveAmplifyUpUrls } from './types-
|
|
1
|
+
import { f as AmplifyUpTarget, P as PageConfig, A as AmplifyContentMeta } from './types-CBoVIFI8.js';
|
|
2
|
+
export { r as resolveAmplifyUpTarget, g as resolveAmplifyUpUrls } from './types-CBoVIFI8.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Compact variant-key codec for URLs and Edge `variants` query params.
|
|
6
|
+
* Default variants are omitted so equivalent assignments share one cache entry.
|
|
7
|
+
*/
|
|
8
|
+
declare function serializeVariantKeys(keys: Record<string, string> | null | undefined): string;
|
|
9
|
+
declare function parseVariantKeys(raw: string | null | undefined): Record<string, string>;
|
|
10
|
+
declare function isDefaultVariantKeys(keys: Record<string, string> | null | undefined): boolean;
|
|
3
11
|
|
|
4
12
|
/**
|
|
5
13
|
* Server-side utilities for AmplifyUp SDK
|
|
6
14
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
15
|
+
* Production: SSG at build (Edge /v1/routes + /v1/resolve), then ISR for
|
|
16
|
+
* unknown routes (SSR once → static). Composer preview stays dynamic.
|
|
9
17
|
*/
|
|
10
18
|
|
|
19
|
+
/** Default ISR window for published Edge pages (seconds). */
|
|
20
|
+
declare const AMPLIFY_DEFAULT_REVALIDATE = 60;
|
|
11
21
|
/**
|
|
12
22
|
* Fetch page configuration on the server.
|
|
13
23
|
* Production visitors resolve via Edge; Composer preview uses the orchestrator.
|
|
@@ -23,6 +33,10 @@ declare function fetchPageConfigServer(route: string, trackingId: string, previe
|
|
|
23
33
|
siteId?: string | null;
|
|
24
34
|
/** Raw search params — used to detect Composer preview when preview flag omitted. */
|
|
25
35
|
searchParams?: URLSearchParams | Record<string, string | string[] | undefined>;
|
|
36
|
+
/** Next.js ISR for Edge resolve. Ignored in preview. Default 60s. */
|
|
37
|
+
revalidate?: number | false;
|
|
38
|
+
/** Cacheable variant combo (personalized ISR). Do not pass anonId with this. */
|
|
39
|
+
variantKeys?: Record<string, string> | null;
|
|
26
40
|
}): Promise<PageConfig | null>;
|
|
27
41
|
/**
|
|
28
42
|
* Same as fetchPageConfigServer but also returns content source meta
|
|
@@ -34,10 +48,32 @@ declare function fetchContentServer(route: string, trackingId: string, options?:
|
|
|
34
48
|
anonId?: string | null;
|
|
35
49
|
siteId?: string | null;
|
|
36
50
|
searchParams?: URLSearchParams | Record<string, string | string[] | undefined>;
|
|
51
|
+
revalidate?: number | false;
|
|
52
|
+
variantKeys?: Record<string, string> | null;
|
|
37
53
|
}): Promise<{
|
|
38
54
|
pageConfig: PageConfig | null;
|
|
39
55
|
meta: AmplifyContentMeta | null;
|
|
40
56
|
error: string | null;
|
|
41
57
|
}>;
|
|
58
|
+
/**
|
|
59
|
+
* Published routes for a tracking id (Edge KV). Soft-fails to [] if Edge is down.
|
|
60
|
+
*/
|
|
61
|
+
declare function listPublishedRoutes(trackingId: string, options?: {
|
|
62
|
+
target?: AmplifyUpTarget;
|
|
63
|
+
siteId?: string | null;
|
|
64
|
+
}): Promise<string[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Use from Next.js `generateStaticParams` on a catch-all page.
|
|
67
|
+
* Always includes `/`. Soft-fails to home-only if Edge is unreachable at build.
|
|
68
|
+
*
|
|
69
|
+
* Skips the Edge route list during `next dev` unless `generateStaticPaths: true`.
|
|
70
|
+
*/
|
|
71
|
+
declare function generateAmplifyStaticParams(trackingId: string, options?: {
|
|
72
|
+
target?: AmplifyUpTarget;
|
|
73
|
+
siteId?: string | null;
|
|
74
|
+
generateStaticPaths?: boolean;
|
|
75
|
+
}): Promise<{
|
|
76
|
+
slug: string[];
|
|
77
|
+
}[]>;
|
|
42
78
|
|
|
43
|
-
export { fetchContentServer, fetchPageConfigServer };
|
|
79
|
+
export { AMPLIFY_DEFAULT_REVALIDATE, fetchContentServer, fetchPageConfigServer, generateAmplifyStaticParams, isDefaultVariantKeys, listPublishedRoutes, parseVariantKeys, serializeVariantKeys };
|
package/dist/server.js
CHANGED
|
@@ -69,12 +69,17 @@ function resolveAmplifyUpUrls(target) {
|
|
|
69
69
|
|
|
70
70
|
// src/preview.ts
|
|
71
71
|
function isPreviewRequest(searchParams) {
|
|
72
|
+
return paramIsTrue(searchParams, "preview") || paramIsTrue(searchParams, "visualEditor");
|
|
73
|
+
}
|
|
74
|
+
function isWorkingContentRequest(searchParams) {
|
|
75
|
+
return paramIsTrue(searchParams, "working");
|
|
76
|
+
}
|
|
77
|
+
function paramIsTrue(searchParams, key) {
|
|
72
78
|
if (searchParams instanceof URLSearchParams) {
|
|
73
|
-
return searchParams.get(
|
|
79
|
+
return searchParams.get(key) === "true";
|
|
74
80
|
}
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
return preview === "true" || visualEditor === "true";
|
|
81
|
+
const value = searchParams[key];
|
|
82
|
+
return value === "true" || Array.isArray(value) && value[0] === "true";
|
|
78
83
|
}
|
|
79
84
|
function isComposerPreview() {
|
|
80
85
|
if (typeof window === "undefined") return false;
|
|
@@ -114,6 +119,43 @@ function normalizeRoute(route) {
|
|
|
114
119
|
return path || "/";
|
|
115
120
|
}
|
|
116
121
|
|
|
122
|
+
// src/edge/variantKeys.ts
|
|
123
|
+
function serializeVariantKeys(keys) {
|
|
124
|
+
if (!keys) return "";
|
|
125
|
+
const parts = [];
|
|
126
|
+
const zoneIds = Object.keys(keys).sort();
|
|
127
|
+
for (const zoneId of zoneIds) {
|
|
128
|
+
const variant = keys[zoneId];
|
|
129
|
+
if (!variant || variant === "default") continue;
|
|
130
|
+
parts.push(`${zoneId}:${variant}`);
|
|
131
|
+
}
|
|
132
|
+
return parts.join(",");
|
|
133
|
+
}
|
|
134
|
+
function parseVariantKeys(raw) {
|
|
135
|
+
const out = {};
|
|
136
|
+
const text = (raw || "").trim();
|
|
137
|
+
if (!text) return out;
|
|
138
|
+
const decoded = safeDecode(text);
|
|
139
|
+
for (const part of decoded.split(",")) {
|
|
140
|
+
const i = part.indexOf(":");
|
|
141
|
+
if (i <= 0) continue;
|
|
142
|
+
const zoneId = part.slice(0, i).trim();
|
|
143
|
+
const variant = part.slice(i + 1).trim();
|
|
144
|
+
if (zoneId && variant) out[zoneId] = variant;
|
|
145
|
+
}
|
|
146
|
+
return out;
|
|
147
|
+
}
|
|
148
|
+
function isDefaultVariantKeys(keys) {
|
|
149
|
+
return serializeVariantKeys(keys) === "";
|
|
150
|
+
}
|
|
151
|
+
function safeDecode(value) {
|
|
152
|
+
try {
|
|
153
|
+
return decodeURIComponent(value);
|
|
154
|
+
} catch {
|
|
155
|
+
return value;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
117
159
|
// src/edge/resolve.ts
|
|
118
160
|
var EdgeResolveError = class extends Error {
|
|
119
161
|
constructor(message, status, body) {
|
|
@@ -131,12 +173,23 @@ async function fetchEdgeResolve(options) {
|
|
|
131
173
|
trackingId: options.trackingId
|
|
132
174
|
});
|
|
133
175
|
if (options.siteId) params.set("site", options.siteId);
|
|
134
|
-
|
|
176
|
+
const variantParam = serializeVariantKeys(options.variantKeys);
|
|
177
|
+
if (variantParam) {
|
|
178
|
+
params.set("variants", variantParam);
|
|
179
|
+
} else if (options.anonId) {
|
|
180
|
+
params.set("anonId", options.anonId);
|
|
181
|
+
}
|
|
135
182
|
const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
136
|
-
const
|
|
183
|
+
const init = {
|
|
137
184
|
method: "GET",
|
|
138
185
|
headers: { Accept: "application/json" }
|
|
139
|
-
}
|
|
186
|
+
};
|
|
187
|
+
if (options.revalidate !== void 0) {
|
|
188
|
+
init.next = { revalidate: options.revalidate };
|
|
189
|
+
} else {
|
|
190
|
+
init.cache = "no-store";
|
|
191
|
+
}
|
|
192
|
+
const res = await fetchFn(`${base}/v1/resolve?${params.toString()}`, init);
|
|
140
193
|
const body = await res.json().catch(() => ({}));
|
|
141
194
|
if (!res.ok) {
|
|
142
195
|
throw new EdgeResolveError(
|
|
@@ -225,9 +278,11 @@ async function fetchContent(options) {
|
|
|
225
278
|
edgeUrl: options.edgeUrl,
|
|
226
279
|
trackingId: options.trackingId,
|
|
227
280
|
route: options.route,
|
|
228
|
-
anonId: options.anonId,
|
|
281
|
+
anonId: options.variantKeys ? void 0 : options.anonId,
|
|
229
282
|
siteId: options.siteId,
|
|
230
|
-
fetch: options.fetchFn
|
|
283
|
+
fetch: options.fetchFn,
|
|
284
|
+
revalidate: options.revalidate,
|
|
285
|
+
variantKeys: options.variantKeys
|
|
231
286
|
});
|
|
232
287
|
const pageConfig = mapResolvedToPageConfig(payload);
|
|
233
288
|
const degraded = collectDegraded(payload);
|
|
@@ -265,19 +320,51 @@ async function fetchContent(options) {
|
|
|
265
320
|
}
|
|
266
321
|
}
|
|
267
322
|
|
|
323
|
+
// src/edge/routes.ts
|
|
324
|
+
async function fetchEdgeRoutes(options) {
|
|
325
|
+
const base = options.edgeUrl.replace(/\/+$/, "");
|
|
326
|
+
const params = new URLSearchParams();
|
|
327
|
+
if (options.trackingId) params.set("trackingId", options.trackingId);
|
|
328
|
+
if (options.siteId) params.set("site", options.siteId);
|
|
329
|
+
const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
330
|
+
const controller = new AbortController();
|
|
331
|
+
const timer = setTimeout(() => controller.abort(), 8e3);
|
|
332
|
+
try {
|
|
333
|
+
const res = await fetchFn(`${base}/v1/routes?${params.toString()}`, {
|
|
334
|
+
method: "GET",
|
|
335
|
+
headers: { Accept: "application/json" },
|
|
336
|
+
cache: "no-store",
|
|
337
|
+
signal: controller.signal
|
|
338
|
+
});
|
|
339
|
+
const body = await res.json().catch(() => ({}));
|
|
340
|
+
if (!res.ok) {
|
|
341
|
+
throw new Error(body.error || `Edge routes failed (${res.status})`);
|
|
342
|
+
}
|
|
343
|
+
return {
|
|
344
|
+
siteId: body.siteId || "",
|
|
345
|
+
routes: Array.isArray(body.routes) ? body.routes : []
|
|
346
|
+
};
|
|
347
|
+
} finally {
|
|
348
|
+
clearTimeout(timer);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
268
352
|
// src/server.tsx
|
|
353
|
+
var AMPLIFY_DEFAULT_REVALIDATE = 60;
|
|
269
354
|
async function fetchPageConfigServer(route, trackingId, preview = false, options) {
|
|
270
355
|
const target = resolveAmplifyUpTarget({
|
|
271
356
|
configTarget: options?.target
|
|
272
357
|
});
|
|
273
358
|
const { orchestratorUrl, edgeUrl } = resolveAmplifyUpUrls(target);
|
|
274
359
|
const previewFlag = preview || (options?.searchParams ? isPreviewRequest(options.searchParams) : false);
|
|
360
|
+
const workingFlag = options?.searchParams ? isWorkingContentRequest(options.searchParams) : false;
|
|
275
361
|
const fetchOrchestratorPage = async (pageRoute, isPreview) => {
|
|
276
362
|
const params = new URLSearchParams({
|
|
277
363
|
route: pageRoute,
|
|
278
364
|
trackingId
|
|
279
365
|
});
|
|
280
366
|
if (isPreview) params.set("preview", "true");
|
|
367
|
+
if (workingFlag) params.set("working", "true");
|
|
281
368
|
const url = `${orchestratorUrl}/api/layout/provider?${params.toString()}`;
|
|
282
369
|
try {
|
|
283
370
|
const res = await fetch(url, {
|
|
@@ -299,7 +386,9 @@ async function fetchPageConfigServer(route, trackingId, preview = false, options
|
|
|
299
386
|
preview: previewFlag,
|
|
300
387
|
orchestratorUrl,
|
|
301
388
|
edgeUrl,
|
|
302
|
-
fetchOrchestratorPage
|
|
389
|
+
fetchOrchestratorPage,
|
|
390
|
+
revalidate: previewFlag ? void 0 : options?.revalidate ?? AMPLIFY_DEFAULT_REVALIDATE,
|
|
391
|
+
variantKeys: previewFlag ? void 0 : options?.variantKeys
|
|
303
392
|
});
|
|
304
393
|
return result.pageConfig;
|
|
305
394
|
}
|
|
@@ -309,6 +398,7 @@ async function fetchContentServer(route, trackingId, options) {
|
|
|
309
398
|
});
|
|
310
399
|
const { orchestratorUrl, edgeUrl } = resolveAmplifyUpUrls(target);
|
|
311
400
|
const previewFlag = options?.preview || (options?.searchParams ? isPreviewRequest(options.searchParams) : false);
|
|
401
|
+
const workingFlag = options?.searchParams ? isWorkingContentRequest(options.searchParams) : false;
|
|
312
402
|
const result = await fetchContent({
|
|
313
403
|
route,
|
|
314
404
|
trackingId,
|
|
@@ -323,6 +413,7 @@ async function fetchContentServer(route, trackingId, options) {
|
|
|
323
413
|
trackingId
|
|
324
414
|
});
|
|
325
415
|
if (isPreview) params.set("preview", "true");
|
|
416
|
+
if (workingFlag) params.set("working", "true");
|
|
326
417
|
const url = `${orchestratorUrl}/api/layout/provider?${params.toString()}`;
|
|
327
418
|
try {
|
|
328
419
|
const res = await fetch(url, {
|
|
@@ -335,7 +426,9 @@ async function fetchContentServer(route, trackingId, options) {
|
|
|
335
426
|
} catch {
|
|
336
427
|
return null;
|
|
337
428
|
}
|
|
338
|
-
}
|
|
429
|
+
},
|
|
430
|
+
revalidate: previewFlag ? void 0 : options?.revalidate ?? AMPLIFY_DEFAULT_REVALIDATE,
|
|
431
|
+
variantKeys: previewFlag ? void 0 : options?.variantKeys
|
|
339
432
|
});
|
|
340
433
|
return {
|
|
341
434
|
pageConfig: result.pageConfig,
|
|
@@ -343,10 +436,50 @@ async function fetchContentServer(route, trackingId, options) {
|
|
|
343
436
|
error: result.error
|
|
344
437
|
};
|
|
345
438
|
}
|
|
439
|
+
async function listPublishedRoutes(trackingId, options) {
|
|
440
|
+
if (!trackingId && !options?.siteId) return [];
|
|
441
|
+
const target = resolveAmplifyUpTarget({
|
|
442
|
+
configTarget: options?.target
|
|
443
|
+
});
|
|
444
|
+
const { edgeUrl } = resolveAmplifyUpUrls(target);
|
|
445
|
+
try {
|
|
446
|
+
const listed = await fetchEdgeRoutes({
|
|
447
|
+
edgeUrl,
|
|
448
|
+
trackingId: trackingId || void 0,
|
|
449
|
+
siteId: options?.siteId
|
|
450
|
+
});
|
|
451
|
+
return listed.routes;
|
|
452
|
+
} catch {
|
|
453
|
+
return [];
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
function routeToStaticParam(route) {
|
|
457
|
+
const normalized = normalizeRoute(route);
|
|
458
|
+
if (normalized === "/") return { slug: [] };
|
|
459
|
+
return { slug: normalized.replace(/^\//, "").split("/") };
|
|
460
|
+
}
|
|
461
|
+
async function generateAmplifyStaticParams(trackingId, options) {
|
|
462
|
+
const generateStaticPaths = options?.generateStaticPaths ?? process.env.NODE_ENV !== "development";
|
|
463
|
+
if (!generateStaticPaths) {
|
|
464
|
+
return [{ slug: [] }];
|
|
465
|
+
}
|
|
466
|
+
const routes = await listPublishedRoutes(trackingId, options);
|
|
467
|
+
const params = routes.map(routeToStaticParam);
|
|
468
|
+
if (!params.some((p) => p.slug.length === 0)) {
|
|
469
|
+
params.unshift({ slug: [] });
|
|
470
|
+
}
|
|
471
|
+
return params;
|
|
472
|
+
}
|
|
346
473
|
|
|
474
|
+
exports.AMPLIFY_DEFAULT_REVALIDATE = AMPLIFY_DEFAULT_REVALIDATE;
|
|
347
475
|
exports.fetchContentServer = fetchContentServer;
|
|
348
476
|
exports.fetchPageConfigServer = fetchPageConfigServer;
|
|
477
|
+
exports.generateAmplifyStaticParams = generateAmplifyStaticParams;
|
|
478
|
+
exports.isDefaultVariantKeys = isDefaultVariantKeys;
|
|
479
|
+
exports.listPublishedRoutes = listPublishedRoutes;
|
|
480
|
+
exports.parseVariantKeys = parseVariantKeys;
|
|
349
481
|
exports.resolveAmplifyUpTarget = resolveAmplifyUpTarget;
|
|
350
482
|
exports.resolveAmplifyUpUrls = resolveAmplifyUpUrls;
|
|
483
|
+
exports.serializeVariantKeys = serializeVariantKeys;
|
|
351
484
|
//# sourceMappingURL=server.js.map
|
|
352
485
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/targets.ts","../src/preview.ts","../src/edge/normalizeRoute.ts","../src/edge/resolve.ts","../src/edge/mapResolvedToPageConfig.ts","../src/content/fetchContent.ts","../src/server.tsx"],"names":["orchestratorUrl"],"mappings":"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","file":"server.js","sourcesContent":["/**\n * AmplifyUp environment targets\n *\n * Two environments only:\n * - local: apps/config from localhost + Neon; events & personalize from AWS development\n * - production: all production AmplifyUp / AWS endpoints\n *\n * Controlled via `config.target` or `NEXT_PUBLIC_AMPLIFYUP_TARGET`.\n * Legacy value `dev` is treated as `local`.\n */\n\nexport type AmplifyUpTarget = 'local' | 'production';\n\n/** Accepted env/config strings (includes legacy `dev` → local). */\nexport type AmplifyUpTargetInput = AmplifyUpTarget | 'dev';\n\nexport interface AmplifyUpUrls {\n target: AmplifyUpTarget;\n apiGatewayUrl: string;\n orchestratorUrl: string;\n decisionApiUrl: string;\n edgeUrl: string;\n}\n\nconst AWS_DEV_API = 'https://api-dev.amplifyup.ai';\nconst AWS_PROD_API = 'https://api.amplifyup.ai';\nconst PROD_ORCHESTRATOR = 'https://amplifyup.ai';\nconst PROD_EDGE = 'https://edge.amplifyup.ai';\n\nexport function isAmplifyUpTarget(value: unknown): value is AmplifyUpTargetInput {\n return value === 'local' || value === 'dev' || value === 'production';\n}\n\nexport function normalizeAmplifyUpTarget(value: AmplifyUpTargetInput): AmplifyUpTarget {\n return value === 'dev' ? 'local' : value;\n}\n\n/**\n * Resolve which target to use.\n *\n * Priority:\n * 1. explicit config.target\n * 2. config.dev === true → 'local' (local apps + AWS-dev pipeline)\n * 3. NEXT_PUBLIC_AMPLIFYUP_TARGET\n * 4. unset → 'production' (live endpoints — hosting on localhost does NOT imply local)\n *\n * Use `local` only when developing against the AmplifyUp monorepo\n * (set NEXT_PUBLIC_AMPLIFYUP_TARGET=local in .env.local).\n */\nexport function resolveAmplifyUpTarget(options?: {\n configTarget?: AmplifyUpTargetInput;\n /** @deprecated Prefer NEXT_PUBLIC_AMPLIFYUP_TARGET=local. When true, resolves to local. */\n configDev?: boolean;\n}): AmplifyUpTarget {\n if (options?.configTarget && isAmplifyUpTarget(options.configTarget)) {\n return normalizeAmplifyUpTarget(options.configTarget);\n }\n\n if (options?.configDev === true) {\n return 'local';\n }\n\n const envTarget =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_AMPLIFYUP_TARGET\n : undefined;\n if (isAmplifyUpTarget(envTarget)) {\n return normalizeAmplifyUpTarget(envTarget);\n }\n\n return 'production';\n}\n\n/** True when the orchestrator origin is a remote AmplifyUp deployment (not localhost). */\nexport function isRemoteOrchestratorUrl(orchestratorUrl: string): boolean {\n try {\n const host = new URL(orchestratorUrl).hostname.toLowerCase();\n return host !== 'localhost' && host !== '127.0.0.1' && host !== '::1';\n } catch {\n return false;\n }\n}\n\nfunction localOrchestratorUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_ORCHESTRATOR_URL\n : undefined;\n return (fromEnv || 'http://localhost:5001').replace(/\\/$/, '');\n}\n\n/**\n * Optional override for the local→AWS-dev API base (events + personalize).\n * Defaults to https://api-dev.amplifyup.ai\n */\nfunction localAwsApiUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_AMPLIFYUP_API_URL\n : undefined;\n return (fromEnv || AWS_DEV_API).replace(/\\/$/, '');\n}\n\n/**\n * Optional override for the local Edge Worker URL.\n * Defaults to http://localhost:8787\n */\nfunction localEdgeUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_EDGE_URL\n : undefined;\n return (fromEnv || 'http://localhost:8787').replace(/\\/$/, '');\n}\n\nexport function resolveAmplifyUpUrls(target: AmplifyUpTarget): AmplifyUpUrls {\n if (target === 'local') {\n const orchestratorUrl = localOrchestratorUrl();\n const apiGatewayUrl = localAwsApiUrl();\n return {\n target: 'local',\n // Layouts / site config / composer APIs → local orchestrator + Neon\n orchestratorUrl,\n // Events + personalize → AWS development stack\n apiGatewayUrl,\n decisionApiUrl: `${apiGatewayUrl}/v1/personalize`,\n edgeUrl: localEdgeUrl(),\n };\n }\n\n const resolvedApi =\n (typeof process !== 'undefined' &&\n process.env.NEXT_PUBLIC_AMPLIFYUP_API_URL?.replace(/\\/$/, '')) ||\n AWS_PROD_API;\n\n const orchestratorFromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_ORCHESTRATOR_URL\n : undefined;\n\n // Production: don't accidentally use a localhost orchestrator URL from a local env file\n const isLocalOrchestrator =\n !!orchestratorFromEnv &&\n (orchestratorFromEnv.includes('localhost') ||\n orchestratorFromEnv.includes('127.0.0.1'));\n\n const orchestratorUrl = isLocalOrchestrator || !orchestratorFromEnv\n ? PROD_ORCHESTRATOR\n : orchestratorFromEnv.replace(/\\/$/, '');\n\n const edgeFromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_EDGE_URL?.replace(/\\/$/, '')\n : undefined;\n const edgeUrl =\n edgeFromEnv &&\n !edgeFromEnv.includes('localhost') &&\n !edgeFromEnv.includes('127.0.0.1')\n ? edgeFromEnv\n : PROD_EDGE;\n\n return {\n target: 'production',\n apiGatewayUrl: resolvedApi,\n orchestratorUrl,\n decisionApiUrl: `${resolvedApi}/v1/personalize`,\n edgeUrl,\n };\n}\n","/**\n * Composer / visual-editor preview detection.\n * Shared by AmplifyPageContent, AmplifyUpProvider, and AmplifyRenderer.\n */\n\n/** True when `preview=true` (or legacy visualEditor) is in request search params. */\nexport function isPreviewRequest(\n searchParams: Record<string, string | string[] | undefined> | URLSearchParams\n): boolean {\n if (searchParams instanceof URLSearchParams) {\n return (\n searchParams.get('preview') === 'true' ||\n searchParams.get('visualEditor') === 'true'\n );\n }\n const preview = searchParams.preview;\n const visualEditor = searchParams.visualEditor;\n return preview === 'true' || visualEditor === 'true';\n}\n\n/**\n * Client-only: true when the page is loaded inside AmplifyUp Composer.\n * Does NOT treat every iframe as preview — only Composer referrers / query flags.\n */\nexport function isComposerPreview(): boolean {\n if (typeof window === 'undefined') return false;\n\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) return true;\n\n const params = new URLSearchParams(window.location.search);\n if (isPreviewRequest(params)) return true;\n\n if (window.self !== window.top && document.referrer) {\n try {\n const refUrl = new URL(document.referrer);\n if (\n refUrl.hostname === 'amplifyup.ai' ||\n refUrl.hostname.endsWith('.amplifyup.ai') ||\n (refUrl.hostname === 'localhost' && refUrl.port === '5001') ||\n refUrl.pathname.includes('/dashboard/composer') ||\n refUrl.pathname.includes('/dashboard/routes/')\n ) {\n return true;\n }\n } catch {\n // ignore parse error\n }\n }\n\n return false;\n}\n","/**\n * Normalize a route path for Edge resolve requests.\n * Leading slash, no trailing slash (except root), query/hash stripped.\n */\nexport function normalizeRoute(route: string): string {\n let path = String(route || '').trim();\n if (!path) return '/';\n\n try {\n if (/^https?:\\/\\//i.test(path)) {\n path = new URL(path).pathname;\n }\n } catch {\n /* keep path */\n }\n\n const q = path.indexOf('?');\n if (q >= 0) path = path.slice(0, q);\n const h = path.indexOf('#');\n if (h >= 0) path = path.slice(0, h);\n\n if (!path.startsWith('/')) path = `/${path}`;\n if (path.length > 1 && path.endsWith('/')) {\n path = path.replace(/\\/+$/, '');\n }\n return path || '/';\n}\n","import type { EventTrackingConfig } from '../types';\nimport { normalizeRoute } from './normalizeRoute';\n\n/** Mirrors Edge ResolvedComponent — SDK maps this into layoutTree nodes. */\nexport interface EdgeResolvedComponent {\n instanceId: string;\n componentId: string;\n props: Record<string, unknown>;\n children?: Record<string, EdgeResolvedComponent[]>;\n appliedRules?: string[];\n degraded?: boolean;\n}\n\nexport interface EdgeResolvedPayload {\n siteId: string;\n route: string;\n version: number;\n zones: Record<string, EdgeResolvedComponent[]>;\n tree?: EdgeResolvedComponent[];\n /** Composer event bindings baked into the published snapshot. */\n eventTracking?: EventTrackingConfig[];\n meta: {\n variantKeys: Record<string, string>;\n audienceLookup?: { status: string; durationMs: number };\n decideLookup?: { status: string; durationMs: number; checks: number };\n experiments?: Array<{ key: string; variantKey: string; bucket: number }>;\n bot?: unknown;\n resolvedAt: string;\n degraded?: boolean;\n };\n}\n\nexport class EdgeResolveError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'EdgeResolveError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport async function fetchEdgeResolve(options: {\n edgeUrl: string;\n trackingId: string;\n route: string;\n anonId?: string | null;\n siteId?: string | null;\n fetch?: typeof fetch;\n}): Promise<EdgeResolvedPayload> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const route = normalizeRoute(options.route);\n const params = new URLSearchParams({\n route,\n trackingId: options.trackingId,\n });\n if (options.siteId) params.set('site', options.siteId);\n if (options.anonId) params.set('anonId', options.anonId);\n\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n const res = await fetchFn(`${base}/v1/resolve?${params.toString()}`, {\n method: 'GET',\n headers: { Accept: 'application/json' },\n });\n\n const body = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new EdgeResolveError(\n (body && typeof body === 'object' && 'error' in body\n ? String((body as { error: unknown }).error)\n : `Edge resolve failed (${res.status})`) ||\n `Edge resolve failed (${res.status})`,\n res.status,\n body\n );\n }\n\n return body as EdgeResolvedPayload;\n}\n","import type { PageConfig } from '../types';\nimport type { EdgeResolvedComponent, EdgeResolvedPayload } from './resolve';\n\ninterface LayoutNode {\n id: string;\n componentId: string;\n props?: Record<string, unknown>;\n slots?: Array<{\n slotId: string;\n children: LayoutNode[];\n }>;\n /** Marker so AmplifyRenderer skips client Decision API fetches. */\n _contentSource?: 'edge' | 'orchestrator';\n}\n\nfunction mapResolvedComponent(node: EdgeResolvedComponent): LayoutNode {\n const slots: LayoutNode['slots'] = [];\n if (node.children) {\n for (const [slotId, kids] of Object.entries(node.children)) {\n slots.push({\n slotId,\n children: (kids || []).map(mapResolvedComponent),\n });\n }\n }\n\n return {\n id: node.instanceId,\n componentId: node.componentId,\n props: { ...(node.props || {}) },\n ...(slots.length > 0 ? { slots } : {}),\n _contentSource: 'edge',\n };\n}\n\n/**\n * Map Edge /v1/resolve payload → PageConfig for AmplifyRenderer.\n * Prefers `tree` (full page skeleton with zones spliced in); falls back to\n * flattening zone roots when older snapshots lack structure.\n */\nexport function mapResolvedToPageConfig(\n payload: EdgeResolvedPayload\n): PageConfig {\n let layoutTree: LayoutNode[] = [];\n\n if (payload.tree && payload.tree.length > 0) {\n layoutTree = payload.tree.map(mapResolvedComponent);\n } else {\n // Legacy: zones only — render each zone's roots in stable zoneId order\n const zoneIds = Object.keys(payload.zones || {}).sort();\n for (const zoneId of zoneIds) {\n const roots = payload.zones[zoneId] || [];\n layoutTree.push(...roots.map(mapResolvedComponent));\n }\n }\n\n return {\n id: `edge:${payload.siteId}:${payload.route}:v${payload.version}`,\n route: payload.route,\n title: '',\n layoutTree,\n meta: {\n // Stash edge meta for diagnostics (not visitor-facing)\n description: payload.meta?.degraded ? 'degraded' : undefined,\n },\n ...(payload.eventTracking && payload.eventTracking.length > 0\n ? { eventTracking: payload.eventTracking }\n : {}),\n };\n}\n\nexport function collectDegraded(payload: EdgeResolvedPayload): boolean {\n if (payload.meta?.degraded) return true;\n const walk = (nodes: EdgeResolvedComponent[]): boolean =>\n nodes.some(\n (n) =>\n !!n.degraded ||\n (n.children\n ? Object.values(n.children).some((kids) => walk(kids || []))\n : false)\n );\n if (payload.tree && walk(payload.tree)) return true;\n return Object.values(payload.zones || {}).some((roots) => walk(roots || []));\n}\n","import type { AmplifyContentMeta, ContentSource, PageConfig } from '../types';\nimport { isComposerPreview } from '../preview';\nimport {\n EdgeResolveError,\n fetchEdgeResolve,\n type EdgeResolvedPayload,\n} from '../edge/resolve';\nimport {\n collectDegraded,\n mapResolvedToPageConfig,\n} from '../edge/mapResolvedToPageConfig';\n\nexport type { AmplifyContentMeta, ContentSource };\n\nexport interface FetchContentResult {\n pageConfig: PageConfig | null;\n source: ContentSource;\n meta: AmplifyContentMeta | null;\n error: string | null;\n}\n\nexport interface FetchContentOptions {\n route: string;\n trackingId: string;\n anonId?: string | null;\n siteId?: string | null;\n /** Force preview (Composer); otherwise uses isComposerPreview() in browser. */\n preview?: boolean;\n orchestratorUrl: string;\n edgeUrl: string;\n /** Orchestrator layout fetch (SDK instance method or server helper). */\n fetchOrchestratorPage: (\n route: string,\n preview: boolean\n ) => Promise<PageConfig | null>;\n fetchFn?: typeof fetch;\n}\n\n/**\n * Single content entry point:\n * - Composer / preview → orchestrator layout provider (drafts + live edits)\n * - Production visitors → Edge /v1/resolve (personalized + CMS-populated)\n *\n * Production never falls back to the orchestrator on Edge failure —\n * callers should render site fallback instead.\n */\nexport async function fetchContent(\n options: FetchContentOptions\n): Promise<FetchContentResult> {\n const preview =\n options.preview ??\n (typeof window !== 'undefined' ? isComposerPreview() : false);\n\n if (preview) {\n try {\n const page = await options.fetchOrchestratorPage(options.route, true);\n return {\n pageConfig: page,\n source: 'orchestrator',\n meta: { source: 'orchestrator' },\n error: null,\n };\n } catch (err) {\n return {\n pageConfig: null,\n source: 'orchestrator',\n meta: { source: 'orchestrator' },\n error: err instanceof Error ? err.message : 'Failed to load preview',\n };\n }\n }\n\n try {\n const payload: EdgeResolvedPayload = await fetchEdgeResolve({\n edgeUrl: options.edgeUrl,\n trackingId: options.trackingId,\n route: options.route,\n anonId: options.anonId,\n siteId: options.siteId,\n fetch: options.fetchFn,\n });\n\n const pageConfig = mapResolvedToPageConfig(payload);\n const degraded = collectDegraded(payload);\n\n return {\n pageConfig,\n source: 'edge',\n meta: {\n source: 'edge',\n version: payload.version,\n siteId: payload.siteId,\n variantKeys: payload.meta?.variantKeys,\n degraded,\n audienceLookup: payload.meta?.audienceLookup,\n decideLookup: payload.meta?.decideLookup,\n resolvedAt: payload.meta?.resolvedAt,\n },\n error: null,\n };\n } catch (err) {\n if (err instanceof EdgeResolveError && err.status === 404) {\n return {\n pageConfig: null,\n source: 'edge',\n meta: { source: 'edge' },\n error: null, // unpublished → site fallback, not an error banner\n };\n }\n return {\n pageConfig: null,\n source: 'edge',\n meta: { source: 'edge' },\n error:\n err instanceof Error ? err.message : \"Couldn't load page content.\",\n };\n }\n}\n","/**\n * Server-side utilities for AmplifyUp SDK\n *\n * Provides functions for fetching page config on the server\n * for SSR/SSG support (Composer preview → orchestrator; production → Edge).\n */\n\nimport type { AmplifyContentMeta, AmplifyUpTarget, PageConfig } from './types';\nimport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n} from './targets';\nimport { fetchContent } from './content/fetchContent';\nimport { isPreviewRequest } from './preview';\n\n/**\n * Fetch page configuration on the server.\n * Production visitors resolve via Edge; Composer preview uses the orchestrator.\n *\n * @param route - The route path (e.g., '/', '/about')\n * @param trackingId - The site tracking ID\n * @param preview - Whether to include draft views (default: false)\n * @param options - Optional target / anonId / siteId overrides\n */\nexport async function fetchPageConfigServer(\n route: string,\n trackingId: string,\n preview: boolean = false,\n options?: {\n target?: AmplifyUpTarget;\n anonId?: string | null;\n siteId?: string | null;\n /** Raw search params — used to detect Composer preview when preview flag omitted. */\n searchParams?: URLSearchParams | Record<string, string | string[] | undefined>;\n }\n): Promise<PageConfig | null> {\n const target = resolveAmplifyUpTarget({\n configTarget: options?.target,\n });\n const { orchestratorUrl, edgeUrl } = resolveAmplifyUpUrls(target);\n\n const previewFlag =\n preview ||\n (options?.searchParams\n ? isPreviewRequest(options.searchParams as any)\n : false);\n\n const fetchOrchestratorPage = async (\n pageRoute: string,\n isPreview: boolean\n ): Promise<PageConfig | null> => {\n const params = new URLSearchParams({\n route: pageRoute,\n trackingId,\n });\n if (isPreview) params.set('preview', 'true');\n const url = `${orchestratorUrl}/api/layout/provider?${params.toString()}`;\n try {\n const res = await fetch(url, {\n cache: 'no-store',\n headers: { Accept: 'application/json' },\n });\n if (!res.ok) return null;\n const data = await res.json();\n return (data.page as PageConfig) || null;\n } catch {\n return null;\n }\n };\n\n const result = await fetchContent({\n route,\n trackingId,\n anonId: options?.anonId,\n siteId: options?.siteId,\n preview: previewFlag,\n orchestratorUrl,\n edgeUrl,\n fetchOrchestratorPage,\n });\n\n return result.pageConfig;\n}\n\n/**\n * Same as fetchPageConfigServer but also returns content source meta\n * (useful for SSR that wants Edge diagnostics).\n */\nexport async function fetchContentServer(\n route: string,\n trackingId: string,\n options?: {\n preview?: boolean;\n target?: AmplifyUpTarget;\n anonId?: string | null;\n siteId?: string | null;\n searchParams?: URLSearchParams | Record<string, string | string[] | undefined>;\n }\n): Promise<{\n pageConfig: PageConfig | null;\n meta: AmplifyContentMeta | null;\n error: string | null;\n}> {\n const target = resolveAmplifyUpTarget({\n configTarget: options?.target,\n });\n const { orchestratorUrl, edgeUrl } = resolveAmplifyUpUrls(target);\n const previewFlag =\n options?.preview ||\n (options?.searchParams\n ? isPreviewRequest(options.searchParams as any)\n : false);\n\n const result = await fetchContent({\n route,\n trackingId,\n anonId: options?.anonId,\n siteId: options?.siteId,\n preview: previewFlag,\n orchestratorUrl,\n edgeUrl,\n fetchOrchestratorPage: async (pageRoute, isPreview) => {\n const params = new URLSearchParams({\n route: pageRoute,\n trackingId,\n });\n if (isPreview) params.set('preview', 'true');\n const url = `${orchestratorUrl}/api/layout/provider?${params.toString()}`;\n try {\n const res = await fetch(url, {\n cache: 'no-store',\n headers: { Accept: 'application/json' },\n });\n if (!res.ok) return null;\n const data = await res.json();\n return (data.page as PageConfig) || null;\n } catch {\n return null;\n }\n },\n });\n\n return {\n pageConfig: result.pageConfig,\n meta: result.meta,\n error: result.error,\n };\n}\n\nexport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/targets.ts","../src/preview.ts","../src/edge/normalizeRoute.ts","../src/edge/variantKeys.ts","../src/edge/resolve.ts","../src/edge/mapResolvedToPageConfig.ts","../src/content/fetchContent.ts","../src/edge/routes.ts","../src/server.tsx"],"names":["orchestratorUrl"],"mappings":"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","file":"server.js","sourcesContent":["/**\n * AmplifyUp environment targets\n *\n * Two environments only:\n * - local: apps/config from localhost + Neon; events & personalize from AWS development\n * - production: all production AmplifyUp / AWS endpoints\n *\n * Controlled via `config.target` or `NEXT_PUBLIC_AMPLIFYUP_TARGET`.\n * Legacy value `dev` is treated as `local`.\n */\n\nexport type AmplifyUpTarget = 'local' | 'production';\n\n/** Accepted env/config strings (includes legacy `dev` → local). */\nexport type AmplifyUpTargetInput = AmplifyUpTarget | 'dev';\n\nexport interface AmplifyUpUrls {\n target: AmplifyUpTarget;\n apiGatewayUrl: string;\n orchestratorUrl: string;\n decisionApiUrl: string;\n edgeUrl: string;\n}\n\nconst AWS_DEV_API = 'https://api-dev.amplifyup.ai';\nconst AWS_PROD_API = 'https://api.amplifyup.ai';\nconst PROD_ORCHESTRATOR = 'https://amplifyup.ai';\nconst PROD_EDGE = 'https://edge.amplifyup.ai';\n\nexport function isAmplifyUpTarget(value: unknown): value is AmplifyUpTargetInput {\n return value === 'local' || value === 'dev' || value === 'production';\n}\n\nexport function normalizeAmplifyUpTarget(value: AmplifyUpTargetInput): AmplifyUpTarget {\n return value === 'dev' ? 'local' : value;\n}\n\n/**\n * Resolve which target to use.\n *\n * Priority:\n * 1. explicit config.target\n * 2. config.dev === true → 'local' (local apps + AWS-dev pipeline)\n * 3. NEXT_PUBLIC_AMPLIFYUP_TARGET\n * 4. unset → 'production' (live endpoints — hosting on localhost does NOT imply local)\n *\n * Use `local` only when developing against the AmplifyUp monorepo\n * (set NEXT_PUBLIC_AMPLIFYUP_TARGET=local in .env.local).\n */\nexport function resolveAmplifyUpTarget(options?: {\n configTarget?: AmplifyUpTargetInput;\n /** @deprecated Prefer NEXT_PUBLIC_AMPLIFYUP_TARGET=local. When true, resolves to local. */\n configDev?: boolean;\n}): AmplifyUpTarget {\n if (options?.configTarget && isAmplifyUpTarget(options.configTarget)) {\n return normalizeAmplifyUpTarget(options.configTarget);\n }\n\n if (options?.configDev === true) {\n return 'local';\n }\n\n const envTarget =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_AMPLIFYUP_TARGET\n : undefined;\n if (isAmplifyUpTarget(envTarget)) {\n return normalizeAmplifyUpTarget(envTarget);\n }\n\n return 'production';\n}\n\n/** True when the orchestrator origin is a remote AmplifyUp deployment (not localhost). */\nexport function isRemoteOrchestratorUrl(orchestratorUrl: string): boolean {\n try {\n const host = new URL(orchestratorUrl).hostname.toLowerCase();\n return host !== 'localhost' && host !== '127.0.0.1' && host !== '::1';\n } catch {\n return false;\n }\n}\n\nfunction localOrchestratorUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_ORCHESTRATOR_URL\n : undefined;\n return (fromEnv || 'http://localhost:5001').replace(/\\/$/, '');\n}\n\n/**\n * Optional override for the local→AWS-dev API base (events + personalize).\n * Defaults to https://api-dev.amplifyup.ai\n */\nfunction localAwsApiUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_AMPLIFYUP_API_URL\n : undefined;\n return (fromEnv || AWS_DEV_API).replace(/\\/$/, '');\n}\n\n/**\n * Optional override for the local Edge Worker URL.\n * Defaults to http://localhost:8787\n */\nfunction localEdgeUrl(): string {\n const fromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_EDGE_URL\n : undefined;\n return (fromEnv || 'http://localhost:8787').replace(/\\/$/, '');\n}\n\nexport function resolveAmplifyUpUrls(target: AmplifyUpTarget): AmplifyUpUrls {\n if (target === 'local') {\n const orchestratorUrl = localOrchestratorUrl();\n const apiGatewayUrl = localAwsApiUrl();\n return {\n target: 'local',\n // Layouts / site config / composer APIs → local orchestrator + Neon\n orchestratorUrl,\n // Events + personalize → AWS development stack\n apiGatewayUrl,\n decisionApiUrl: `${apiGatewayUrl}/v1/personalize`,\n edgeUrl: localEdgeUrl(),\n };\n }\n\n const resolvedApi =\n (typeof process !== 'undefined' &&\n process.env.NEXT_PUBLIC_AMPLIFYUP_API_URL?.replace(/\\/$/, '')) ||\n AWS_PROD_API;\n\n const orchestratorFromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_ORCHESTRATOR_URL\n : undefined;\n\n // Production: don't accidentally use a localhost orchestrator URL from a local env file\n const isLocalOrchestrator =\n !!orchestratorFromEnv &&\n (orchestratorFromEnv.includes('localhost') ||\n orchestratorFromEnv.includes('127.0.0.1'));\n\n const orchestratorUrl = isLocalOrchestrator || !orchestratorFromEnv\n ? PROD_ORCHESTRATOR\n : orchestratorFromEnv.replace(/\\/$/, '');\n\n const edgeFromEnv =\n typeof process !== 'undefined'\n ? process.env.NEXT_PUBLIC_EDGE_URL?.replace(/\\/$/, '')\n : undefined;\n const edgeUrl =\n edgeFromEnv &&\n !edgeFromEnv.includes('localhost') &&\n !edgeFromEnv.includes('127.0.0.1')\n ? edgeFromEnv\n : PROD_EDGE;\n\n return {\n target: 'production',\n apiGatewayUrl: resolvedApi,\n orchestratorUrl,\n decisionApiUrl: `${resolvedApi}/v1/personalize`,\n edgeUrl,\n };\n}\n","/**\n * Composer / visual-editor preview detection.\n * Shared by AmplifyPageContent, AmplifyUpProvider, and AmplifyRenderer.\n */\n\n/** True when `preview=true` (or legacy visualEditor) is in request search params. */\nexport function isPreviewRequest(\n searchParams: Record<string, string | string[] | undefined> | URLSearchParams\n): boolean {\n return paramIsTrue(searchParams, 'preview') || paramIsTrue(searchParams, 'visualEditor');\n}\n\n/**\n * Composer Edit (not Preview toggle): overlay unpublished CMS docs.\n * Live visitors and Composer Preview omit this.\n */\nexport function isWorkingContentRequest(\n searchParams: Record<string, string | string[] | undefined> | URLSearchParams\n): boolean {\n return paramIsTrue(searchParams, 'working');\n}\n\nfunction paramIsTrue(\n searchParams: Record<string, string | string[] | undefined> | URLSearchParams,\n key: string\n): boolean {\n if (searchParams instanceof URLSearchParams) {\n return searchParams.get(key) === 'true';\n }\n const value = searchParams[key];\n return value === 'true' || (Array.isArray(value) && value[0] === 'true');\n}\n\n/**\n * Client-only: true when the page is loaded inside AmplifyUp Composer.\n * Does NOT treat every iframe as preview — only Composer referrers / query flags.\n */\nexport function isComposerPreview(): boolean {\n if (typeof window === 'undefined') return false;\n\n if ((window as any).__AMPLIFYUP_PREVIEW_MODE__ === true) return true;\n\n const params = new URLSearchParams(window.location.search);\n if (isPreviewRequest(params)) return true;\n\n if (window.self !== window.top && document.referrer) {\n try {\n const refUrl = new URL(document.referrer);\n if (\n refUrl.hostname === 'amplifyup.ai' ||\n refUrl.hostname.endsWith('.amplifyup.ai') ||\n (refUrl.hostname === 'localhost' && refUrl.port === '5001') ||\n refUrl.pathname.includes('/dashboard/composer') ||\n refUrl.pathname.includes('/dashboard/routes/')\n ) {\n return true;\n }\n } catch {\n // ignore parse error\n }\n }\n\n return false;\n}\n","/**\n * Normalize a route path for Edge resolve requests.\n * Leading slash, no trailing slash (except root), query/hash stripped.\n */\nexport function normalizeRoute(route: string): string {\n let path = String(route || '').trim();\n if (!path) return '/';\n\n try {\n if (/^https?:\\/\\//i.test(path)) {\n path = new URL(path).pathname;\n }\n } catch {\n /* keep path */\n }\n\n const q = path.indexOf('?');\n if (q >= 0) path = path.slice(0, q);\n const h = path.indexOf('#');\n if (h >= 0) path = path.slice(0, h);\n\n if (!path.startsWith('/')) path = `/${path}`;\n if (path.length > 1 && path.endsWith('/')) {\n path = path.replace(/\\/+$/, '');\n }\n return path || '/';\n}\n","/**\n * Compact variant-key codec for URLs and Edge `variants` query params.\n * Default variants are omitted so equivalent assignments share one cache entry.\n */\n\nexport function serializeVariantKeys(\n keys: Record<string, string> | null | undefined\n): string {\n if (!keys) return '';\n const parts: string[] = [];\n const zoneIds = Object.keys(keys).sort();\n for (const zoneId of zoneIds) {\n const variant = keys[zoneId];\n if (!variant || variant === 'default') continue;\n parts.push(`${zoneId}:${variant}`);\n }\n return parts.join(',');\n}\n\nexport function parseVariantKeys(\n raw: string | null | undefined\n): Record<string, string> {\n const out: Record<string, string> = {};\n const text = (raw || '').trim();\n if (!text) return out;\n const decoded = safeDecode(text);\n for (const part of decoded.split(',')) {\n const i = part.indexOf(':');\n if (i <= 0) continue;\n const zoneId = part.slice(0, i).trim();\n const variant = part.slice(i + 1).trim();\n if (zoneId && variant) out[zoneId] = variant;\n }\n return out;\n}\n\nexport function isDefaultVariantKeys(\n keys: Record<string, string> | null | undefined\n): boolean {\n return serializeVariantKeys(keys) === '';\n}\n\nfunction safeDecode(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n","import type { EventTrackingConfig } from '../types';\nimport { normalizeRoute } from './normalizeRoute';\nimport { serializeVariantKeys } from './variantKeys';\n\n/** Mirrors Edge ResolvedComponent — SDK maps this into layoutTree nodes. */\nexport interface EdgeResolvedComponent {\n instanceId: string;\n componentId: string;\n props: Record<string, unknown>;\n children?: Record<string, EdgeResolvedComponent[]>;\n appliedRules?: string[];\n degraded?: boolean;\n}\n\nexport interface EdgeResolvedPayload {\n siteId: string;\n route: string;\n version: number;\n zones: Record<string, EdgeResolvedComponent[]>;\n tree?: EdgeResolvedComponent[];\n /** Composer event bindings baked into the published snapshot. */\n eventTracking?: EventTrackingConfig[];\n meta: {\n variantKeys: Record<string, string>;\n audienceLookup?: { status: string; durationMs: number };\n decideLookup?: { status: string; durationMs: number; checks: number };\n experiments?: Array<{ key: string; variantKey: string; bucket: number }>;\n bot?: unknown;\n resolvedAt: string;\n degraded?: boolean;\n };\n}\n\nexport class EdgeResolveError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'EdgeResolveError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport async function fetchEdgeResolve(options: {\n edgeUrl: string;\n trackingId: string;\n route: string;\n anonId?: string | null;\n siteId?: string | null;\n /** Deterministic variant combo — cacheable; do not send with anonId. */\n variantKeys?: Record<string, string> | null;\n fetch?: typeof fetch;\n /**\n * Next.js Data Cache / ISR. When set, the server fetch can be baked into\n * SSG. Omit on the client so visitor-specific resolve stays fresh.\n */\n revalidate?: number | false;\n}): Promise<EdgeResolvedPayload> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const route = normalizeRoute(options.route);\n const params = new URLSearchParams({\n route,\n trackingId: options.trackingId,\n });\n if (options.siteId) params.set('site', options.siteId);\n const variantParam = serializeVariantKeys(options.variantKeys);\n if (variantParam) {\n params.set('variants', variantParam);\n } else if (options.anonId) {\n params.set('anonId', options.anonId);\n }\n\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n const init: RequestInit & { next?: { revalidate?: number | false } } = {\n method: 'GET',\n headers: { Accept: 'application/json' },\n };\n if (options.revalidate !== undefined) {\n init.next = { revalidate: options.revalidate };\n } else {\n init.cache = 'no-store';\n }\n const res = await fetchFn(`${base}/v1/resolve?${params.toString()}`, init);\n\n const body = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new EdgeResolveError(\n (body && typeof body === 'object' && 'error' in body\n ? String((body as { error: unknown }).error)\n : `Edge resolve failed (${res.status})`) ||\n `Edge resolve failed (${res.status})`,\n res.status,\n body\n );\n }\n\n return body as EdgeResolvedPayload;\n}\n","import type { PageConfig } from '../types';\nimport type { EdgeResolvedComponent, EdgeResolvedPayload } from './resolve';\n\ninterface LayoutNode {\n id: string;\n componentId: string;\n props?: Record<string, unknown>;\n slots?: Array<{\n slotId: string;\n children: LayoutNode[];\n }>;\n /** Marker so AmplifyRenderer skips client Decision API fetches. */\n _contentSource?: 'edge' | 'orchestrator';\n}\n\nfunction mapResolvedComponent(node: EdgeResolvedComponent): LayoutNode {\n const slots: LayoutNode['slots'] = [];\n if (node.children) {\n for (const [slotId, kids] of Object.entries(node.children)) {\n slots.push({\n slotId,\n children: (kids || []).map(mapResolvedComponent),\n });\n }\n }\n\n return {\n id: node.instanceId,\n componentId: node.componentId,\n props: { ...(node.props || {}) },\n ...(slots.length > 0 ? { slots } : {}),\n _contentSource: 'edge',\n };\n}\n\n/**\n * Map Edge /v1/resolve payload → PageConfig for AmplifyRenderer.\n * Prefers `tree` (full page skeleton with zones spliced in); falls back to\n * flattening zone roots when older snapshots lack structure.\n */\nexport function mapResolvedToPageConfig(\n payload: EdgeResolvedPayload\n): PageConfig {\n let layoutTree: LayoutNode[] = [];\n\n if (payload.tree && payload.tree.length > 0) {\n layoutTree = payload.tree.map(mapResolvedComponent);\n } else {\n // Legacy: zones only — render each zone's roots in stable zoneId order\n const zoneIds = Object.keys(payload.zones || {}).sort();\n for (const zoneId of zoneIds) {\n const roots = payload.zones[zoneId] || [];\n layoutTree.push(...roots.map(mapResolvedComponent));\n }\n }\n\n return {\n id: `edge:${payload.siteId}:${payload.route}:v${payload.version}`,\n route: payload.route,\n title: '',\n layoutTree,\n meta: {\n // Stash edge meta for diagnostics (not visitor-facing)\n description: payload.meta?.degraded ? 'degraded' : undefined,\n },\n ...(payload.eventTracking && payload.eventTracking.length > 0\n ? { eventTracking: payload.eventTracking }\n : {}),\n };\n}\n\nexport function collectDegraded(payload: EdgeResolvedPayload): boolean {\n if (payload.meta?.degraded) return true;\n const walk = (nodes: EdgeResolvedComponent[]): boolean =>\n nodes.some(\n (n) =>\n !!n.degraded ||\n (n.children\n ? Object.values(n.children).some((kids) => walk(kids || []))\n : false)\n );\n if (payload.tree && walk(payload.tree)) return true;\n return Object.values(payload.zones || {}).some((roots) => walk(roots || []));\n}\n","import type { AmplifyContentMeta, ContentSource, PageConfig } from '../types';\nimport { isComposerPreview } from '../preview';\nimport {\n EdgeResolveError,\n fetchEdgeResolve,\n type EdgeResolvedPayload,\n} from '../edge/resolve';\nimport {\n collectDegraded,\n mapResolvedToPageConfig,\n} from '../edge/mapResolvedToPageConfig';\n\nexport type { AmplifyContentMeta, ContentSource };\n\nexport interface FetchContentResult {\n pageConfig: PageConfig | null;\n source: ContentSource;\n meta: AmplifyContentMeta | null;\n error: string | null;\n}\n\nexport interface FetchContentOptions {\n route: string;\n trackingId: string;\n anonId?: string | null;\n siteId?: string | null;\n /** Force preview (Composer); otherwise uses isComposerPreview() in browser. */\n preview?: boolean;\n orchestratorUrl: string;\n edgeUrl: string;\n /** Orchestrator layout fetch (SDK instance method or server helper). */\n fetchOrchestratorPage: (\n route: string,\n preview: boolean\n ) => Promise<PageConfig | null>;\n fetchFn?: typeof fetch;\n /** Next.js ISR for Edge resolve (server/SSG only). */\n revalidate?: number | false;\n /** Deterministic variants for ISR (no visitor id in the cache key). */\n variantKeys?: Record<string, string> | null;\n}\n\n/**\n * Single content entry point:\n * - Composer / preview → orchestrator layout provider (drafts + live edits)\n * - Production visitors → Edge /v1/resolve (personalized + CMS-populated)\n *\n * Production never falls back to the orchestrator on Edge failure —\n * callers should render site fallback instead.\n */\nexport async function fetchContent(\n options: FetchContentOptions\n): Promise<FetchContentResult> {\n const preview =\n options.preview ??\n (typeof window !== 'undefined' ? isComposerPreview() : false);\n\n if (preview) {\n try {\n const page = await options.fetchOrchestratorPage(options.route, true);\n return {\n pageConfig: page,\n source: 'orchestrator',\n meta: { source: 'orchestrator' },\n error: null,\n };\n } catch (err) {\n return {\n pageConfig: null,\n source: 'orchestrator',\n meta: { source: 'orchestrator' },\n error: err instanceof Error ? err.message : 'Failed to load preview',\n };\n }\n }\n\n try {\n const payload: EdgeResolvedPayload = await fetchEdgeResolve({\n edgeUrl: options.edgeUrl,\n trackingId: options.trackingId,\n route: options.route,\n anonId: options.variantKeys ? undefined : options.anonId,\n siteId: options.siteId,\n fetch: options.fetchFn,\n revalidate: options.revalidate,\n variantKeys: options.variantKeys,\n });\n\n const pageConfig = mapResolvedToPageConfig(payload);\n const degraded = collectDegraded(payload);\n\n return {\n pageConfig,\n source: 'edge',\n meta: {\n source: 'edge',\n version: payload.version,\n siteId: payload.siteId,\n variantKeys: payload.meta?.variantKeys,\n degraded,\n audienceLookup: payload.meta?.audienceLookup,\n decideLookup: payload.meta?.decideLookup,\n resolvedAt: payload.meta?.resolvedAt,\n },\n error: null,\n };\n } catch (err) {\n if (err instanceof EdgeResolveError && err.status === 404) {\n return {\n pageConfig: null,\n source: 'edge',\n meta: { source: 'edge' },\n error: null, // unpublished → site fallback, not an error banner\n };\n }\n return {\n pageConfig: null,\n source: 'edge',\n meta: { source: 'edge' },\n error:\n err instanceof Error ? err.message : \"Couldn't load page content.\",\n };\n }\n}\n","/**\n * List published routes from Edge so Next.js can SSG pages at build time.\n */\n\nexport async function fetchEdgeRoutes(options: {\n edgeUrl: string;\n trackingId?: string;\n siteId?: string | null;\n fetch?: typeof fetch;\n}): Promise<{ siteId: string; routes: string[] }> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const params = new URLSearchParams();\n if (options.trackingId) params.set('trackingId', options.trackingId);\n if (options.siteId) params.set('site', options.siteId);\n\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 8000);\n try {\n const res = await fetchFn(`${base}/v1/routes?${params.toString()}`, {\n method: 'GET',\n headers: { Accept: 'application/json' },\n cache: 'no-store',\n signal: controller.signal,\n });\n\n const body = (await res.json().catch(() => ({}))) as {\n error?: string;\n siteId?: string;\n routes?: string[];\n };\n if (!res.ok) {\n throw new Error(body.error || `Edge routes failed (${res.status})`);\n }\n\n return {\n siteId: body.siteId || '',\n routes: Array.isArray(body.routes) ? body.routes : [],\n };\n } finally {\n clearTimeout(timer);\n }\n}\n","/**\n * Server-side utilities for AmplifyUp SDK\n *\n * Production: SSG at build (Edge /v1/routes + /v1/resolve), then ISR for\n * unknown routes (SSR once → static). Composer preview stays dynamic.\n */\n\nimport type { AmplifyContentMeta, AmplifyUpTarget, PageConfig } from './types';\nimport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n} from './targets';\nimport { fetchContent } from './content/fetchContent';\nimport { fetchEdgeRoutes } from './edge/routes';\nimport { normalizeRoute } from './edge/normalizeRoute';\nimport { isPreviewRequest, isWorkingContentRequest } from './preview';\n\n/** Default ISR window for published Edge pages (seconds). */\nexport const AMPLIFY_DEFAULT_REVALIDATE = 60;\n\n/**\n * Fetch page configuration on the server.\n * Production visitors resolve via Edge; Composer preview uses the orchestrator.\n *\n * @param route - The route path (e.g., '/', '/about')\n * @param trackingId - The site tracking ID\n * @param preview - Whether to include draft views (default: false)\n * @param options - Optional target / anonId / siteId overrides\n */\nexport async function fetchPageConfigServer(\n route: string,\n trackingId: string,\n preview: boolean = false,\n options?: {\n target?: AmplifyUpTarget;\n anonId?: string | null;\n siteId?: string | null;\n /** Raw search params — used to detect Composer preview when preview flag omitted. */\n searchParams?: URLSearchParams | Record<string, string | string[] | undefined>;\n /** Next.js ISR for Edge resolve. Ignored in preview. Default 60s. */\n revalidate?: number | false;\n /** Cacheable variant combo (personalized ISR). Do not pass anonId with this. */\n variantKeys?: Record<string, string> | null;\n }\n): Promise<PageConfig | null> {\n const target = resolveAmplifyUpTarget({\n configTarget: options?.target,\n });\n const { orchestratorUrl, edgeUrl } = resolveAmplifyUpUrls(target);\n\n const previewFlag =\n preview ||\n (options?.searchParams\n ? isPreviewRequest(options.searchParams as any)\n : false);\n\n const workingFlag =\n options?.searchParams\n ? isWorkingContentRequest(options.searchParams as any)\n : false;\n\n const fetchOrchestratorPage = async (\n pageRoute: string,\n isPreview: boolean\n ): Promise<PageConfig | null> => {\n const params = new URLSearchParams({\n route: pageRoute,\n trackingId,\n });\n if (isPreview) params.set('preview', 'true');\n if (workingFlag) params.set('working', 'true');\n const url = `${orchestratorUrl}/api/layout/provider?${params.toString()}`;\n try {\n const res = await fetch(url, {\n cache: 'no-store',\n headers: { Accept: 'application/json' },\n });\n if (!res.ok) return null;\n const data = await res.json();\n return (data.page as PageConfig) || null;\n } catch {\n return null;\n }\n };\n\n const result = await fetchContent({\n route,\n trackingId,\n anonId: options?.anonId,\n siteId: options?.siteId,\n preview: previewFlag,\n orchestratorUrl,\n edgeUrl,\n fetchOrchestratorPage,\n revalidate: previewFlag\n ? undefined\n : (options?.revalidate ?? AMPLIFY_DEFAULT_REVALIDATE),\n variantKeys: previewFlag ? undefined : options?.variantKeys,\n });\n\n return result.pageConfig;\n}\n\n/**\n * Same as fetchPageConfigServer but also returns content source meta\n * (useful for SSR that wants Edge diagnostics).\n */\nexport async function fetchContentServer(\n route: string,\n trackingId: string,\n options?: {\n preview?: boolean;\n target?: AmplifyUpTarget;\n anonId?: string | null;\n siteId?: string | null;\n searchParams?: URLSearchParams | Record<string, string | string[] | undefined>;\n revalidate?: number | false;\n variantKeys?: Record<string, string> | null;\n }\n): Promise<{\n pageConfig: PageConfig | null;\n meta: AmplifyContentMeta | null;\n error: string | null;\n}> {\n const target = resolveAmplifyUpTarget({\n configTarget: options?.target,\n });\n const { orchestratorUrl, edgeUrl } = resolveAmplifyUpUrls(target);\n const previewFlag =\n options?.preview ||\n (options?.searchParams\n ? isPreviewRequest(options.searchParams as any)\n : false);\n const workingFlag =\n options?.searchParams\n ? isWorkingContentRequest(options.searchParams as any)\n : false;\n\n const result = await fetchContent({\n route,\n trackingId,\n anonId: options?.anonId,\n siteId: options?.siteId,\n preview: previewFlag,\n orchestratorUrl,\n edgeUrl,\n fetchOrchestratorPage: async (pageRoute, isPreview) => {\n const params = new URLSearchParams({\n route: pageRoute,\n trackingId,\n });\n if (isPreview) params.set('preview', 'true');\n if (workingFlag) params.set('working', 'true');\n const url = `${orchestratorUrl}/api/layout/provider?${params.toString()}`;\n try {\n const res = await fetch(url, {\n cache: 'no-store',\n headers: { Accept: 'application/json' },\n });\n if (!res.ok) return null;\n const data = await res.json();\n return (data.page as PageConfig) || null;\n } catch {\n return null;\n }\n },\n revalidate: previewFlag\n ? undefined\n : (options?.revalidate ?? AMPLIFY_DEFAULT_REVALIDATE),\n variantKeys: previewFlag ? undefined : options?.variantKeys,\n });\n\n return {\n pageConfig: result.pageConfig,\n meta: result.meta,\n error: result.error,\n };\n}\n\n/**\n * Published routes for a tracking id (Edge KV). Soft-fails to [] if Edge is down.\n */\nexport async function listPublishedRoutes(\n trackingId: string,\n options?: { target?: AmplifyUpTarget; siteId?: string | null }\n): Promise<string[]> {\n if (!trackingId && !options?.siteId) return [];\n const target = resolveAmplifyUpTarget({\n configTarget: options?.target,\n });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n try {\n const listed = await fetchEdgeRoutes({\n edgeUrl,\n trackingId: trackingId || undefined,\n siteId: options?.siteId,\n });\n return listed.routes;\n } catch {\n return [];\n }\n}\n\nfunction routeToStaticParam(route: string): { slug: string[] } {\n const normalized = normalizeRoute(route);\n if (normalized === '/') return { slug: [] };\n return { slug: normalized.replace(/^\\//, '').split('/') };\n}\n\n/**\n * Use from Next.js `generateStaticParams` on a catch-all page.\n * Always includes `/`. Soft-fails to home-only if Edge is unreachable at build.\n *\n * Skips the Edge route list during `next dev` unless `generateStaticPaths: true`.\n */\nexport async function generateAmplifyStaticParams(\n trackingId: string,\n options?: {\n target?: AmplifyUpTarget;\n siteId?: string | null;\n generateStaticPaths?: boolean;\n }\n): Promise<{ slug: string[] }[]> {\n const generateStaticPaths =\n options?.generateStaticPaths ?? process.env.NODE_ENV !== 'development';\n if (!generateStaticPaths) {\n return [{ slug: [] }];\n }\n const routes = await listPublishedRoutes(trackingId, options);\n const params = routes.map(routeToStaticParam);\n if (!params.some((p) => p.slug.length === 0)) {\n params.unshift({ slug: [] });\n }\n return params;\n}\n\nexport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n};\nexport { parseVariantKeys, serializeVariantKeys, isDefaultVariantKeys } from './edge/variantKeys';\n"]}
|