@amplifyup/sdk 0.1.62 → 0.1.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/targets.ts","../src/preview.ts","../src/field-envelope.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/reservedRoutes.ts","../src/edge/select.ts","../src/edge/query.ts","../src/server.tsx"],"names":["orchestratorUrl"],"mappings":"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","file":"server.mjs","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 * Field envelopes — same shape in published, draft, and Composer edit.\n * `{ value, name }` where `name` is the full dot path (`hero.image`).\n * Produced once at the Edge resolve boundary (`fetchEdgeResolve`).\n */\n\nexport const FIELDS_BRAND: unique symbol = Symbol('amplifyup.fields');\n\nexport type ImageValue = {\n url: string;\n alt?: string;\n width?: number;\n height?: number;\n};\n\nexport type Field<T> = {\n value: T;\n name: string;\n};\n\ntype IsPlainObject<T> = T extends object\n ? T extends readonly unknown[]\n ? false\n : T extends ImageValue\n ? false\n : true\n : false;\n\nexport type Fields<T> = {\n readonly [FIELDS_BRAND]: true;\n} & {\n [K in keyof T]-?: NonNullable<T[K]> extends ImageValue\n ? Field<T[K] | null>\n : IsPlainObject<NonNullable<T[K]>> extends true\n ? Fields<NonNullable<T[K]>>\n : Field<T[K]>;\n};\n\n/** Props passed into site components. Raw CMS bags are not assignable. */\nexport type LayoutComponentProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = {\n fields: Fields<T>;\n};\n\nexport function isBrandedFields(\n value: unknown\n): value is Fields<Record<string, unknown>> {\n return !!value && typeof value === 'object' && FIELDS_BRAND in value;\n}\n\nexport function brandFields<T extends Record<string, unknown>>(\n bag: T\n): Fields<T> {\n if (isBrandedFields(bag)) return bag as unknown as Fields<T>;\n Object.defineProperty(bag, FIELDS_BRAND, {\n value: true,\n enumerable: false,\n configurable: false,\n });\n return bag as unknown as Fields<T>;\n}\n\nexport function isFieldEnvelope(value: unknown): value is Field<unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { name?: unknown; value?: unknown; url?: unknown };\n return typeof rec.name === 'string' && 'value' in rec && !('url' in rec);\n}\n\nexport function isFieldsBag(value: unknown): boolean {\n return isBrandedFields(value);\n}\n\nexport function isPortableImageShape(value: unknown): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n return 'url' in value;\n}\n\nfunction joinPath(prefix: string, key: string): string {\n return prefix ? `${prefix}.${key}` : key;\n}\n\nfunction emptyValue(raw: unknown): unknown {\n if (raw === undefined) return null;\n return raw;\n}\n\n/**\n * Wrap a props bag as envelopes. Already-enveloped bags are returned as-is.\n * Nested plain objects become nested bags; portable images stay a leaf.\n */\nexport function toFieldEnvelopes<T extends Record<string, unknown>>(\n source: T | null | undefined,\n prefix = ''\n): Fields<T> {\n const input = source && typeof source === 'object' && !Array.isArray(source) ? source : {};\n if (isBrandedFields(input)) {\n return input as Fields<T>;\n }\n\n const out: Record<string, unknown> = {};\n for (const [key, raw] of Object.entries(input)) {\n const path = joinPath(prefix, key);\n if (isFieldEnvelope(raw)) {\n out[key] = { value: raw.value ?? null, name: raw.name || path };\n continue;\n }\n if (\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isPortableImageShape(raw) &&\n !(raw as { $$typeof?: unknown }).$$typeof\n ) {\n out[key] = toFieldEnvelopes(raw as Record<string, unknown>, path);\n continue;\n }\n out[key] = { value: emptyValue(raw), name: path };\n }\n return brandFields(out as T);\n}\n\n/** Attach branded `fields` once. Keeps sibling keys (e.g. zoneId). */\nexport function attachFieldEnvelopes(\n props: Record<string, unknown> | null | undefined\n): Record<string, unknown> {\n const raw = props && typeof props === 'object' ? { ...props } : {};\n if (isBrandedFields(raw.fields)) return raw;\n const { fields: existing, ...content } = raw;\n const source =\n existing && typeof existing === 'object' && !isFieldEnvelope(existing)\n ? (existing as Record<string, unknown>)\n : content;\n return { ...raw, fields: toFieldEnvelopes(source) };\n}\n\nfunction walkLayoutNodes(nodes: unknown[] | undefined): void {\n if (!Array.isArray(nodes)) return;\n for (const node of nodes) {\n if (!node || typeof node !== 'object') continue;\n const rec = node as {\n props?: Record<string, unknown>;\n slots?: Array<{ children?: unknown[] }>;\n };\n rec.props = attachFieldEnvelopes(rec.props);\n for (const slot of rec.slots || []) {\n walkLayoutNodes(slot.children);\n }\n }\n}\n\n/** Brand `fields` on an orchestrator page tree (preview). Idempotent. */\nexport function envelopePageConfig<T extends { layoutTree?: unknown }>(\n page: T | null | undefined\n): T | null {\n if (!page || typeof page !== 'object') return page ?? null;\n const tree = page.layoutTree;\n if (Array.isArray(tree)) walkLayoutNodes(tree);\n return page;\n}\n\n/**\n * Flatten a props or fields bag into Composer store keys.\n * Keys match `toFieldEnvelopes` names: `heading`, `hero.image` — never\n * `fields.heading` or `hero/image`.\n */\nexport function collectFieldPatches(\n props: Record<string, unknown> | null | undefined\n): Array<{ name: string; value: unknown }> {\n const out: Array<{ name: string; value: unknown }> = [];\n const walk = (obj: Record<string, unknown>, prefix: string) => {\n for (const [key, raw] of Object.entries(obj)) {\n if (key === 'fields' && raw && typeof raw === 'object' && !Array.isArray(raw) && !isFieldEnvelope(raw)) {\n walk(raw as Record<string, unknown>, prefix);\n continue;\n }\n const path = joinPath(prefix, key);\n if (isFieldEnvelope(raw)) {\n out.push({ name: raw.name || path, value: raw.value });\n continue;\n }\n if (\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isPortableImageShape(raw) &&\n !(raw as { $$typeof?: unknown }).$$typeof\n ) {\n walk(raw as Record<string, unknown>, path);\n continue;\n }\n out.push({ name: path, value: emptyValue(raw) });\n }\n };\n if (props && typeof props === 'object' && !Array.isArray(props)) {\n walk(props, '');\n }\n return out;\n}\n\nexport function envelopeValue(field: unknown): unknown {\n if (isFieldEnvelope(field)) return field.value;\n return field;\n}\n\nexport function envelopeName(field: unknown): string {\n if (isFieldEnvelope(field)) return field.name;\n return '';\n}\n\n/** Resolve Field/Image/RichText binding. Computed `value` requires `name`. */\nexport function resolveEditableBinding(\n field: Field<unknown> | undefined,\n value: unknown,\n name: string | undefined\n): { name: string; value: unknown; requiresName: boolean } {\n if (isFieldEnvelope(field)) {\n return { name: field.name, value: field.value, requiresName: false };\n }\n return {\n name: name || '',\n value,\n requiresName: value !== undefined && !name,\n };\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 { attachFieldEnvelopes } from '../field-envelope';\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 pageData?: import('../page-context').PageDataSnapshot;\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 sessionId?: 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 if (options.sessionId) params.set('sessionId', options.sessionId);\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 envelopeResolvedPayload(body as EdgeResolvedPayload);\n}\n\nfunction envelopeResolvedComponent(node: EdgeResolvedComponent): void {\n node.props = attachFieldEnvelopes(node.props);\n if (!node.children) return;\n for (const kids of Object.values(node.children)) {\n for (const child of kids || []) envelopeResolvedComponent(child);\n }\n}\n\n/** Stamp branded Field envelopes onto each node's props. Edge JSON stays raw. */\nfunction envelopeResolvedPayload(\n payload: EdgeResolvedPayload\n): EdgeResolvedPayload {\n if (payload.tree) {\n for (const node of payload.tree) envelopeResolvedComponent(node);\n }\n if (payload.zones) {\n for (const roots of Object.values(payload.zones)) {\n for (const node of roots || []) envelopeResolvedComponent(node);\n }\n }\n return payload;\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 ...(payload.pageData ? { pageData: payload.pageData } : {}),\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';\nimport { envelopePageConfig } from '../field-envelope';\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 sessionId?: 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 = envelopePageConfig(\n await options.fetchOrchestratorPage(options.route, true)\n );\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 sessionId: options.variantKeys ? undefined : options.sessionId,\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 * Reserved customer-site pathnames owned by AmplifyUp (not marketing URLs).\n */\n\n/** Composer composition / layout editing. Live visitors must not see this page. */\nexport const AMPLIFYUP_EDITOR_ROUTE = '/__amplifyup/editor';\n\nexport function isAmplifyUpEditorRoute(pathname: string): boolean {\n return (\n pathname === AMPLIFYUP_EDITOR_ROUTE ||\n pathname.startsWith(`${AMPLIFYUP_EDITOR_ROUTE}/`)\n );\n}\n","/**\n * On-request variant selection (tier 3).\n *\n * Decisions happen on AmplifyUp Edge. The client asks after the view has\n * rendered; the Worker returns variant keys only. Profile data never leaves\n * the edge. This helper is the JS wrapper around POST /v1/select — the same\n * wire format is the contract for Flutter / native / .NET clients. No DOM\n * or Next.js assumptions.\n */\n\nimport { normalizeRoute } from './normalizeRoute';\nimport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n type AmplifyUpTarget,\n} from '../targets';\n\nexport interface SelectVariantsResult {\n siteId: string;\n view: string;\n variantKeys: Record<string, string>;\n meta?: Record<string, unknown>;\n}\n\nexport class SelectVariantsError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'SelectVariantsError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport interface FetchEdgeSelectOptions {\n edgeUrl: string;\n trackingId?: string;\n site?: string;\n view: string;\n anonId: string;\n sessionId?: string;\n zones?: string[];\n /** Request-local facts the edge cannot observe (app version, screen class). */\n context?: Record<string, unknown>;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\nexport async function fetchEdgeSelect(\n options: FetchEdgeSelectOptions\n): Promise<SelectVariantsResult> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n\n if (!options.trackingId && !options.site) {\n throw new SelectVariantsError('trackingId or site is required', 400);\n }\n\n const res = await fetchFn(`${base}/v1/select`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n cache: 'no-store',\n signal: options.signal,\n body: JSON.stringify({\n view: normalizeRoute(options.view),\n ...(options.trackingId ? { trackingId: options.trackingId } : {}),\n ...(options.site ? { site: options.site } : {}),\n anonId: options.anonId,\n ...(options.sessionId ? { sessionId: options.sessionId } : {}),\n ...(options.zones?.length ? { zones: options.zones } : {}),\n ...(options.context ? { context: options.context } : {}),\n }),\n });\n\n const body = (await res.json().catch(() => ({}))) as Partial<SelectVariantsResult> & {\n error?: string;\n };\n\n if (!res.ok) {\n throw new SelectVariantsError(\n body.error || `Select failed (${res.status})`,\n res.status,\n body\n );\n }\n\n return {\n siteId: String(body.siteId || ''),\n view: String(body.view || normalizeRoute(options.view)),\n variantKeys:\n body.variantKeys && typeof body.variantKeys === 'object'\n ? body.variantKeys\n : {},\n meta: body.meta,\n };\n}\n\nexport interface SelectVariantsOptions {\n trackingId?: string;\n site?: string;\n view: string;\n anonId: string;\n sessionId?: string;\n zones?: string[];\n context?: Record<string, unknown>;\n target?: AmplifyUpTarget;\n edgeUrl?: string;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Ask Edge to decide deferred rules for a view. Returns variant keys to pass\n * to `/v1/resolve?variants=`.\n */\nexport async function selectVariants(\n options: SelectVariantsOptions\n): Promise<SelectVariantsResult> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n return fetchEdgeSelect({\n edgeUrl: options.edgeUrl || edgeUrl,\n trackingId: options.trackingId,\n site: options.site,\n view: options.view,\n anonId: options.anonId,\n sessionId: options.sessionId,\n zones: options.zones,\n context: options.context,\n fetch: options.fetch,\n signal: options.signal,\n });\n}\n","/**\n * Runtime content queries.\n *\n * Page resolve covers data known at Deploy. Visitor-triggered data — search,\n * load more, pickers — runs here: the browser asks AmplifyUp, AmplifyUp asks\n * the CMS. Only entities published with the page can be queried.\n * Results are plain CMS rows, not Field envelopes, and are not canvas-editable.\n */\n\nimport { normalizeRoute } from './normalizeRoute';\nimport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n type AmplifyUpTarget,\n} from '../targets';\n\nexport type QueryFilterOp =\n | 'eq'\n | 'neq'\n | 'in'\n | 'nin'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'contains'\n | 'exists';\n\nexport interface QueryFilter {\n field: string;\n op: QueryFilterOp;\n value?: unknown;\n}\n\nexport interface QuerySort {\n field: string;\n dir: 'asc' | 'desc';\n}\n\n/**\n * Provider-neutral query. AmplifyUp compiles this for the connected CMS —\n * it never contains CMS query syntax. Same shape Composer saves on a\n * query connection, and the shape returned in `{field}Pagination.spec`.\n */\nexport interface QuerySpec {\n providerId: string;\n entity: string;\n filter: QueryFilter[];\n sort: QuerySort[];\n limit: number;\n offset: number;\n}\n\n/** Pagination meta added to list props when a query connection is paginated. */\nexport interface QueryPagination {\n hasMore: boolean;\n limit: number;\n offset: number;\n nextOffset: number;\n spec: QuerySpec;\n}\n\nexport interface QueryResult<T = Record<string, unknown>> {\n results: T[];\n count: number;\n hasMore: boolean;\n limit: number;\n offset: number;\n nextOffset: number;\n /** True when a content source failed and results may be incomplete. */\n degraded?: boolean;\n}\n\nexport class QueryContentError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'QueryContentError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport interface FetchEdgeQueryOptions {\n edgeUrl: string;\n trackingId: string;\n /** Published route the query belongs to (provides sources + entity mapping). */\n route: string;\n spec: QuerySpec;\n siteId?: string | null;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Low-level runtime query against a known Edge URL.\n * Most callers should use `queryContent`, which resolves the URL for them.\n */\nexport async function fetchEdgeQuery<T = Record<string, unknown>>(\n options: FetchEdgeQueryOptions\n): Promise<QueryResult<T>> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n const limit = Math.max(1, Number(options.spec.limit) || 10);\n const offset = Math.max(0, Number(options.spec.offset) || 0);\n\n const res = await fetchFn(`${base}/v1/query`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n cache: 'no-store',\n signal: options.signal,\n body: JSON.stringify({\n route: normalizeRoute(options.route),\n trackingId: options.trackingId,\n ...(options.siteId ? { site: options.siteId } : {}),\n spec: { ...options.spec, limit, offset },\n }),\n });\n\n const body = (await res.json().catch(() => ({}))) as Partial<QueryResult<T>> & {\n error?: string;\n };\n\n if (!res.ok) {\n throw new QueryContentError(\n body.error || `Content query failed (${res.status})`,\n res.status,\n body\n );\n }\n\n const results = Array.isArray(body.results) ? body.results : [];\n const resolvedLimit = Number(body.limit) || limit;\n const resolvedOffset = Number.isFinite(Number(body.offset))\n ? Number(body.offset)\n : offset;\n\n return {\n results,\n count: Number(body.count) || results.length,\n hasMore: !!body.hasMore,\n limit: resolvedLimit,\n offset: resolvedOffset,\n nextOffset: Number(body.nextOffset) || resolvedOffset + resolvedLimit,\n degraded: body.degraded,\n };\n}\n\nexport interface QueryContentOptions {\n trackingId: string;\n /** Published route the query belongs to, e.g. '/insights'. */\n route: string;\n spec: QuerySpec;\n siteId?: string | null;\n target?: AmplifyUpTarget;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Run a content query at request time (search, load more, pickers).\n *\n * Start from the published spec on a paginated list prop so filters and sort\n * stay owned by Composer:\n *\n * ```ts\n * const next = await queryContent({\n * trackingId,\n * route: '/insights',\n * spec: { ...postsPagination.spec, offset: postsPagination.nextOffset },\n * });\n * ```\n */\nexport async function queryContent<T = Record<string, unknown>>(\n options: QueryContentOptions\n): Promise<QueryResult<T>> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n\n return fetchEdgeQuery<T>({\n edgeUrl,\n trackingId: options.trackingId,\n route: options.route,\n spec: options.spec,\n siteId: options.siteId,\n fetch: options.fetch,\n signal: options.signal,\n });\n}\n\n/** Convenience: next page from pagination meta on a list prop. */\nexport function nextPageSpec(pagination: QueryPagination): QuerySpec {\n return { ...pagination.spec, offset: pagination.nextOffset };\n}\n\n/**\n * Convenience: same published query, filtered by a visitor's search term.\n * Resets to the first page. Empty terms return the unfiltered spec.\n */\nexport function searchSpec(\n pagination: QueryPagination,\n field: string,\n term: string\n): QuerySpec {\n const value = String(term || '').trim();\n const base = { ...pagination.spec, offset: 0 };\n if (!value) return base;\n return {\n ...base,\n filter: [...(base.filter || []), { field, op: 'contains', value }],\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 if (options?.searchParams) {\n const sp =\n options.searchParams instanceof URLSearchParams\n ? options.searchParams\n : new URLSearchParams(\n Object.entries(options.searchParams).flatMap(([k, v]) =>\n v == null\n ? []\n : Array.isArray(v)\n ? v.map((item) => [k, item] as [string, string])\n : [[k, v] as [string, string]]\n )\n );\n const zoneId = sp.get('zoneId');\n const compositionId = sp.get('compositionId');\n if (zoneId) params.set('zoneId', zoneId);\n if (compositionId) params.set('compositionId', compositionId);\n }\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 { AMPLIFYUP_EDITOR_ROUTE, isAmplifyUpEditorRoute } from './reservedRoutes';\nexport { parseVariantKeys, serializeVariantKeys, isDefaultVariantKeys } from './edge/variantKeys';\nexport {\n selectVariants,\n fetchEdgeSelect,\n SelectVariantsError,\n type SelectVariantsOptions,\n type FetchEdgeSelectOptions,\n type SelectVariantsResult,\n} from './edge/select';\nexport {\n queryContent,\n fetchEdgeQuery,\n nextPageSpec,\n searchSpec,\n QueryContentError,\n type QueryContentOptions,\n type FetchEdgeQueryOptions,\n type QueryResult,\n type QueryPagination,\n type QuerySpec,\n type QueryFilter,\n type QueryFilterOp,\n type QuerySort,\n} from './edge/query';\n"]}
1
+ {"version":3,"sources":["../src/targets.ts","../src/preview.ts","../src/field-envelope.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/reservedRoutes.ts","../src/edge/select.ts","../src/edge/query.ts","../src/server.tsx"],"names":["orchestratorUrl"],"mappings":"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","file":"server.mjs","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 * Field envelopes — same shape in published, draft, and Composer edit.\n * `{ value, name }` where `name` is the full dot path (`hero.image`).\n * Produced once at the Edge resolve boundary (`fetchEdgeResolve`).\n */\n\nexport const FIELDS_BRAND: unique symbol = Symbol('amplifyup.fields');\n\nexport type ImageValue = {\n url: string;\n alt?: string;\n width?: number;\n height?: number;\n};\n\nexport type Field<T> = {\n value: T;\n name: string;\n};\n\n/** Portable entry ref after normalize (`id` required). */\nexport type PortableRef = {\n id: string;\n type?: string;\n};\n\n/**\n * Repeater envelope: each item is a `Fields` bag.\n * Paths are dotted indexes (`slides.0.title`).\n */\nexport type CollectionField<T extends Record<string, unknown>> = {\n value: Array<Fields<T>>;\n name: string;\n};\n\ntype IsPlainObject<T> = T extends object\n ? T extends readonly unknown[]\n ? false\n : T extends ImageValue\n ? false\n : true\n : false;\n\n/** Resolved / authored entry refs carry `id` (see `stampPlatformIdentity`). */\ntype IsEntryRefItem<T> = T extends { id: string } ? true : false;\n\ntype AsRecord<T> = T extends Record<string, unknown> ? T : Record<string, unknown>;\n\ntype FieldsProp<T> = NonNullable<T> extends ImageValue\n ? Field<T | null>\n : NonNullable<T> extends readonly (infer U)[]\n ? IsEntryRefItem<U> extends true\n ? Field<T>\n : IsPlainObject<U> extends true\n ? CollectionField<AsRecord<U>>\n : Field<T>\n : IsPlainObject<NonNullable<T>> extends true\n ? Fields<NonNullable<T>>\n : Field<T>;\n\nexport type Fields<T> = {\n readonly [FIELDS_BRAND]: true;\n} & {\n [K in keyof T]-?: FieldsProp<T[K]>;\n};\n\n/** Props passed into site components. Raw CMS bags are not assignable. */\nexport type LayoutComponentProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = {\n fields: Fields<T>;\n};\n\nexport function isBrandedFields(\n value: unknown\n): value is Fields<Record<string, unknown>> {\n return !!value && typeof value === 'object' && FIELDS_BRAND in value;\n}\n\nexport function brandFields<T extends Record<string, unknown>>(\n bag: T\n): Fields<T> {\n if (isBrandedFields(bag)) return bag as unknown as Fields<T>;\n Object.defineProperty(bag, FIELDS_BRAND, {\n value: true,\n enumerable: false,\n configurable: false,\n });\n return bag as unknown as Fields<T>;\n}\n\nexport function isFieldEnvelope(value: unknown): value is Field<unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { name?: unknown; value?: unknown; url?: unknown };\n return typeof rec.name === 'string' && 'value' in rec && !('url' in rec);\n}\n\nexport function isFieldsBag(value: unknown): boolean {\n return isBrandedFields(value);\n}\n\nexport function isPortableImageShape(value: unknown): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n return 'url' in value;\n}\n\n/** Document / entry identity — do not recurse these as repeater rows. */\nexport function isEntryRefItem(value: unknown): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { id?: unknown; _id?: unknown; docId?: unknown };\n return (\n (typeof rec.id === 'string' && rec.id.trim().length > 0) ||\n (typeof rec._id === 'string' && rec._id.trim().length > 0) ||\n (typeof rec.docId === 'string' && rec.docId.trim().length > 0)\n );\n}\n\n/**\n * True when an array should become a repeater (`Fields` per item).\n * Empty arrays and entry-ref / primitive / image lists stay a single envelope.\n */\nexport function isRepeaterArray(value: unknown): value is unknown[] {\n if (!Array.isArray(value) || value.length === 0) return false;\n const sample = value.find((item) => item != null);\n if (sample === undefined) return false;\n if (typeof sample !== 'object' || Array.isArray(sample)) return false;\n if (isPortableImageShape(sample)) return false;\n if (isEntryRefItem(sample)) return false;\n if ((sample as { $$typeof?: unknown }).$$typeof) return false;\n return true;\n}\n\nfunction joinPath(prefix: string, key: string): string {\n return prefix ? `${prefix}.${key}` : key;\n}\n\nfunction emptyValue(raw: unknown): unknown {\n if (raw === undefined) return null;\n return raw;\n}\n\n/**\n * Wrap a props bag as envelopes. Already-enveloped bags are returned as-is.\n * Nested plain objects become nested bags; portable images stay a leaf.\n */\nexport function toFieldEnvelopes<T extends Record<string, unknown>>(\n source: T | null | undefined,\n prefix = ''\n): Fields<T> {\n const input = source && typeof source === 'object' && !Array.isArray(source) ? source : {};\n if (isBrandedFields(input)) {\n return input as Fields<T>;\n }\n\n const out: Record<string, unknown> = {};\n for (const [key, raw] of Object.entries(input)) {\n const path = joinPath(prefix, key);\n if (isFieldEnvelope(raw)) {\n const inner = raw.value;\n if (isRepeaterArray(inner)) {\n out[key] = {\n value: envelopeRepeaterItems(inner, raw.name || path),\n name: raw.name || path,\n };\n continue;\n }\n out[key] = { value: raw.value ?? null, name: raw.name || path };\n continue;\n }\n if (isRepeaterArray(raw)) {\n out[key] = { value: envelopeRepeaterItems(raw, path), name: path };\n continue;\n }\n if (\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isPortableImageShape(raw) &&\n !(raw as { $$typeof?: unknown }).$$typeof\n ) {\n out[key] = toFieldEnvelopes(raw as Record<string, unknown>, path);\n continue;\n }\n out[key] = { value: emptyValue(raw), name: path };\n }\n return brandFields(out as T);\n}\n\nfunction envelopeRepeaterItems(\n items: unknown[],\n prefix: string\n): Array<Fields<Record<string, unknown>>> {\n return items.map((item, i) => {\n const path = joinPath(prefix, String(i));\n if (isBrandedFields(item)) return item;\n if (item && typeof item === 'object' && !Array.isArray(item)) {\n return toFieldEnvelopes(item as Record<string, unknown>, path);\n }\n return toFieldEnvelopes({}, path);\n });\n}\n\n/** Attach branded `fields` once. Keeps sibling keys (e.g. zoneId). */\nexport function attachFieldEnvelopes(\n props: Record<string, unknown> | null | undefined\n): Record<string, unknown> {\n const raw = props && typeof props === 'object' ? { ...props } : {};\n if (isBrandedFields(raw.fields)) return raw;\n const { fields: existing, ...content } = raw;\n const source =\n existing && typeof existing === 'object' && !isFieldEnvelope(existing)\n ? (existing as Record<string, unknown>)\n : content;\n return { ...raw, fields: toFieldEnvelopes(source) };\n}\n\nfunction walkLayoutNodes(nodes: unknown[] | undefined): void {\n if (!Array.isArray(nodes)) return;\n for (const node of nodes) {\n if (!node || typeof node !== 'object') continue;\n const rec = node as {\n props?: Record<string, unknown>;\n slots?: Array<{ children?: unknown[] }>;\n };\n rec.props = attachFieldEnvelopes(rec.props);\n for (const slot of rec.slots || []) {\n walkLayoutNodes(slot.children);\n }\n }\n}\n\n/** Brand `fields` on an orchestrator page tree (preview). Idempotent. */\nexport function envelopePageConfig<T extends { layoutTree?: unknown }>(\n page: T | null | undefined\n): T | null {\n if (!page || typeof page !== 'object') return page ?? null;\n const tree = page.layoutTree;\n if (Array.isArray(tree)) walkLayoutNodes(tree);\n return page;\n}\n\n/**\n * Flatten a props or fields bag into Composer store keys.\n * Keys match `toFieldEnvelopes` names: `heading`, `hero.image` — never\n * `fields.heading` or `hero/image`.\n */\nexport function collectFieldPatches(\n props: Record<string, unknown> | null | undefined\n): Array<{ name: string; value: unknown }> {\n const out: Array<{ name: string; value: unknown }> = [];\n const walkRepeater = (items: unknown[], prefix: string) => {\n items.forEach((item, i) => {\n const itemPath = joinPath(prefix, String(i));\n if (isBrandedFields(item) || (item && typeof item === 'object' && !Array.isArray(item) && !isFieldEnvelope(item))) {\n walk(item as Record<string, unknown>, itemPath);\n }\n });\n };\n\n const walk = (obj: Record<string, unknown>, prefix: string) => {\n for (const [key, raw] of Object.entries(obj)) {\n if (key === 'fields' && raw && typeof raw === 'object' && !Array.isArray(raw) && !isFieldEnvelope(raw)) {\n walk(raw as Record<string, unknown>, prefix);\n continue;\n }\n const path = joinPath(prefix, key);\n if (isFieldEnvelope(raw)) {\n if (isRepeaterArray(raw.value)) {\n walkRepeater(raw.value, raw.name || path);\n continue;\n }\n out.push({ name: raw.name || path, value: raw.value });\n continue;\n }\n if (isRepeaterArray(raw)) {\n walkRepeater(raw, path);\n continue;\n }\n if (\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isPortableImageShape(raw) &&\n !(raw as { $$typeof?: unknown }).$$typeof\n ) {\n walk(raw as Record<string, unknown>, path);\n continue;\n }\n out.push({ name: path, value: emptyValue(raw) });\n }\n };\n if (props && typeof props === 'object' && !Array.isArray(props)) {\n walk(props, '');\n }\n return out;\n}\n\nexport function envelopeValue(field: unknown): unknown {\n if (isFieldEnvelope(field)) return field.value;\n return field;\n}\n\n/** Plain object from a repeater item (`Fields` or raw). */\nexport function unwrapFieldsBag(item: unknown): Record<string, unknown> {\n if (!item || typeof item !== 'object' || Array.isArray(item)) return {};\n const out: Record<string, unknown> = {};\n for (const [key, raw] of Object.entries(item as Record<string, unknown>)) {\n if (isFieldEnvelope(raw)) {\n out[key] = raw.value;\n continue;\n }\n if (\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isPortableImageShape(raw) &&\n !isEntryRefItem(raw) &&\n !(raw as { $$typeof?: unknown }).$$typeof\n ) {\n out[key] = unwrapFieldsBag(raw);\n continue;\n }\n out[key] = raw;\n }\n return out;\n}\n\n/**\n * Items for `<Collection>`. Re-envelopes a plain overlay array so paths\n * stay `name.0.field`.\n */\nexport function resolveCollectionItems<T extends Record<string, unknown>>(\n field: { value?: unknown; name?: string } | undefined,\n overlay?: unknown\n): Array<Fields<T>> {\n const name = typeof field?.name === 'string' ? field.name : '';\n const raw = overlay !== undefined ? overlay : field?.value;\n const list = Array.isArray(raw)\n ? raw\n : isFieldEnvelope(raw) && Array.isArray(raw.value)\n ? raw.value\n : [];\n if (list.length === 0) return [];\n if (isRepeaterArray(list) || list.every((item) => isBrandedFields(item))) {\n return envelopeRepeaterItems(list, name) as Array<Fields<T>>;\n }\n // Reference / primitive list — still wrap each object so Collection can\n // iterate, but callers should read `.value` instead of using Collection.\n return envelopeRepeaterItems(\n list.map((item) =>\n item && typeof item === 'object' && !Array.isArray(item)\n ? item\n : {}\n ),\n name\n ) as Array<Fields<T>>;\n}\n\nexport function envelopeName(field: unknown): string {\n if (isFieldEnvelope(field)) return field.name;\n return '';\n}\n\n/** Resolve Field/Image/RichText binding. Computed `value` requires `name`. */\nexport function resolveEditableBinding(\n field: Field<unknown> | undefined,\n value: unknown,\n name: string | undefined\n): { name: string; value: unknown; requiresName: boolean } {\n if (isFieldEnvelope(field)) {\n return { name: field.name, value: field.value, requiresName: false };\n }\n return {\n name: name || '',\n value,\n requiresName: value !== undefined && !name,\n };\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 { attachFieldEnvelopes } from '../field-envelope';\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 pageData?: import('../page-context').PageDataSnapshot;\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 sessionId?: 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 if (options.sessionId) params.set('sessionId', options.sessionId);\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 envelopeResolvedPayload(body as EdgeResolvedPayload);\n}\n\nfunction envelopeResolvedComponent(node: EdgeResolvedComponent): void {\n node.props = attachFieldEnvelopes(node.props);\n if (!node.children) return;\n for (const kids of Object.values(node.children)) {\n for (const child of kids || []) envelopeResolvedComponent(child);\n }\n}\n\n/** Stamp branded Field envelopes onto each node's props. Edge JSON stays raw. */\nfunction envelopeResolvedPayload(\n payload: EdgeResolvedPayload\n): EdgeResolvedPayload {\n if (payload.tree) {\n for (const node of payload.tree) envelopeResolvedComponent(node);\n }\n if (payload.zones) {\n for (const roots of Object.values(payload.zones)) {\n for (const node of roots || []) envelopeResolvedComponent(node);\n }\n }\n return payload;\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 ...(payload.pageData ? { pageData: payload.pageData } : {}),\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';\nimport { envelopePageConfig } from '../field-envelope';\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 sessionId?: 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 = envelopePageConfig(\n await options.fetchOrchestratorPage(options.route, true)\n );\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 sessionId: options.variantKeys ? undefined : options.sessionId,\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 * Reserved customer-site pathnames owned by AmplifyUp (not marketing URLs).\n */\n\n/** Composer composition / layout editing. Live visitors must not see this page. */\nexport const AMPLIFYUP_EDITOR_ROUTE = '/__amplifyup/editor';\n\nexport function isAmplifyUpEditorRoute(pathname: string): boolean {\n return (\n pathname === AMPLIFYUP_EDITOR_ROUTE ||\n pathname.startsWith(`${AMPLIFYUP_EDITOR_ROUTE}/`)\n );\n}\n","/**\n * On-request variant selection (tier 3).\n *\n * Decisions happen on AmplifyUp Edge. The client asks after the view has\n * rendered; the Worker returns variant keys only. Profile data never leaves\n * the edge. This helper is the JS wrapper around POST /v1/select — the same\n * wire format is the contract for Flutter / native / .NET clients. No DOM\n * or Next.js assumptions.\n */\n\nimport { normalizeRoute } from './normalizeRoute';\nimport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n type AmplifyUpTarget,\n} from '../targets';\n\nexport interface SelectVariantsResult {\n siteId: string;\n view: string;\n variantKeys: Record<string, string>;\n meta?: Record<string, unknown>;\n}\n\nexport class SelectVariantsError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'SelectVariantsError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport interface FetchEdgeSelectOptions {\n edgeUrl: string;\n trackingId?: string;\n site?: string;\n view: string;\n anonId: string;\n sessionId?: string;\n zones?: string[];\n /** Request-local facts the edge cannot observe (app version, screen class). */\n context?: Record<string, unknown>;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\nexport async function fetchEdgeSelect(\n options: FetchEdgeSelectOptions\n): Promise<SelectVariantsResult> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n\n if (!options.trackingId && !options.site) {\n throw new SelectVariantsError('trackingId or site is required', 400);\n }\n\n const res = await fetchFn(`${base}/v1/select`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n cache: 'no-store',\n signal: options.signal,\n body: JSON.stringify({\n view: normalizeRoute(options.view),\n ...(options.trackingId ? { trackingId: options.trackingId } : {}),\n ...(options.site ? { site: options.site } : {}),\n anonId: options.anonId,\n ...(options.sessionId ? { sessionId: options.sessionId } : {}),\n ...(options.zones?.length ? { zones: options.zones } : {}),\n ...(options.context ? { context: options.context } : {}),\n }),\n });\n\n const body = (await res.json().catch(() => ({}))) as Partial<SelectVariantsResult> & {\n error?: string;\n };\n\n if (!res.ok) {\n throw new SelectVariantsError(\n body.error || `Select failed (${res.status})`,\n res.status,\n body\n );\n }\n\n return {\n siteId: String(body.siteId || ''),\n view: String(body.view || normalizeRoute(options.view)),\n variantKeys:\n body.variantKeys && typeof body.variantKeys === 'object'\n ? body.variantKeys\n : {},\n meta: body.meta,\n };\n}\n\nexport interface SelectVariantsOptions {\n trackingId?: string;\n site?: string;\n view: string;\n anonId: string;\n sessionId?: string;\n zones?: string[];\n context?: Record<string, unknown>;\n target?: AmplifyUpTarget;\n edgeUrl?: string;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Ask Edge to decide deferred rules for a view. Returns variant keys to pass\n * to `/v1/resolve?variants=`.\n */\nexport async function selectVariants(\n options: SelectVariantsOptions\n): Promise<SelectVariantsResult> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n return fetchEdgeSelect({\n edgeUrl: options.edgeUrl || edgeUrl,\n trackingId: options.trackingId,\n site: options.site,\n view: options.view,\n anonId: options.anonId,\n sessionId: options.sessionId,\n zones: options.zones,\n context: options.context,\n fetch: options.fetch,\n signal: options.signal,\n });\n}\n","/**\n * Runtime content queries.\n *\n * Page resolve covers data known at Deploy. Visitor-triggered data — search,\n * load more, pickers — runs here: the browser asks AmplifyUp, AmplifyUp asks\n * the CMS. Only entities published with the page can be queried.\n * Results are plain CMS rows, not Field envelopes, and are not canvas-editable.\n */\n\nimport { normalizeRoute } from './normalizeRoute';\nimport {\n resolveAmplifyUpTarget,\n resolveAmplifyUpUrls,\n type AmplifyUpTarget,\n} from '../targets';\n\nexport type QueryFilterOp =\n | 'eq'\n | 'neq'\n | 'in'\n | 'nin'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'contains'\n | 'exists';\n\nexport interface QueryFilter {\n field: string;\n op: QueryFilterOp;\n value?: unknown;\n}\n\nexport interface QuerySort {\n field: string;\n dir: 'asc' | 'desc';\n}\n\n/**\n * Provider-neutral query. AmplifyUp compiles this for the connected CMS —\n * it never contains CMS query syntax. Same shape Composer saves on a\n * query connection, and the shape returned in `{field}Pagination.spec`.\n */\nexport interface QuerySpec {\n providerId: string;\n entity: string;\n filter: QueryFilter[];\n sort: QuerySort[];\n limit: number;\n offset: number;\n}\n\n/** Pagination meta added to list props when a query connection is paginated. */\nexport interface QueryPagination {\n hasMore: boolean;\n limit: number;\n offset: number;\n nextOffset: number;\n spec: QuerySpec;\n}\n\nexport interface QueryResult<T = Record<string, unknown>> {\n results: T[];\n count: number;\n hasMore: boolean;\n limit: number;\n offset: number;\n nextOffset: number;\n /** True when a content source failed and results may be incomplete. */\n degraded?: boolean;\n}\n\nexport class QueryContentError extends Error {\n status: number;\n body: unknown;\n\n constructor(message: string, status: number, body?: unknown) {\n super(message);\n this.name = 'QueryContentError';\n this.status = status;\n this.body = body;\n }\n}\n\nexport interface FetchEdgeQueryOptions {\n edgeUrl: string;\n trackingId: string;\n /** Published route the query belongs to (provides sources + entity mapping). */\n route: string;\n spec: QuerySpec;\n siteId?: string | null;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Low-level runtime query against a known Edge URL.\n * Most callers should use `queryContent`, which resolves the URL for them.\n */\nexport async function fetchEdgeQuery<T = Record<string, unknown>>(\n options: FetchEdgeQueryOptions\n): Promise<QueryResult<T>> {\n const base = options.edgeUrl.replace(/\\/+$/, '');\n const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\n const limit = Math.max(1, Number(options.spec.limit) || 10);\n const offset = Math.max(0, Number(options.spec.offset) || 0);\n\n const res = await fetchFn(`${base}/v1/query`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n cache: 'no-store',\n signal: options.signal,\n body: JSON.stringify({\n route: normalizeRoute(options.route),\n trackingId: options.trackingId,\n ...(options.siteId ? { site: options.siteId } : {}),\n spec: { ...options.spec, limit, offset },\n }),\n });\n\n const body = (await res.json().catch(() => ({}))) as Partial<QueryResult<T>> & {\n error?: string;\n };\n\n if (!res.ok) {\n throw new QueryContentError(\n body.error || `Content query failed (${res.status})`,\n res.status,\n body\n );\n }\n\n const results = Array.isArray(body.results) ? body.results : [];\n const resolvedLimit = Number(body.limit) || limit;\n const resolvedOffset = Number.isFinite(Number(body.offset))\n ? Number(body.offset)\n : offset;\n\n return {\n results,\n count: Number(body.count) || results.length,\n hasMore: !!body.hasMore,\n limit: resolvedLimit,\n offset: resolvedOffset,\n nextOffset: Number(body.nextOffset) || resolvedOffset + resolvedLimit,\n degraded: body.degraded,\n };\n}\n\nexport interface QueryContentOptions {\n trackingId: string;\n /** Published route the query belongs to, e.g. '/insights'. */\n route: string;\n spec: QuerySpec;\n siteId?: string | null;\n target?: AmplifyUpTarget;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}\n\n/**\n * Run a content query at request time (search, load more, pickers).\n *\n * Start from the published spec on a paginated list prop so filters and sort\n * stay owned by Composer:\n *\n * ```ts\n * const next = await queryContent({\n * trackingId,\n * route: '/insights',\n * spec: { ...postsPagination.spec, offset: postsPagination.nextOffset },\n * });\n * ```\n */\nexport async function queryContent<T = Record<string, unknown>>(\n options: QueryContentOptions\n): Promise<QueryResult<T>> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n\n return fetchEdgeQuery<T>({\n edgeUrl,\n trackingId: options.trackingId,\n route: options.route,\n spec: options.spec,\n siteId: options.siteId,\n fetch: options.fetch,\n signal: options.signal,\n });\n}\n\n/** Convenience: next page from pagination meta on a list prop. */\nexport function nextPageSpec(pagination: QueryPagination): QuerySpec {\n return { ...pagination.spec, offset: pagination.nextOffset };\n}\n\n/**\n * Convenience: same published query, filtered by a visitor's search term.\n * Resets to the first page. Empty terms return the unfiltered spec.\n */\nexport function searchSpec(\n pagination: QueryPagination,\n field: string,\n term: string\n): QuerySpec {\n const value = String(term || '').trim();\n const base = { ...pagination.spec, offset: 0 };\n if (!value) return base;\n return {\n ...base,\n filter: [...(base.filter || []), { field, op: 'contains', value }],\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 if (options?.searchParams) {\n const sp =\n options.searchParams instanceof URLSearchParams\n ? options.searchParams\n : new URLSearchParams(\n Object.entries(options.searchParams).flatMap(([k, v]) =>\n v == null\n ? []\n : Array.isArray(v)\n ? v.map((item) => [k, item] as [string, string])\n : [[k, v] as [string, string]]\n )\n );\n const zoneId = sp.get('zoneId');\n const compositionId = sp.get('compositionId');\n if (zoneId) params.set('zoneId', zoneId);\n if (compositionId) params.set('compositionId', compositionId);\n }\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 { AMPLIFYUP_EDITOR_ROUTE, isAmplifyUpEditorRoute } from './reservedRoutes';\nexport { parseVariantKeys, serializeVariantKeys, isDefaultVariantKeys } from './edge/variantKeys';\nexport {\n selectVariants,\n fetchEdgeSelect,\n SelectVariantsError,\n type SelectVariantsOptions,\n type FetchEdgeSelectOptions,\n type SelectVariantsResult,\n} from './edge/select';\nexport {\n queryContent,\n fetchEdgeQuery,\n nextPageSpec,\n searchSpec,\n QueryContentError,\n type QueryContentOptions,\n type FetchEdgeQueryOptions,\n type QueryResult,\n type QueryPagination,\n type QuerySpec,\n type QueryFilter,\n type QueryFilterOp,\n type QuerySort,\n} from './edge/query';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amplifyup/sdk",
3
- "version": "0.1.62",
3
+ "version": "0.1.63",
4
4
  "description": "AmplifyUp Tracking SDK - CDP-agnostic event tracking library",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",