@weaverse/next 0.1.0-alpha.0 → 0.1.0-alpha.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/configs.ts","../src/server/normalize-page-url.ts","../src/utils.ts","../src/loader.ts","../src/request-info.ts","../src/server/server-client.ts"],"names":["toUrl"],"mappings":"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","file":"server.js","sourcesContent":["import type {\n WeaverseNextBaseConfigs,\n WeaverseNextRequestContext,\n} from '../types'\n\nconst DEFAULT_WEAVERSE_HOST = 'https://studio.weaverse.io'\nconst DEFAULT_WEAVERSE_API_BASE = 'https://api.weaverse.io'\n\n/**\n * Weaverse-controlled apex domains the Studio bridge / data API may be served\n * from (matched on the host itself and any subdomain). Kept in sync with\n * Hydrogen's `isTrustedStudioHost`.\n */\nconst TRUSTED_STUDIO_DOMAINS = ['weaverse.io', 'weaverse.dev']\n\n/**\n * Whether `host` is an origin we trust to resolve page/theme data. The\n * `weaverseHost` query param is attacker-controllable, so a crafted\n * `?weaverseHost=` must be rejected before it can point server-side fetches at\n * an arbitrary origin (SSRF). Only `weaverse.io`/`weaverse.dev` and subdomains\n * over https are trusted.\n */\nfunction isTrustedStudioHost(host: string): boolean {\n let parsed: URL\n try {\n parsed = new URL(host)\n } catch {\n return false\n }\n if (parsed.protocol !== 'https:') {\n return false\n }\n let { hostname } = parsed\n return TRUSTED_STUDIO_DOMAINS.some(\n (domain) => hostname === domain || hostname.endsWith(`.${domain}`)\n )\n}\n\nfunction toUrl(value: string | URL): URL | null {\n try {\n return typeof value === 'string'\n ? new URL(value, 'http://localhost')\n : value\n } catch {\n return null\n }\n}\n\n/**\n * Extract the request search params from the explicit Next request context.\n * Prefers `searchParams`, falls back to parsing `url`.\n */\nexport function getContextSearchParams(\n context?: WeaverseNextRequestContext\n): URLSearchParams {\n if (context?.searchParams) {\n return new URLSearchParams(context.searchParams)\n }\n if (context?.url) {\n let url = toUrl(context.url)\n if (url) {\n return new URLSearchParams(url.searchParams)\n }\n }\n return new URLSearchParams()\n}\n\n/**\n * Last value of a (possibly duplicated) query key. Matches Hydrogen's\n * `getRequestQueries`, which assigns while iterating and so keeps the last\n * occurrence — Studio appends its own control params, so a stale earlier value\n * must not win.\n */\nfunction lastParam(\n searchParams: URLSearchParams,\n key: string\n): string | undefined {\n let values = searchParams.getAll(key)\n return values.length ? values.at(-1) : undefined\n}\n\nfunction coerceBool(value: string | undefined): boolean {\n return value === 'true'\n}\n\nfunction readEnv(\n env: Record<string, string | undefined> | undefined,\n key: string\n): string | undefined {\n let fromConfig = env?.[key]\n if (fromConfig !== undefined) {\n return fromConfig\n }\n if (typeof process !== 'undefined' && process.env) {\n return process.env[key]\n }\n return\n}\n\nexport interface ResolveConfigsOptions {\n env?: Record<string, string | undefined>\n weaverseApiBase?: string\n weaverseHost?: string\n weaverseVersion?: string\n}\n\n/**\n * Derive Weaverse configs from the request context and env, close to Hydrogen's\n * `getWeaverseConfigs`. Resolves the trusted host, public API base, design /\n * preview / revision flags, and public env — but never resolves the final\n * `projectId` (that priority chain, which may call an async resolver, lives in\n * the server client). Query/env projectId candidates are returned for the\n * client to combine with function/string inputs.\n */\nexport function getWeaverseNextConfigs(\n context?: WeaverseNextRequestContext,\n options: ResolveConfigsOptions = {}\n): WeaverseNextBaseConfigs {\n let searchParams = getContextSearchParams(context)\n let { env } = options\n\n let queryHost = lastParam(searchParams, 'weaverseHost')\n // A trusted query host is canonicalized to its origin before use, so a crafted\n // `?weaverseHost=https://studio.weaverse.io/evil?x=1` can only ever resolve to\n // `https://studio.weaverse.io` — never carrying an attacker path/query into the\n // server-side API base.\n let trustedUrlHost =\n queryHost && isTrustedStudioHost(queryHost) ? new URL(queryHost).origin : ''\n\n let configuredHost =\n options.weaverseHost || readEnv(env, 'WEAVERSE_HOST') || ''\n let weaverseHost = trustedUrlHost || configuredHost || DEFAULT_WEAVERSE_HOST\n\n // Public data reads default to the edge proxy, but an explicit custom host\n // (staging/self-hosted Weaverse) must stay the API base so those deployments\n // don't fetch page/config data from the production proxy.\n let weaverseApiBase =\n trustedUrlHost ||\n options.weaverseApiBase ||\n readEnv(env, 'WEAVERSE_PUBLIC_API_BASE') ||\n (configuredHost && configuredHost !== DEFAULT_WEAVERSE_HOST\n ? configuredHost\n : DEFAULT_WEAVERSE_API_BASE)\n\n let isRevisionPreview =\n context?.isRevisionPreview ?? searchParams.has('__revisionId')\n let isDesignMode =\n context?.isDesignMode ?? coerceBool(lastParam(searchParams, 'isDesignMode'))\n let isPreviewMode =\n context?.isPreviewMode ??\n coerceBool(lastParam(searchParams, 'isPreviewMode'))\n\n return {\n queryProjectId: lastParam(searchParams, 'weaverseProjectId') || '',\n envProjectId: readEnv(env, 'WEAVERSE_PROJECT_ID') || '',\n weaverseHost,\n weaverseApiBase,\n weaverseApiKey:\n lastParam(searchParams, 'weaverseApiKey') ||\n readEnv(env, 'WEAVERSE_API_KEY') ||\n '',\n weaverseVersion:\n lastParam(searchParams, 'weaverseVersion') ||\n options.weaverseVersion ||\n '',\n isDesignMode,\n isPreviewMode,\n isRevisionPreview,\n sectionType:\n context?.sectionType || lastParam(searchParams, 'sectionType') || '',\n publicEnv: {\n PUBLIC_STORE_DOMAIN: readEnv(env, 'PUBLIC_STORE_DOMAIN') || '',\n PUBLIC_STOREFRONT_API_TOKEN:\n readEnv(env, 'PUBLIC_STOREFRONT_API_TOKEN') || '',\n },\n }\n}\n","import type { WeaverseNextRequestContext } from '../types'\n\n// Query params that influence Weaverse page resolution on the Builder:\n// revision previews, design-mode flags, and `weaverse*` control params\n// (host, version, project id). Everything else — utm_*, fbclid, gclid,\n// storefront filters — is irrelevant to which page the Builder returns and\n// would otherwise fragment any fetch cache keyed on the request body.\nconst KEPT_PARAM_RE = /^(?:__revisionId|isDesignMode|weaverse)/\nconst DATA_SUFFIX = '.data'\n\n/**\n * Normalize the storefront URL sent in the Builder page API request body.\n *\n * The Builder reads only the pathname (locale/type/handle fallback) and the\n * Weaverse/Studio control params from this URL, so keep exactly those and drop\n * tracking params. Params are sorted for a stable, cache-friendly string.\n *\n * Ported from `@weaverse/hydrogen`'s `normalizePageUrl`, but tolerant of a\n * relative URL (Next route handlers may only know the pathname).\n */\nexport function normalizeNextPageUrl(url: string): string {\n let parsed: URL\n try {\n parsed = new URL(url)\n } catch {\n try {\n parsed = new URL(url, 'http://localhost')\n } catch {\n return url\n }\n }\n\n let kept = [...parsed.searchParams].filter(([key]) => KEPT_PARAM_RE.test(key))\n kept.sort(([a], [b]) => a.localeCompare(b))\n let search = new URLSearchParams(kept).toString()\n\n let { pathname } = parsed\n if (pathname.endsWith(DATA_SUFFIX)) {\n pathname = pathname.slice(0, -DATA_SUFFIX.length)\n }\n return `${parsed.origin}${pathname}${search ? `?${search}` : ''}`\n}\n\n/**\n * Build an absolute-ish request URL string from the explicit request context,\n * preferring `url`, then `pathname` + `searchParams`. Used as the input to\n * {@link normalizeNextPageUrl}.\n */\nexport function resolveRequestUrl(\n context?: WeaverseNextRequestContext\n): string {\n if (context?.url) {\n return typeof context.url === 'string'\n ? context.url\n : context.url.toString()\n }\n let pathname = context?.pathname || '/'\n let search = context?.searchParams\n ? new URLSearchParams(context.searchParams).toString()\n : ''\n return `http://localhost${pathname}${search ? `?${search}` : ''}`\n}\n","import type { SchemaType } from '@weaverse/schema'\n\n/**\n * Generate default component data from a schema's `settings` inputs.\n *\n * Mirrors Hydrogen's `generateDataFromSchema` (settings → `{ [name]:\n * defaultValue }`) but is kept local so `@weaverse/next` doesn't depend on\n * `@weaverse/hydrogen`. Falls back to the deprecated `inspector` array when a\n * schema predates `settings`.\n */\nexport function generateDataFromSchema(\n schema: SchemaType | undefined\n): Record<string, unknown> {\n let data: Record<string, unknown> = {}\n if (!schema) {\n return data\n }\n\n let groups =\n (schema.settings as {\n inputs?: { name?: string; defaultValue?: unknown }[]\n }[]) ??\n (schema as { inspector?: typeof groups }).inspector ??\n []\n\n for (let group of groups) {\n for (let input of group?.inputs ?? []) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n\n return data\n}\n","import type {\n WeaverseNextClient,\n WeaverseNextCommerceContext,\n WeaverseNextComponent,\n WeaverseNextComponentData,\n WeaverseNextLoaderData,\n WeaverseNextRequestContext,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport interface RunComponentLoadersArgs {\n client: WeaverseNextClient\n commerce?: WeaverseNextCommerceContext\n context?: WeaverseNextRequestContext\n /** Page payload to walk; defaults to `client.data`. */\n data?: WeaverseNextLoaderData | null\n}\n\nfunction isItemNode(node: unknown): node is WeaverseNextComponentData {\n return (\n typeof node === 'object' &&\n node !== null &&\n typeof (node as WeaverseNextComponentData).type === 'string'\n )\n}\n\nfunction cloneItem(item: WeaverseNextComponentData): WeaverseNextComponentData {\n return {\n ...item,\n children: Array.isArray(item.children)\n ? item.children.map((child) =>\n isItemNode(child) ? cloneItem(child) : { ...child }\n )\n : item.children,\n }\n}\n\n/**\n * Walk a serialized page tree and run each registered component's `loader`,\n * attaching the result to the item as `loaderData`.\n *\n * Loaders receive explicit `commerce.storefront` (and `weaverse.storefront` as\n * a compatibility alias via the client). Children are walked recursively when\n * they are inline item objects; flat `items` arrays are covered by the\n * top-level walk.\n *\n * @returns a cloned `data` object with `loaderData` attached to cloned items.\n */\nexport async function runWeaverseComponentLoaders(\n args: RunComponentLoadersArgs\n): Promise<WeaverseNextLoaderData | null> {\n let { client, context, commerce } = args\n let sourceData = args.data ?? client.data\n if (!sourceData) {\n return null\n }\n if (!sourceData.page.items.length) {\n return sourceData\n }\n\n let data: WeaverseNextLoaderData = {\n ...sourceData,\n page: {\n ...sourceData.page,\n items: sourceData.page.items.map(cloneItem),\n },\n }\n let items = data.page.items\n\n let componentMap = new Map<string, WeaverseNextComponent>()\n for (let component of client.components) {\n if (component?.schema?.type) {\n componentMap.set(component.schema.type, component)\n }\n }\n\n let visited = new Set<string>()\n let resolvedContext = context ?? client.requestContext\n let resolvedCommerce = commerce ?? client.commerce\n\n // Per-call `weaverse` alias. When a request-scoped `commerce` is passed, the\n // `weaverse.storefront` compatibility alias must resolve to *that* storefront,\n // not the client's construction-time commerce. Pilot-style loaders call\n // `weaverse.storefront.query(...)`, so a stale alias would query the wrong\n // (or an undefined) storefront. When no override is given we reuse the client\n // as-is to preserve its prototype getters.\n let resolvedWeaverse: WeaverseNextClient =\n resolvedCommerce === client.commerce\n ? client\n : {\n ...client,\n commerce: resolvedCommerce,\n storefront: resolvedCommerce?.storefront,\n }\n\n async function walk(nodes: WeaverseNextComponentData[]) {\n for (let item of nodes) {\n if (!item || visited.has(item.id)) {\n continue\n }\n visited.add(item.id)\n\n let component = componentMap.get(item.type)\n if (component?.loader) {\n try {\n item.loaderData = await component.loader({\n data: { ...generateDataFromSchema(component.schema), ...item.data },\n weaverse: resolvedWeaverse,\n context: resolvedContext,\n commerce: resolvedCommerce,\n })\n } catch (error) {\n console.warn('❌ Item loader run failed.', item.type, item.id, error)\n }\n }\n\n let children = item.children\n if (Array.isArray(children)) {\n let inlineChildren = children.filter(\n isItemNode\n ) as WeaverseNextComponentData[]\n if (inlineChildren.length) {\n await walk(inlineChildren)\n }\n }\n }\n }\n\n await walk(items)\n return data\n}\n","import type {\n WeaverseNextRequestContext,\n WeaverseNextRequestInfo,\n} from './types'\n\nfunction toUrl(value: string | URL): URL {\n return typeof value === 'string' ? new URL(value, 'http://localhost') : value\n}\n\nfunction getSearchParamsFromContext(\n context?: WeaverseNextRequestContext\n): URLSearchParams {\n if (context?.searchParams) {\n return new URLSearchParams(context.searchParams)\n }\n\n if (context?.url) {\n let url = toUrl(context.url)\n return new URLSearchParams(url.searchParams)\n }\n\n return new URLSearchParams()\n}\n\nfunction getPathnameFromContext(context?: WeaverseNextRequestContext): string {\n if (context?.pathname) {\n return context.pathname\n }\n\n if (context?.url) {\n let url = toUrl(context.url)\n return url.pathname || '/'\n }\n\n return '/'\n}\n\nfunction coerceQueryValue(value: string): string | boolean {\n if (value === 'true') {\n return true\n }\n if (value === 'false') {\n return false\n }\n return value\n}\n\nfunction toQueryRecord(\n searchParams: URLSearchParams\n): Record<string, string | boolean> {\n let queries: Record<string, string | boolean> = {}\n for (let [key, value] of searchParams.entries()) {\n queries[key] = coerceQueryValue(value)\n }\n return queries\n}\n\n/**\n * Build the Hydrogen-like request info shape consumed by the Studio bridge.\n * Duplicate query keys keep the last value, matching `URLSearchParams` iteration\n * assignment and Hydrogen's practical query-object behavior.\n */\nexport function buildWeaverseNextRequestInfo(\n context?: WeaverseNextRequestContext\n): WeaverseNextRequestInfo {\n let searchParams = getSearchParamsFromContext(context)\n let search = searchParams.toString()\n\n return {\n pathname: getPathnameFromContext(context),\n search: search ? `?${search}` : '',\n queries: toQueryRecord(searchParams),\n ...(context?.i18n ? { i18n: context.i18n } : {}),\n }\n}\n","import type { SchemaType } from '@weaverse/schema'\nimport { runWeaverseComponentLoaders } from '../loader'\nimport { buildWeaverseNextRequestInfo } from '../request-info'\nimport type {\n WeaverseNextBaseConfigs,\n WeaverseNextCacheConfig,\n WeaverseNextCommerceContext,\n WeaverseNextComponent,\n WeaverseNextComponentData,\n WeaverseNextConfigs,\n WeaverseNextFetchOptions,\n WeaverseNextLoaderData,\n WeaverseNextLoadPageInput,\n WeaverseNextPageData,\n WeaverseNextProjectId,\n WeaverseNextRequestContext,\n WeaverseNextServerClient,\n WeaverseNextServerClientConfig,\n WeaverseNextServerLoadPageInput,\n WeaverseNextStorefront,\n WeaverseNextThemeSettingsOptions,\n WeaverseNextThemeSettingsResponse,\n} from '../types'\nimport { generateDataFromSchema } from '../utils'\nimport { getWeaverseNextConfigs } from './configs'\nimport { normalizeNextPageUrl, resolveRequestUrl } from './normalize-page-url'\n\nconst DEFAULT_FETCH_TIMEOUT_MS = 10_000\nconst RANDOM_ID_RADIX = 36\nconst RANDOM_ID_SLICE_START = 2\n\nconst JSON_HEADERS = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'Accept-Encoding': 'gzip, deflate, br',\n} as const\n\n/** Next's `fetch` reads `next: { revalidate, tags }` off the request init. */\ntype NextRequestInit = RequestInit & {\n next?: { revalidate?: number | false; tags?: string[] }\n}\n\ninterface LooseThemeSchema {\n i18n?: { staticContent?: Record<string, unknown> }\n inspector?: unknown[]\n settings?: {\n inputs?: { condition?: unknown }[]\n [key: string]: unknown\n }[]\n}\n\nfunction asThemeSchema(schema: unknown): LooseThemeSchema | undefined {\n return schema && typeof schema === 'object'\n ? (schema as LooseThemeSchema)\n : undefined\n}\n\nfunction generateUuid(): string {\n if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {\n return crypto.randomUUID()\n }\n return `id-${Math.random().toString(RANDOM_ID_RADIX).slice(RANDOM_ID_SLICE_START)}`\n}\n\n/**\n * Server-side Weaverse client for Next.js. Performs the real Weaverse public\n * API fetch (page + theme settings) instead of delegating to injected fetchers,\n * closing the gap with Hydrogen's `context.weaverse.loadPage(...)`.\n */\nclass NextServerClient implements WeaverseNextServerClient {\n components: WeaverseNextComponent[]\n commerce?: WeaverseNextCommerceContext\n requestContext?: WeaverseNextRequestContext\n themeSchema?: unknown\n themeSettings: Record<string, unknown>\n data: WeaverseNextLoaderData | null = null\n dataContext: Record<string, unknown> = {}\n configs: WeaverseNextConfigs\n\n private readonly _projectIdInput?: WeaverseNextProjectId\n private readonly _baseConfigs: WeaverseNextBaseConfigs\n private readonly _fetch: typeof fetch\n private readonly _cache?: WeaverseNextServerClientConfig['cache']\n private readonly _fetchTimeoutMs: number\n private _resolvedProjectId?: string\n\n constructor(config: WeaverseNextServerClientConfig) {\n // Server client keeps the component definitions for server-side loaders\n // (`runWeaverseComponentLoaders`) and preview-data generation, but it\n // intentionally does NOT call `registerWeaverseNextComponents`. Registering\n // pulls in `../registry` → `@weaverse/react`, which evaluates\n // `React.createContext()` at module load — invalid in the RSC/server graph\n // and the cause of `(0 , x.createContext) is not a function`. The client\n // wrapper/renderer (root `@weaverse/next` client entry) registers the real\n // render components instead, keeping `@weaverse/next/server` React-free.\n this.components = config.components\n this.commerce = config.commerce\n this.requestContext = config.requestContext\n this.themeSchema = config.themeSchema\n // Seed schema defaults before merchant overrides, mirroring the root client.\n this.themeSettings = {\n ...generateDataFromSchema(config.themeSchema as SchemaType | undefined),\n ...config.themeSettings,\n }\n this._projectIdInput = config.projectId\n this._fetch = config.fetch ?? globalThis.fetch\n this._cache = config.cache\n this._fetchTimeoutMs = config.fetchTimeoutMs ?? DEFAULT_FETCH_TIMEOUT_MS\n\n this._baseConfigs = getWeaverseNextConfigs(config.requestContext, {\n env: config.env,\n weaverseHost: config.weaverseHost,\n weaverseApiBase: config.weaverseApiBase,\n weaverseVersion: config.weaverseVersion,\n })\n\n // Synchronous best-effort projectId (query → string → env). A function\n // resolver is awaited lazily in `resolveProjectId`, so `projectId` reflects\n // its result after the first `loadPage`/`loadThemeSettings`/`resolveProjectId`.\n this.configs = this._buildPublicConfigs(\n this._baseConfigs.queryProjectId ||\n (typeof this._projectIdInput === 'string'\n ? this._projectIdInput.trim()\n : '') ||\n this._baseConfigs.envProjectId\n )\n }\n\n get projectId(): string {\n return this.configs.projectId\n }\n\n /** Compatibility alias so loaders can call `weaverse.storefront.query(...)`. */\n get storefront(): WeaverseNextStorefront | undefined {\n return this.commerce?.storefront\n }\n\n private _buildPublicConfigs(projectId: string): WeaverseNextConfigs {\n let base = this._baseConfigs\n return {\n projectId,\n weaverseHost: base.weaverseHost,\n weaverseApiBase: base.weaverseApiBase,\n weaversePublicApiBase: base.weaverseApiBase,\n weaverseVersion: base.weaverseVersion,\n isDesignMode: base.isDesignMode,\n isPreviewMode: base.isPreviewMode,\n isRevisionPreview: base.isRevisionPreview,\n sectionType: base.sectionType,\n publicEnv: base.publicEnv,\n }\n }\n\n resolveProjectId = async (): Promise<string> => {\n if (this._resolvedProjectId !== undefined) {\n return this._resolvedProjectId\n }\n\n // Priority: query param → function → string → env (matches Hydrogen).\n let resolved = this._baseConfigs.queryProjectId\n if (!resolved && typeof this._projectIdInput === 'function') {\n try {\n let value = await this._projectIdInput(this.requestContext)\n if (typeof value === 'string' && value.trim()) {\n resolved = value.trim()\n }\n } catch (error) {\n console.warn(\n '[WeaverseNextServerClient] projectId resolver threw, falling back.',\n error\n )\n }\n }\n if (!resolved && typeof this._projectIdInput === 'string') {\n resolved = this._projectIdInput.trim()\n }\n if (!resolved) {\n resolved = this._baseConfigs.envProjectId\n }\n\n this._resolvedProjectId = resolved\n this.configs = this._buildPublicConfigs(resolved)\n return resolved\n }\n\n fetchWithCache = async <T = unknown>(\n url: string,\n options: WeaverseNextFetchOptions = {}\n ): Promise<T> => {\n let { revalidate, tags, ...init } = options\n let requestInit: NextRequestInit = { ...init }\n\n let { isDesignMode, isRevisionPreview } = this._baseConfigs\n if (isDesignMode || isRevisionPreview) {\n // Design / revision data must never be served stale.\n requestInit.cache = 'no-store'\n } else if (requestInit.cache === undefined) {\n let effectiveRevalidate = revalidate ?? this._cache?.revalidate\n let effectiveTags = tags ?? this._cache?.tags\n if (effectiveRevalidate !== undefined || effectiveTags?.length) {\n requestInit.next = {\n ...(effectiveRevalidate === undefined\n ? {}\n : { revalidate: effectiveRevalidate }),\n ...(effectiveTags?.length ? { tags: effectiveTags } : {}),\n }\n }\n }\n\n let controller = new AbortController()\n let timeoutId = setTimeout(() => controller.abort(), this._fetchTimeoutMs)\n try {\n let response = await this._fetch(url, {\n ...requestInit,\n signal: requestInit.signal ?? controller.signal,\n })\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n return (await response.json()) as T\n } finally {\n clearTimeout(timeoutId)\n }\n }\n\n private _generateFallbackPage(message: string): WeaverseNextPageData {\n let rootId = generateUuid()\n return {\n id: `fallback_page_${rootId}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n /**\n * Recursively materialize a section preset (and its preset children) into a\n * flat list of page items, returning the new item id. Ported from Hydrogen's\n * `recursivelyAddDataItem`. Returns `undefined` when the type isn't registered.\n */\n private _buildPreviewItems(\n type: string,\n items: WeaverseNextComponentData[],\n initData: Record<string, unknown> = {}\n ): string | undefined {\n let component = this.components.find((c) => c.schema?.type === type)\n if (!component) {\n return\n }\n let { children, ...data } = (component.schema?.presets ?? {}) as {\n children?: { type: string; [key: string]: unknown }[]\n [key: string]: unknown\n }\n let childIds: { id: string }[] = []\n if (children) {\n for (let child of children) {\n let { type: childType, children: _children, ...childData } = child\n let childId = this._buildPreviewItems(childType, items, childData)\n if (childId) {\n childIds.push({ id: childId })\n }\n }\n }\n let id = generateUuid()\n items.push({ id, type, data: { ...data, ...initData }, children: childIds })\n return id\n }\n\n /**\n * Synthetic loader data for Studio \"section preview\" mode. Mirrors Hydrogen's\n * `getPreviewData`: it builds a single-section page from the requested\n * `sectionType`'s presets without hitting `/api/public/project`, so preview\n * works even without a resolved `projectId`.\n */\n private _generatePreviewData(projectId: string): WeaverseNextLoaderData {\n let { sectionType, weaverseHost } = this._baseConfigs\n let items: WeaverseNextComponentData[] = []\n let sectionId = sectionType\n ? this._buildPreviewItems(sectionType, items)\n : undefined\n\n let configs = {\n ...this._buildPublicConfigs(projectId),\n isPreviewMode: true,\n weaverseHost,\n requestInfo: buildWeaverseNextRequestInfo(this.requestContext),\n }\n\n return {\n project: {\n id: projectId,\n weaverseShopId: 'shop-id',\n name: 'Section Preview',\n },\n configs,\n page: {\n id: 'weaverse-preview-page',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n id: '1',\n type: 'main',\n data: {},\n children: sectionId ? [{ id: sectionId }] : [],\n },\n ...items,\n ],\n },\n }\n }\n\n private _getLoadPageInput(input: WeaverseNextLoadPageInput) {\n let {\n cache,\n projectId: routeProjectId,\n ...rest\n } = input as WeaverseNextServerLoadPageInput\n let params: Record<string, unknown> = {}\n for (let [key, value] of Object.entries(rest)) {\n if (value !== undefined) {\n params[key] = value\n }\n }\n return { cache, params, routeProjectId }\n }\n\n private async _resolveLoadPageProjectId(routeProjectId?: string) {\n let effectiveProjectId =\n (typeof routeProjectId === 'string' && routeProjectId.trim()) ||\n (await this.resolveProjectId())\n if (effectiveProjectId) {\n this.configs = this._buildPublicConfigs(effectiveProjectId)\n }\n return effectiveProjectId\n }\n\n private _fetchPagePayload(\n projectId: string,\n params: Record<string, unknown>,\n cache?: WeaverseNextCacheConfig\n ) {\n let i18n = this.requestContext?.i18n ?? this.commerce?.storefront?.i18n\n let url = normalizeNextPageUrl(resolveRequestUrl(this.requestContext))\n let apiUrl = `${this._baseConfigs.weaverseApiBase}/api/public/project`\n let userAgent = this.requestContext?.headers?.get('user-agent') ?? ''\n return this.fetchWithCache<Record<string, unknown>>(apiUrl, {\n method: 'POST',\n body: JSON.stringify({\n projectId,\n url,\n i18n,\n params,\n isDesignMode: this._baseConfigs.isDesignMode,\n }),\n headers: { ...JSON_HEADERS, 'X-Visitor-UA': userAgent },\n ...(cache ?? {}),\n })\n }\n\n private _assertNoPageError(payload: Record<string, unknown>) {\n if ('error' in payload && typeof payload.error === 'string') {\n throw new Error(payload.error)\n }\n }\n\n private _createLoaderData(\n payload: Record<string, unknown>,\n projectId: string\n ): WeaverseNextLoaderData {\n this._assertNoPageError(payload)\n let page = payload.page as WeaverseNextPageData | undefined\n let project = payload.project as WeaverseNextLoaderData['project']\n let pageAssignment = payload.pageAssignment as\n | WeaverseNextLoaderData['pageAssignment']\n | undefined\n\n page ??= this._generateFallbackPage(\n '<div style=\"text-align: center;\">Please add new section to start.</div>'\n )\n project ??= {\n id: projectId,\n name: 'Weaverse project not found.',\n weaverseShopId: '',\n }\n if (Array.isArray(page.items) && page.items.length === 0) {\n page.items.push({\n type: 'main',\n id: page.rootId || generateUuid(),\n data: {},\n })\n }\n\n return {\n page,\n project,\n pageAssignment,\n configs: {\n ...this._buildPublicConfigs(projectId),\n requestInfo: buildWeaverseNextRequestInfo(this.requestContext),\n },\n }\n }\n\n private async _runLoaders(data: WeaverseNextLoaderData) {\n this.data = data\n let withLoaders = await runWeaverseComponentLoaders({ client: this, data })\n this.data = withLoaders ?? data\n return this.data\n }\n\n loadPage = async (\n input: WeaverseNextLoadPageInput = {}\n ): Promise<WeaverseNextLoaderData | null> => {\n try {\n let { cache, params, routeProjectId } = this._getLoadPageInput(input)\n let projectId = await this._resolveLoadPageProjectId(routeProjectId)\n if (this._baseConfigs.isPreviewMode) {\n let previewData = this._generatePreviewData(projectId || 'x')\n this.data = previewData\n return previewData\n }\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let payload = await this._fetchPagePayload(projectId, params, cache)\n let data = this._createLoaderData(payload, projectId)\n return await this._runLoaders(data)\n } catch (error) {\n console.error('❌ Page load failed', {\n url: this.requestContext?.url,\n projectId: input.projectId || this.configs.projectId,\n message: error instanceof Error ? error.message : String(error),\n })\n return null\n }\n }\n\n loadThemeSettings = async (\n // Broad param keeps this assignable to `WeaverseNextClient.loadThemeSettings`;\n // only the cache fields below are honored — no request-context override.\n optionsInput:\n | WeaverseNextThemeSettingsOptions\n | WeaverseNextRequestContext = {}\n ): Promise<WeaverseNextThemeSettingsResponse> => {\n let options = optionsInput as WeaverseNextThemeSettingsOptions\n let themeSchema = asThemeSchema(this.themeSchema)\n let defaultThemeSettings = generateDataFromSchema(\n this.themeSchema as SchemaType | undefined\n )\n let staticContent = themeSchema?.i18n?.staticContent\n\n try {\n let projectId = await this.resolveProjectId()\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { isDesignMode } = this._baseConfigs\n let url = `${this._baseConfigs.weaverseApiBase}/api/public/project_configs`\n let result = await this.fetchWithCache<WeaverseNextThemeSettingsResponse>(\n url,\n {\n method: 'POST',\n body: JSON.stringify({ projectId, isDesignMode }),\n headers: JSON_HEADERS,\n revalidate: options.revalidate,\n tags: options.tags,\n }\n )\n\n if (typeof result !== 'object' || result === null) {\n result = { theme: defaultThemeSettings }\n }\n\n if (themeSchema?.settings || themeSchema?.inspector) {\n if (!result.theme || typeof result.theme !== 'object') {\n result.theme = defaultThemeSettings\n } else {\n result.theme = { ...defaultThemeSettings, ...result.theme }\n }\n }\n\n if (staticContent) {\n result.staticContent = staticContent\n }\n\n if (isDesignMode) {\n result = {\n ...result,\n schema: themeSchema\n ? {\n ...themeSchema,\n settings: themeSchema.settings?.map((group) => ({\n ...group,\n inputs: group?.inputs?.map((inputItem) =>\n typeof inputItem?.condition === 'function'\n ? {\n ...inputItem,\n condition: inputItem.condition.toString(),\n }\n : inputItem\n ),\n })),\n }\n : undefined,\n publicEnv: this._baseConfigs.publicEnv,\n }\n }\n\n return result\n } catch (error) {\n let errorDetails = error instanceof Error ? error.message : String(error)\n console.error('Unable to load theme settings', errorDetails)\n return {\n theme: defaultThemeSettings,\n staticContent,\n _error: errorDetails,\n _loadFailed: true,\n }\n }\n }\n}\n\n/**\n * Create a server-side {@link WeaverseNextServerClient} for Next.js App Router\n * routes / server components.\n *\n * @example\n * ```ts\n * let weaverse = createWeaverseNextServerClient({\n * projectId: process.env.WEAVERSE_PROJECT_ID,\n * components,\n * commerce: { storefront },\n * requestContext: { url, headers, searchParams, i18n },\n * cache: { revalidate: 60, tags: ['weaverse'] },\n * })\n * let data = await weaverse.loadPage({ type: 'INDEX' })\n * let theme = await weaverse.loadThemeSettings()\n * ```\n */\nexport function createWeaverseNextServerClient(\n config: WeaverseNextServerClientConfig\n): WeaverseNextServerClient {\n return new NextServerClient(config)\n}\n\nexport { getContextSearchParams } from './configs'\n"]}
@@ -0,0 +1,513 @@
1
+ import { generateDataFromSchema, buildWeaverseNextRequestInfo, runWeaverseComponentLoaders } from './chunk-SS6QUKYY.mjs';
2
+
3
+ // src/server/configs.ts
4
+ var DEFAULT_WEAVERSE_HOST = "https://studio.weaverse.io";
5
+ var DEFAULT_WEAVERSE_API_BASE = "https://api.weaverse.io";
6
+ var TRUSTED_STUDIO_DOMAINS = ["weaverse.io", "weaverse.dev"];
7
+ function isTrustedStudioHost(host) {
8
+ let parsed;
9
+ try {
10
+ parsed = new URL(host);
11
+ } catch {
12
+ return false;
13
+ }
14
+ if (parsed.protocol !== "https:") {
15
+ return false;
16
+ }
17
+ let { hostname } = parsed;
18
+ return TRUSTED_STUDIO_DOMAINS.some(
19
+ (domain) => hostname === domain || hostname.endsWith(`.${domain}`)
20
+ );
21
+ }
22
+ function toUrl(value) {
23
+ try {
24
+ return typeof value === "string" ? new URL(value, "http://localhost") : value;
25
+ } catch {
26
+ return null;
27
+ }
28
+ }
29
+ function getContextSearchParams(context) {
30
+ if (context?.searchParams) {
31
+ return new URLSearchParams(context.searchParams);
32
+ }
33
+ if (context?.url) {
34
+ let url = toUrl(context.url);
35
+ if (url) {
36
+ return new URLSearchParams(url.searchParams);
37
+ }
38
+ }
39
+ return new URLSearchParams();
40
+ }
41
+ function lastParam(searchParams, key) {
42
+ let values = searchParams.getAll(key);
43
+ return values.length ? values.at(-1) : void 0;
44
+ }
45
+ function coerceBool(value) {
46
+ return value === "true";
47
+ }
48
+ function readEnv(env, key) {
49
+ let fromConfig = env?.[key];
50
+ if (fromConfig !== void 0) {
51
+ return fromConfig;
52
+ }
53
+ if (typeof process !== "undefined" && process.env) {
54
+ return process.env[key];
55
+ }
56
+ return;
57
+ }
58
+ function getWeaverseNextConfigs(context, options = {}) {
59
+ let searchParams = getContextSearchParams(context);
60
+ let { env } = options;
61
+ let queryHost = lastParam(searchParams, "weaverseHost");
62
+ let trustedUrlHost = queryHost && isTrustedStudioHost(queryHost) ? new URL(queryHost).origin : "";
63
+ let configuredHost = options.weaverseHost || readEnv(env, "WEAVERSE_HOST") || "";
64
+ let weaverseHost = trustedUrlHost || configuredHost || DEFAULT_WEAVERSE_HOST;
65
+ let weaverseApiBase = trustedUrlHost || options.weaverseApiBase || readEnv(env, "WEAVERSE_PUBLIC_API_BASE") || (configuredHost && configuredHost !== DEFAULT_WEAVERSE_HOST ? configuredHost : DEFAULT_WEAVERSE_API_BASE);
66
+ let isRevisionPreview = context?.isRevisionPreview ?? searchParams.has("__revisionId");
67
+ let isDesignMode = context?.isDesignMode ?? coerceBool(lastParam(searchParams, "isDesignMode"));
68
+ let isPreviewMode = context?.isPreviewMode ?? coerceBool(lastParam(searchParams, "isPreviewMode"));
69
+ return {
70
+ queryProjectId: lastParam(searchParams, "weaverseProjectId") || "",
71
+ envProjectId: readEnv(env, "WEAVERSE_PROJECT_ID") || "",
72
+ weaverseHost,
73
+ weaverseApiBase,
74
+ weaverseApiKey: lastParam(searchParams, "weaverseApiKey") || readEnv(env, "WEAVERSE_API_KEY") || "",
75
+ weaverseVersion: lastParam(searchParams, "weaverseVersion") || options.weaverseVersion || "",
76
+ isDesignMode,
77
+ isPreviewMode,
78
+ isRevisionPreview,
79
+ sectionType: context?.sectionType || lastParam(searchParams, "sectionType") || "",
80
+ publicEnv: {
81
+ PUBLIC_STORE_DOMAIN: readEnv(env, "PUBLIC_STORE_DOMAIN") || "",
82
+ PUBLIC_STOREFRONT_API_TOKEN: readEnv(env, "PUBLIC_STOREFRONT_API_TOKEN") || ""
83
+ }
84
+ };
85
+ }
86
+
87
+ // src/server/normalize-page-url.ts
88
+ var KEPT_PARAM_RE = /^(?:__revisionId|isDesignMode|weaverse)/;
89
+ var DATA_SUFFIX = ".data";
90
+ function normalizeNextPageUrl(url) {
91
+ let parsed;
92
+ try {
93
+ parsed = new URL(url);
94
+ } catch {
95
+ try {
96
+ parsed = new URL(url, "http://localhost");
97
+ } catch {
98
+ return url;
99
+ }
100
+ }
101
+ let kept = [...parsed.searchParams].filter(([key]) => KEPT_PARAM_RE.test(key));
102
+ kept.sort(([a], [b]) => a.localeCompare(b));
103
+ let search = new URLSearchParams(kept).toString();
104
+ let { pathname } = parsed;
105
+ if (pathname.endsWith(DATA_SUFFIX)) {
106
+ pathname = pathname.slice(0, -DATA_SUFFIX.length);
107
+ }
108
+ return `${parsed.origin}${pathname}${search ? `?${search}` : ""}`;
109
+ }
110
+ function resolveRequestUrl(context) {
111
+ if (context?.url) {
112
+ return typeof context.url === "string" ? context.url : context.url.toString();
113
+ }
114
+ let pathname = context?.pathname || "/";
115
+ let search = context?.searchParams ? new URLSearchParams(context.searchParams).toString() : "";
116
+ return `http://localhost${pathname}${search ? `?${search}` : ""}`;
117
+ }
118
+
119
+ // src/server/server-client.ts
120
+ var DEFAULT_FETCH_TIMEOUT_MS = 1e4;
121
+ var RANDOM_ID_RADIX = 36;
122
+ var RANDOM_ID_SLICE_START = 2;
123
+ var JSON_HEADERS = {
124
+ "Content-Type": "application/json",
125
+ Accept: "application/json",
126
+ "Accept-Encoding": "gzip, deflate, br"
127
+ };
128
+ function asThemeSchema(schema) {
129
+ return schema && typeof schema === "object" ? schema : void 0;
130
+ }
131
+ function generateUuid() {
132
+ if (typeof crypto !== "undefined" && "randomUUID" in crypto) {
133
+ return crypto.randomUUID();
134
+ }
135
+ return `id-${Math.random().toString(RANDOM_ID_RADIX).slice(RANDOM_ID_SLICE_START)}`;
136
+ }
137
+ var NextServerClient = class {
138
+ components;
139
+ commerce;
140
+ requestContext;
141
+ themeSchema;
142
+ themeSettings;
143
+ data = null;
144
+ dataContext = {};
145
+ configs;
146
+ _projectIdInput;
147
+ _baseConfigs;
148
+ _fetch;
149
+ _cache;
150
+ _fetchTimeoutMs;
151
+ _resolvedProjectId;
152
+ constructor(config) {
153
+ this.components = config.components;
154
+ this.commerce = config.commerce;
155
+ this.requestContext = config.requestContext;
156
+ this.themeSchema = config.themeSchema;
157
+ this.themeSettings = {
158
+ ...generateDataFromSchema(config.themeSchema),
159
+ ...config.themeSettings
160
+ };
161
+ this._projectIdInput = config.projectId;
162
+ this._fetch = config.fetch ?? globalThis.fetch;
163
+ this._cache = config.cache;
164
+ this._fetchTimeoutMs = config.fetchTimeoutMs ?? DEFAULT_FETCH_TIMEOUT_MS;
165
+ this._baseConfigs = getWeaverseNextConfigs(config.requestContext, {
166
+ env: config.env,
167
+ weaverseHost: config.weaverseHost,
168
+ weaverseApiBase: config.weaverseApiBase,
169
+ weaverseVersion: config.weaverseVersion
170
+ });
171
+ this.configs = this._buildPublicConfigs(
172
+ this._baseConfigs.queryProjectId || (typeof this._projectIdInput === "string" ? this._projectIdInput.trim() : "") || this._baseConfigs.envProjectId
173
+ );
174
+ }
175
+ get projectId() {
176
+ return this.configs.projectId;
177
+ }
178
+ /** Compatibility alias so loaders can call `weaverse.storefront.query(...)`. */
179
+ get storefront() {
180
+ return this.commerce?.storefront;
181
+ }
182
+ _buildPublicConfigs(projectId) {
183
+ let base = this._baseConfigs;
184
+ return {
185
+ projectId,
186
+ weaverseHost: base.weaverseHost,
187
+ weaverseApiBase: base.weaverseApiBase,
188
+ weaversePublicApiBase: base.weaverseApiBase,
189
+ weaverseVersion: base.weaverseVersion,
190
+ isDesignMode: base.isDesignMode,
191
+ isPreviewMode: base.isPreviewMode,
192
+ isRevisionPreview: base.isRevisionPreview,
193
+ sectionType: base.sectionType,
194
+ publicEnv: base.publicEnv
195
+ };
196
+ }
197
+ resolveProjectId = async () => {
198
+ if (this._resolvedProjectId !== void 0) {
199
+ return this._resolvedProjectId;
200
+ }
201
+ let resolved = this._baseConfigs.queryProjectId;
202
+ if (!resolved && typeof this._projectIdInput === "function") {
203
+ try {
204
+ let value = await this._projectIdInput(this.requestContext);
205
+ if (typeof value === "string" && value.trim()) {
206
+ resolved = value.trim();
207
+ }
208
+ } catch (error) {
209
+ console.warn(
210
+ "[WeaverseNextServerClient] projectId resolver threw, falling back.",
211
+ error
212
+ );
213
+ }
214
+ }
215
+ if (!resolved && typeof this._projectIdInput === "string") {
216
+ resolved = this._projectIdInput.trim();
217
+ }
218
+ if (!resolved) {
219
+ resolved = this._baseConfigs.envProjectId;
220
+ }
221
+ this._resolvedProjectId = resolved;
222
+ this.configs = this._buildPublicConfigs(resolved);
223
+ return resolved;
224
+ };
225
+ fetchWithCache = async (url, options = {}) => {
226
+ let { revalidate, tags, ...init } = options;
227
+ let requestInit = { ...init };
228
+ let { isDesignMode, isRevisionPreview } = this._baseConfigs;
229
+ if (isDesignMode || isRevisionPreview) {
230
+ requestInit.cache = "no-store";
231
+ } else if (requestInit.cache === void 0) {
232
+ let effectiveRevalidate = revalidate ?? this._cache?.revalidate;
233
+ let effectiveTags = tags ?? this._cache?.tags;
234
+ if (effectiveRevalidate !== void 0 || effectiveTags?.length) {
235
+ requestInit.next = {
236
+ ...effectiveRevalidate === void 0 ? {} : { revalidate: effectiveRevalidate },
237
+ ...effectiveTags?.length ? { tags: effectiveTags } : {}
238
+ };
239
+ }
240
+ }
241
+ let controller = new AbortController();
242
+ let timeoutId = setTimeout(() => controller.abort(), this._fetchTimeoutMs);
243
+ try {
244
+ let response = await this._fetch(url, {
245
+ ...requestInit,
246
+ signal: requestInit.signal ?? controller.signal
247
+ });
248
+ if (!response.ok) {
249
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
250
+ }
251
+ return await response.json();
252
+ } finally {
253
+ clearTimeout(timeoutId);
254
+ }
255
+ };
256
+ _generateFallbackPage(message) {
257
+ let rootId = generateUuid();
258
+ return {
259
+ id: `fallback_page_${rootId}`,
260
+ rootId,
261
+ name: "Default Page",
262
+ items: [
263
+ {
264
+ type: "main",
265
+ id: rootId,
266
+ data: { dangerouslySetInnerHTML: { __html: message } }
267
+ }
268
+ ]
269
+ };
270
+ }
271
+ /**
272
+ * Recursively materialize a section preset (and its preset children) into a
273
+ * flat list of page items, returning the new item id. Ported from Hydrogen's
274
+ * `recursivelyAddDataItem`. Returns `undefined` when the type isn't registered.
275
+ */
276
+ _buildPreviewItems(type, items, initData = {}) {
277
+ let component = this.components.find((c) => c.schema?.type === type);
278
+ if (!component) {
279
+ return;
280
+ }
281
+ let { children, ...data } = component.schema?.presets ?? {};
282
+ let childIds = [];
283
+ if (children) {
284
+ for (let child of children) {
285
+ let { type: childType, children: _children, ...childData } = child;
286
+ let childId = this._buildPreviewItems(childType, items, childData);
287
+ if (childId) {
288
+ childIds.push({ id: childId });
289
+ }
290
+ }
291
+ }
292
+ let id = generateUuid();
293
+ items.push({ id, type, data: { ...data, ...initData }, children: childIds });
294
+ return id;
295
+ }
296
+ /**
297
+ * Synthetic loader data for Studio "section preview" mode. Mirrors Hydrogen's
298
+ * `getPreviewData`: it builds a single-section page from the requested
299
+ * `sectionType`'s presets without hitting `/api/public/project`, so preview
300
+ * works even without a resolved `projectId`.
301
+ */
302
+ _generatePreviewData(projectId) {
303
+ let { sectionType, weaverseHost } = this._baseConfigs;
304
+ let items = [];
305
+ let sectionId = sectionType ? this._buildPreviewItems(sectionType, items) : void 0;
306
+ let configs = {
307
+ ...this._buildPublicConfigs(projectId),
308
+ isPreviewMode: true,
309
+ weaverseHost,
310
+ requestInfo: buildWeaverseNextRequestInfo(this.requestContext)
311
+ };
312
+ return {
313
+ project: {
314
+ id: projectId,
315
+ weaverseShopId: "shop-id",
316
+ name: "Section Preview"
317
+ },
318
+ configs,
319
+ page: {
320
+ id: "weaverse-preview-page",
321
+ name: "Preview section",
322
+ rootId: "1",
323
+ items: [
324
+ {
325
+ id: "1",
326
+ type: "main",
327
+ data: {},
328
+ children: sectionId ? [{ id: sectionId }] : []
329
+ },
330
+ ...items
331
+ ]
332
+ }
333
+ };
334
+ }
335
+ _getLoadPageInput(input) {
336
+ let {
337
+ cache,
338
+ projectId: routeProjectId,
339
+ ...rest
340
+ } = input;
341
+ let params = {};
342
+ for (let [key, value] of Object.entries(rest)) {
343
+ if (value !== void 0) {
344
+ params[key] = value;
345
+ }
346
+ }
347
+ return { cache, params, routeProjectId };
348
+ }
349
+ async _resolveLoadPageProjectId(routeProjectId) {
350
+ let effectiveProjectId = typeof routeProjectId === "string" && routeProjectId.trim() || await this.resolveProjectId();
351
+ if (effectiveProjectId) {
352
+ this.configs = this._buildPublicConfigs(effectiveProjectId);
353
+ }
354
+ return effectiveProjectId;
355
+ }
356
+ _fetchPagePayload(projectId, params, cache) {
357
+ let i18n = this.requestContext?.i18n ?? this.commerce?.storefront?.i18n;
358
+ let url = normalizeNextPageUrl(resolveRequestUrl(this.requestContext));
359
+ let apiUrl = `${this._baseConfigs.weaverseApiBase}/api/public/project`;
360
+ let userAgent = this.requestContext?.headers?.get("user-agent") ?? "";
361
+ return this.fetchWithCache(apiUrl, {
362
+ method: "POST",
363
+ body: JSON.stringify({
364
+ projectId,
365
+ url,
366
+ i18n,
367
+ params,
368
+ isDesignMode: this._baseConfigs.isDesignMode
369
+ }),
370
+ headers: { ...JSON_HEADERS, "X-Visitor-UA": userAgent },
371
+ ...cache ?? {}
372
+ });
373
+ }
374
+ _assertNoPageError(payload) {
375
+ if ("error" in payload && typeof payload.error === "string") {
376
+ throw new Error(payload.error);
377
+ }
378
+ }
379
+ _createLoaderData(payload, projectId) {
380
+ this._assertNoPageError(payload);
381
+ let page = payload.page;
382
+ let project = payload.project;
383
+ let pageAssignment = payload.pageAssignment;
384
+ page ??= this._generateFallbackPage(
385
+ '<div style="text-align: center;">Please add new section to start.</div>'
386
+ );
387
+ project ??= {
388
+ id: projectId,
389
+ name: "Weaverse project not found.",
390
+ weaverseShopId: ""
391
+ };
392
+ if (Array.isArray(page.items) && page.items.length === 0) {
393
+ page.items.push({
394
+ type: "main",
395
+ id: page.rootId || generateUuid(),
396
+ data: {}
397
+ });
398
+ }
399
+ return {
400
+ page,
401
+ project,
402
+ pageAssignment,
403
+ configs: {
404
+ ...this._buildPublicConfigs(projectId),
405
+ requestInfo: buildWeaverseNextRequestInfo(this.requestContext)
406
+ }
407
+ };
408
+ }
409
+ async _runLoaders(data) {
410
+ this.data = data;
411
+ let withLoaders = await runWeaverseComponentLoaders({ client: this, data });
412
+ this.data = withLoaders ?? data;
413
+ return this.data;
414
+ }
415
+ loadPage = async (input = {}) => {
416
+ try {
417
+ let { cache, params, routeProjectId } = this._getLoadPageInput(input);
418
+ let projectId = await this._resolveLoadPageProjectId(routeProjectId);
419
+ if (this._baseConfigs.isPreviewMode) {
420
+ let previewData = this._generatePreviewData(projectId || "x");
421
+ this.data = previewData;
422
+ return previewData;
423
+ }
424
+ if (!projectId) {
425
+ throw new Error("Missing Weaverse projectId!");
426
+ }
427
+ let payload = await this._fetchPagePayload(projectId, params, cache);
428
+ let data = this._createLoaderData(payload, projectId);
429
+ return await this._runLoaders(data);
430
+ } catch (error) {
431
+ console.error("\u274C Page load failed", {
432
+ url: this.requestContext?.url,
433
+ projectId: input.projectId || this.configs.projectId,
434
+ message: error instanceof Error ? error.message : String(error)
435
+ });
436
+ return null;
437
+ }
438
+ };
439
+ loadThemeSettings = async (optionsInput = {}) => {
440
+ let options = optionsInput;
441
+ let themeSchema = asThemeSchema(this.themeSchema);
442
+ let defaultThemeSettings = generateDataFromSchema(
443
+ this.themeSchema
444
+ );
445
+ let staticContent = themeSchema?.i18n?.staticContent;
446
+ try {
447
+ let projectId = await this.resolveProjectId();
448
+ if (!projectId) {
449
+ throw new Error("Missing Weaverse projectId!");
450
+ }
451
+ let { isDesignMode } = this._baseConfigs;
452
+ let url = `${this._baseConfigs.weaverseApiBase}/api/public/project_configs`;
453
+ let result = await this.fetchWithCache(
454
+ url,
455
+ {
456
+ method: "POST",
457
+ body: JSON.stringify({ projectId, isDesignMode }),
458
+ headers: JSON_HEADERS,
459
+ revalidate: options.revalidate,
460
+ tags: options.tags
461
+ }
462
+ );
463
+ if (typeof result !== "object" || result === null) {
464
+ result = { theme: defaultThemeSettings };
465
+ }
466
+ if (themeSchema?.settings || themeSchema?.inspector) {
467
+ if (!result.theme || typeof result.theme !== "object") {
468
+ result.theme = defaultThemeSettings;
469
+ } else {
470
+ result.theme = { ...defaultThemeSettings, ...result.theme };
471
+ }
472
+ }
473
+ if (staticContent) {
474
+ result.staticContent = staticContent;
475
+ }
476
+ if (isDesignMode) {
477
+ result = {
478
+ ...result,
479
+ schema: themeSchema ? {
480
+ ...themeSchema,
481
+ settings: themeSchema.settings?.map((group) => ({
482
+ ...group,
483
+ inputs: group?.inputs?.map(
484
+ (inputItem) => typeof inputItem?.condition === "function" ? {
485
+ ...inputItem,
486
+ condition: inputItem.condition.toString()
487
+ } : inputItem
488
+ )
489
+ }))
490
+ } : void 0,
491
+ publicEnv: this._baseConfigs.publicEnv
492
+ };
493
+ }
494
+ return result;
495
+ } catch (error) {
496
+ let errorDetails = error instanceof Error ? error.message : String(error);
497
+ console.error("Unable to load theme settings", errorDetails);
498
+ return {
499
+ theme: defaultThemeSettings,
500
+ staticContent,
501
+ _error: errorDetails,
502
+ _loadFailed: true
503
+ };
504
+ }
505
+ };
506
+ };
507
+ function createWeaverseNextServerClient(config) {
508
+ return new NextServerClient(config);
509
+ }
510
+
511
+ export { createWeaverseNextServerClient, getWeaverseNextConfigs, normalizeNextPageUrl, resolveRequestUrl };
512
+ //# sourceMappingURL=server.mjs.map
513
+ //# sourceMappingURL=server.mjs.map