@amplifyup/sdk 0.1.73 → 0.1.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AmplifyRenderer.d.mts +1 -1
- package/dist/AmplifyRenderer.d.ts +1 -1
- package/dist/AmplifyRenderer.js +97 -12
- package/dist/AmplifyRenderer.js.map +1 -1
- package/dist/AmplifyRenderer.mjs +97 -12
- package/dist/AmplifyRenderer.mjs.map +1 -1
- package/dist/index.d.mts +27 -5
- package/dist/index.d.ts +27 -5
- package/dist/index.js +100 -34
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +100 -34
- package/dist/index.mjs.map +1 -1
- package/dist/{query-Hay-oVYp.d.ts → query-B23UsNIv.d.ts} +1 -1
- package/dist/{query-B_DU7yEm.d.mts → query-CV8x3oQT.d.mts} +1 -1
- package/dist/react.d.mts +3 -3
- package/dist/react.d.ts +3 -3
- package/dist/react.js +106 -35
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +106 -35
- package/dist/react.mjs.map +1 -1
- package/dist/server.d.mts +3 -3
- package/dist/server.d.ts +3 -3
- package/dist/server.js +3 -1
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +3 -1
- package/dist/server.mjs.map +1 -1
- package/dist/{types-CGeBbx84.d.mts → types-D4TSd2Yt.d.mts} +23 -2
- package/dist/{types-CGeBbx84.d.ts → types-D4TSd2Yt.d.ts} +23 -2
- package/package.json +1 -1
package/dist/server.mjs.map
CHANGED
|
@@ -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, ref? }` where `name` is the path within the owning record\n * (`title`, `author.name`). Page-level fields omit `ref`.\n * `ref` is stamped from the connection that produced the row\n * (`providerId`, AmplifyUp `entity`, `id`) — never from a CMS `_type`.\n * Produced once at the Edge resolve boundary (`fetchEdgeResolve`) and again\n * on the SDK for `queryContent` rows.\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\n/** Connection that produced a list row. Omitted on page-level fields. */\nexport type FieldRef = {\n providerId: string;\n entity: string;\n id: string;\n};\n\n/** AmplifyUp entity + provider from the connection that produced a list. */\nexport type ListOwner = {\n providerId: string;\n entity: string;\n};\n\nexport type ConnectionLike = {\n mode?: string;\n providerId?: string;\n entity?: string;\n spec?: { providerId?: string; entity?: string };\n};\n\nexport type FieldReadLike = {\n resource: string;\n path?: string;\n /** Schema field kind (image, string, object, …) from the component definition. */\n kind?: string;\n};\n\nexport type EnvelopeSources = {\n connections?: Record<string, ConnectionLike | null | undefined>;\n reads?: Record<string, FieldReadLike>;\n};\n\nexport type Field<T> = {\n value: T;\n name: string;\n ref?: FieldRef;\n /** Row field with no write target — display only in Composer. */\n readOnly?: true;\n};\n\n/** Portable entry identity after normalize (`id` required). */\nexport type PortableRef = {\n id: string;\n type?: string;\n};\n\nconst IDENTIFIER_KEYS = new Set([\n 'id',\n '_id',\n 'slug',\n 'key',\n '_key',\n 'docId',\n '_type',\n 'type',\n]);\n\ntype IdentifierKey =\n | 'id'\n | '_id'\n | 'slug'\n | 'key'\n | '_key'\n | 'docId'\n | '_type'\n | 'type';\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\ntype AsRecord<T> = T extends Record<string, unknown> ? T : Record<string, unknown>;\n\n/** A list row: enveloped fields plus a plain `id`. */\nexport type ListRow<T extends Record<string, unknown> = Record<string, unknown>> =\n Fields<T> & { id: string };\n\ntype FieldsProp<T> = NonNullable<T> extends ImageValue\n ? Field<T | null>\n : NonNullable<T> extends readonly (infer U)[]\n ? IsPlainObject<U> extends true\n ? Field<Array<ListRow<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]-?: K extends IdentifierKey ? T[K] : 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\n/** Schema kinds that stay structural: recurse as nested bags / list rows. */\nconst OBJECT_FIELD_KINDS = new Set(['object', 'array', 'list']);\n\n/**\n * Schema-driven leaf detection: a declared field kind that is not an\n * object/array is a scalar leaf (image, string, richtext, …) and must be\n * enveloped whole — never recursed into as a nested bag, whatever shape\n * its stored value happens to have.\n */\nexport function isLeafFieldKind(kind: unknown): boolean {\n if (typeof kind !== 'string') return false;\n const normalized = kind.trim().toLowerCase();\n if (!normalized) return false;\n return !OBJECT_FIELD_KINDS.has(normalized);\n}\n\nexport function isPageResourceSentinel(value: unknown): boolean {\n return (\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as { __amplifyupPageResource?: unknown })\n .__amplifyupPageResource === 'string'\n );\n}\n\n/** Portable `{ url }` or a CMS image object — stay a leaf, do not recurse. */\nexport function isPortableImageShape(value: unknown): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n if ('url' in value) return true;\n const rec = value as { _type?: unknown; asset?: unknown };\n return rec._type === 'image' || rec.asset != null;\n}\n\nexport function isIdentifierKey(key: string): boolean {\n return IDENTIFIER_KEYS.has(key);\n}\n\n/** Object-array (list of records) vs scalar array (tags, multi-select). */\nexport function isRecordList(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 ((sample as { $$typeof?: unknown }).$$typeof) return false;\n return true;\n}\n\nexport function isFieldRef(value: unknown): value is FieldRef {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { providerId?: unknown; entity?: unknown; id?: unknown };\n return (\n typeof rec.providerId === 'string' &&\n !!rec.providerId &&\n typeof rec.entity === 'string' &&\n !!rec.entity &&\n typeof rec.id === 'string' &&\n !!rec.id\n );\n}\n\nexport function isListOwner(value: unknown): value is ListOwner {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { providerId?: unknown; entity?: unknown };\n return (\n typeof rec.providerId === 'string' &&\n !!rec.providerId &&\n typeof rec.entity === 'string' &&\n !!rec.entity\n );\n}\n\nexport function isReadOnlyRowField(value: unknown): boolean {\n return isFieldEnvelope(value) && value.readOnly === true && !value.ref;\n}\n\nexport function composerStoreKey(\n name: string,\n ref?: FieldRef | null,\n layoutNodeId?: string\n): string {\n if (isFieldRef(ref)) {\n return `record:${ref.providerId}:${ref.entity}:${ref.id}:${name}`;\n }\n return layoutNodeId ? `page:${layoutNodeId}:${name}` : name;\n}\n\nexport function listOwnerFromConnection(\n conn: ConnectionLike | null | undefined\n): ListOwner | undefined {\n if (!conn || typeof conn !== 'object') return undefined;\n if (conn.mode === 'query') {\n const providerId = String(conn.spec?.providerId || '').trim();\n const entity = String(conn.spec?.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n }\n if (conn.mode === 'item' || conn.mode === 'items') {\n const providerId = String(conn.providerId || '').trim();\n const entity = String(conn.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n }\n return undefined;\n}\n\nexport function listOwnerFromSpec(spec: {\n providerId?: string;\n entity?: string;\n} | null | undefined): ListOwner | undefined {\n const providerId = String(spec?.providerId || '').trim();\n const entity = String(spec?.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n}\n\nfunction isEnvelopeSources(value: unknown): value is EnvelopeSources {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as EnvelopeSources;\n return rec.connections != null || rec.reads != null;\n}\n\nfunction normalizeEnvelopeSources(\n sources?: EnvelopeSources | Record<string, ConnectionLike | null | undefined>\n): EnvelopeSources {\n if (!sources) return {};\n if (isEnvelopeSources(sources) && !('mode' in (sources as object))) {\n return sources;\n }\n return { connections: sources as Record<string, ConnectionLike> };\n}\n\nexport function listOwnerForField(\n fieldName: string,\n props: Record<string, unknown> | null | undefined,\n sources?: EnvelopeSources | Record<string, ConnectionLike | null | undefined>\n): ListOwner | undefined {\n const { connections, reads } = normalizeEnvelopeSources(sources);\n const resourceName = reads?.[fieldName]?.resource || fieldName;\n const fromConn = listOwnerFromConnection(connections?.[resourceName]);\n if (fromConn) return fromConn;\n const paging = props?.[`${fieldName}Pagination`];\n if (paging && typeof paging === 'object' && !Array.isArray(paging)) {\n return listOwnerFromSpec((paging as { spec?: { providerId?: string; entity?: string } }).spec);\n }\n return undefined;\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\nfunction rowId(raw: Record<string, unknown>): string {\n const candidates = [raw.id, raw._id, raw.docId, raw.key, raw._key];\n for (const c of candidates) {\n if (typeof c === 'string' && c.trim()) return c;\n }\n return '';\n}\n\ntype EnvelopeScope = {\n ref?: FieldRef;\n readOnly?: boolean;\n owners?: (fieldName: string) => ListOwner | undefined;\n /** Schema-driven: true when the field at this path is a scalar leaf. */\n leaf?: (path: string) => boolean;\n};\n\nfunction withLeaf<T>(\n envelope: Field<T>,\n scope?: EnvelopeScope\n): Field<T> {\n if (isFieldRef(scope?.ref)) envelope.ref = scope.ref;\n else if (scope?.readOnly) envelope.readOnly = true;\n return envelope;\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 * Object arrays become list rows (`Fields` + plain `id`); `name` is the path\n * within the record when `ref` is set.\n */\nexport function toFieldEnvelopes<T extends Record<string, unknown>>(\n source: T | null | undefined,\n prefix = '',\n scope?: EnvelopeScope | FieldRef\n): Fields<T> {\n const ctx: EnvelopeScope = isFieldRef(scope) ? { ref: scope } : scope || {};\n const input =\n 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 if (isIdentifierKey(key) && (typeof raw === 'string' || raw == null)) {\n out[key] = raw ?? '';\n continue;\n }\n const path = joinPath(prefix, key);\n if (isPageResourceSentinel(raw)) {\n out[key] = withLeaf({ value: raw, name: path }, ctx);\n continue;\n }\n if (isFieldEnvelope(raw)) {\n const inner = raw.value;\n if (isRecordList(inner)) {\n const owner = ctx.owners?.(key);\n out[key] = {\n value: envelopeListRows(inner, owner),\n name: raw.name || path,\n };\n continue;\n }\n out[key] = withLeaf(\n { value: raw.value ?? null, name: raw.name || path },\n raw.ref ? { ref: raw.ref } : ctx\n );\n continue;\n }\n if (isRecordList(raw)) {\n const owner = ctx.owners?.(key);\n out[key] = { value: envelopeListRows(raw, owner), name: path };\n continue;\n }\n if (ctx.leaf?.(path)) {\n // The connection / page schema declares this field a scalar (image,\n // string, …): envelope it whole so the component keeps its edit\n // identity (data-amplifyup-field) even when the stored value is an\n // object — never recurse into it as a nested bag.\n out[key] = withLeaf({ value: emptyValue(raw), name: path }, ctx);\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, ctx);\n continue;\n }\n out[key] = withLeaf({ value: emptyValue(raw), name: path }, ctx);\n }\n return brandFields(out as T);\n}\n\nexport function envelopeListRows<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(\n items: unknown[],\n owner?: ListOwner | null\n): Array<ListRow<T>> {\n return items.map((item) => envelopeListRow<T>(item, owner));\n}\n\nexport function envelopeListRow<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(item: unknown, owner?: ListOwner | null): ListRow<T> {\n if (isBrandedFields(item) && typeof (item as { id?: unknown }).id === 'string') {\n return item as ListRow<T>;\n }\n const raw =\n item && typeof item === 'object' && !Array.isArray(item)\n ? (item as Record<string, unknown>)\n : {};\n const id = rowId(raw);\n const ref: FieldRef | undefined =\n isListOwner(owner) && id\n ? { providerId: owner.providerId, entity: owner.entity, id }\n : undefined;\n const fields = toFieldEnvelopes(raw, '', {\n ref,\n readOnly: !ref,\n });\n const row = fields as unknown as ListRow<T>;\n if (typeof row.id !== 'string') {\n row.id = id;\n }\n return row;\n}\n\nconst warnedMissingFieldKind = new Set<string>();\n\n/**\n * Dev-only: a read without a schema kind falls back to value-shape handling\n * (the pre-schema behavior). Warn once per field so missing kinds get fixed\n * at the component definition instead of silently shape-guessing.\n *\n * TODO(schema-kinds): once every published snapshot / layout response ships\n * `reads[field].kind`, remove the shape fallback in `toFieldEnvelopes` (the\n * portable-image / plain-object heuristics for schema-less fields).\n * (The coerceImageField recovery was removed — assertNamedEnvelope in\n * components.tsx now fails loudly on partial envelopes instead.)\n */\nfunction warnMissingFieldKind(fieldName: string): void {\n if (process.env.NODE_ENV === 'production') return;\n if (warnedMissingFieldKind.has(fieldName)) return;\n warnedMissingFieldKind.add(fieldName);\n console.warn(\n `[AmplifyUp SDK] Field \"${fieldName}\" has no schema kind; using value-shape detection. Republish the component definition so its fields carry a type.`\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 sources?: EnvelopeSources | Record<string, ConnectionLike | 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 const { reads } = normalizeEnvelopeSources(sources);\n if (reads) {\n for (const [fieldName, read] of Object.entries(reads)) {\n if (!read?.kind) warnMissingFieldKind(fieldName);\n }\n }\n return {\n ...raw,\n fields: toFieldEnvelopes(source, '', {\n owners: (fieldName) => listOwnerForField(fieldName, source, sources),\n // Top-level field paths equal field names; nested paths have no schema\n // entry and fall back to shape-based handling.\n leaf: (path) => isLeafFieldKind(reads?.[path]?.kind),\n }),\n };\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 resources?: Record<string, ConnectionLike>;\n reads?: Record<string, FieldReadLike>;\n slots?: Array<{ children?: unknown[] }>;\n };\n rec.props = attachFieldEnvelopes(rec.props, {\n connections: rec.resources,\n reads: rec.reads,\n });\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\nexport type FieldPatch = {\n name: string;\n value: unknown;\n ref?: FieldRef;\n};\n\n/**\n * Flatten a props or fields bag into Composer patches.\n * Page fields key on `name` (page path). Row fields include `ref`.\n */\nexport function collectFieldPatches(\n props: Record<string, unknown> | null | undefined\n): FieldPatch[] {\n const out: FieldPatch[] = [];\n\n const walkRows = (items: unknown[]) => {\n for (const item of items) {\n if (\n isBrandedFields(item) ||\n (item && typeof item === 'object' && !Array.isArray(item) && !isFieldEnvelope(item))\n ) {\n walk(item as Record<string, unknown>, '');\n }\n }\n };\n\n const walk = (obj: Record<string, unknown>, prefix: string) => {\n for (const [key, raw] of Object.entries(obj)) {\n if (isIdentifierKey(key)) continue;\n if (\n key === 'fields' &&\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isFieldEnvelope(raw)\n ) {\n walk(raw as Record<string, unknown>, prefix);\n continue;\n }\n const path = joinPath(prefix, key);\n if (isFieldEnvelope(raw)) {\n if (isRecordList(raw.value)) {\n walkRows(raw.value);\n continue;\n }\n const patch: FieldPatch = {\n name: raw.name || path,\n value: raw.value,\n };\n if (raw.ref) patch.ref = raw.ref;\n out.push(patch);\n continue;\n }\n if (isRecordList(raw)) {\n walkRows(raw);\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\nexport function envelopeRef(field: unknown): FieldRef | undefined {\n if (isFieldEnvelope(field) && field.ref) return field.ref;\n return undefined;\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): {\n name: string;\n value: unknown;\n ref?: FieldRef;\n requiresName: boolean;\n} {\n if (isFieldEnvelope(field)) {\n return {\n name: field.name,\n value: field.value,\n ref: field.ref,\n requiresName: false,\n };\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 /** Connection map from the snapshot — used to stamp list-row `ref`. */\n resources?: Record<string, unknown>;\n reads?: Record<string, { resource: string }>;\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 connections: node.resources as\n | Record<string, import('../field-envelope').ConnectionLike>\n | undefined,\n reads: node.reads,\n });\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 * Edge JSON stays raw. `queryContent` envelopes rows on the SDK so they\n * edit in Composer the same way as list-field rows.\n */\n\nimport { normalizeRoute } from './normalizeRoute';\nimport {\n envelopeListRows,\n listOwnerFromSpec,\n type ListRow,\n} from '../field-envelope';\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<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(\n options: QueryContentOptions\n): Promise<QueryResult<ListRow<T>>> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n\n const raw = await 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 return {\n ...raw,\n results: envelopeListRows<T>(\n raw.results,\n listOwnerFromSpec(options.spec)\n ),\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, ref? }` where `name` is the path within the owning record\n * (`title`, `author.name`). Page-level fields omit `ref`.\n * `ref` is stamped from the connection that produced the row\n * (`providerId`, AmplifyUp `entity`, `id`) — never from a CMS `_type`.\n * Produced once at the Edge resolve boundary (`fetchEdgeResolve`) and again\n * on the SDK for `queryContent` rows.\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\n/** Connection that produced a list row. Omitted on page-level fields. */\nexport type FieldRef = {\n providerId: string;\n entity: string;\n id: string;\n};\n\n/** AmplifyUp entity + provider from the connection that produced a list. */\nexport type ListOwner = {\n providerId: string;\n entity: string;\n};\n\nexport type ConnectionLike = {\n mode?: string;\n providerId?: string;\n entity?: string;\n spec?: { providerId?: string; entity?: string };\n};\n\nexport type FieldReadLike = {\n resource: string;\n path?: string;\n /** Schema field kind (image, string, object, …) from the component definition. */\n kind?: string;\n};\n\nexport type EnvelopeSources = {\n connections?: Record<string, ConnectionLike | null | undefined>;\n reads?: Record<string, FieldReadLike>;\n};\n\nexport type Field<T> = {\n value: T;\n name: string;\n ref?: FieldRef;\n /** Row field with no write target — display only in Composer. */\n readOnly?: true;\n};\n\n/** Portable entry identity after normalize (`id` required). */\nexport type PortableRef = {\n id: string;\n type?: string;\n};\n\nconst IDENTIFIER_KEYS = new Set([\n 'id',\n '_id',\n 'slug',\n 'key',\n '_key',\n 'docId',\n '_type',\n 'type',\n]);\n\ntype IdentifierKey =\n | 'id'\n | '_id'\n | 'slug'\n | 'key'\n | '_key'\n | 'docId'\n | '_type'\n | 'type';\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\ntype AsRecord<T> = T extends Record<string, unknown> ? T : Record<string, unknown>;\n\n/** A list row: enveloped fields plus a plain `id`. */\nexport type ListRow<T extends Record<string, unknown> = Record<string, unknown>> =\n Fields<T> & { id: string };\n\ntype FieldsProp<T> = NonNullable<T> extends ImageValue\n ? Field<T | null>\n : NonNullable<T> extends readonly (infer U)[]\n ? IsPlainObject<U> extends true\n ? Field<Array<ListRow<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]-?: K extends IdentifierKey ? T[K] : 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\n/** Schema kinds that stay structural: recurse as nested bags / list rows. */\nconst OBJECT_FIELD_KINDS = new Set(['object', 'array', 'list']);\n\n/**\n * Schema-driven leaf detection: a declared field kind that is not an\n * object/array is a scalar leaf (image, string, richtext, …) and must be\n * enveloped whole — never recursed into as a nested bag, whatever shape\n * its stored value happens to have.\n */\nexport function isLeafFieldKind(kind: unknown): boolean {\n if (typeof kind !== 'string') return false;\n const normalized = kind.trim().toLowerCase();\n if (!normalized) return false;\n return !OBJECT_FIELD_KINDS.has(normalized);\n}\n\nexport function isPageResourceSentinel(value: unknown): boolean {\n return (\n !!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as { __amplifyupPageResource?: unknown })\n .__amplifyupPageResource === 'string'\n );\n}\n\n/** Portable `{ url }` or a CMS image object — stay a leaf, do not recurse. */\nexport function isPortableImageShape(value: unknown): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n if ('url' in value) return true;\n const rec = value as { _type?: unknown; asset?: unknown };\n return rec._type === 'image' || rec.asset != null;\n}\n\nexport function isIdentifierKey(key: string): boolean {\n return IDENTIFIER_KEYS.has(key);\n}\n\n/** Object-array (list of records) vs scalar array (tags, multi-select). */\nexport function isRecordList(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 ((sample as { $$typeof?: unknown }).$$typeof) return false;\n return true;\n}\n\nexport function isFieldRef(value: unknown): value is FieldRef {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { providerId?: unknown; entity?: unknown; id?: unknown };\n return (\n typeof rec.providerId === 'string' &&\n !!rec.providerId &&\n typeof rec.entity === 'string' &&\n !!rec.entity &&\n typeof rec.id === 'string' &&\n !!rec.id\n );\n}\n\nexport function isListOwner(value: unknown): value is ListOwner {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as { providerId?: unknown; entity?: unknown };\n return (\n typeof rec.providerId === 'string' &&\n !!rec.providerId &&\n typeof rec.entity === 'string' &&\n !!rec.entity\n );\n}\n\nexport function isReadOnlyRowField(value: unknown): boolean {\n return isFieldEnvelope(value) && value.readOnly === true && !value.ref;\n}\n\nexport function composerStoreKey(\n name: string,\n ref?: FieldRef | null,\n layoutNodeId?: string\n): string {\n if (isFieldRef(ref)) {\n return `record:${ref.providerId}:${ref.entity}:${ref.id}:${name}`;\n }\n return layoutNodeId ? `page:${layoutNodeId}:${name}` : name;\n}\n\nexport function listOwnerFromConnection(\n conn: ConnectionLike | null | undefined\n): ListOwner | undefined {\n if (!conn || typeof conn !== 'object') return undefined;\n if (conn.mode === 'query') {\n const providerId = String(conn.spec?.providerId || '').trim();\n const entity = String(conn.spec?.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n }\n if (conn.mode === 'item' || conn.mode === 'items') {\n const providerId = String(conn.providerId || '').trim();\n const entity = String(conn.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n }\n return undefined;\n}\n\nexport function listOwnerFromSpec(spec: {\n providerId?: string;\n entity?: string;\n} | null | undefined): ListOwner | undefined {\n const providerId = String(spec?.providerId || '').trim();\n const entity = String(spec?.entity || '').trim();\n return providerId && entity ? { providerId, entity } : undefined;\n}\n\nfunction isEnvelopeSources(value: unknown): value is EnvelopeSources {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const rec = value as EnvelopeSources;\n return rec.connections != null || rec.reads != null;\n}\n\nfunction normalizeEnvelopeSources(\n sources?: EnvelopeSources | Record<string, ConnectionLike | null | undefined>\n): EnvelopeSources {\n if (!sources) return {};\n if (isEnvelopeSources(sources) && !('mode' in (sources as object))) {\n return sources;\n }\n return { connections: sources as Record<string, ConnectionLike> };\n}\n\nexport function listOwnerForField(\n fieldName: string,\n props: Record<string, unknown> | null | undefined,\n sources?: EnvelopeSources | Record<string, ConnectionLike | null | undefined>\n): ListOwner | undefined {\n const { connections, reads } = normalizeEnvelopeSources(sources);\n const resourceName = reads?.[fieldName]?.resource || fieldName;\n const fromConn = listOwnerFromConnection(connections?.[resourceName]);\n if (fromConn) return fromConn;\n const paging = props?.[`${fieldName}Pagination`];\n if (paging && typeof paging === 'object' && !Array.isArray(paging)) {\n return listOwnerFromSpec((paging as { spec?: { providerId?: string; entity?: string } }).spec);\n }\n return undefined;\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\nfunction rowId(raw: Record<string, unknown>): string {\n const candidates = [raw.id, raw._id, raw.docId, raw.key, raw._key];\n for (const c of candidates) {\n if (typeof c === 'string' && c.trim()) return c;\n }\n return '';\n}\n\ntype EnvelopeScope = {\n ref?: FieldRef;\n readOnly?: boolean;\n owners?: (fieldName: string) => ListOwner | undefined;\n /** Schema-driven: true when the field at this path is a scalar leaf. */\n leaf?: (path: string) => boolean;\n};\n\nfunction withLeaf<T>(\n envelope: Field<T>,\n scope?: EnvelopeScope\n): Field<T> {\n if (isFieldRef(scope?.ref)) envelope.ref = scope.ref;\n else if (scope?.readOnly) envelope.readOnly = true;\n return envelope;\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 * Object arrays become list rows (`Fields` + plain `id`); `name` is the path\n * within the record when `ref` is set.\n */\nexport function toFieldEnvelopes<T extends Record<string, unknown>>(\n source: T | null | undefined,\n prefix = '',\n scope?: EnvelopeScope | FieldRef\n): Fields<T> {\n const ctx: EnvelopeScope = isFieldRef(scope) ? { ref: scope } : scope || {};\n const input =\n 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 if (isIdentifierKey(key) && (typeof raw === 'string' || raw == null)) {\n out[key] = raw ?? '';\n continue;\n }\n const path = joinPath(prefix, key);\n if (isPageResourceSentinel(raw)) {\n out[key] = withLeaf({ value: raw, name: path }, ctx);\n continue;\n }\n if (isFieldEnvelope(raw)) {\n const inner = raw.value;\n if (isRecordList(inner)) {\n const owner = ctx.owners?.(key);\n out[key] = {\n value: envelopeListRows(inner, owner),\n name: raw.name || path,\n };\n continue;\n }\n out[key] = withLeaf(\n { value: raw.value ?? null, name: raw.name || path },\n raw.ref ? { ref: raw.ref } : ctx\n );\n continue;\n }\n if (isRecordList(raw)) {\n const owner = ctx.owners?.(key);\n out[key] = { value: envelopeListRows(raw, owner), name: path };\n continue;\n }\n if (ctx.leaf?.(path)) {\n // The connection / page schema declares this field a scalar (image,\n // string, …): envelope it whole so the component keeps its edit\n // identity (data-amplifyup-field) even when the stored value is an\n // object — never recurse into it as a nested bag.\n out[key] = withLeaf({ value: emptyValue(raw), name: path }, ctx);\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, ctx);\n continue;\n }\n out[key] = withLeaf({ value: emptyValue(raw), name: path }, ctx);\n }\n return brandFields(out as T);\n}\n\nexport function envelopeListRows<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(\n items: unknown[],\n owner?: ListOwner | null\n): Array<ListRow<T>> {\n return items.map((item) => envelopeListRow<T>(item, owner));\n}\n\nexport function envelopeListRow<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(item: unknown, owner?: ListOwner | null): ListRow<T> {\n if (isBrandedFields(item) && typeof (item as { id?: unknown }).id === 'string') {\n return item as ListRow<T>;\n }\n const raw =\n item && typeof item === 'object' && !Array.isArray(item)\n ? (item as Record<string, unknown>)\n : {};\n const id = rowId(raw);\n const ref: FieldRef | undefined =\n isListOwner(owner) && id\n ? { providerId: owner.providerId, entity: owner.entity, id }\n : undefined;\n const fields = toFieldEnvelopes(raw, '', {\n ref,\n readOnly: !ref,\n });\n const row = fields as unknown as ListRow<T>;\n if (typeof row.id !== 'string') {\n row.id = id;\n }\n return row;\n}\n\nconst warnedMissingFieldKind = new Set<string>();\n\n/**\n * Dev-only: a read without a schema kind falls back to value-shape handling\n * (the pre-schema behavior). Warn once per field so missing kinds get fixed\n * at the component definition instead of silently shape-guessing.\n *\n * TODO(schema-kinds): once every published snapshot / layout response ships\n * `reads[field].kind`, remove the shape fallback in `toFieldEnvelopes` (the\n * portable-image / plain-object heuristics for schema-less fields).\n * (The coerceImageField recovery was removed — assertNamedEnvelope in\n * components.tsx now fails loudly on partial envelopes instead.)\n */\nfunction warnMissingFieldKind(fieldName: string): void {\n if (process.env.NODE_ENV === 'production') return;\n if (warnedMissingFieldKind.has(fieldName)) return;\n warnedMissingFieldKind.add(fieldName);\n console.warn(\n `[AmplifyUp SDK] Field \"${fieldName}\" has no schema kind; using value-shape detection. Republish the component definition so its fields carry a type.`\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 sources?: EnvelopeSources | Record<string, ConnectionLike | 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 const { reads } = normalizeEnvelopeSources(sources);\n if (reads) {\n for (const [fieldName, read] of Object.entries(reads)) {\n if (!read?.kind) warnMissingFieldKind(fieldName);\n }\n }\n return {\n ...raw,\n fields: toFieldEnvelopes(source, '', {\n owners: (fieldName) => listOwnerForField(fieldName, source, sources),\n // Top-level field paths equal field names; nested paths have no schema\n // entry and fall back to shape-based handling.\n leaf: (path) => isLeafFieldKind(reads?.[path]?.kind),\n }),\n };\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 resources?: Record<string, ConnectionLike>;\n reads?: Record<string, FieldReadLike>;\n slots?: Array<{ children?: unknown[] }>;\n };\n rec.props = attachFieldEnvelopes(rec.props, {\n connections: rec.resources,\n reads: rec.reads,\n });\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\nexport type FieldPatch = {\n name: string;\n value: unknown;\n ref?: FieldRef;\n};\n\n/**\n * Flatten a props or fields bag into Composer patches.\n * Page fields key on `name` (page path). Row fields include `ref`.\n */\nexport function collectFieldPatches(\n props: Record<string, unknown> | null | undefined\n): FieldPatch[] {\n const out: FieldPatch[] = [];\n\n const walkRows = (items: unknown[]) => {\n for (const item of items) {\n if (\n isBrandedFields(item) ||\n (item && typeof item === 'object' && !Array.isArray(item) && !isFieldEnvelope(item))\n ) {\n walk(item as Record<string, unknown>, '');\n }\n }\n };\n\n const walk = (obj: Record<string, unknown>, prefix: string) => {\n for (const [key, raw] of Object.entries(obj)) {\n if (isIdentifierKey(key)) continue;\n if (\n key === 'fields' &&\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n !isFieldEnvelope(raw)\n ) {\n walk(raw as Record<string, unknown>, prefix);\n continue;\n }\n const path = joinPath(prefix, key);\n if (isFieldEnvelope(raw)) {\n if (isRecordList(raw.value)) {\n walkRows(raw.value);\n continue;\n }\n const patch: FieldPatch = {\n name: raw.name || path,\n value: raw.value,\n };\n if (raw.ref) patch.ref = raw.ref;\n out.push(patch);\n continue;\n }\n if (isRecordList(raw)) {\n walkRows(raw);\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\nexport function envelopeRef(field: unknown): FieldRef | undefined {\n if (isFieldEnvelope(field) && field.ref) return field.ref;\n return undefined;\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): {\n name: string;\n value: unknown;\n ref?: FieldRef;\n requiresName: boolean;\n} {\n if (isFieldEnvelope(field)) {\n return {\n name: field.name,\n value: field.value,\n ref: field.ref,\n requiresName: false,\n };\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 /** Connection map from the snapshot — used to stamp list-row `ref`. */\n resources?: Record<string, unknown>;\n reads?: Record<string, { resource: string }>;\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 /** resource name → document this URL resolved to. */\n pageResources?: Record<string, import('../types').ResolvedPageResourceRef>;\n /** taxonomy key → term ids this page is tagged with. */\n pageTaxonomies?: import('../page-context').PageTaxonomies;\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 connections: node.resources as\n | Record<string, import('../field-envelope').ConnectionLike>\n | undefined,\n reads: node.reads,\n });\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 ...(payload.pageResources ? { pageResources: payload.pageResources } : {}),\n ...(payload.pageTaxonomies ? { pageTaxonomies: payload.pageTaxonomies } : {}),\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 * Edge JSON stays raw. `queryContent` envelopes rows on the SDK so they\n * edit in Composer the same way as list-field rows.\n */\n\nimport { normalizeRoute } from './normalizeRoute';\nimport {\n envelopeListRows,\n listOwnerFromSpec,\n type ListRow,\n} from '../field-envelope';\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<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(\n options: QueryContentOptions\n): Promise<QueryResult<ListRow<T>>> {\n const target = resolveAmplifyUpTarget({ configTarget: options.target });\n const { edgeUrl } = resolveAmplifyUpUrls(target);\n\n const raw = await 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 return {\n ...raw,\n results: envelopeListRows<T>(\n raw.results,\n listOwnerFromSpec(options.spec)\n ),\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"]}
|
|
@@ -105,11 +105,15 @@ declare function attachFieldEnvelopes(props: Record<string, unknown> | null | un
|
|
|
105
105
|
*/
|
|
106
106
|
type PageDataFieldDef = {
|
|
107
107
|
key: string;
|
|
108
|
-
dataType: 'string' | 'number' | 'date' | 'boolean';
|
|
108
|
+
dataType: 'string' | 'number' | 'date' | 'boolean' | 'taxonomy';
|
|
109
109
|
multiValue: boolean;
|
|
110
110
|
label?: string;
|
|
111
111
|
passThrough?: boolean;
|
|
112
|
+
/** Taxonomy fields only. Their term ids ride page_view as `page.taxonomies`. */
|
|
113
|
+
taxonomyKey?: string;
|
|
112
114
|
};
|
|
115
|
+
/** Term ids a page is tagged with, grouped by taxonomy key. */
|
|
116
|
+
type PageTaxonomies = Record<string, string[]>;
|
|
113
117
|
type PageDataSnapshot = {
|
|
114
118
|
resources: Array<{
|
|
115
119
|
name: string;
|
|
@@ -146,6 +150,12 @@ type AttachedPageEventContext = {
|
|
|
146
150
|
fields: Record<string, unknown>;
|
|
147
151
|
};
|
|
148
152
|
pageRoute: string;
|
|
153
|
+
/** Entry behind this URL, so events survive a slug change. */
|
|
154
|
+
pageResource?: {
|
|
155
|
+
entity: string;
|
|
156
|
+
providerId: string;
|
|
157
|
+
docId: string;
|
|
158
|
+
};
|
|
149
159
|
};
|
|
150
160
|
|
|
151
161
|
/**
|
|
@@ -348,6 +358,17 @@ interface PageConfig {
|
|
|
348
358
|
layoutId?: string;
|
|
349
359
|
eventTracking?: EventTrackingConfig[];
|
|
350
360
|
pageData?: PageDataSnapshot;
|
|
361
|
+
/** resource name → document this URL resolved to, from the delivery layer. */
|
|
362
|
+
pageResources?: Record<string, ResolvedPageResourceRef>;
|
|
363
|
+
/** taxonomy key → term ids this page is tagged with. */
|
|
364
|
+
pageTaxonomies?: PageTaxonomies;
|
|
365
|
+
}
|
|
366
|
+
/** Identifies the entry behind a pattern URL, so events survive a slug change. */
|
|
367
|
+
interface ResolvedPageResourceRef {
|
|
368
|
+
resource: string;
|
|
369
|
+
entity: string;
|
|
370
|
+
providerId: string;
|
|
371
|
+
docId: string;
|
|
351
372
|
}
|
|
352
373
|
/**
|
|
353
374
|
* Event Tracking Configuration
|
|
@@ -367,4 +388,4 @@ interface EventTrackingConfig {
|
|
|
367
388
|
componentName?: string | null;
|
|
368
389
|
}
|
|
369
390
|
|
|
370
|
-
export { type AmplifyContentMeta as A, type
|
|
391
|
+
export { type AmplifyContentMeta as A, type ImageValue as B, type ContentSource as C, type PortableRef as D, type EventTrackingConfig as E, type Field as F, type IdentifyInput as I, type LayoutComponentProps as L, type PageConfig as P, type ResolvedPageResourceRef as R, type ZoneConfig as Z, type PageDataSnapshot as a, type PageTaxonomies as b, type CDPAdapter as c, type AmplifyUpConfig as d, type EventProperties as e, type AmplifyPageContextInput as f, type AttachedPageEventContext as g, type IdentifyTraits as h, type ProfileFieldsInput as i, type AmplifyUpTarget as j, resolveAmplifyUpUrls as k, isAmplifyUpTarget as l, FIELDS_BRAND as m, normalizeAmplifyUpTarget as n, attachFieldEnvelopes as o, envelopeListRows as p, composerStoreKey as q, resolveAmplifyUpTarget as r, listOwnerFromSpec as s, toFieldEnvelopes as t, isFieldEnvelope as u, isReadOnlyRowField as v, isBrandedFields as w, type FieldRef as x, type Fields as y, type ListRow as z };
|
|
@@ -105,11 +105,15 @@ declare function attachFieldEnvelopes(props: Record<string, unknown> | null | un
|
|
|
105
105
|
*/
|
|
106
106
|
type PageDataFieldDef = {
|
|
107
107
|
key: string;
|
|
108
|
-
dataType: 'string' | 'number' | 'date' | 'boolean';
|
|
108
|
+
dataType: 'string' | 'number' | 'date' | 'boolean' | 'taxonomy';
|
|
109
109
|
multiValue: boolean;
|
|
110
110
|
label?: string;
|
|
111
111
|
passThrough?: boolean;
|
|
112
|
+
/** Taxonomy fields only. Their term ids ride page_view as `page.taxonomies`. */
|
|
113
|
+
taxonomyKey?: string;
|
|
112
114
|
};
|
|
115
|
+
/** Term ids a page is tagged with, grouped by taxonomy key. */
|
|
116
|
+
type PageTaxonomies = Record<string, string[]>;
|
|
113
117
|
type PageDataSnapshot = {
|
|
114
118
|
resources: Array<{
|
|
115
119
|
name: string;
|
|
@@ -146,6 +150,12 @@ type AttachedPageEventContext = {
|
|
|
146
150
|
fields: Record<string, unknown>;
|
|
147
151
|
};
|
|
148
152
|
pageRoute: string;
|
|
153
|
+
/** Entry behind this URL, so events survive a slug change. */
|
|
154
|
+
pageResource?: {
|
|
155
|
+
entity: string;
|
|
156
|
+
providerId: string;
|
|
157
|
+
docId: string;
|
|
158
|
+
};
|
|
149
159
|
};
|
|
150
160
|
|
|
151
161
|
/**
|
|
@@ -348,6 +358,17 @@ interface PageConfig {
|
|
|
348
358
|
layoutId?: string;
|
|
349
359
|
eventTracking?: EventTrackingConfig[];
|
|
350
360
|
pageData?: PageDataSnapshot;
|
|
361
|
+
/** resource name → document this URL resolved to, from the delivery layer. */
|
|
362
|
+
pageResources?: Record<string, ResolvedPageResourceRef>;
|
|
363
|
+
/** taxonomy key → term ids this page is tagged with. */
|
|
364
|
+
pageTaxonomies?: PageTaxonomies;
|
|
365
|
+
}
|
|
366
|
+
/** Identifies the entry behind a pattern URL, so events survive a slug change. */
|
|
367
|
+
interface ResolvedPageResourceRef {
|
|
368
|
+
resource: string;
|
|
369
|
+
entity: string;
|
|
370
|
+
providerId: string;
|
|
371
|
+
docId: string;
|
|
351
372
|
}
|
|
352
373
|
/**
|
|
353
374
|
* Event Tracking Configuration
|
|
@@ -367,4 +388,4 @@ interface EventTrackingConfig {
|
|
|
367
388
|
componentName?: string | null;
|
|
368
389
|
}
|
|
369
390
|
|
|
370
|
-
export { type AmplifyContentMeta as A, type
|
|
391
|
+
export { type AmplifyContentMeta as A, type ImageValue as B, type ContentSource as C, type PortableRef as D, type EventTrackingConfig as E, type Field as F, type IdentifyInput as I, type LayoutComponentProps as L, type PageConfig as P, type ResolvedPageResourceRef as R, type ZoneConfig as Z, type PageDataSnapshot as a, type PageTaxonomies as b, type CDPAdapter as c, type AmplifyUpConfig as d, type EventProperties as e, type AmplifyPageContextInput as f, type AttachedPageEventContext as g, type IdentifyTraits as h, type ProfileFieldsInput as i, type AmplifyUpTarget as j, resolveAmplifyUpUrls as k, isAmplifyUpTarget as l, FIELDS_BRAND as m, normalizeAmplifyUpTarget as n, attachFieldEnvelopes as o, envelopeListRows as p, composerStoreKey as q, resolveAmplifyUpTarget as r, listOwnerFromSpec as s, toFieldEnvelopes as t, isFieldEnvelope as u, isReadOnlyRowField as v, isBrandedFields as w, type FieldRef as x, type Fields as y, type ListRow as z };
|