@crvouga/mockingbird-service-formbricks 0.1.0
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/CHANGELOG.md +5 -0
- package/README.md +124 -0
- package/dist/chunk-2FV4RSDZ.js +370 -0
- package/dist/chunk-2FV4RSDZ.js.map +7 -0
- package/dist/chunk-FZI2QHRQ.js +11714 -0
- package/dist/chunk-FZI2QHRQ.js.map +7 -0
- package/dist/cli.js +19 -0
- package/dist/cli.js.map +7 -0
- package/dist/index.d.ts +1200 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +7 -0
- package/dist/server.d.ts +1511 -0
- package/dist/server.js +12 -0
- package/dist/server.js.map +7 -0
- package/package.json +88 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../core/src/clock.ts", "../../core/src/collection.ts", "../../core/src/control.ts", "../../core/src/credentials.ts", "../../core/src/rng.ts", "../../core/src/faults.ts", "../../../openapi/core/src/refs.ts", "../../../openapi/core/src/types.ts", "../../../openapi/core/src/document.ts", "../../../http/codec/src/form.ts", "../../../http/codec/src/content.ts", "../../core/src/http.ts", "../../core/src/ids.ts", "../../core/src/journal.ts", "../../core/src/metrics.ts", "../../../core/src/timeline.ts", "../../../sqlite/src/default.ts", "../../../sqlite/src/migrate.ts", "../../../sqlite/src/schema.ts", "../../../openapi/metadata/src/types.ts", "../../../openapi/metadata/src/read.ts", "../../core/src/service.ts", "../../core/src/snapshot.ts", "../../core/src/version.ts", "../../core/src/signing.ts", "../../core/src/webhooks.ts", "../../core/src/runtime.ts", "../src/generated/openapi.ts", "../src/corpus/prod-clone.json", "../src/state.ts", "../src/validation.ts", "../src/runtime.ts", "../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * The single source of time for a service.\n *\n * Every timestamp a mock writes reads from here, so a suite moves time instead of\n * sleeping: appointment windows, result delays and expiries become reachable in\n * milliseconds. A frozen clock also makes timestamps reproducible from a seed.\n */\nexport type ClockState = {\n /** Current epoch milliseconds. */\n now: number\n /** True while time does not advance on its own. */\n frozen: boolean\n /** Milliseconds this clock adds to its underlying source. */\n offsetMs: number\n}\n\nexport type Clock = {\n now(): number\n /** Pin the clock to an exact instant, keeping it frozen if it already was. */\n set(epochMs: number): void\n /** Move the clock forward, or back with a negative delta. */\n advance(deltaMs: number): void\n /** Stop time at the current instant. */\n freeze(): void\n /** Resume from the current instant. */\n unfreeze(): void\n /** Drop back to the underlying source, live. */\n reset(): void\n state(): ClockState\n}\n\n/** A {@link Clock} over `source` (default `Date.now`), live and unfrozen. */\nexport const createClock = (source: () => number = Date.now): Clock => {\n let offsetMs = 0\n let frozenAt: number | undefined\n const now = () => frozenAt ?? source() + offsetMs\n return {\n now,\n set: (epochMs) => {\n if (frozenAt !== undefined) frozenAt = epochMs\n else offsetMs = epochMs - source()\n },\n advance: (deltaMs) => {\n if (frozenAt !== undefined) frozenAt += deltaMs\n else offsetMs += deltaMs\n },\n freeze: () => {\n frozenAt = now()\n },\n unfreeze: () => {\n if (frozenAt === undefined) return\n offsetMs = frozenAt - source()\n frozenAt = undefined\n },\n reset: () => {\n offsetMs = 0\n frozenAt = undefined\n },\n state: () => ({ now: now(), frozen: frozenAt !== undefined, offsetMs }),\n }\n}\n", "import type { SqliteClient } from \"@crvouga/mockingbird-sqlite\"\n\n/** Every stored record carries a monotonically increasing sequence for stable ordering. */\nexport type Stored<T> = { seq: number; value: T }\n\nexport type ListRecordsOptions<T> = {\n /** Keep only records passing the predicate. */\n where?: (value: T, seq: number) => boolean\n /** Sort order; default newest first. */\n order?: \"newest\" | \"oldest\"\n}\n\ntype RecordRow = { id: string; seq: number; value: string }\n\n/**\n * A SQLite-backed table of JSON records addressed by id. Ordering is by insertion\n * sequence, never by id lexicographic order, so list semantics stay stable.\n */\nexport class Collection<T> {\n constructor(\n private readonly sqlite: SqliteClient,\n private readonly namespace: string,\n private readonly name: string,\n ) {}\n\n private bumpCollectionSeq(): number {\n const row = this.sqlite\n .prepare(\n \"SELECT value FROM mockingbird_sequences WHERE namespace = ? AND name = ? AND kind = 'collection'\",\n )\n .get<{ value: number }>(this.namespace, this.name)\n const next = (row?.value ?? 0) + 1\n this.sqlite\n .prepare(\n `INSERT INTO mockingbird_sequences (namespace, name, kind, value) VALUES (?, ?, 'collection', ?)\n ON CONFLICT(namespace, name, kind) DO UPDATE SET value = excluded.value`,\n )\n .run(this.namespace, this.name, next)\n return next\n }\n\n nextSequence(): number {\n return this.sqlite.transaction(() => this.bumpCollectionSeq())\n }\n\n get(id: string): T | undefined {\n const row = this.sqlite\n .prepare(\n \"SELECT value FROM mockingbird_records WHERE namespace = ? AND collection = ? AND id = ?\",\n )\n .get<{ value: string }>(this.namespace, this.name, id)\n if (!row) return undefined\n return (JSON.parse(row.value) as Stored<T>).value\n }\n\n has(id: string): boolean {\n const row = this.sqlite\n .prepare(\n \"SELECT 1 AS ok FROM mockingbird_records WHERE namespace = ? AND collection = ? AND id = ?\",\n )\n .get<{ ok: number }>(this.namespace, this.name, id)\n return row !== undefined\n }\n\n /** Insert a new record, assigning it the next sequence number. */\n insert(id: string, value: T): Stored<T> {\n return this.sqlite.transaction(() => {\n const seq = this.bumpCollectionSeq()\n const stored = { seq, value }\n this.sqlite\n .prepare(\n `INSERT INTO mockingbird_records (namespace, collection, id, seq, value)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(namespace, collection, id) DO UPDATE SET seq = excluded.seq, value = excluded.value`,\n )\n .run(this.namespace, this.name, id, seq, JSON.stringify(stored))\n return stored\n })\n }\n\n /** Replace an existing record's value, keeping its position. */\n update(id: string, value: T): Stored<T> | undefined {\n return this.sqlite.transaction(() => {\n const row = this.sqlite\n .prepare(\n \"SELECT seq, value FROM mockingbird_records WHERE namespace = ? AND collection = ? AND id = ?\",\n )\n .get<{ seq: number; value: string }>(this.namespace, this.name, id)\n if (!row) return undefined\n const stored = { seq: row.seq, value }\n this.sqlite\n .prepare(\n \"UPDATE mockingbird_records SET value = ? WHERE namespace = ? AND collection = ? AND id = ?\",\n )\n .run(JSON.stringify(stored), this.namespace, this.name, id)\n return stored\n })\n }\n\n delete(id: string): boolean {\n const result = this.sqlite\n .prepare(\"DELETE FROM mockingbird_records WHERE namespace = ? AND collection = ? AND id = ?\")\n .run(this.namespace, this.name, id)\n return result.changes > 0\n }\n\n /** How many records the collection holds, without reading them. */\n count(): number {\n const row = this.sqlite\n .prepare(\n \"SELECT COUNT(*) AS n FROM mockingbird_records WHERE namespace = ? AND collection = ?\",\n )\n .get<{ n: number }>(this.namespace, this.name)\n return Number(row?.n ?? 0)\n }\n\n list(options: ListRecordsOptions<T> = {}): Array<Stored<T> & { id: string }> {\n const rows = this.sqlite\n .prepare(\n \"SELECT id, seq, value FROM mockingbird_records WHERE namespace = ? AND collection = ?\",\n )\n .all<RecordRow>(this.namespace, this.name)\n const out: Array<Stored<T> & { id: string }> = []\n for (const row of rows) {\n const stored = JSON.parse(row.value) as Stored<T>\n if (options.where && !options.where(stored.value, stored.seq)) continue\n out.push({ id: row.id, seq: stored.seq, value: stored.value })\n }\n out.sort((a, b) => (options.order === \"oldest\" ? a.seq - b.seq : b.seq - a.seq))\n return out\n }\n}\n", "import type { Clock } from \"./clock.js\"\nimport type { FaultRegistry, FaultRule } from \"./faults.js\"\nimport type { Journal } from \"./journal.js\"\nimport type { Metrics } from \"./metrics.js\"\n\n/** Unauthenticated readiness probe, served ahead of every vendor auth gate. */\nexport const HEALTH_PATH = \"/health\"\n/** Prefix of every control-plane route; never part of a vendor contract. */\nexport const ADMIN_PREFIX = \"/__admin\"\n/** Carries the admin key, which is separate from any vendor credential. */\nexport const ADMIN_KEY_HEADER = \"x-mockingbird-admin-key\"\n/** Selects the isolated namespace a request reads and writes. */\nexport const NAMESPACE_HEADER = \"x-mockingbird-namespace\"\n\nexport type AdminRequest = {\n request: Request\n url: URL\n /** `:param` segments of the matched route. */\n params: Record<string, string>\n /** Namespace the request targets: `?namespace=`, then the header, then the default. */\n namespace: string\n /** Parsed JSON body, or `undefined` when there is none. */\n body: unknown\n}\n\nexport type AdminRoute = (request: AdminRequest) => Response | Promise<Response>\n\n/**\n * Service-specific admin routes, keyed `METHOD /path` relative to `/__admin`, with\n * `:param` segments \u2014 e.g. `\"POST /orders/:id/transition\"`.\n */\nexport type AdminRoutes = Record<string, AdminRoute>\n\nexport type ControlContext = {\n name: string\n startedAt: number\n wallNow: () => number\n clock: Clock\n faults: FaultRegistry\n metrics: Metrics\n journal: Journal\n defaultNamespace: string\n namespaces(): string[]\n reset(namespace: string | \"*\"): Promise<void>\n timeTravel: {\n checkpoint(\n namespace: string,\n branch: string,\n ): { id: string; branch: string; parent: string | null; at: number; records?: number }\n branch(\n name: string,\n options: { namespace: string; at?: string },\n ): { id: string; branch: string; parent: string | null; at: number }\n checkout(checkpoint: string, options: { namespace: string; branch: string }): void\n retain(namespace: string, checkpoint: string): void\n release(namespace: string, checkpoint: string): boolean\n inspect(namespace: string): {\n branches: Readonly<Record<string, string>>\n checkpoints: readonly { id: string; branch: string; parent: string | null; at: number }[]\n }\n }\n /** Extra fields for `GET /health`, such as the loaded corpus version. */\n describe(): Record<string, unknown>\n routes: AdminRoutes\n adminKey: string | undefined\n /** Expand a named fault preset; enables `POST /faults {\"preset\": \"<name>\"}`. */\n applyPreset?(name: string, namespace: string, overrides: Partial<FaultRule>): FaultRule[]\n}\n\nexport type ControlPlane = {\n /** The control-plane response for `request`, or `undefined` for a vendor request. */\n handle(request: Request): Promise<Response | undefined>\n /**\n * Namespace a vendor request targets, from {@link NAMESPACE_HEADER}. Only admin routes\n * also accept `?namespace=`, so a vendor query parameter of that name can never\n * silently reroute a request.\n */\n namespaceOf(request: Request): string\n}\n\nconst json = (status: number, body: unknown): Response =>\n new Response(JSON.stringify(body), {\n status,\n headers: { \"content-type\": \"application/json\" },\n })\n\n/** Admin errors use one documented shape, distinct from any vendor's error body. */\nconst adminError = (status: number, message: string): Response =>\n json(status, { error: { type: \"mockingbird_admin\", message } })\n\nconst UNITS: Record<string, number> = {\n ms: 1,\n s: 1000,\n m: 60_000,\n h: 3_600_000,\n d: 86_400_000,\n}\n\n/** Milliseconds from a number, or a duration like `\"90s\"`, `\"15m\"`, `\"2h\"`, `\"3d\"`. */\nexport const parseDuration = (value: unknown): number | undefined => {\n if (typeof value === \"number\" && Number.isFinite(value)) return value\n if (typeof value !== \"string\") return undefined\n const match = /^(-?\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h|d)$/.exec(value.trim())\n if (!match) return undefined\n return Number(match[1]) * (UNITS[match[2] as string] as number)\n}\n\n/** Epoch milliseconds from a number or an ISO-8601 string. */\nconst parseInstant = (value: unknown): number | undefined => {\n if (typeof value === \"number\" && Number.isFinite(value)) return value\n if (typeof value !== \"string\") return undefined\n const parsed = Date.parse(value)\n return Number.isNaN(parsed) ? undefined : parsed\n}\n\nconst matchRoute = (pattern: string, path: string): Record<string, string> | undefined => {\n const want = pattern.split(\"/\").filter(Boolean)\n const have = path.split(\"/\").filter(Boolean)\n if (want.length !== have.length) return undefined\n const params: Record<string, string> = {}\n for (let i = 0; i < want.length; i++) {\n const segment = want[i] as string\n const actual = have[i] as string\n if (segment.startsWith(\":\")) params[segment.slice(1)] = decodeURIComponent(actual)\n else if (segment !== actual) return undefined\n }\n return params\n}\n\nconst readJson = async (request: Request): Promise<unknown> => {\n const text = await request.text()\n if (text.trim() === \"\") return undefined\n return JSON.parse(text) as unknown\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nexport const createControlPlane = (context: ControlContext): ControlPlane => {\n // Legacy snapshot ids are opaque aliases to pinned Timeline checkpoints. Timeline remains the\n // only history owner; this map carries no state value and can be removed with the alias.\n const snapshots = new Map<string, { namespace: string; checkpoint: string }>()\n let snapshotCounter = 0\n\n const headerNamespace = (request: Request): string =>\n request.headers.get(NAMESPACE_HEADER) ?? context.defaultNamespace\n const adminNamespace = (request: Request, url: URL): string =>\n url.searchParams.get(\"namespace\") ?? headerNamespace(request)\n\n const builtin: AdminRoutes = {\n \"GET /\": () =>\n json(200, {\n service: context.name,\n routes: [...Object.keys(builtin), ...Object.keys(context.routes)].sort(),\n }),\n\n \"POST /reset\": async ({ url, namespace }) => {\n const target = url.searchParams.get(\"all\") === \"1\" ? \"*\" : namespace\n await context.reset(target)\n return json(200, { status: \"ok\", reset: target === \"*\" ? context.namespaces() : [target] })\n },\n\n \"GET /namespaces\": () =>\n json(200, { default: context.defaultNamespace, namespaces: context.namespaces() }),\n\n \"GET /clock\": () => json(200, context.clock.state()),\n \"POST /clock\": ({ body }) => {\n if (!isRecord(body)) return adminError(400, \"expected a JSON object\")\n if (body.reset === true) context.clock.reset()\n if (body.set !== undefined) {\n const instant = parseInstant(body.set)\n if (instant === undefined) return adminError(400, \"set: expected epoch ms or ISO-8601\")\n context.clock.set(instant)\n }\n if (body.advance !== undefined) {\n const delta = parseDuration(body.advance)\n if (delta === undefined) return adminError(400, 'advance: expected ms or \"15m\"-style')\n context.clock.advance(delta)\n }\n if (body.freeze === true) context.clock.freeze()\n if (body.freeze === false) context.clock.unfreeze()\n return json(200, context.clock.state())\n },\n\n \"GET /faults\": () => json(200, { faults: context.faults.list() }),\n \"POST /faults\": ({ body, namespace }) => {\n if (isRecord(body) && typeof body.preset === \"string\") {\n if (!context.applyPreset) return adminError(400, `${context.name} has no fault presets`)\n const { preset, ...overrides } = body\n try {\n return json(201, {\n preset,\n rules: context.applyPreset(preset, namespace, overrides as Partial<FaultRule>),\n })\n } catch (error) {\n return adminError(404, error instanceof Error ? error.message : String(error))\n }\n }\n if (\n !isRecord(body) ||\n (typeof body.status !== \"number\" &&\n typeof body.delayMs !== \"number\" &&\n typeof body.latencyMs !== \"number\" &&\n body.drop !== true &&\n typeof body.effect !== \"string\")\n ) {\n return adminError(\n 400,\n \"a fault needs a numeric status, a delayMs/latencyMs, drop: true, an effect, or a preset\",\n )\n }\n const rule = {\n // Scoped to the caller's namespace unless it asks for every one, so one worker's\n // injected failure never lands on another's request.\n namespace,\n ...body,\n id: typeof body.id === \"string\" ? body.id : `fault_${context.faults.list().length + 1}`,\n } as FaultRule\n return json(201, context.faults.add(rule))\n },\n \"DELETE /faults\": ({ url }) => {\n const id = url.searchParams.get(\"id\")\n if (id === null) {\n context.faults.clear()\n return json(200, { status: \"ok\" })\n }\n return context.faults.remove(id)\n ? json(200, { status: \"ok\" })\n : adminError(404, `no fault ${id}`)\n },\n\n \"POST /snapshots\": ({ namespace }) => {\n const point = context.timeTravel.checkpoint(namespace, \"main\")\n context.timeTravel.retain(namespace, point.id)\n snapshotCounter++\n const id = `snap_${snapshotCounter}`\n snapshots.set(id, { namespace, checkpoint: point.id })\n return json(201, { id, namespace, records: point.records ?? 0 })\n },\n \"POST /snapshots/:id/restore\": ({ params, namespace }) => {\n const alias = snapshots.get(params.id as string)\n if (!alias) return adminError(404, `no snapshot ${params.id}`)\n if (alias.namespace !== namespace) {\n return adminError(409, `snapshot ${params.id} belongs to namespace ${alias.namespace}`)\n }\n context.timeTravel.checkout(alias.checkpoint, { namespace, branch: \"main\" })\n return json(200, { status: \"ok\", id: params.id, namespace })\n },\n \"DELETE /snapshots/:id\": ({ params }) => {\n const id = params.id as string\n const alias = snapshots.get(id)\n if (!alias) return adminError(404, `no snapshot ${id}`)\n snapshots.delete(id)\n context.timeTravel.release(alias.namespace, alias.checkpoint)\n return json(200, { status: \"ok\" })\n },\n\n \"GET /timeline\": ({ namespace }) => json(200, context.timeTravel.inspect(namespace)),\n \"POST /checkpoints\": ({ body, namespace }) => {\n const branch = isRecord(body) && typeof body.branch === \"string\" ? body.branch : \"main\"\n try {\n return json(201, context.timeTravel.checkpoint(namespace, branch))\n } catch (error) {\n return adminError(409, error instanceof Error ? error.message : String(error))\n }\n },\n \"POST /branches/:name\": ({ params, body, namespace }) => {\n const at = isRecord(body) && typeof body.at === \"string\" ? body.at : undefined\n try {\n return json(\n 201,\n context.timeTravel.branch(params.name as string, {\n namespace,\n ...(at !== undefined ? { at } : {}),\n }),\n )\n } catch (error) {\n return adminError(409, error instanceof Error ? error.message : String(error))\n }\n },\n \"POST /branches/:name/checkout\": ({ params, body, namespace }) => {\n if (!isRecord(body) || typeof body.checkpoint !== \"string\") {\n return adminError(400, 'expected {\"checkpoint\":\"cp_...\"}')\n }\n try {\n context.timeTravel.checkout(body.checkpoint, {\n namespace,\n branch: params.name as string,\n })\n return json(200, { status: \"ok\", branch: params.name, checkpoint: body.checkpoint })\n } catch (error) {\n return adminError(409, error instanceof Error ? error.message : String(error))\n }\n },\n\n \"GET /requests\": ({ url, namespace }) => {\n const status = url.searchParams.get(\"status\")\n const since = url.searchParams.get(\"since\")\n const limit = url.searchParams.get(\"limit\")\n const sinceMs =\n since === null ? undefined : parseInstant(/^\\d+$/.test(since) ? Number(since) : since)\n if (since !== null && sinceMs === undefined) {\n return adminError(400, \"since: expected epoch ms or ISO-8601\")\n }\n if (status !== null && !/^\\d{3}$/.test(status))\n return adminError(400, \"status: expected an HTTP status\")\n if (limit !== null && !/^\\d+$/.test(limit)) return adminError(400, \"limit: expected a count\")\n const operationId = url.searchParams.get(\"operationId\")\n const everyNamespace = url.searchParams.get(\"all\") === \"1\"\n return json(200, {\n size: context.journal.size,\n requests: context.journal.list({\n ...(everyNamespace ? {} : { namespace }),\n ...(operationId !== null ? { operationId } : {}),\n ...(status !== null ? { status: Number(status) } : {}),\n ...(sinceMs !== undefined ? { since: sinceMs } : {}),\n ...(limit !== null ? { limit: Number(limit) } : {}),\n }),\n })\n },\n \"DELETE /requests\": ({ url, namespace }) => {\n context.journal.clear(url.searchParams.get(\"all\") === \"1\" ? undefined : namespace)\n return json(200, { status: \"ok\" })\n },\n\n \"GET /metrics\": () => json(200, context.metrics.report()),\n \"DELETE /metrics\": () => {\n context.metrics.reset()\n return json(200, { status: \"ok\" })\n },\n }\n\n const routes = [...Object.entries(context.routes), ...Object.entries(builtin)].map(\n ([key, handler]) => {\n const space = key.indexOf(\" \")\n return { method: key.slice(0, space), pattern: key.slice(space + 1), handler }\n },\n )\n\n return {\n namespaceOf: headerNamespace,\n async handle(request) {\n const url = new URL(request.url)\n if (url.pathname === HEALTH_PATH && request.method === \"GET\") {\n return json(200, {\n status: \"ok\",\n service: context.name,\n uptimeMs: context.wallNow() - context.startedAt,\n clock: context.clock.state(),\n namespaces: context.namespaces().length,\n ...context.describe(),\n })\n }\n if (url.pathname !== ADMIN_PREFIX && !url.pathname.startsWith(`${ADMIN_PREFIX}/`)) {\n return undefined\n }\n if (\n context.adminKey !== undefined &&\n request.headers.get(ADMIN_KEY_HEADER) !== context.adminKey\n ) {\n return adminError(401, `missing or wrong ${ADMIN_KEY_HEADER}`)\n }\n const path = url.pathname.slice(ADMIN_PREFIX.length) || \"/\"\n for (const route of routes) {\n if (route.method !== request.method) continue\n const params = matchRoute(route.pattern, path)\n if (!params) continue\n let body: unknown\n try {\n body = await readJson(request)\n } catch {\n return adminError(400, \"request body is not valid JSON\")\n }\n return route.handler({\n request,\n url,\n params,\n namespace: adminNamespace(request, url),\n body,\n })\n }\n return adminError(\n 404,\n `no admin route ${request.method} ${path}; GET ${ADMIN_PREFIX} lists them`,\n )\n },\n }\n}\n", "/**\n * Reading the vendor credential a request carries.\n *\n * Several vendor SDKs (Stripe, AWS, PostHog, Twilio) cannot add a namespace header, so a\n * runtime can also pick a request's namespace from its credential: a suite maps each\n * worker's API key, token or account SID to a namespace through `PUT /__admin/credentials`.\n * These helpers pull the credential out of the usual carriers.\n */\n\n/** The token after `Bearer `, or `undefined`. */\nexport const bearerToken = (request: Request): string | undefined => {\n const header = request.headers.get(\"authorization\")\n if (!header) return undefined\n const match = /^Bearer\\s+(.+)$/i.exec(header.trim())\n return match?.[1]?.trim() || undefined\n}\n\nexport type BasicCredentials = { username: string; password: string }\n\n/** `{ username, password }` from `Authorization: Basic \u2026`, or `undefined`. */\nexport const basicAuth = (request: Request): BasicCredentials | undefined => {\n const header = request.headers.get(\"authorization\")\n if (!header) return undefined\n const match = /^Basic\\s+(.+)$/i.exec(header.trim())\n if (!match?.[1]) return undefined\n let decoded: string\n try {\n decoded = atob(match[1].trim())\n } catch {\n return undefined\n }\n const colon = decoded.indexOf(\":\")\n if (colon < 0) return { username: decoded, password: \"\" }\n return { username: decoded.slice(0, colon), password: decoded.slice(colon + 1) }\n}\n\n/**\n * The access key id of an AWS SigV4-signed request (`Credential=AKID/date/region/service/\u2026`),\n * from the `Authorization` header or a presigned `X-Amz-Credential` query parameter.\n */\nexport const sigV4AccessKeyId = (request: Request): string | undefined => {\n const header = request.headers.get(\"authorization\")\n const fromHeader = header ? /Credential=([^/,\\s]+)\\//.exec(header)?.[1] : undefined\n if (fromHeader) return fromHeader\n const query = new URL(request.url).searchParams.get(\"X-Amz-Credential\")\n return query ? (query.split(\"/\")[0] ?? undefined) : undefined\n}\n\n/** The credential in any of the common carriers: Bearer, Basic username, SigV4, or `x-api-key`. */\nexport const anyCredential = (request: Request): string | undefined =>\n bearerToken(request) ??\n basicAuth(request)?.username ??\n sigV4AccessKeyId(request) ??\n request.headers.get(\"x-api-key\") ??\n undefined\n\n/** Credential \u2192 namespace mapping behind `PUT /__admin/credentials`. */\nexport type CredentialRegistry = {\n set(credential: string, namespace: string): void\n get(credential: string): string | undefined\n remove(credential: string): boolean\n clear(): void\n entries(): { credential: string; namespace: string }[]\n}\n\nexport const createCredentialRegistry = (): CredentialRegistry => {\n const map = new Map<string, string>()\n return {\n set: (credential, namespace) => {\n map.set(credential, namespace)\n },\n get: (credential) => map.get(credential),\n remove: (credential) => map.delete(credential),\n clear: () => map.clear(),\n entries: () =>\n [...map]\n .map(([credential, namespace]) => ({ credential, namespace }))\n .sort((a, b) => a.credential.localeCompare(b.credential)),\n }\n}\n\n/** A credential shown in admin output: enough to recognise it, never the whole secret. */\nexport const maskCredential = (credential: string): string =>\n credential.length <= 8\n ? `${credential.slice(0, 2)}\u2026`\n : `${credential.slice(0, 6)}\u2026${credential.slice(-2)}`\n", "/**\n * Seeded pseudo-random numbers, so anything a mock invents \u2014 ids, jitter, which\n * request a percentage fault hits \u2014 is reproducible from a seed.\n *\n * mulberry32: small, fast, and stable across runtimes, which matters more here\n * than statistical quality.\n */\nexport type Rng = {\n /** Next value in `[0, 1)`. */\n next(): number\n /** Next integer in `[min, max]`. */\n int(min: number, max: number): number\n /** Restart the stream from its seed. */\n reset(): void\n /** Serializable engine state used by deterministic checkpoints. */\n state(): number\n /** Restore a state previously returned by {@link state}. */\n setState(state: number): void\n seed: number\n}\n\n/** Hash an arbitrary string into a 32-bit seed, so callers can seed by name. */\nexport const seedFrom = (value: string): number => {\n let hash = 2166136261\n for (let i = 0; i < value.length; i++) {\n hash ^= value.charCodeAt(i)\n hash = Math.imul(hash, 16777619)\n }\n return hash >>> 0\n}\n\nexport const createRng = (seed: number | string = 0): Rng => {\n const numeric = typeof seed === \"string\" ? seedFrom(seed) : seed >>> 0\n let state = numeric\n const next = () => {\n state = (state + 0x6d2b79f5) >>> 0\n let t = state\n t = Math.imul(t ^ (t >>> 15), t | 1)\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61)\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296\n }\n return {\n next,\n int: (min, max) => min + Math.floor(next() * (max - min + 1)),\n reset: () => {\n state = numeric\n },\n state: () => state,\n setState: (next) => {\n if (!Number.isSafeInteger(next) || next < 0 || next > 0xffffffff) {\n throw new RangeError(\"rng state must be an unsigned 32-bit integer\")\n }\n state = next >>> 0\n },\n seed: numeric,\n }\n}\n", "import { createRng, type Rng } from \"./rng.js\"\n\n/**\n * A deliberate failure injected in front of an operation.\n *\n * This is how a suite reaches the vendor's failure modes without the vendor: the\n * quota error that only appears when a shared sandbox is full, the 429 that only\n * appears under load, the 5xx that proves a retry path works.\n */\nexport type FaultRule = {\n /** Stable id, so a suite can retire exactly the rule it added. */\n id: string\n /** Fault only this operation. Omit to match every operation. */\n operationId?: string\n /** Fault only this HTTP method, case-insensitive. Omit to match every method. */\n method?: string\n /** Fault only paths starting with this prefix. Omit to match every path. */\n pathPrefix?: string\n /**\n * Fault only this namespace. Omit (or `\"*\"`) to fault every namespace \u2014 which is what\n * an in-process caller usually wants, and what a parallel worker usually does not:\n * rules added through `POST /__admin/faults` default to the calling namespace.\n */\n namespace?: string\n /**\n * Status of the injected response. Omit for a rule that only delays (`delayMs` /\n * `latencyMs`), only drops the connection (`drop`), or only switches on an `effect`:\n * the request then still reaches the service.\n */\n status?: number\n /** Response body, serialized as JSON. A string is sent as-is. */\n body?: unknown\n headers?: Record<string, string>\n /** Retire the rule after this many faults. Omit to keep it until removed. */\n count?: number\n /** Fault this fraction of matching requests, `0`\u2013`1`. Default `1`. */\n rate?: number\n /** Hold the response back this long, to exercise timeouts. */\n delayMs?: number\n /** Alias of `delayMs`. */\n latencyMs?: number\n /**\n * Drop the connection instead of answering: an in-process `fetch` rejects with a\n * `TypeError`, and a served mock destroys the socket. Models \"unknown outcome\" failures.\n */\n drop?: boolean\n /**\n * A named service behaviour to switch on for the matching request instead of (or\n * before) a canned response, e.g. `created_but_500` or `numeric_tracking_id`. Services\n * read it with `faultEffects(request)`.\n */\n effect?: string\n /** Parameters for `effect`. */\n params?: Record<string, unknown>\n /** From the preset this rule was expanded from, if any. */\n preset?: string\n}\n\n/** A fault that fired for one request. */\nexport type FaultHit = {\n id: string\n /** The injected response; absent when the rule only delays, drops, or sets an effect. */\n response?: Response\n drop?: boolean\n effect?: { name: string; params: Record<string, unknown> }\n}\n\n/**\n * A named, documented fault a suite switches on by name\n * (`POST /__admin/faults {\"preset\": \"rate_limited\"}`): one or more rules, and optionally a\n * webhook delivery fault.\n */\nexport type FaultPreset = {\n description: string\n rules?: Omit<FaultRule, \"id\">[]\n webhook?: { mode: \"duplicate\" | \"reorder\" | \"drop\"; count?: number }\n}\n\n/** What a request looks like to the fault matcher. */\nexport type FaultCandidate = {\n operationId: string | undefined\n method: string\n path: string\n namespace: string\n}\n\nexport type FaultRegistry = {\n add(rule: FaultRule): FaultRule\n list(): (FaultRule & { remaining: number | null; hits: number })[]\n remove(id: string): boolean\n clear(): void\n /**\n * Every fault this request should get, in rule order, stopping at the first that answers\n * or drops (effect-only and delay-only rules let later rules match too). Consumes one of\n * each matching rule's remaining uses.\n */\n take(candidate: FaultCandidate): Promise<FaultHit[]>\n}\n\ntype Entry = { rule: FaultRule; remaining: number | null; hits: number }\n\nconst matches = (rule: FaultRule, candidate: FaultCandidate): boolean => {\n if (\n rule.namespace !== undefined &&\n rule.namespace !== \"*\" &&\n rule.namespace !== candidate.namespace\n ) {\n return false\n }\n if (rule.operationId !== undefined && rule.operationId !== candidate.operationId) return false\n if (rule.method !== undefined && rule.method.toUpperCase() !== candidate.method.toUpperCase()) {\n return false\n }\n if (rule.pathPrefix !== undefined && !candidate.path.startsWith(rule.pathPrefix)) return false\n return true\n}\n\nconst faultResponse = (rule: FaultRule): Response => {\n const status = rule.status ?? 500\n const headers = { \"content-type\": \"application/json\", ...rule.headers }\n if (typeof rule.body === \"string\") return new Response(rule.body, { status, headers })\n if (rule.body === null) return new Response(null, { status, headers: rule.headers ?? {} })\n const body = rule.body === undefined ? { detail: \"Injected by Mockingbird\" } : rule.body\n return new Response(JSON.stringify(body), { status, headers })\n}\n\n/**\n * Rules are matched in the order they were added, so a narrow rule added first\n * wins over a later catch-all. `rate` draws from `rng`, which is seeded, so a\n * partial-failure run replays identically.\n */\nexport const createFaultRegistry = (\n rng: Rng = createRng(0),\n sleep: (ms: number) => Promise<void> = (ms) => new Promise((resolve) => setTimeout(resolve, ms)),\n): FaultRegistry => {\n const entries: Entry[] = []\n return {\n add(rule) {\n const existing = entries.findIndex((e) => e.rule.id === rule.id)\n const entry: Entry = { rule, remaining: rule.count ?? null, hits: 0 }\n if (existing >= 0) entries[existing] = entry\n else entries.push(entry)\n return rule\n },\n list: () => entries.map((e) => ({ ...e.rule, remaining: e.remaining, hits: e.hits })),\n remove(id) {\n const index = entries.findIndex((e) => e.rule.id === id)\n if (index < 0) return false\n entries.splice(index, 1)\n return true\n },\n clear() {\n entries.length = 0\n },\n async take(candidate) {\n const hits: FaultHit[] = []\n for (const entry of entries) {\n if (entry.remaining === 0) continue\n if (!matches(entry.rule, candidate)) continue\n const rate = entry.rule.rate ?? 1\n // Draw even when the rule always fires, so a seeded stream stays aligned.\n if (rng.next() >= rate) continue\n entry.hits++\n if (entry.remaining !== null) entry.remaining--\n const delay = entry.rule.delayMs ?? entry.rule.latencyMs\n if (delay !== undefined && delay > 0) {\n await sleep(delay)\n }\n const hit: FaultHit = { id: entry.rule.id }\n if (entry.rule.effect !== undefined) {\n hit.effect = { name: entry.rule.effect, params: entry.rule.params ?? {} }\n }\n if (entry.rule.drop === true) hit.drop = true\n else if (entry.rule.status !== undefined) hit.response = faultResponse(entry.rule)\n hits.push(hit)\n if (hit.drop || hit.response) break\n }\n return hits\n },\n }\n}\n", "import type { OpenAPIDocument, ReferenceObject } from \"./types.js\"\n\nexport class OpenAPIReferenceError extends Error {\n constructor(readonly ref: string) {\n super(`unresolvable $ref: ${ref}`)\n this.name = \"OpenAPIReferenceError\"\n }\n}\n\nconst unescapePointer = (segment: string) => segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n\n/** True when `value` is a `{ $ref }` object. */\nexport const isReference = (value: unknown): value is ReferenceObject =>\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { $ref?: unknown }).$ref === \"string\"\n\n/** Resolve a local JSON pointer reference (`#/components/schemas/customer`) inside `document`. */\nexport const resolveRef = (document: OpenAPIDocument, ref: string): unknown => {\n if (!ref.startsWith(\"#/\")) throw new OpenAPIReferenceError(ref)\n let cursor: unknown = document\n for (const raw of ref.slice(2).split(\"/\")) {\n const segment = unescapePointer(raw)\n if (typeof cursor !== \"object\" || cursor === null || !(segment in cursor)) {\n throw new OpenAPIReferenceError(ref)\n }\n cursor = (cursor as Record<string, unknown>)[segment]\n }\n if (cursor === undefined) throw new OpenAPIReferenceError(ref)\n return cursor\n}\n\n/**\n * Follow `$ref` chains until a concrete object is reached. Guards against cycles.\n * Sibling keys next to `$ref` are ignored, as in OpenAPI 3.0/3.1 for non-schema objects.\n */\nexport const deref = <T>(document: OpenAPIDocument, value: T | ReferenceObject): T => {\n let current: unknown = value\n const seen = new Set<string>()\n while (isReference(current)) {\n if (seen.has(current.$ref)) throw new OpenAPIReferenceError(`${current.$ref} (cycle)`)\n seen.add(current.$ref)\n current = resolveRef(document, current.$ref)\n }\n return current as T\n}\n\n/** The component name at the end of a `#/components/<kind>/<name>` reference, if any. */\nexport const componentNameOf = (ref: string): string | undefined => {\n const match = /^#\\/components\\/[^/]+\\/(.+)$/.exec(ref)\n return match?.[1] === undefined ? undefined : unescapePointer(match[1])\n}\n", "/**\n * The slice of OpenAPI 3.1 (and JSON Schema 2020-12) Mockingbird understands.\n * Unknown keys (including `x-*` extensions) are preserved on every object.\n */\n\nexport type JsonPrimitive = string | number | boolean | null\nexport type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue }\n\nexport type ReferenceObject = { $ref: string; description?: string; summary?: string }\n\nexport type SchemaType = \"string\" | \"number\" | \"integer\" | \"boolean\" | \"object\" | \"array\" | \"null\"\n\nexport type SchemaObject = {\n $ref?: string\n type?: SchemaType | SchemaType[]\n title?: string\n description?: string\n format?: string\n enum?: JsonValue[]\n const?: JsonValue\n default?: JsonValue\n example?: JsonValue\n examples?: JsonValue[]\n nullable?: boolean\n deprecated?: boolean\n readOnly?: boolean\n writeOnly?: boolean\n minimum?: number\n maximum?: number\n exclusiveMinimum?: number\n exclusiveMaximum?: number\n multipleOf?: number\n minLength?: number\n maxLength?: number\n pattern?: string\n minItems?: number\n maxItems?: number\n uniqueItems?: boolean\n items?: SchemaObject\n prefixItems?: SchemaObject[]\n minProperties?: number\n maxProperties?: number\n required?: string[]\n properties?: Record<string, SchemaObject>\n additionalProperties?: boolean | SchemaObject\n propertyNames?: SchemaObject\n oneOf?: SchemaObject[]\n anyOf?: SchemaObject[]\n allOf?: SchemaObject[]\n not?: SchemaObject\n discriminator?: { propertyName: string; mapping?: Record<string, string> }\n [extension: `x-${string}`]: unknown\n}\n\nexport type ParameterLocation = \"path\" | \"query\" | \"header\" | \"cookie\"\n\nexport type ParameterObject = {\n name: string\n in: ParameterLocation\n description?: string\n required?: boolean\n deprecated?: boolean\n style?: string\n explode?: boolean\n schema?: SchemaObject\n content?: Record<string, MediaTypeObject>\n example?: JsonValue\n [extension: `x-${string}`]: unknown\n}\n\nexport type MediaTypeObject = {\n schema?: SchemaObject\n example?: JsonValue\n examples?: Record<string, unknown>\n encoding?: Record<string, unknown>\n [extension: `x-${string}`]: unknown\n}\n\nexport type RequestBodyObject = {\n description?: string\n required?: boolean\n content: Record<string, MediaTypeObject>\n [extension: `x-${string}`]: unknown\n}\n\nexport type HeaderObject = {\n description?: string\n required?: boolean\n schema?: SchemaObject\n [extension: `x-${string}`]: unknown\n}\n\nexport type ResponseObject = {\n description: string\n headers?: Record<string, HeaderObject | ReferenceObject>\n content?: Record<string, MediaTypeObject>\n [extension: `x-${string}`]: unknown\n}\n\nexport type ResponsesObject = Record<string, ResponseObject | ReferenceObject>\n\nexport type SecurityRequirementObject = Record<string, string[]>\n\nexport type OperationObject = {\n operationId?: string\n summary?: string\n description?: string\n tags?: string[]\n deprecated?: boolean\n parameters?: Array<ParameterObject | ReferenceObject>\n requestBody?: RequestBodyObject | ReferenceObject\n responses: ResponsesObject\n security?: SecurityRequirementObject[]\n [extension: `x-${string}`]: unknown\n}\n\nexport const HTTP_METHODS = [\n \"get\",\n \"put\",\n \"post\",\n \"delete\",\n \"options\",\n \"head\",\n \"patch\",\n \"trace\",\n] as const\nexport type HttpMethod = (typeof HTTP_METHODS)[number]\n\nexport type PathItemObject = {\n summary?: string\n description?: string\n parameters?: Array<ParameterObject | ReferenceObject>\n [extension: `x-${string}`]: unknown\n} & Partial<Record<HttpMethod, OperationObject>>\n\nexport type SecuritySchemeObject = {\n type: \"apiKey\" | \"http\" | \"oauth2\" | \"openIdConnect\" | \"mutualTLS\"\n description?: string\n name?: string\n in?: ParameterLocation\n scheme?: string\n bearerFormat?: string\n flows?: Record<string, unknown>\n openIdConnectUrl?: string\n [extension: `x-${string}`]: unknown\n}\n\nexport type ComponentsObject = {\n schemas?: Record<string, SchemaObject>\n responses?: Record<string, ResponseObject>\n parameters?: Record<string, ParameterObject>\n requestBodies?: Record<string, RequestBodyObject>\n headers?: Record<string, HeaderObject>\n securitySchemes?: Record<string, SecuritySchemeObject>\n [extension: `x-${string}`]: unknown\n}\n\nexport type ServerObject = {\n url: string\n description?: string\n variables?: Record<string, unknown>\n [extension: `x-${string}`]: unknown\n}\n\nexport type InfoObject = {\n title: string\n version: string\n description?: string\n [extension: `x-${string}`]: unknown\n}\n\nexport type OpenAPIDocument = {\n openapi: string\n info: InfoObject\n servers?: ServerObject[]\n paths: Record<string, PathItemObject>\n components?: ComponentsObject\n security?: SecurityRequirementObject[]\n tags?: Array<{ name: string; description?: string }>\n [extension: `x-${string}`]: unknown\n}\n\n/** One concrete HTTP operation discovered in a document. */\nexport type Operation = {\n operationId: string\n method: HttpMethod\n /** OpenAPI path template, e.g. `/v1/customers/{customer}`. */\n path: string\n operation: OperationObject\n /** Path-level parameters merged with operation-level ones (operation wins), `$ref`s resolved. */\n parameters: ParameterObject[]\n requestBody: RequestBodyObject | undefined\n responses: Record<string, ResponseObject>\n}\n", "import { deref, isReference, resolveRef } from \"./refs.js\"\nimport {\n HTTP_METHODS,\n type HttpMethod,\n type OpenAPIDocument,\n type Operation,\n type ParameterObject,\n type PathItemObject,\n type RequestBodyObject,\n type ResponseObject,\n} from \"./types.js\"\n\nexport class OpenAPIDocumentError extends Error {\n constructor(readonly issues: string[]) {\n super(`invalid OpenAPI document:\\n${issues.map((issue) => ` - ${issue}`).join(\"\\n\")}`)\n this.name = \"OpenAPIDocumentError\"\n }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\n/**\n * Accept an already-parsed JSON/YAML value and return it typed as an {@link OpenAPIDocument}.\n * Performs the structural checks Mockingbird relies on (see {@link validateOpenAPIDocument}) and\n * throws {@link OpenAPIDocumentError} listing every problem.\n */\nexport const parseOpenAPIDocument = (value: unknown): OpenAPIDocument => {\n const issues: string[] = []\n if (!isRecord(value)) throw new OpenAPIDocumentError([\"document must be an object\"])\n if (typeof value.openapi !== \"string\" || !/^3\\.[01]\\./.test(value.openapi)) {\n issues.push(\n `openapi must be a 3.0.x or 3.1.x version string, got ${JSON.stringify(value.openapi)}`,\n )\n }\n if (\n !isRecord(value.info) ||\n typeof value.info.title !== \"string\" ||\n typeof value.info.version !== \"string\"\n ) {\n issues.push(\"info.title and info.version are required strings\")\n }\n if (!isRecord(value.paths)) issues.push(\"paths must be an object\")\n if (issues.length > 0) throw new OpenAPIDocumentError(issues)\n const document = value as unknown as OpenAPIDocument\n const problems = validateOpenAPIDocument(document)\n if (problems.length > 0) throw new OpenAPIDocumentError(problems)\n return document\n}\n\nconst walkRefs = (\n document: OpenAPIDocument,\n node: unknown,\n at: string,\n issues: string[],\n seen: Set<unknown>,\n) => {\n if (typeof node !== \"object\" || node === null || seen.has(node)) return\n seen.add(node)\n if (isReference(node)) {\n try {\n resolveRef(document, node.$ref)\n } catch {\n issues.push(`${at}: unresolvable $ref ${node.$ref}`)\n }\n }\n for (const [key, child] of Object.entries(node))\n walkRefs(document, child, `${at}/${key}`, issues, seen)\n}\n\nconst templateParams = (path: string) =>\n [...path.matchAll(/\\{([^}]+)\\}/g)].map((m) => m[1] as string)\n\n/**\n * Mockingbird's document rules:\n * - every operation has a unique `operationId`\n * - every `$ref` resolves\n * - every `{param}` in a path template has a matching required path parameter\n * - every path parameter appears in the template\n */\nexport const validateOpenAPIDocument = (document: OpenAPIDocument): string[] => {\n const issues: string[] = []\n walkRefs(document, document, \"#\", issues, new Set())\n if (issues.length > 0) return issues\n const seenIds = new Map<string, string>()\n for (const [path, item] of Object.entries(document.paths)) {\n if (!isRecord(item)) {\n issues.push(`paths.${path}: must be an object`)\n continue\n }\n const inTemplate = new Set(templateParams(path))\n for (const method of HTTP_METHODS) {\n const operation = item[method]\n if (operation === undefined) continue\n const label = `${method.toUpperCase()} ${path}`\n if (typeof operation.operationId !== \"string\" || operation.operationId.length === 0) {\n issues.push(`${label}: operationId is required`)\n continue\n }\n const previous = seenIds.get(operation.operationId)\n if (previous !== undefined)\n issues.push(`${label}: duplicate operationId ${operation.operationId} (also ${previous})`)\n seenIds.set(operation.operationId, label)\n if (!isRecord(operation.responses) || Object.keys(operation.responses).length === 0) {\n issues.push(`${label}: responses must declare at least one status`)\n }\n const parameters = mergeParameters(document, item, operation.parameters)\n const declared = new Set(parameters.filter((p) => p.in === \"path\").map((p) => p.name))\n for (const name of inTemplate) {\n if (!declared.has(name)) issues.push(`${label}: path parameter {${name}} is not declared`)\n }\n for (const parameter of parameters) {\n if (parameter.in === \"path\") {\n if (!inTemplate.has(parameter.name))\n issues.push(`${label}: path parameter ${parameter.name} is not in the template`)\n if (parameter.required !== true)\n issues.push(`${label}: path parameter ${parameter.name} must be required`)\n }\n }\n }\n }\n return issues\n}\n\nconst mergeParameters = (\n document: OpenAPIDocument,\n item: PathItemObject,\n own: PathItemObject[\"parameters\"],\n): ParameterObject[] => {\n const merged = new Map<string, ParameterObject>()\n for (const raw of item.parameters ?? []) {\n const parameter = deref<ParameterObject>(document, raw)\n merged.set(`${parameter.in}:${parameter.name}`, parameter)\n }\n for (const raw of own ?? []) {\n const parameter = deref<ParameterObject>(document, raw)\n merged.set(`${parameter.in}:${parameter.name}`, parameter)\n }\n return [...merged.values()]\n}\n\n/** Enumerate every operation in the document in path, then method order. */\nexport const listOperations = (document: OpenAPIDocument): Operation[] => {\n const operations: Operation[] = []\n for (const [path, item] of Object.entries(document.paths)) {\n for (const method of HTTP_METHODS) {\n const operation = item[method]\n if (operation?.operationId === undefined) continue\n const responses: Record<string, ResponseObject> = {}\n for (const [status, response] of Object.entries(operation.responses)) {\n responses[status] = deref<ResponseObject>(document, response)\n }\n operations.push({\n operationId: operation.operationId,\n method,\n path,\n operation,\n parameters: mergeParameters(document, item, operation.parameters),\n requestBody:\n operation.requestBody === undefined\n ? undefined\n : deref<RequestBodyObject>(document, operation.requestBody),\n responses,\n })\n }\n }\n return operations\n}\n\n/** Find one operation by id. */\nexport const findOperation = (\n document: OpenAPIDocument,\n operationId: string,\n): Operation | undefined =>\n listOperations(document).find((operation) => operation.operationId === operationId)\n\n/** Parameter names inside a path template, in order. */\nexport const pathTemplateParameters = templateParams\n\n/** Substitute `{name}` placeholders. Values are percent-encoded as path segments. */\nexport const expandPathTemplate = (template: string, values: Record<string, string>): string =>\n template.replace(/\\{([^}]+)\\}/g, (_, name: string) => {\n const value = values[name]\n if (value === undefined) throw new RangeError(`missing path parameter ${name}`)\n return encodeURIComponent(value)\n })\n\n/** The response object matching an HTTP status: exact match, then `2XX`-style range, then `default`. */\nexport const responseForStatus = (\n responses: Record<string, ResponseObject>,\n status: number,\n): ResponseObject | undefined =>\n responses[String(status)] ?? responses[`${Math.floor(status / 100)}XX`] ?? responses.default\n\nexport type { HttpMethod }\n", "/**\n * Rails/PHP/Stripe-style bracket notation for `application/x-www-form-urlencoded` bodies and\n * query strings:\n *\n * address[city]=Paris -> { address: { city: \"Paris\" } }\n * items[0][name]=a -> { items: [{ name: \"a\" }] }\n * tags[]=x&tags[]=y -> { tags: [\"x\", \"y\"] }\n * metadata[k]=v -> { metadata: { k: \"v\" } }\n *\n * Decoding yields only strings, arrays and plain objects \u2014 coercion is the caller's concern,\n * exactly like a real HTTP server.\n */\n\nexport type FormValue = string | FormValue[] | { [key: string]: FormValue }\n\nexport type FormObject = { [key: string]: FormValue }\n\nconst encodeComponent = (value: string) =>\n encodeURIComponent(value).replace(\n /[!'()*]/g,\n (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`,\n )\n\nconst flatten = (prefix: string, value: unknown, out: Array<[string, string]>) => {\n if (value === undefined) return\n if (value === null) {\n out.push([prefix, \"\"])\n return\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n out.push([prefix, \"\"])\n return\n }\n value.forEach((item, index) => {\n flatten(`${prefix}[${index}]`, item, out)\n })\n return\n }\n if (typeof value === \"object\") {\n const entries = Object.entries(value as Record<string, unknown>)\n if (entries.length === 0) {\n out.push([prefix, \"\"])\n return\n }\n for (const [key, item] of entries) flatten(`${prefix}[${key}]`, item, out)\n return\n }\n out.push([prefix, String(value)])\n}\n\n/**\n * Encode a JSON-like value as bracket-notation pairs. Nested arrays use explicit indices\n * (`a[0]`), which every bracket parser (including Stripe's) accepts; empty arrays/objects\n * encode as an empty string, matching how Stripe unsets fields.\n */\nexport const encodeFormPairs = (value: Record<string, unknown>): Array<[string, string]> => {\n const out: Array<[string, string]> = []\n for (const [key, item] of Object.entries(value)) flatten(key, item, out)\n return out\n}\n\n/** Encode to a full `application/x-www-form-urlencoded` string. */\nexport const encodeForm = (value: Record<string, unknown>): string =>\n encodeFormPairs(value)\n .map(([k, v]) => `${encodeComponent(k)}=${encodeComponent(v)}`)\n .join(\"&\")\n\nconst parsePath = (rawKey: string): string[] => {\n const open = rawKey.indexOf(\"[\")\n if (open === -1) return [rawKey]\n const path = [rawKey.slice(0, open)]\n const rest = rawKey.slice(open)\n const pattern = /\\[([^\\]]*)\\]/g\n let match: RegExpExecArray | null = pattern.exec(rest)\n let consumed = 0\n while (match !== null) {\n if (match.index !== consumed) return [rawKey]\n path.push(match[1] ?? \"\")\n consumed = match.index + match[0].length\n match = pattern.exec(rest)\n }\n if (consumed !== rest.length) return [rawKey]\n return path\n}\n\nconst isIndex = (segment: string) => /^(0|[1-9][0-9]*)$/.test(segment)\n\n/**\n * Write an own property. `__proto__` is the one key with an inherited setter, so it needs\n * `defineProperty`; every other key shadows its inherited namesake by plain assignment.\n */\nconst put = (target: object, key: string | number, value: FormValue): void => {\n if (key === \"__proto__\") {\n Object.defineProperty(target, key, {\n value,\n enumerable: true,\n writable: true,\n configurable: true,\n })\n return\n }\n ;(target as Record<string | number, FormValue>)[key] = value\n}\n\nconst assign = (target: FormObject, path: string[], value: string) => {\n let cursor: FormValue = target\n for (let i = 0; i < path.length; i++) {\n const segment = path[i] as string\n const last = i === path.length - 1\n if (Array.isArray(cursor)) {\n const index: number | undefined =\n segment === \"\" ? cursor.length : isIndex(segment) ? Number(segment) : undefined\n if (index === undefined) return\n if (last) {\n put(cursor, index, value)\n return\n }\n const next: FormValue | undefined = Object.hasOwn(cursor, index)\n ? (cursor as Record<number, FormValue>)[index]\n : undefined\n if (next === undefined || typeof next === \"string\") {\n const created: FormValue = path[i + 1] === \"\" || isIndex(path[i + 1] as string) ? [] : {}\n put(cursor, index, created)\n cursor = created\n } else {\n cursor = next\n }\n continue\n }\n if (typeof cursor === \"string\") return\n if (last) {\n put(cursor, segment, value)\n return\n }\n const nextSegment = path[i + 1] as string\n const existing: FormValue | undefined = Object.hasOwn(cursor, segment)\n ? (cursor as Record<string, FormValue>)[segment]\n : undefined\n if (existing === undefined || typeof existing === \"string\") {\n const created: FormValue = nextSegment === \"\" || isIndex(nextSegment) ? [] : {}\n put(cursor, segment, created)\n cursor = created\n } else {\n cursor = existing\n }\n }\n}\n\n/** Decode `key=value&...` pairs (already percent-decoded) into a nested object. */\nexport const decodeFormPairs = (pairs: Iterable<[string, string]>): FormObject => {\n const out: FormObject = {}\n for (const [rawKey, value] of pairs) assign(out, parsePath(rawKey), value)\n return densify(out) as FormObject\n}\n\n/** Sparse arrays (`a[2]=x` without `a[0]`) become dense in bracket parsers. */\nconst densify = (value: FormValue): FormValue => {\n if (typeof value === \"string\") return value\n if (Array.isArray(value)) return value.filter((item) => item !== undefined).map(densify)\n const out: FormObject = {}\n for (const [key, item] of Object.entries(value)) put(out, key, densify(item))\n return out\n}\n\n/** Decode an `application/x-www-form-urlencoded` body or a query string (with or without `?`). */\nexport const decodeForm = (text: string): FormObject => {\n const source = text.startsWith(\"?\") ? text.slice(1) : text\n return decodeFormPairs(new URLSearchParams(source).entries())\n}\n", "import { decodeForm, encodeForm } from \"./form.js\"\n\nexport const JSON_MEDIA_TYPE = \"application/json\"\nexport const FORM_MEDIA_TYPE = \"application/x-www-form-urlencoded\"\n\n/** The essence of a `Content-Type` header: lower-cased media type without parameters. */\nexport const mediaTypeOf = (contentType: string | null | undefined): string | undefined => {\n if (!contentType) return undefined\n const essence = contentType.split(\";\")[0]?.trim().toLowerCase()\n return essence ? essence : undefined\n}\n\nconst isJsonMediaType = (mediaType: string) =>\n mediaType === JSON_MEDIA_TYPE || mediaType.endsWith(\"+json\") || mediaType === \"text/json\"\n\nexport type DecodedBody =\n | { kind: \"empty\" }\n | { kind: \"json\"; value: unknown }\n | { kind: \"form\"; value: Record<string, unknown> }\n | { kind: \"text\"; value: string }\n | { kind: \"bytes\"; value: Uint8Array }\n | { kind: \"invalid\"; mediaType: string; text: string; error: string }\n\nconst utf8 = new TextDecoder(\"utf-8\", { fatal: false })\n\n/**\n * Decode raw bytes according to a `Content-Type`. Never throws: malformed payloads come back as\n * `{ kind: \"invalid\" }` so callers (mock servers, the differential runner) can respond like a real\n * server would instead of crashing.\n */\nexport const decodeBody = (\n contentType: string | null | undefined,\n bytes: Uint8Array,\n): DecodedBody => {\n if (bytes.byteLength === 0) return { kind: \"empty\" }\n const mediaType = mediaTypeOf(contentType)\n if (mediaType === undefined) return { kind: \"bytes\", value: bytes }\n if (isJsonMediaType(mediaType)) {\n const text = utf8.decode(bytes)\n try {\n return { kind: \"json\", value: JSON.parse(text) }\n } catch (error) {\n return {\n kind: \"invalid\",\n mediaType,\n text,\n error: error instanceof Error ? error.message : String(error),\n }\n }\n }\n if (mediaType === FORM_MEDIA_TYPE) {\n return { kind: \"form\", value: decodeForm(utf8.decode(bytes)) }\n }\n if (mediaType.startsWith(\"text/\")) return { kind: \"text\", value: utf8.decode(bytes) }\n return { kind: \"bytes\", value: bytes }\n}\n\n/** Read and decode a Request/Response body. */\nexport const readBody = async (message: Request | Response): Promise<DecodedBody> => {\n const bytes = new Uint8Array(await message.arrayBuffer())\n return decodeBody(message.headers.get(\"content-type\"), bytes)\n}\n\nexport type EncodedBody = {\n contentType: string\n body: string\n}\n\n/** Encode a JSON-like value for the given media type. Throws for unsupported media types. */\nexport const encodeBody = (mediaType: string, value: unknown): EncodedBody => {\n const essence = mediaTypeOf(mediaType) ?? mediaType\n if (isJsonMediaType(essence)) return { contentType: essence, body: JSON.stringify(value) }\n if (essence === FORM_MEDIA_TYPE) {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${FORM_MEDIA_TYPE} bodies must be objects`)\n }\n return { contentType: essence, body: encodeForm(value as Record<string, unknown>) }\n }\n if (essence.startsWith(\"text/\")) return { contentType: essence, body: String(value) }\n throw new TypeError(`unsupported request media type: ${mediaType}`)\n}\n", "import { JSON_MEDIA_TYPE } from \"@crvouga/mockingbird-http-codec\"\n\n/** JSON response with a normalised content type. */\nexport const jsonRes = (\n status: number,\n body: unknown,\n headers: Record<string, string> = {},\n): Response =>\n new Response(JSON.stringify(body), {\n status,\n headers: { \"content-type\": JSON_MEDIA_TYPE, ...headers },\n })\n\n/** Thrown by handlers to produce a provider-shaped error response via `onError`. */\nexport class HttpError extends Error {\n constructor(\n readonly status: number,\n readonly body: unknown,\n readonly headers: Record<string, string> = {},\n ) {\n super(`HTTP ${status}`)\n this.name = \"HttpError\"\n }\n\n toResponse(): Response {\n const contentType = this.headers[\"content-type\"]?.split(\";\", 1)[0]?.trim().toLowerCase()\n if (contentType === \"text/plain\") {\n return new Response(String(this.body), {\n status: this.status,\n headers: this.headers,\n })\n }\n return jsonRes(this.status, this.body, this.headers)\n }\n}\n\nexport type FieldResult<T> = { ok: true; value: T } | { ok: false; reason: string }\n\nconst ok = <T>(value: T): FieldResult<T> => ({ ok: true, value })\nconst fail = <T>(reason: string): FieldResult<T> => ({ ok: false, reason })\n\n/** Form bodies decode to strings; these coerce the way HTTP servers do, reporting why not. */\nexport const coerce = {\n string(value: unknown): FieldResult<string> {\n return typeof value === \"string\" ? ok(value) : fail(\"expected a string\")\n },\n integer(value: unknown): FieldResult<number> {\n if (typeof value === \"number\" && Number.isInteger(value)) return ok(value)\n if (typeof value === \"string\" && /^-?\\d+$/.test(value.trim())) {\n const parsed = Number(value)\n return Number.isSafeInteger(parsed) ? ok(parsed) : fail(\"integer out of range\")\n }\n return fail(\"expected an integer\")\n },\n boolean(value: unknown): FieldResult<boolean> {\n if (typeof value === \"boolean\") return ok(value)\n if (value === \"true\" || value === \"1\") return ok(true)\n if (value === \"false\" || value === \"0\") return ok(false)\n return fail(\"expected a boolean\")\n },\n enumeration<T extends string>(value: unknown, allowed: readonly T[]): FieldResult<T> {\n const match = allowed.find((candidate) => candidate === value)\n return match === undefined ? fail(`expected one of ${allowed.join(\", \")}`) : ok(match)\n },\n /** Flat string-to-string map, the shape of Stripe-style `metadata`. */\n stringMap(value: unknown): FieldResult<Record<string, string>> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value))\n return fail(\"expected an object\")\n const out: Record<string, string> = {}\n for (const [key, item] of Object.entries(value)) {\n if (typeof item !== \"string\") return fail(`expected a string at ${key}`)\n out[key] = item\n }\n return ok(out)\n },\n}\n\n/** Count Unicode code points, the way JSON Schema and most APIs measure string length. */\nexport const codePointLength = (value: string) => [...value].length\n", "import type { SqliteClient } from \"@crvouga/mockingbird-sqlite\"\n\nconst ALPHABET = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"\n\n/** FNV-1a over a string, mixed once more so consecutive counters look unrelated. */\nconst mix = (input: string): number => {\n let hash = 0x811c9dc5\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i)\n hash = Math.imul(hash, 0x01000193) >>> 0\n }\n hash ^= hash >>> 16\n hash = Math.imul(hash, 0x85ebca6b) >>> 0\n hash ^= hash >>> 13\n return hash >>> 0\n}\n\n/** Deterministic, opaque-looking alphanumeric token of `length` characters derived from `input`. */\nexport const opaqueToken = (input: string, length: number): string => {\n let out = \"\"\n let round = 0\n while (out.length < length) {\n let hash = mix(`${input}:${round++}`)\n for (let i = 0; i < 5 && out.length < length; i++) {\n out += ALPHABET.charAt(hash % ALPHABET.length)\n hash = Math.floor(hash / ALPHABET.length)\n }\n }\n return out\n}\n\n/**\n * Sequential id source persisted in SQLite. Ids are deterministic for a given\n * sequence history (`cus_` + 14 opaque chars), so reproductions stay stable.\n */\nexport class IdSequence {\n constructor(\n private readonly sqlite: SqliteClient,\n private readonly namespace: string,\n private readonly salt = \"mockingbird\",\n ) {}\n\n next(prefix: string, length = 14): string {\n return this.sqlite.transaction(() => {\n const row = this.sqlite\n .prepare(\n \"SELECT value FROM mockingbird_sequences WHERE namespace = ? AND name = ? AND kind = 'id'\",\n )\n .get<{ value: number }>(this.namespace, prefix)\n const value = (row?.value ?? 0) + 1\n this.sqlite\n .prepare(\n `INSERT INTO mockingbird_sequences (namespace, name, kind, value) VALUES (?, ?, 'id', ?)\n ON CONFLICT(namespace, name, kind) DO UPDATE SET value = excluded.value`,\n )\n .run(this.namespace, prefix, value)\n return `${prefix}${opaqueToken(`${this.salt}:${prefix}:${value}`, length)}`\n })\n }\n}\n", "import type { RequestLog } from \"./metrics.js\"\n\n/** One journal entry: a request log stamped with when (on the mock clock) it was handled. */\nexport type JournalEntry = RequestLog & { at: string }\n\nexport type JournalQuery = {\n /** Only this namespace. Omit for every namespace, oldest first across all of them. */\n namespace?: string\n operationId?: string\n status?: number\n /** Only entries at or after this instant (epoch ms). */\n since?: number\n /** At most this many, the most recent kept. */\n limit?: number\n}\n\nexport type Journal = {\n readonly size: number\n record(entry: JournalEntry): void\n list(query?: JournalQuery): JournalEntry[]\n /** Forget one namespace's entries, or every namespace's. */\n clear(namespace?: string): void\n}\n\n/** Default number of entries each namespace keeps. */\nexport const DEFAULT_JOURNAL_SIZE = 1000\n\n/**\n * The last `size` requests per namespace, in a ring buffer: what the mock actually saw,\n * so a test can prove a request arrived (or never did) without reading logs.\n */\nexport const createJournal = (size: number = DEFAULT_JOURNAL_SIZE): Journal => {\n const capacity = Math.max(0, Math.floor(size))\n const rings = new Map<string, { entries: JournalEntry[]; next: number }>()\n let sequence = 0\n const order = new WeakMap<JournalEntry, number>()\n const inOrder = (ring: { entries: JournalEntry[]; next: number }): JournalEntry[] =>\n ring.entries.length < capacity\n ? ring.entries\n : [...ring.entries.slice(ring.next), ...ring.entries.slice(0, ring.next)]\n return {\n size: capacity,\n record(entry) {\n if (capacity === 0) return\n order.set(entry, sequence++)\n let ring = rings.get(entry.namespace)\n if (!ring) {\n ring = { entries: [], next: 0 }\n rings.set(entry.namespace, ring)\n }\n if (ring.entries.length < capacity) ring.entries.push(entry)\n else {\n ring.entries[ring.next] = entry\n ring.next = (ring.next + 1) % capacity\n }\n },\n list(query = {}) {\n const source =\n query.namespace !== undefined\n ? inOrder(rings.get(query.namespace) ?? { entries: [], next: 0 })\n : [...rings.values()]\n .flatMap(inOrder)\n .sort((a, b) => (order.get(a) ?? 0) - (order.get(b) ?? 0))\n const matched = source.filter(\n (entry) =>\n (query.operationId === undefined || entry.operationId === query.operationId) &&\n (query.status === undefined || entry.status === query.status) &&\n (query.since === undefined || Date.parse(entry.at) >= query.since),\n )\n return query.limit !== undefined ? matched.slice(-Math.max(0, query.limit)) : matched\n },\n clear(namespace) {\n if (namespace === undefined) rings.clear()\n else rings.delete(namespace)\n },\n }\n}\n\n/** What a service knows about a request that the runtime cannot see from outside. */\nexport type ResponseNotes = {\n /** Resource ids the handler touched, e.g. `{ userId, orderId }`. */\n ids?: Record<string, string>\n /** Set when the handler created a resource the request referred to but did not exist. */\n adopted?: boolean\n}\n\nconst notes = new WeakMap<Response, ResponseNotes>()\n\n/**\n * Attach notes to a response for the request journal and structured log. They travel\n * beside the response, never in it, so nothing the vendor would not send reaches a client.\n */\nexport const annotateResponse = (response: Response, extra: ResponseNotes): Response => {\n const existing = notes.get(response)\n notes.set(response, {\n ...existing,\n ...extra,\n ...(existing?.ids || extra.ids ? { ids: { ...existing?.ids, ...extra.ids } } : {}),\n })\n return response\n}\n\nexport const responseNotes = (response: Response): ResponseNotes | undefined => notes.get(response)\n", "/** One handled request, as the structured log sees it. */\nexport type RequestLog = {\n service: string\n namespace: string\n operationId: string | undefined\n method: string\n path: string\n status: number\n durationMs: number\n /** True when the path matched no operation in the contract. */\n unmatched: boolean\n /** Set when a fault rule produced the response. */\n faultId?: string\n /** Resource ids the handler touched (`userId`, `orderId`, \u2026), when the service reports them. */\n ids?: Record<string, string>\n /** Set when the service created a resource the request referred to but that did not exist. */\n adopted?: boolean\n}\n\nexport type MetricsReport = {\n requests: number\n /** Counts keyed `<operationId> <status>`. */\n byOperation: Record<string, number>\n /**\n * Paths that matched no operation, most frequent first.\n *\n * This is the early-warning signal: a consumer calling something the mock does\n * not implement shows up here as a count, before it fails a suite as a 404.\n */\n unmatched: { method: string; path: string; count: number }[]\n faults: number\n totalDurationMs: number\n}\n\nexport type Metrics = {\n record(entry: RequestLog): void\n report(): MetricsReport\n reset(): void\n}\n\nexport const createMetrics = (): Metrics => {\n let requests = 0\n let faults = 0\n let totalDurationMs = 0\n const byOperation = new Map<string, number>()\n const unmatched = new Map<string, number>()\n return {\n record(entry) {\n requests++\n totalDurationMs += entry.durationMs\n if (entry.faultId !== undefined) faults++\n const key = `${entry.operationId ?? \"(unmatched)\"} ${entry.status}`\n byOperation.set(key, (byOperation.get(key) ?? 0) + 1)\n if (entry.unmatched) {\n const route = `${entry.method} ${entry.path}`\n unmatched.set(route, (unmatched.get(route) ?? 0) + 1)\n }\n },\n report: () => ({\n requests,\n byOperation: Object.fromEntries([...byOperation].sort(([a], [b]) => a.localeCompare(b))),\n unmatched: [...unmatched]\n .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))\n .map(([route, count]) => {\n const space = route.indexOf(\" \")\n return { method: route.slice(0, space), path: route.slice(space + 1), count }\n }),\n faults,\n totalDurationMs,\n }),\n reset() {\n requests = 0\n faults = 0\n totalDurationMs = 0\n byOperation.clear()\n unmatched.clear()\n },\n }\n}\n", "/** A stable identifier for a point in a {@link Timeline}. */\nexport type CheckpointId = string\n\n/** An immutable node in a timeline's checkpoint DAG. */\nexport type Checkpoint<T> = Readonly<{\n id: CheckpointId\n branch: string\n parent: CheckpointId | null\n /** Logical time supplied by the timeline's injected clock. */\n at: number\n value: T\n}>\n\nexport type TimelineOptions = {\n /** Logical clock used to stamp checkpoints. Defaults to a deterministic counter. */\n now?: () => number\n /** Maximum retained checkpoints. Branch heads are never collected. Default 1,000. */\n maxCheckpoints?: number\n /** Customize deterministic checkpoint IDs. */\n id?: (sequence: number) => CheckpointId\n}\n\nexport type CommitOptions = {\n branch?: string\n /** Parent checkpoint. Defaults to the selected branch's current head. */\n parent?: CheckpointId | null\n}\n\nexport type ForkOptions = {\n /** Checkpoint to fork from. Defaults to the main branch's head. */\n from?: CheckpointId\n}\n\nconst BRANCH_PATTERN = /^[A-Za-z0-9_.-]{1,64}$/\n\n/**\n * Small, storage-agnostic checkpoint DAG shared by service runtimes. Its values may be immutable\n * records, namespace images, or copy-on-write SQL engine snapshots.\n *\n * Values are retained by reference. Engines can therefore use persistent/COW snapshots while\n * simpler services can use immutable values. IDs and GC order are deterministic, and all IO\n * (the logical clock) is injected.\n */\nexport class Timeline<T> {\n readonly maxCheckpoints: number\n private readonly now: () => number\n private readonly makeId: (sequence: number) => CheckpointId\n private readonly nodes = new Map<CheckpointId, Checkpoint<T>>()\n private readonly heads = new Map<string, CheckpointId>()\n /** Unreferenced nodes in the exact order they became collectible. */\n private readonly evictable = new Set<CheckpointId>()\n /** Branch heads plus explicit retainers. Absent means zero. */\n private readonly references = new Map<CheckpointId, number>()\n private readonly explicitPins = new Map<CheckpointId, number>()\n private sequence = 0\n\n constructor(options: TimelineOptions = {}) {\n const max = options.maxCheckpoints ?? 1_000\n if (!Number.isSafeInteger(max) || max < 1)\n throw new RangeError(\"maxCheckpoints must be a positive integer\")\n this.maxCheckpoints = max\n this.now = options.now ?? (() => this.sequence)\n this.makeId = options.id ?? ((sequence) => `cp_${sequence.toString(36).padStart(8, \"0\")}`)\n }\n\n /** Capture a new immutable value and move `branch` to it. */\n commit(value: T, options: CommitOptions = {}): Checkpoint<T> {\n const branch = options.branch ?? \"main\"\n this.assertBranch(branch)\n const parent = options.parent === undefined ? (this.heads.get(branch) ?? null) : options.parent\n if (parent !== null && !this.nodes.has(parent)) throw new RangeError(`no checkpoint ${parent}`)\n const id = this.makeId(++this.sequence)\n if (this.nodes.has(id)) throw new RangeError(`duplicate checkpoint id ${id}`)\n const checkpoint = Object.freeze({ id, branch, parent, at: this.now(), value })\n this.nodes.set(id, checkpoint)\n this.moveHead(branch, id)\n this.collect(this.maxCheckpoints)\n return checkpoint\n }\n\n /** Create a branch pointer without copying its checkpoint value. */\n fork(branch: string, options: ForkOptions = {}): Checkpoint<T> | undefined {\n this.assertBranch(branch)\n if (this.heads.has(branch)) throw new RangeError(`branch already exists: ${branch}`)\n const from = options.from ?? this.heads.get(\"main\")\n if (from === undefined) return undefined\n const checkpoint = this.get(from)\n this.moveHead(branch, checkpoint.id)\n return checkpoint\n }\n\n /** Move a branch pointer to an existing checkpoint. */\n checkout(branch: string, id: CheckpointId): Checkpoint<T> {\n this.assertBranch(branch)\n const checkpoint = this.get(id)\n this.moveHead(branch, checkpoint.id)\n return checkpoint\n }\n\n get(id: CheckpointId): Checkpoint<T> {\n const checkpoint = this.nodes.get(id)\n if (!checkpoint) throw new RangeError(`no checkpoint ${id}`)\n return checkpoint\n }\n\n head(branch = \"main\"): Checkpoint<T> | undefined {\n const id = this.heads.get(branch)\n return id === undefined ? undefined : this.get(id)\n }\n\n hasBranch(branch: string): boolean {\n return this.heads.has(branch)\n }\n\n branches(): Readonly<Record<string, CheckpointId>> {\n return Object.freeze(\n Object.fromEntries([...this.heads].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))),\n )\n }\n\n checkpoints(): readonly Checkpoint<T>[] {\n return [...this.nodes.values()]\n }\n\n /** Number of retained checkpoints without allocating an array. */\n get size(): number {\n return this.nodes.size\n }\n\n /** Pin a checkpoint independently of branch heads (used by compatibility snapshot handles). */\n retain(id: CheckpointId): Checkpoint<T> {\n const checkpoint = this.get(id)\n this.explicitPins.set(id, (this.explicitPins.get(id) ?? 0) + 1)\n this.addReference(id)\n return checkpoint\n }\n\n /** Release one explicit pin. Branch heads remain pinned until moved or deleted. */\n release(id: CheckpointId): boolean {\n if (!this.nodes.has(id)) return false\n const pins = this.explicitPins.get(id) ?? 0\n if (pins === 0) return false\n if (pins === 1) this.explicitPins.delete(id)\n else this.explicitPins.set(id, pins - 1)\n this.removeReference(id)\n this.collect(this.maxCheckpoints)\n return true\n }\n\n deleteBranch(branch: string): boolean {\n if (branch === \"main\") throw new RangeError(\"cannot delete main branch\")\n const previous = this.heads.get(branch)\n const deleted = this.heads.delete(branch)\n if (previous !== undefined) this.removeReference(previous)\n this.collect(this.maxCheckpoints)\n return deleted\n }\n\n /**\n * Deterministically discard oldest unpinned checkpoints. Collection is O(number removed):\n * commits never scan pinned nodes or the retained history. Parents are metadata rather than a\n * storage dependency, so a retained node remains usable after pruning.\n */\n gc(max = this.maxCheckpoints): CheckpointId[] {\n if (!Number.isSafeInteger(max) || max < 1)\n throw new RangeError(\"max must be a positive integer\")\n const removed: CheckpointId[] = []\n this.collect(max, removed)\n return removed\n }\n\n private collect(max: number, removed?: CheckpointId[]): void {\n while (this.nodes.size > max && this.evictable.size > 0) {\n const id = this.evictable.values().next().value as CheckpointId\n this.evictable.delete(id)\n this.nodes.delete(id)\n removed?.push(id)\n }\n }\n\n private moveHead(branch: string, id: CheckpointId): void {\n const previous = this.heads.get(branch)\n if (previous === id) return\n if (previous !== undefined) this.removeReference(previous)\n this.heads.set(branch, id)\n this.addReference(id)\n }\n\n private addReference(id: CheckpointId): void {\n this.references.set(id, (this.references.get(id) ?? 0) + 1)\n this.evictable.delete(id)\n }\n\n private removeReference(id: CheckpointId): void {\n const next = (this.references.get(id) ?? 0) - 1\n if (next > 0) this.references.set(id, next)\n else {\n this.references.delete(id)\n if (this.nodes.has(id)) this.evictable.add(id)\n }\n }\n\n private assertBranch(branch: string): void {\n if (!BRANCH_PATTERN.test(branch)) throw new RangeError(`branch must match ${BRANCH_PATTERN}`)\n }\n}\n", "import { Database } from \"@crvouga/mockingbird-service-sqlite\"\nimport type { SqliteClient } from \"./client.js\"\n\n/** Construct the default in-memory SQLite client (`@crvouga/mockingbird-service-sqlite`). */\nexport const createDefaultSqlite = (): SqliteClient => new Database()\n\n/** Use the injected client, or fall back to {@link createDefaultSqlite}. */\nexport const resolveSqlite = (sqlite?: SqliteClient): SqliteClient =>\n sqlite ?? createDefaultSqlite()\n", "import type { SqliteClient } from \"./client.js\"\n\n/** One named, ordered schema change applied exactly once per client. */\nexport type Migration = {\n /** Stable id stored in `schema_migrations`. Must be unique across the list. */\n id: string\n sql: string\n}\n\nconst ensureMigrationsTable = (sqlite: SqliteClient) => {\n sqlite.exec(`\n CREATE TABLE IF NOT EXISTS schema_migrations (\n id TEXT PRIMARY KEY NOT NULL,\n applied_at INTEGER NOT NULL\n )\n `)\n}\n\n/**\n * Apply pending migrations in order inside a single transaction.\n *\n * Idempotent: already-applied ids are skipped. Re-running with the same list\n * is a no-op after the first successful boot.\n */\nexport const migrate = (sqlite: SqliteClient, migrations: readonly Migration[]): void => {\n ensureMigrationsTable(sqlite)\n const applied = new Set(\n sqlite\n .prepare(\"SELECT id FROM schema_migrations\")\n .all<{ id: string }>()\n .map((row) => row.id),\n )\n const pending = migrations.filter((migration) => !applied.has(migration.id))\n if (pending.length === 0) return\n\n const insert = sqlite.prepare(\"INSERT INTO schema_migrations (id, applied_at) VALUES (?, ?)\")\n const now = Math.floor(Date.now() / 1000)\n sqlite.transaction(() => {\n for (const migration of pending) {\n sqlite.exec(migration.sql)\n insert.run(migration.id, now)\n }\n })\n}\n\n/** Applied migration ids in application order (by `applied_at`, then `id`). */\nexport const listAppliedMigrations = (sqlite: SqliteClient): string[] => {\n ensureMigrationsTable(sqlite)\n return sqlite\n .prepare(\"SELECT id FROM schema_migrations ORDER BY applied_at ASC, id ASC\")\n .all<{ id: string }>()\n .map((row) => row.id)\n}\n", "import type { SqliteClient } from \"./client.js\"\nimport { type Migration, migrate } from \"./migrate.js\"\n\n/**\n * Core Mockingbird service schema: namespaced JSON records and counters.\n *\n * Applied on every service boot via {@link migrateCore}.\n */\nexport const CORE_MIGRATIONS: readonly Migration[] = [\n {\n id: \"20260322_core_records_sequences\",\n sql: `\n CREATE TABLE IF NOT EXISTS mockingbird_records (\n namespace TEXT NOT NULL,\n collection TEXT NOT NULL,\n id TEXT NOT NULL,\n seq INTEGER NOT NULL,\n value TEXT NOT NULL,\n PRIMARY KEY (namespace, collection, id)\n );\n CREATE INDEX IF NOT EXISTS mockingbird_records_seq\n ON mockingbird_records (namespace, collection, seq);\n CREATE TABLE IF NOT EXISTS mockingbird_sequences (\n namespace TEXT NOT NULL,\n name TEXT NOT NULL,\n kind TEXT NOT NULL,\n value INTEGER NOT NULL,\n PRIMARY KEY (namespace, name, kind)\n );\n `,\n },\n]\n\n/** Apply {@link CORE_MIGRATIONS} (idempotent). */\nexport const migrateCore = (sqlite: SqliteClient): void => {\n migrate(sqlite, CORE_MIGRATIONS)\n}\n\n/** Delete every record and sequence belonging to `namespace`. */\nexport const clearNamespace = (sqlite: SqliteClient, namespace: string): void => {\n sqlite.transaction(() => {\n sqlite.prepare(\"DELETE FROM mockingbird_records WHERE namespace = ?\").run(namespace)\n sqlite.prepare(\"DELETE FROM mockingbird_sequences WHERE namespace = ?\").run(namespace)\n })\n}\n", "/**\n * Mockingbird's OpenAPI extensions. They are deliberately generic: nothing here knows about any\n * particular provider. Provider specifics live in each provider's `openapi.yaml`.\n */\n\n/** `x-mockingbird` on an operation. */\nexport type OperationExtension = {\n /** `false` marks an operation the mock explicitly does not implement. Default `true`. */\n supported?: boolean\n /** Human explanation, required when `supported: false` or `parity.enabled: false`. */\n reason?: string\n parity?: {\n /** Whether the differential runner generates this operation. Defaults to `supported`. */\n enabled?: boolean\n /** `false` for operations that must never hit a real account (destructive, billing\u2026). Default `true`. */\n safe?: boolean\n reason?: string\n }\n}\n\nexport type OperationMetadata = {\n supported: boolean\n reason: string | undefined\n parity: { enabled: boolean; safe: boolean; reason: string | undefined }\n}\n\n/** `x-mockingbird-resource`: this string value is the identity of a resource. */\nexport type ResourceIdentityExtension = { type: string; identity: true }\n\n/** `x-mockingbird-resource-ref`: this value must reference an existing resource of `type`. */\nexport type ResourceRefExtension = {\n type: string\n /** A well-formed id that does not exist, used to exercise not-found behaviour. */\n missing?: string\n}\n\nexport const VOLATILE_KINDS = [\"id\", \"timestamp\", \"token\", \"url\", \"account\", \"opaque\"] as const\nexport type VolatileKind = (typeof VOLATILE_KINDS)[number]\n\n/** `x-mockingbird-volatile`: nondeterministic on the real side; compared by shape only. */\nexport type VolatileExtension = { kind: VolatileKind }\n\nexport const SCOPE_VALUES = [\"run-id\", \"walk-start-unix\", \"walk-start-iso\"] as const\nexport type ScopeValue = (typeof SCOPE_VALUES)[number]\n\n/** `x-mockingbird-scope`: always generate this run-scoped value instead of a random one. */\nexport type ScopeExtension = { value: ScopeValue }\n\n/** `x-mockingbird-unsupported`: the mock does not implement this parameter/property. */\nexport type UnsupportedExtension = true | { reason?: string }\n\nexport type SchemaMetadata = {\n resource: ResourceIdentityExtension | undefined\n resourceRef: ResourceRefExtension | undefined\n volatile: VolatileExtension | undefined\n scope: ScopeExtension | undefined\n unsupported: { reason: string | undefined } | undefined\n}\n\nexport const EXTENSION_KEYS = {\n operation: \"x-mockingbird\",\n resource: \"x-mockingbird-resource\",\n resourceRef: \"x-mockingbird-resource-ref\",\n volatile: \"x-mockingbird-volatile\",\n scope: \"x-mockingbird-scope\",\n unsupported: \"x-mockingbird-unsupported\",\n parityHeader: \"x-mockingbird-parity-header\",\n} as const\n", "import type {\n HeaderObject,\n OpenAPIDocument,\n OperationObject,\n ParameterObject,\n ResponseObject,\n SchemaObject,\n} from \"@crvouga/mockingbird-openapi\"\nimport { deref, resolveSchema } from \"@crvouga/mockingbird-openapi\"\nimport {\n EXTENSION_KEYS,\n type OperationExtension,\n type OperationMetadata,\n SCOPE_VALUES,\n type SchemaMetadata,\n VOLATILE_KINDS,\n} from \"./types.js\"\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nconst extensionOf = (holder: object, key: string): unknown =>\n (holder as Record<string, unknown>)[key]\n\n/** Read `x-mockingbird` from an operation, applying defaults. */\nexport const operationMetadata = (operation: OperationObject): OperationMetadata => {\n const raw = extensionOf(operation, EXTENSION_KEYS.operation)\n const ext: OperationExtension = isRecord(raw) ? (raw as OperationExtension) : {}\n const supported = ext.supported ?? true\n const parity = ext.parity ?? {}\n return {\n supported,\n reason: typeof ext.reason === \"string\" ? ext.reason : undefined,\n parity: {\n enabled: supported && (parity.enabled ?? true),\n safe: parity.safe ?? true,\n reason: typeof parity.reason === \"string\" ? parity.reason : undefined,\n },\n }\n}\n\nconst readResource = (raw: unknown): SchemaMetadata[\"resource\"] => {\n if (!isRecord(raw) || typeof raw.type !== \"string\" || raw.identity !== true) return undefined\n return { type: raw.type, identity: true }\n}\n\nconst readResourceRef = (raw: unknown): SchemaMetadata[\"resourceRef\"] => {\n if (!isRecord(raw) || typeof raw.type !== \"string\") return undefined\n return { type: raw.type, ...(typeof raw.missing === \"string\" ? { missing: raw.missing } : {}) }\n}\n\nconst readVolatile = (raw: unknown): SchemaMetadata[\"volatile\"] => {\n if (!isRecord(raw) || typeof raw.kind !== \"string\") return undefined\n const kind = VOLATILE_KINDS.find((k) => k === raw.kind)\n return kind === undefined ? undefined : { kind }\n}\n\nconst readScope = (raw: unknown): SchemaMetadata[\"scope\"] => {\n if (!isRecord(raw) || typeof raw.value !== \"string\") return undefined\n const value = SCOPE_VALUES.find((v) => v === raw.value)\n return value === undefined ? undefined : { value }\n}\n\nconst readUnsupported = (raw: unknown): SchemaMetadata[\"unsupported\"] => {\n if (raw === true) return { reason: undefined }\n if (isRecord(raw)) return { reason: typeof raw.reason === \"string\" ? raw.reason : undefined }\n return undefined\n}\n\n/**\n * Read Mockingbird's schema-level extensions from a (resolved) schema or parameter.\n * Extensions on a `$ref` wrapper win over the target's, matching {@link resolveSchema}.\n */\nexport const schemaMetadata = (holder: SchemaObject | ParameterObject): SchemaMetadata => ({\n resource: readResource(extensionOf(holder, EXTENSION_KEYS.resource)),\n resourceRef: readResourceRef(extensionOf(holder, EXTENSION_KEYS.resourceRef)),\n volatile: readVolatile(extensionOf(holder, EXTENSION_KEYS.volatile)),\n scope: readScope(extensionOf(holder, EXTENSION_KEYS.scope)),\n unsupported: readUnsupported(extensionOf(holder, EXTENSION_KEYS.unsupported)),\n})\n\n/** Metadata of a parameter: extensions on the parameter itself win over its schema's. */\nexport const parameterMetadata = (\n document: OpenAPIDocument,\n parameter: ParameterObject,\n): SchemaMetadata => {\n const own = schemaMetadata(parameter)\n const fromSchema = parameter.schema\n ? schemaMetadata(resolveSchema(document, parameter.schema))\n : undefined\n return {\n resource: own.resource ?? fromSchema?.resource,\n resourceRef: own.resourceRef ?? fromSchema?.resourceRef,\n volatile: own.volatile ?? fromSchema?.volatile,\n scope: own.scope ?? fromSchema?.scope,\n unsupported: own.unsupported ?? fromSchema?.unsupported,\n }\n}\n\n/** Lower-cased names of response headers flagged with `x-mockingbird-parity-header: true`. */\nexport const parityHeaders = (document: OpenAPIDocument, response: ResponseObject): string[] => {\n const names: string[] = []\n for (const [name, raw] of Object.entries(response.headers ?? {})) {\n const header = deref<HeaderObject>(document, raw)\n if (extensionOf(header, EXTENSION_KEYS.parityHeader) === true) names.push(name.toLowerCase())\n }\n return names.sort()\n}\n", "import type { FetchAPI } from \"@crvouga/mockingbird-core\"\nimport {\n type DecodedBody,\n decodeFormPairs,\n type FormObject,\n readBody,\n} from \"@crvouga/mockingbird-http-codec\"\nimport { listOperations, type OpenAPIDocument, type Operation } from \"@crvouga/mockingbird-openapi\"\nimport { operationMetadata } from \"@crvouga/mockingbird-openapi-metadata\"\nimport {\n clearNamespace,\n migrateCore,\n resolveSqlite,\n type SqliteClient,\n} from \"@crvouga/mockingbird-sqlite\"\nimport { type Context, Hono } from \"hono\"\n\n/** Options every provider constructor accepts. */\nexport type APIOptions = {\n /** Sync SQLite client. Defaults to `@crvouga/mockingbird-service-sqlite`. */\n sqlite?: SqliteClient\n /** Clock used for `created`-style fields. Default `Date.now`. */\n now?: () => number\n /**\n * Storage namespace for this instance's records. Instances sharing one SQLite\n * client stay isolated when their namespaces differ. Defaults to the service name.\n */\n namespace?: string\n}\n\nexport type OperationContext = {\n request: Request\n url: URL\n /** Path parameters. */\n params: Record<string, string>\n /** Query string decoded with bracket notation (`created[gte]=1` -> `{ created: { gte: \"1\" } }`). */\n query: FormObject\n body: DecodedBody\n /** Shared SQLite client for this service (already migrated). */\n sqlite: SqliteClient\n /** Service namespace used for records / sequences. */\n namespace: string\n operation: Operation\n /** The vendor contract the service was built from. */\n document: OpenAPIDocument\n now: () => number\n}\n\nexport type OperationHandler = (context: OperationContext) => Promise<Response> | Response\n\nexport type OperationHandlers = Record<string, OperationHandler>\n\n/** Identity helper that keeps handler maps type-checked against a fixed set of operation ids. */\nexport const defineOperations = <Id extends string>(\n handlers: Record<Id, OperationHandler>,\n): Record<Id, OperationHandler> => handlers\n\nexport class OperationRegistryError extends Error {\n constructor(readonly problems: string[]) {\n super(`operation registry is inconsistent:\\n${problems.map((p) => ` - ${p}`).join(\"\\n\")}`)\n this.name = \"OperationRegistryError\"\n }\n}\n\n/**\n * Cross-check handlers against the document: every supported operation needs exactly one\n * handler, no handler may target an unknown or unsupported operation, no duplicate ids.\n */\nexport const verifyOperations = (\n document: OpenAPIDocument,\n handlers: OperationHandlers,\n): string[] => {\n const problems: string[] = []\n const operations = listOperations(document)\n const seen = new Set<string>()\n for (const operation of operations) {\n if (seen.has(operation.operationId))\n problems.push(`duplicate operationId ${operation.operationId}`)\n seen.add(operation.operationId)\n const supported = operationMetadata(operation.operation).supported\n const handler = handlers[operation.operationId]\n if (supported && !handler)\n problems.push(`supported operation ${operation.operationId} has no handler`)\n if (!supported && handler)\n problems.push(`operation ${operation.operationId} is marked unsupported but has a handler`)\n }\n for (const id of Object.keys(handlers)) {\n if (!seen.has(id)) problems.push(`handler ${id} has no OpenAPI operation`)\n }\n return problems\n}\n\nexport type ServiceOptions = {\n document: OpenAPIDocument\n handlers: OperationHandlers\n sqlite: SqliteClient\n /** Namespace isolating this service's records and sequences. */\n namespace: string\n now?: (() => number) | undefined\n /** Response for paths/methods outside the contract. */\n notFound: (request: Request) => Response | Promise<Response>\n /** Response for operations declared but marked `supported: false`. Default: `notFound`. */\n unsupported?: (request: Request, operation: Operation) => Response | Promise<Response>\n /** Convert handler exceptions into a provider-shaped response. */\n onError: (error: unknown, request: Request) => Response | Promise<Response>\n /** Runs before every operation; return a Response to short-circuit (e.g. authentication). */\n before?: (context: OperationContext) => Promise<Response | undefined> | Response | undefined\n}\n\nexport type Service = FetchAPI & {\n app: Hono\n sqlite: SqliteClient\n namespace: string\n /** Delete every record and sequence in the service namespace. */\n reset(): Promise<void>\n}\n\nconst honoPath = (template: string) => template.replace(/\\{([^}]+)\\}/g, \":$1\")\n\n/** Static segments before parameters so `/v1/customers/search` beats `/v1/customers/:id`. */\nconst routeOrder = (a: Operation, b: Operation) => {\n const sa = a.path.split(\"/\")\n const sb = b.path.split(\"/\")\n for (let i = 0; i < Math.max(sa.length, sb.length); i++) {\n const x = sa[i] ?? \"\"\n const y = sb[i] ?? \"\"\n const px = x.startsWith(\"{\")\n const py = y.startsWith(\"{\")\n if (px !== py) return px ? 1 : -1\n if (x !== y) return x < y ? -1 : 1\n }\n return 0\n}\n\nconst queryOf = (url: URL): FormObject => decodeFormPairs(url.searchParams.entries())\n\n/**\n * Resolve optional `sqlite`, run core migrations, and return the ready client.\n * Call this from every provider constructor before building state.\n */\nexport const bootSqlite = (sqlite?: SqliteClient): SqliteClient => {\n const client = resolveSqlite(sqlite)\n migrateCore(client)\n return client\n}\n\n/** Build a Fetch-native service whose routes are exactly the document's operations. */\nexport const createService = (options: ServiceOptions): Service => {\n const problems = verifyOperations(options.document, options.handlers)\n if (problems.length > 0) throw new OperationRegistryError(problems)\n migrateCore(options.sqlite)\n const now = options.now ?? (() => Date.now())\n const app = new Hono()\n app.notFound((c) => options.notFound(c.req.raw))\n app.onError((error, c) => options.onError(error, c.req.raw))\n\n const operations = [...listOperations(options.document)].sort(routeOrder)\n for (const operation of operations) {\n const metadata = operationMetadata(operation.operation)\n const handler = options.handlers[operation.operationId]\n const route = async (c: Context) => {\n const request = c.req.raw\n if (!metadata.supported || !handler) {\n return options.unsupported\n ? options.unsupported(request, operation)\n : options.notFound(request)\n }\n const url = new URL(request.url)\n const context: OperationContext = {\n request,\n url,\n params: c.req.param(),\n query: queryOf(url),\n body: await readBody(request),\n sqlite: options.sqlite,\n namespace: options.namespace,\n operation,\n document: options.document,\n now,\n }\n const short = await options.before?.(context)\n if (short) return short\n return handler(context)\n }\n app.on(operation.method.toUpperCase(), honoPath(operation.path), route)\n }\n\n return {\n app,\n sqlite: options.sqlite,\n namespace: options.namespace,\n fetch: async (request) => app.fetch(request),\n reset: async () => {\n clearNamespace(options.sqlite, options.namespace)\n },\n }\n}\n", "import { Timeline } from \"@crvouga/mockingbird-core\"\nimport type { SqliteClient } from \"@crvouga/mockingbird-sqlite\"\n\n/**\n * A point-in-time copy of everything a service namespace holds.\n *\n * All service state lives in the two core tables keyed by namespace, so a snapshot\n * is generic: any service gets per-test rollback without knowing its own schema.\n * Restoring is much cheaper than rebuilding a namespace from a corpus.\n */\nexport type NamespaceSnapshot = {\n namespace: string\n records: { collection: string; id: string; seq: number; value: string }[]\n sequences: { name: string; kind: string; value: number }[]\n}\n\n/**\n * @deprecated Low-level Timeline payload capture retained for API compatibility. Provider code\n * must use the runtime Timeline or `withNamespaceRollback`.\n */\nexport const snapshotNamespace = (sqlite: SqliteClient, namespace: string): NamespaceSnapshot => ({\n namespace,\n records: sqlite\n .prepare(\n \"SELECT collection, id, seq, value FROM mockingbird_records WHERE namespace = ? ORDER BY collection, seq\",\n )\n .all<{ collection: string; id: string; seq: number; value: string }>(namespace),\n sequences: sqlite\n .prepare(\n \"SELECT name, kind, value FROM mockingbird_sequences WHERE namespace = ? ORDER BY name, kind\",\n )\n .all<{ name: string; kind: string; value: number }>(namespace),\n})\n\n/**\n * Replace a namespace's contents with `snapshot`. The namespace is emptied first,\n * so restoring is an assignment, not a merge \u2014 records created since the snapshot\n * are gone afterwards.\n *\n * @deprecated Low-level Timeline payload restore retained for API compatibility. Provider code\n * must use the runtime Timeline or `withNamespaceRollback`.\n */\nexport const restoreNamespace = (\n sqlite: SqliteClient,\n namespace: string,\n snapshot: NamespaceSnapshot,\n): void => {\n sqlite.transaction(() => {\n sqlite.prepare(\"DELETE FROM mockingbird_records WHERE namespace = ?\").run(namespace)\n sqlite.prepare(\"DELETE FROM mockingbird_sequences WHERE namespace = ?\").run(namespace)\n const record = sqlite.prepare(\n \"INSERT INTO mockingbird_records (namespace, collection, id, seq, value) VALUES (?, ?, ?, ?, ?)\",\n )\n for (const row of snapshot.records) {\n record.run(namespace, row.collection, row.id, row.seq, row.value)\n }\n const sequence = sqlite.prepare(\n \"INSERT INTO mockingbird_sequences (namespace, name, kind, value) VALUES (?, ?, ?, ?)\",\n )\n for (const row of snapshot.sequences) {\n sequence.run(namespace, row.name, row.kind, row.value)\n }\n })\n}\n\n/**\n * Execute asynchronous service work atomically using the canonical Timeline rollback primitive.\n * This is the prescribed escape hatch when the SQLite adapter cannot hold a transaction across\n * `await`; service code should not coordinate raw namespace snapshots itself.\n */\nexport const withNamespaceRollback = async <T>(\n sqlite: SqliteClient,\n namespace: string,\n run: () => Promise<T>,\n): Promise<T> => {\n const rollback = new Timeline<NamespaceSnapshot>({ maxCheckpoints: 1 })\n const before = rollback.commit(snapshotNamespace(sqlite, namespace))\n try {\n return await run()\n } catch (error) {\n restoreNamespace(sqlite, namespace, before.value)\n throw error\n }\n}\n", "/**\n * Set by `scripts/bundle-service.ts` when a service is bundled, and rewritten to the\n * released version when it is published. Undefined when running from source.\n */\ndeclare const __MOCKINGBIRD_PACKAGE_VERSION__: string | undefined\n\n/** Placeholder a bundle carries until `release:publish` writes the real version over it. */\nexport const UNRELEASED_VERSION = \"0.0.0-development\"\n\n/** The published version of the service package this code is bundled into. */\nexport const PACKAGE_VERSION: string =\n typeof __MOCKINGBIRD_PACKAGE_VERSION__ === \"string\"\n ? __MOCKINGBIRD_PACKAGE_VERSION__\n : UNRELEASED_VERSION\n", "/**\n * HMAC and encoding primitives for vendor webhook signatures, over WebCrypto so they run\n * wherever the mocks do (Node, Bun, workers).\n */\n\nexport type HmacAlgorithm = \"SHA-1\" | \"SHA-256\" | \"SHA-512\"\nexport type ByteEncoding = \"hex\" | \"base64\"\n\nconst encoder = new TextEncoder()\n\nexport const toBase64 = (bytes: ArrayBuffer | Uint8Array): string => {\n let binary = \"\"\n for (const byte of bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes)) {\n binary += String.fromCharCode(byte)\n }\n return btoa(binary)\n}\n\nexport const fromBase64 = (value: string): Uint8Array =>\n Uint8Array.from(atob(value), (char) => char.charCodeAt(0))\n\nexport const toHex = (bytes: ArrayBuffer | Uint8Array): string =>\n [...(bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes))]\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\")\n\nconst keyBytes = (key: string | Uint8Array): Uint8Array =>\n typeof key === \"string\" ? encoder.encode(key) : key\n\n/** HMAC of `message` under `key` (a UTF-8 string or raw bytes), encoded as hex or base64. */\nexport const hmac = async (\n algorithm: HmacAlgorithm,\n key: string | Uint8Array,\n message: string | Uint8Array,\n encoding: ByteEncoding = \"hex\",\n): Promise<string> => {\n const imported = await crypto.subtle.importKey(\n \"raw\",\n keyBytes(key) as BufferSource,\n { name: \"HMAC\", hash: algorithm },\n false,\n [\"sign\"],\n )\n const signed = await crypto.subtle.sign(\n \"HMAC\",\n imported,\n (typeof message === \"string\" ? encoder.encode(message) : message) as BufferSource,\n )\n return encoding === \"hex\" ? toHex(signed) : toBase64(signed)\n}\n\n/** SHA digest of `input`, hex-encoded. */\nexport const sha = async (\n algorithm: \"SHA-1\" | \"SHA-256\" | \"SHA-512\",\n input: string | Uint8Array,\n): Promise<string> =>\n toHex(\n await crypto.subtle.digest(\n algorithm,\n (typeof input === \"string\" ? encoder.encode(input) : input) as BufferSource,\n ),\n )\n\n/**\n * The raw key of a Svix-style secret: `whsec_<base64>` (Svix, Resend, Junction) or\n * `fwhsec_<base64>` (Flex). A bare base64 secret is accepted too.\n */\nexport const svixSecretBytes = (secret: string): Uint8Array => {\n const raw = secret.replace(/^f?whsec_/, \"\")\n try {\n return fromBase64(raw)\n } catch {\n throw new TypeError(\"webhook secret must be whsec_<base64> (as Svix issues it)\")\n }\n}\n\n/** `v1,<base64 HMAC-SHA256>` over `\"<id>.<timestamp>.<body>\"`, as Svix signs. */\nexport const signSvix = async (\n secret: string,\n messageId: string,\n timestampSeconds: number,\n body: string,\n): Promise<string> =>\n `v1,${await hmac(\"SHA-256\", svixSecretBytes(secret), `${messageId}.${timestampSeconds}.${body}`, \"base64\")}`\n\n/** `t=<unix>,v1=<hex HMAC-SHA256(secret, \"<t>.<body>\")>`, as Stripe (and Persona) sign. */\nexport const signTimestamped = async (\n secret: string,\n timestampSeconds: number,\n body: string,\n): Promise<string> =>\n `t=${timestampSeconds},v1=${await hmac(\"SHA-256\", secret, `${timestampSeconds}.${body}`, \"hex\")}`\n\n/**\n * Twilio's `X-Twilio-Signature`: base64 HMAC-SHA1 of the full URL followed by every form\n * parameter as `key + value`, keys sorted. Sign against the public URL the app is\n * configured with, not the address the request is actually posted to.\n */\nexport const signTwilio = async (\n authToken: string,\n url: string,\n params: Record<string, string>,\n): Promise<string> => {\n const payload =\n url +\n Object.keys(params)\n .sort()\n .map((key) => `${key}${params[key]}`)\n .join(\"\")\n return hmac(\"SHA-1\", authToken, payload, \"base64\")\n}\n\n/** Constant-time string comparison, so a verifier in a test double does not leak timing. */\nexport const timingSafeEqual = (a: string, b: string): boolean => {\n if (a.length !== b.length) return false\n let diff = 0\n for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i)\n return diff === 0\n}\n", "import type { AdminRoutes } from \"./control.js\"\nimport { signSvix, signTimestamped, signTwilio } from \"./signing.js\"\n\n/**\n * Outbound webhooks, shared by every service that has them.\n *\n * A service publishes a message (the exact bytes the vendor would send); the hub fans it out\n * to every matching endpoint, signs each delivery with the vendor's scheme, retries on the\n * vendor's schedule, and keeps a record a suite can read, replay or flush through\n * `/__admin/webhooks*`. Signature timestamps always use the wall clock, never the mock\n * clock: receivers check them against their own time, and an advanced mock clock would\n * otherwise fail every delivery.\n */\n\n/** What a signer sees for one delivery attempt. */\nexport type SignInput = {\n messageId: string\n /** Exact bytes about to be sent. */\n body: string\n /** Wall-clock unix seconds of this attempt. */\n timestampSeconds: number\n /** Where the delivery is posted. */\n url: string\n /** The endpoint's secret, if it has one. */\n secret: string | undefined\n /** The endpoint's `signUrl` (the public URL the receiver verifies against), else `url`. */\n signUrl: string\n /** Form parameters, when the body is form-encoded (Twilio signs these, not the body). */\n form: Record<string, string> | undefined\n /** Stable event type and metadata captured with the message; avoids signer side-channel state. */\n type: string\n tags: Readonly<Record<string, string>>\n}\n\n/** Headers to add to one delivery. */\nexport type WebhookSigner = (\n input: SignInput,\n) => Record<string, string> | Promise<Record<string, string>>\n\n/** Named signers for the vendor schemes the catalog needs. */\nexport const signers = {\n /** No signature. */\n none: (): WebhookSigner => () => ({}),\n /** Svix (`svix-id`, `svix-timestamp`, `svix-signature: v1,<b64>`): Junction, Flex, Resend. */\n svix:\n (options: { prefix?: \"svix\" | \"webhook\" } = {}): WebhookSigner =>\n async ({ messageId, body, timestampSeconds, secret }) => {\n if (!secret) return {}\n const prefix = options.prefix ?? \"svix\"\n return {\n [`${prefix}-id`]: messageId,\n [`${prefix}-timestamp`]: String(timestampSeconds),\n [`${prefix}-signature`]: await signSvix(secret, messageId, timestampSeconds, body),\n }\n },\n /** `<header>: t=<unix>,v1=<hex HMAC-SHA256(secret, \"t.body\")>`: Stripe, Persona, Fullscript. */\n timestamped:\n (header = \"Stripe-Signature\"): WebhookSigner =>\n async ({ body, timestampSeconds, secret }) =>\n secret ? { [header]: await signTimestamped(secret, timestampSeconds, body) } : {},\n /** `X-Twilio-Signature` over the public URL plus the sorted form parameters. */\n twilio:\n (): WebhookSigner =>\n async ({ signUrl, form, secret }) =>\n secret ? { \"X-Twilio-Signature\": await signTwilio(secret, signUrl, form ?? {}) } : {},\n /** The secret itself in a header (optionally templated): RxVortex, Pharmetika, AHA `Token <s>`. */\n header:\n (header: string, format: (secret: string) => string = (s) => s): WebhookSigner =>\n ({ secret }) =>\n secret ? { [header]: format(secret) } : {},\n /** Anything else: the service computes the headers itself. */\n custom: (sign: WebhookSigner): WebhookSigner => sign,\n}\n\nexport type WebhookEndpoint = {\n /** Stable id; generated when omitted. */\n id?: string\n url: string\n secret?: string\n /** Event types to deliver; omit or include `\"*\"` for every type. */\n events?: string[]\n /** Deliver only messages whose tags include all of these (e.g. `{ account: \"mso\" }`). */\n tags?: Record<string, string>\n /** The public URL the receiver verifies signatures against (Twilio), when it differs. */\n signUrl?: string\n headers?: Record<string, string>\n}\n\nexport type WebhookMessage = {\n id: string\n namespace: string\n type: string\n body: string\n contentType: string\n tags: Record<string, string>\n headers?: Record<string, string>\n /** Wall-clock ISO-8601 time of publication. */\n publishedAt: string\n}\n\nexport type WebhookAttempt = {\n attempt: number\n at: string\n status: number | null\n error: string | null\n durationMs: number\n /** Exact receiver response body, when one was returned. */\n responseBody?: string | null\n}\n\nexport type WebhookDelivery = {\n id: string\n messageId: string\n namespace: string\n type: string\n endpointId: string\n url: string\n state: \"pending\" | \"delivered\" | \"failed\" | \"dropped\"\n attempts: WebhookAttempt[]\n}\n\n/** A delivery-level fault: what happens to the next `count` messages in a namespace. */\nexport type WebhookFault = {\n mode: \"duplicate\" | \"reorder\" | \"drop\"\n /** Messages affected; default 1. */\n count?: number\n}\n\nexport type PublishInput = {\n namespace: string\n type: string\n /** Exact body; objects are JSON-encoded. */\n body: string | Record<string, unknown> | unknown[]\n /** Default `application/json`, or form-encoded when `form` is given. */\n contentType?: string\n /** Form parameters, when the vendor posts `application/x-www-form-urlencoded`. */\n form?: Record<string, string>\n tags?: Record<string, string>\n /** Message-specific delivery headers, captured as part of durable message state. */\n headers?: Record<string, string>\n /** Message id; generated when omitted. */\n id?: string\n}\n\nexport type WebhookHubOptions = {\n signer: WebhookSigner\n /**\n * Delay before each attempt, in ms; the first entry delays the first attempt. Default:\n * immediately, then 5 s, 5 min, 30 min, 2 h.\n */\n retryDelaysMs?: readonly number[]\n /** Abort an attempt after this long. Default 15 s. */\n timeoutMs?: number\n /** Which receiver statuses count as delivered. Default 2xx. */\n delivered?: (status: number) => boolean\n /** Endpoints every namespace delivers to (from `--webhook-url`). */\n endpoints?: WebhookEndpoint[]\n fetch?: (request: Request) => Promise<Response>\n /** Called in-process for every published message, delivered or not. */\n onMessage?: (message: WebhookMessage) => void\n /** Messages kept per namespace for `GET /__admin/webhooks/events`. Default 500. */\n keep?: number\n /** Injectable wall clock for signatures and attempt records. */\n now?: () => number\n /** Injectable deterministic identifier source. Receives `\"msg_\"` or `\"dlv_\"`. */\n id?: (prefix: string) => string\n /** Injectable scheduler used by timeouts and retries. */\n schedule?: (callback: () => void, delayMs: number) => unknown\n cancel?: (handle: unknown) => void\n}\n\nexport type WebhookHub = {\n publish(input: PublishInput): WebhookMessage\n /** Replace a namespace's own endpoints (`PUT /__admin/webhook-endpoints`). */\n setEndpoints(namespace: string, endpoints: WebhookEndpoint[]): WebhookEndpoint[]\n /** The endpoints a namespace delivers to: its own, plus the global ones. */\n endpoints(namespace: string): WebhookEndpoint[]\n messages(namespace?: string): WebhookMessage[]\n deliveries(namespace?: string): WebhookDelivery[]\n replay(deliveryId: string): Promise<WebhookDelivery | undefined>\n /** Run every pending retry (and release held reordered messages) now. */\n flush(): Promise<void>\n /** Resolve once nothing is in flight. */\n idle(): Promise<void>\n fault(namespace: string, fault: WebhookFault): void\n clear(namespace?: string): void\n}\n\nconst DEFAULT_DELAYS = [0, 5_000, 300_000, 1_800_000, 7_200_000] as const\n\nconst unref = (timer: unknown) => {\n ;(timer as { unref?: () => void }).unref?.()\n}\n\nconst randomId = (prefix: string) =>\n `${prefix}${crypto.randomUUID().replace(/-/g, \"\").slice(0, 24)}`\n\nconst matchesEndpoint = (endpoint: WebhookEndpoint, message: WebhookMessage): boolean => {\n const events = endpoint.events ?? [\"*\"]\n if (!events.includes(\"*\") && !events.includes(message.type)) return false\n for (const [key, value] of Object.entries(endpoint.tags ?? {})) {\n if (message.tags[key] !== value) return false\n }\n return true\n}\n\nexport const createWebhookHub = (options: WebhookHubOptions): WebhookHub => {\n const delays = options.retryDelaysMs ?? DEFAULT_DELAYS\n const timeoutMs = options.timeoutMs ?? 15_000\n const delivered = options.delivered ?? ((status: number) => status >= 200 && status < 300)\n const send = options.fetch ?? ((request: Request) => fetch(request))\n const keep = options.keep ?? 500\n const now = options.now ?? Date.now\n const id = options.id ?? randomId\n const scheduleTimer =\n options.schedule ?? ((callback: () => void, delayMs: number) => setTimeout(callback, delayMs))\n const cancel =\n options.cancel ?? ((handle: unknown) => clearTimeout(handle as ReturnType<typeof setTimeout>))\n const global = (options.endpoints ?? []).map((e, i) => ({ ...e, id: e.id ?? `we_global_${i}` }))\n const own = new Map<string, WebhookEndpoint[]>()\n const messages: WebhookMessage[] = []\n const deliveries = new Map<string, WebhookDelivery>()\n const pending = new Map<string, unknown | undefined>()\n const payloads = new Map<string, { message: WebhookMessage; endpoint: WebhookEndpoint }>()\n const faults = new Map<string, { mode: WebhookFault[\"mode\"]; remaining: number }[]>()\n const held = new Map<string, WebhookMessage[]>()\n const inFlight = new Set<Promise<void>>()\n\n const track = (work: Promise<void>) => {\n inFlight.add(work)\n void work.finally(() => inFlight.delete(work))\n }\n\n const attempt = async (delivery: WebhookDelivery): Promise<boolean> => {\n const entry = payloads.get(delivery.id)\n if (!entry) return false\n const { message, endpoint } = entry\n const timestampSeconds = Math.floor(now() / 1000)\n const started = now()\n const record: WebhookAttempt = {\n attempt: delivery.attempts.length + 1,\n at: new Date(started).toISOString(),\n status: null,\n error: null,\n durationMs: 0,\n responseBody: null,\n }\n const controller = new AbortController()\n const timer = scheduleTimer(() => controller.abort(), timeoutMs)\n try {\n const signed = await options.signer({\n messageId: message.id,\n body: message.body,\n timestampSeconds,\n url: endpoint.url,\n secret: endpoint.secret,\n signUrl: endpoint.signUrl ?? endpoint.url,\n form: message.contentType.startsWith(\"application/x-www-form-urlencoded\")\n ? Object.fromEntries(new URLSearchParams(message.body))\n : undefined,\n type: message.type,\n tags: message.tags,\n })\n const response = await send(\n new Request(endpoint.url, {\n method: \"POST\",\n headers: {\n \"content-type\": message.contentType,\n ...endpoint.headers,\n ...message.headers,\n ...signed,\n },\n body: message.body,\n signal: controller.signal,\n }),\n )\n record.status = response.status\n record.responseBody = await response.text()\n } catch (error) {\n record.error = controller.signal.aborted\n ? `timed out after ${timeoutMs}ms`\n : error instanceof Error\n ? error.message\n : String(error)\n } finally {\n cancel(timer)\n record.durationMs = now() - started\n delivery.attempts.push(record)\n }\n return record.status !== null && delivered(record.status)\n }\n\n const schedule = (delivery: WebhookDelivery) => {\n const index = delivery.attempts.length\n if (index >= delays.length) {\n delivery.state = \"failed\"\n pending.delete(delivery.id)\n return\n }\n const run = () => {\n pending.delete(delivery.id)\n track(\n attempt(delivery).then((ok) => {\n if (ok) delivery.state = \"delivered\"\n else schedule(delivery)\n }),\n )\n }\n const delay = delays[index] ?? 0\n if (delay <= 0) {\n pending.set(delivery.id, undefined)\n run()\n return\n }\n const timer = scheduleTimer(run, delay)\n unref(timer)\n pending.set(delivery.id, timer)\n }\n\n const endpointsFor = (namespace: string) => [...(own.get(namespace) ?? []), ...global]\n\n const fanOut = (message: WebhookMessage, state: WebhookDelivery[\"state\"] = \"pending\") => {\n for (const endpoint of endpointsFor(message.namespace)) {\n if (!matchesEndpoint(endpoint, message)) continue\n const delivery: WebhookDelivery = {\n id: id(\"dlv_\"),\n messageId: message.id,\n namespace: message.namespace,\n type: message.type,\n endpointId: endpoint.id ?? \"we_unknown\",\n url: endpoint.url,\n state,\n attempts: [],\n }\n deliveries.set(delivery.id, delivery)\n payloads.set(delivery.id, { message, endpoint })\n if (state === \"pending\") schedule(delivery)\n }\n }\n\n const takeFault = (namespace: string): WebhookFault[\"mode\"] | undefined => {\n const queue = faults.get(namespace)\n const head = queue?.[0]\n if (!queue || !head) return undefined\n head.remaining--\n if (head.remaining <= 0) queue.shift()\n return head.mode\n }\n\n const releaseHeld = (namespace: string) => {\n const waiting = held.get(namespace)\n if (!waiting) return\n held.delete(namespace)\n for (const message of waiting) fanOut(message)\n }\n\n const hub: WebhookHub = {\n publish(input) {\n const contentType =\n input.contentType ?? (input.form ? \"application/x-www-form-urlencoded\" : \"application/json\")\n const body =\n typeof input.body === \"string\"\n ? input.body\n : input.form\n ? new URLSearchParams(input.form).toString()\n : JSON.stringify(input.body)\n const message: WebhookMessage = {\n id: input.id ?? id(\"msg_\"),\n namespace: input.namespace,\n type: input.type,\n body,\n contentType,\n tags: input.tags ?? {},\n headers: input.headers ?? {},\n publishedAt: new Date(now()).toISOString(),\n }\n messages.push(message)\n const ofNamespace = messages.filter((m) => m.namespace === message.namespace)\n const oldest = ofNamespace[0]\n if (ofNamespace.length > keep && oldest) messages.splice(messages.indexOf(oldest), 1)\n options.onMessage?.(message)\n const fault = takeFault(message.namespace)\n if (fault === \"drop\") {\n fanOut(message, \"dropped\")\n return message\n }\n if (fault === \"reorder\") {\n // Held until the next message goes out, so the receiver sees them swapped.\n held.set(message.namespace, [...(held.get(message.namespace) ?? []), message])\n return message\n }\n fanOut(message)\n if (fault === \"duplicate\") fanOut(message)\n releaseHeld(message.namespace)\n return message\n },\n setEndpoints(namespace, endpoints) {\n const withIds = endpoints.map((e, i) => ({ ...e, id: e.id ?? `we_${namespace}_${i}` }))\n own.set(namespace, withIds)\n return withIds\n },\n endpoints: endpointsFor,\n messages: (namespace) =>\n namespace === undefined ? [...messages] : messages.filter((m) => m.namespace === namespace),\n deliveries: (namespace) =>\n [...deliveries.values()].filter((d) => namespace === undefined || d.namespace === namespace),\n async replay(id) {\n const delivery = deliveries.get(id)\n if (!delivery) return undefined\n const ok = await attempt(delivery)\n if (ok) delivery.state = \"delivered\"\n return delivery\n },\n async flush() {\n for (const namespace of [...held.keys()]) releaseHeld(namespace)\n const waiting = [...pending.entries()]\n for (const [id, timer] of waiting) {\n if (timer === undefined) continue\n cancel(timer)\n pending.delete(id)\n const delivery = deliveries.get(id)\n if (!delivery) continue\n track(\n attempt(delivery).then((ok) => {\n if (ok) delivery.state = \"delivered\"\n else schedule(delivery)\n }),\n )\n }\n await hub.idle()\n },\n async idle() {\n while (inFlight.size > 0) await Promise.allSettled([...inFlight])\n },\n fault(namespace, fault) {\n const queue = faults.get(namespace) ?? []\n queue.push({ mode: fault.mode, remaining: Math.max(1, fault.count ?? 1) })\n faults.set(namespace, queue)\n },\n clear(namespace) {\n for (const [id, delivery] of deliveries) {\n if (namespace !== undefined && delivery.namespace !== namespace) continue\n const timer = pending.get(id)\n if (timer !== undefined) cancel(timer)\n pending.delete(id)\n deliveries.delete(id)\n payloads.delete(id)\n }\n for (let i = messages.length - 1; i >= 0; i--) {\n if (namespace === undefined || messages[i]?.namespace === namespace) messages.splice(i, 1)\n }\n if (namespace === undefined) {\n held.clear()\n faults.clear()\n own.clear()\n } else {\n held.delete(namespace)\n faults.delete(namespace)\n own.delete(namespace)\n }\n },\n }\n return hub\n}\n\nconst json = (status: number, body: unknown): Response =>\n new Response(JSON.stringify(body), { status, headers: { \"content-type\": \"application/json\" } })\n\nconst adminError = (status: number, message: string): Response =>\n json(status, { error: { type: \"mockingbird_admin\", message } })\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nconst parseEndpoint = (value: unknown): WebhookEndpoint | string => {\n if (!isRecord(value) || typeof value.url !== \"string\") return \"each endpoint needs a url\"\n try {\n new URL(value.url)\n } catch {\n return `not a URL: ${value.url}`\n }\n const endpoint: WebhookEndpoint = { url: value.url }\n if (typeof value.id === \"string\") endpoint.id = value.id\n if (typeof value.secret === \"string\") endpoint.secret = value.secret\n if (typeof value.signUrl === \"string\") endpoint.signUrl = value.signUrl\n const events = value.events ?? value.enabledEvents\n if (Array.isArray(events)) endpoint.events = events.map(String)\n if (isRecord(value.tags)) {\n endpoint.tags = Object.fromEntries(Object.entries(value.tags).map(([k, v]) => [k, String(v)]))\n }\n if (typeof value.account === \"string\")\n endpoint.tags = { ...endpoint.tags, account: value.account }\n if (isRecord(value.headers)) {\n endpoint.headers = Object.fromEntries(\n Object.entries(value.headers).map(([k, v]) => [k, String(v)]),\n )\n }\n return endpoint\n}\n\n/**\n * The standard webhook admin routes, for a runtime that owns `hub`:\n *\n * - `GET /webhooks` deliveries, `GET /webhooks/events` published messages (with bodies:\n * they are the mock's own output), `POST /webhooks/:id/replay`, `POST /webhooks/flush`\n * - `GET|PUT|DELETE /webhook-endpoints` per namespace\n * - `POST /webhooks/faults {mode: duplicate|reorder|drop, count?}`\n */\nexport const webhookAdminRoutes = (hub: WebhookHub): AdminRoutes => ({\n \"GET /webhooks\": ({ url, namespace }) =>\n json(200, {\n deliveries: hub\n .deliveries(url.searchParams.get(\"all\") === \"1\" ? undefined : namespace)\n .filter((d) => {\n const type = url.searchParams.get(\"type\")\n return type === null || d.type === type\n }),\n }),\n \"GET /webhooks/events\": ({ url, namespace }) => {\n const type = url.searchParams.get(\"type\")\n return json(200, {\n events: hub\n .messages(url.searchParams.get(\"all\") === \"1\" ? undefined : namespace)\n .filter((m) => type === null || m.type === type)\n .map((m) => ({ ...m, payload: parsePayload(m) })),\n })\n },\n \"POST /webhooks/:id/replay\": async ({ params }) => {\n const replayed = await hub.replay(params.id as string)\n return replayed ? json(200, replayed) : adminError(404, `no delivery ${params.id}`)\n },\n \"POST /webhooks/flush\": async () => {\n await hub.flush()\n return json(200, { status: \"ok\" })\n },\n \"POST /webhooks/faults\": ({ body, namespace }) => {\n if (!isRecord(body) || ![\"duplicate\", \"reorder\", \"drop\"].includes(String(body.mode))) {\n return adminError(400, \"mode must be duplicate, reorder or drop\")\n }\n const fault: WebhookFault = { mode: body.mode as WebhookFault[\"mode\"] }\n if (typeof body.count === \"number\") fault.count = body.count\n hub.fault(namespace, fault)\n return json(201, { namespace, ...fault })\n },\n \"GET /webhook-endpoints\": ({ namespace }) =>\n json(200, {\n endpoints: hub.endpoints(namespace).map(({ secret, ...rest }) => ({\n ...rest,\n secret: secret ? \"(set)\" : null,\n })),\n }),\n \"PUT /webhook-endpoints\": ({ body, namespace }) => {\n const list = Array.isArray(body) ? body : isRecord(body) ? body.endpoints : undefined\n if (!Array.isArray(list)) return adminError(400, \"expected [{url, secret?, events?}]\")\n const parsed: WebhookEndpoint[] = []\n for (const each of list) {\n const endpoint = parseEndpoint(each)\n if (typeof endpoint === \"string\") return adminError(400, endpoint)\n parsed.push(endpoint)\n }\n const set = hub.setEndpoints(namespace, parsed)\n return json(200, { endpoints: set.map((e) => ({ ...e, secret: e.secret ? \"(set)\" : null })) })\n },\n \"DELETE /webhook-endpoints\": ({ namespace }) => {\n hub.setEndpoints(namespace, [])\n return json(200, { status: \"ok\" })\n },\n})\n\nconst parsePayload = (message: WebhookMessage): unknown => {\n if (message.contentType.startsWith(\"application/json\")) {\n try {\n return JSON.parse(message.body)\n } catch {\n return message.body\n }\n }\n if (message.contentType.startsWith(\"application/x-www-form-urlencoded\")) {\n return Object.fromEntries(new URLSearchParams(message.body))\n }\n return message.body\n}\n", "import { type Checkpoint, type FetchAPI, Timeline } from \"@crvouga/mockingbird-core\"\nimport { listOperations, type OpenAPIDocument } from \"@crvouga/mockingbird-openapi\"\nimport { clearNamespace, type SqliteClient } from \"@crvouga/mockingbird-sqlite\"\nimport { type Clock, createClock } from \"./clock.js\"\nimport { type AdminRoutes, createControlPlane, NAMESPACE_HEADER } from \"./control.js\"\nimport { type CredentialRegistry, createCredentialRegistry, maskCredential } from \"./credentials.js\"\nimport {\n createFaultRegistry,\n type FaultHit,\n type FaultPreset,\n type FaultRegistry,\n type FaultRule,\n} from \"./faults.js\"\nimport { createJournal, DEFAULT_JOURNAL_SIZE, type Journal, responseNotes } from \"./journal.js\"\nimport { createMetrics, type Metrics, type RequestLog } from \"./metrics.js\"\nimport { createRng, type Rng, seedFrom } from \"./rng.js\"\nimport { bootSqlite } from \"./service.js\"\nimport { type NamespaceSnapshot, restoreNamespace, snapshotNamespace } from \"./snapshot.js\"\nimport { PACKAGE_VERSION } from \"./version.js\"\nimport { type WebhookHub, webhookAdminRoutes } from \"./webhooks.js\"\n\n/**\n * Stamped on every response the runtime returns \u2014 vendor, fault, admin and health alike \u2014\n * as `<service>@<version>; ns=<namespace>`, so a consumer can tell the mock from the vendor.\n */\nexport const MOCKINGBIRD_HEADER = \"x-mockingbird\"\n/** Selects a named copy-on-write history branch. `main` is the compatibility default. */\nexport const BRANCH_HEADER = \"x-mockingbird-branch\"\n/** Reads a historical checkpoint. With a branch header, initializes that branch from it. */\nexport const AT_HEADER = \"x-mockingbird-at\"\n/** Identifies the resulting checkpoint on successful mutations. */\nexport const CHECKPOINT_HEADER = \"x-mockingbird-checkpoint\"\n\n/** What the runtime needs from a service: a Fetch handler it can reset. */\nexport type ServiceInstance = FetchAPI & { reset(): Promise<void> }\n\n/** Everything an instance shares with the runtime that owns it. */\nexport type InstanceContext = {\n /** Storage namespace for this instance's records. */\n namespace: string\n /** The public namespace name a request selects it by. */\n publicNamespace: string\n sqlite: SqliteClient\n clock: Clock\n rng: Rng\n}\n\nexport type RuntimeOptions<T extends ServiceInstance> = {\n /** Service name, e.g. `\"junction\"`. Also the default namespace's storage key. */\n name: string\n /** Build the instance backing one namespace. Called once per namespace, on first use. */\n create: (context: InstanceContext) => T\n /** The vendor contract, used to name each request's operation in logs, metrics and faults. */\n document?: OpenAPIDocument\n /** Shared by every namespace. Defaults to a fresh `@crvouga/mockingbird-service-sqlite`. */\n sqlite?: SqliteClient\n /** Defaults to a live clock over `Date.now`. */\n clock?: Clock\n /** Seeds every random choice the runtime makes (fault rates). Default `0`. */\n seed?: number | string\n /** Extra `GET /health` fields, such as the loaded corpus version. */\n describe?: () => Record<string, unknown>\n /** Service-specific admin routes, given the runtime so they can reach any namespace. */\n admin?: (runtime: ServiceRuntime<T>) => AdminRoutes\n /** Require this value in `x-mockingbird-admin-key` on `/__admin/*`. Omit to leave admin open. */\n adminKey?: string\n /** Structured request log sink, called once per request. */\n onLog?: (entry: RequestLog) => void\n /** Requests each namespace's journal keeps (`GET /__admin/requests`). Default 1000; 0 turns it off. */\n journalSize?: number\n /** Reported in the `x-mockingbird` header. Default: the bundled package's version. */\n version?: string\n /**\n * The vendor credential a request carries (API key, token, account SID, AWS access key\n * id), for SDKs that cannot send `x-mockingbird-namespace`: a suite maps credentials to\n * namespaces with `PUT /__admin/credentials`. See `bearerToken`, `basicAuth`,\n * `sigV4AccessKeyId`.\n */\n credential?: (request: Request) => string | undefined\n /** Named faults, switched on with `POST /__admin/faults {\"preset\": \"<name>\"}`. */\n presets?: Record<string, FaultPreset>\n /** Outbound webhooks; adds the `/__admin/webhooks*` routes and clears on reset. */\n webhooks?: WebhookHub\n /** Retained time-travel checkpoints per namespace. Default 1,000. */\n maxCheckpoints?: number\n /** Injectable process IO used for observability and delays; logical service time uses `clock`. */\n io?: Partial<RuntimeIO>\n}\n\nexport type RuntimeIO = {\n wallNow(): number\n monotonicNow(): number\n sleep(ms: number): Promise<void>\n}\n\nexport type ServiceTimelineState = Readonly<{\n snapshot: NamespaceSnapshot\n clock: Readonly<ReturnType<Clock[\"state\"]>>\n rngState: number\n}>\n\nexport type ServiceCheckpoint = Checkpoint<ServiceTimelineState>\n\nexport type ServiceRuntime<T extends ServiceInstance> = FetchAPI & {\n readonly name: string\n readonly sqlite: SqliteClient\n readonly clock: Clock\n readonly faults: FaultRegistry\n readonly metrics: Metrics\n readonly journal: Journal\n readonly rng: Rng\n readonly credentials: CredentialRegistry\n /** The webhook hub, when the service has outbound webhooks. */\n readonly webhooks: WebhookHub | undefined\n /** Expand a named preset into fault rules (and webhook faults) for `namespace`. */\n applyPreset(name: string, namespace?: string, overrides?: Partial<FaultRule>): FaultRule[]\n /** The instance behind `namespace` (the default one when omitted), created on first use. */\n instance(namespace?: string): T\n /** Public names of every namespace created so far. */\n namespaces(): string[]\n /** Reset one namespace, or every namespace with `\"*\"`. */\n reset(namespace?: string): Promise<void>\n snapshot(namespace?: string): NamespaceSnapshot\n restore(snapshot: NamespaceSnapshot, namespace?: string): void\n /** Capture the current branch. Mutating HTTP calls do this automatically. */\n checkpoint(namespace?: string, branch?: string): ServiceCheckpoint\n /** Create an isolated branch, optionally from a historical checkpoint. */\n branch(name: string, options?: { namespace?: string; at?: string }): ServiceCheckpoint\n /** Restore a branch, clock, and PRNG to a checkpoint. */\n checkout(checkpoint: string, options?: { namespace?: string; branch?: string }): void\n /** Inspect the retained history for a namespace. */\n timeline(namespace?: string): Timeline<ServiceTimelineState>\n}\n\n/** The namespace used when a request names none. */\nexport const DEFAULT_NAMESPACE = \"default\"\n\nconst NAMESPACE_PATTERN = /^[A-Za-z0-9_.-]{1,64}$/\n\n/** `/ns/<namespace>/\u2026`: the namespace carrier for SDKs that only take a base URL. */\nconst PATH_PREFIX = /^\\/ns\\/([^/]+)(\\/.*)?$/\nconst BRANCH_PATTERN = /^[A-Za-z0-9_.-]{1,64}$/\nconst MUTATING_METHODS = new Set([\"POST\", \"PUT\", \"PATCH\", \"DELETE\"])\n\nconst effects = new WeakMap<Request, FaultHit[\"effect\"][]>()\n\n/**\n * Merge two sorted snapshot row arrays, retaining byte-identical old objects. Unlike the previous\n * Map/string-key implementation this is allocation-free apart from the result array and O(n).\n */\nconst reuseSorted = <T>(\n fresh: T[],\n previous: T[] | undefined,\n compare: (left: T, right: T) => number,\n equal: (left: T, right: T) => boolean,\n): T[] => {\n if (!previous || previous.length === 0) return fresh.map((row) => Object.freeze(row))\n const result = new Array<T>(fresh.length)\n let unchanged = fresh.length === previous.length\n let oldIndex = 0\n for (let index = 0; index < fresh.length; index++) {\n const row = fresh[index] as T\n while (oldIndex < previous.length && compare(previous[oldIndex] as T, row) < 0) {\n oldIndex++\n }\n const old = previous[oldIndex]\n result[index] =\n old !== undefined && compare(old, row) === 0 && equal(old, row) ? old : Object.freeze(row)\n if (result[index] !== previous[index]) unchanged = false\n }\n return unchanged ? previous : result\n}\n\n/**\n * The fault effects (`{\"effect\": \"created_but_500\"}` rules) that fired for this request, in\n * rule order. Handlers read this to switch on a named vendor misbehaviour.\n */\nexport const faultEffects = (\n request: Request,\n): { name: string; params: Record<string, unknown> }[] =>\n (effects.get(request) ?? []).filter((e): e is NonNullable<typeof e> => e !== undefined)\n\n/** Whether the named effect fired for this request; its params when it did. */\nexport const faultEffect = (request: Request, name: string): Record<string, unknown> | undefined =>\n faultEffects(request).find((e) => e.name === name)?.params\n\n/**\n * Thrown by an in-process `runtime.fetch` when a `drop` fault fires: the same thing a real\n * `fetch` does when the connection dies mid-request. A served mock destroys the socket.\n */\nexport class DroppedConnectionError extends TypeError {\n readonly code = \"MOCKINGBIRD_DROP\"\n constructor() {\n super(\"fetch failed: connection dropped by Mockingbird fault\")\n this.name = \"TypeError\"\n }\n}\n\ntype Matcher = { operationId: string; method: string; pattern: RegExp; params: number }\n\n/** Resolve a request to its operationId: static segments beat parameters, as in routing. */\nconst operationMatcher = (document: OpenAPIDocument) => {\n const matchers: Matcher[] = listOperations(document)\n .map((operation) => ({\n operationId: operation.operationId,\n method: operation.method.toUpperCase(),\n pattern: new RegExp(\n `^${operation.path\n .split(\"/\")\n .map((segment) =>\n segment.startsWith(\"{\") ? \"[^/]+\" : segment.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"),\n )\n .join(\"/\")}/?$`,\n ),\n params: (operation.path.match(/\\{/g) ?? []).length,\n }))\n .sort((a, b) => a.params - b.params)\n return (request: Request, path: string): string | undefined =>\n matchers.find((m) => m.method === request.method && m.pattern.test(path))?.operationId\n}\n\n/**\n * Wrap a service in the shared Mockingbird contract: an unauthenticated `/health`,\n * the `/__admin/*` control plane, per-request namespaces, a controllable clock,\n * fault injection, and request metrics.\n *\n * Namespaces isolate parallel workers inside one process: each gets its own\n * instance over the same SQLite database, so rows are partitioned by namespace\n * and a worker's reset or restore never touches another worker's data.\n */\nexport const createRuntime = <T extends ServiceInstance>(\n options: RuntimeOptions<T>,\n): ServiceRuntime<T> => {\n const sqlite = bootSqlite(options.sqlite)\n const clock = options.clock ?? createClock()\n const rng = createRng(options.seed ?? 0)\n const wallNow = options.io?.wallNow ?? Date.now\n const monotonicNow = options.io?.monotonicNow ?? (() => performance.now())\n const sleep =\n options.io?.sleep ?? ((ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms)))\n const faults = createFaultRegistry(createRng(options.seed ?? 0), sleep)\n const metrics = createMetrics()\n const journal = createJournal(options.journalSize ?? DEFAULT_JOURNAL_SIZE)\n const version = options.version ?? PACKAGE_VERSION\n const instances = new Map<string, T>()\n const publicNamespaces = new Set<string>()\n const branchRngs = new Map<string, Rng>()\n const timelines = new Map<string, Timeline<ServiceTimelineState>>()\n const branchStorage = new Map<string, string>()\n const captured = new Map<string, NamespaceSnapshot>()\n const credentials = createCredentialRegistry()\n const operationIdFor = options.document ? operationMatcher(options.document) : () => undefined\n\n const storageNamespace = (name: string) =>\n name === DEFAULT_NAMESPACE ? options.name : `${options.name}:${name}`\n\n const instanceFor = (key: string, publicNamespace = key, isolatedRng?: Rng): T => {\n const existing = instances.get(key)\n if (existing) return existing\n if (!NAMESPACE_PATTERN.test(key) || !NAMESPACE_PATTERN.test(publicNamespace)) {\n throw new RangeError(\n `namespace must match ${NAMESPACE_PATTERN}: ${JSON.stringify(publicNamespace)}`,\n )\n }\n const created = options.create({\n namespace: storageNamespace(key),\n publicNamespace,\n sqlite,\n clock,\n rng: isolatedRng ?? rng,\n })\n instances.set(key, created)\n publicNamespaces.add(publicNamespace)\n if (isolatedRng) branchRngs.set(key, isolatedRng)\n return created\n }\n\n const instance = (name: string = DEFAULT_NAMESPACE): T => instanceFor(name)\n\n const capture = (storage: string): ServiceTimelineState => {\n const fresh = snapshotNamespace(sqlite, storageNamespace(storage))\n const previous = captured.get(storage)\n const snapshot: NamespaceSnapshot = {\n namespace: fresh.namespace,\n records: reuseSorted(\n fresh.records,\n previous?.records,\n (left, right) =>\n left.collection < right.collection\n ? -1\n : left.collection > right.collection\n ? 1\n : left.seq - right.seq,\n (left, right) => left.id === right.id && left.value === right.value,\n ),\n sequences: reuseSorted(\n fresh.sequences,\n previous?.sequences,\n (left, right) =>\n left.name < right.name\n ? -1\n : left.name > right.name\n ? 1\n : left.kind < right.kind\n ? -1\n : left.kind > right.kind\n ? 1\n : 0,\n (left, right) => left.value === right.value,\n ),\n }\n Object.freeze(snapshot.records)\n Object.freeze(snapshot.sequences)\n Object.freeze(snapshot)\n captured.set(storage, snapshot)\n return Object.freeze({\n snapshot,\n clock: Object.freeze(clock.state()),\n rngState: (branchRngs.get(storage) ?? rng).state(),\n })\n }\n\n const timeline = (name: string = DEFAULT_NAMESPACE): Timeline<ServiceTimelineState> => {\n let found = timelines.get(name)\n if (found) return found\n instance(name)\n found = new Timeline<ServiceTimelineState>({\n now: clock.now,\n ...(options.maxCheckpoints !== undefined ? { maxCheckpoints: options.maxCheckpoints } : {}),\n })\n found.commit(capture(name))\n timelines.set(name, found)\n return found\n }\n\n const physicalBranch = (namespace: string, branch: string): string => {\n if (branch === \"main\") return namespace\n const mapKey = `${namespace}\\0${branch}`\n const existing = branchStorage.get(mapKey)\n if (existing) return existing\n // The hash keeps the internal instance key inside the 64-character namespace contract.\n const key = `branch_${seedFrom(`${options.name}\\0${namespace}\\0${branch}`).toString(36)}`\n branchStorage.set(mapKey, key)\n return key\n }\n\n const ensureBranch = (namespace: string, branch: string, at?: string): string => {\n if (!BRANCH_PATTERN.test(branch)) throw new RangeError(`branch must match ${BRANCH_PATTERN}`)\n const history = timeline(namespace)\n if (branch === \"main\") {\n if (at !== undefined) {\n const point = history.checkout(\"main\", at)\n restoreNamespace(sqlite, storageNamespace(namespace), point.value.snapshot)\n captured.set(namespace, point.value.snapshot)\n rng.setState(point.value.rngState)\n clock.set(point.value.clock.now)\n if (point.value.clock.frozen) clock.freeze()\n else clock.unfreeze()\n }\n return namespace\n }\n const storage = physicalBranch(namespace, branch)\n if (!history.hasBranch(branch)) {\n // Capture unobserved background work before branching from the current main head.\n if (at === undefined) history.commit(capture(namespace))\n const point = history.fork(branch, at === undefined ? {} : { from: at })\n const branchRng = createRng(options.seed ?? 0)\n if (point) branchRng.setState(point.value.rngState)\n instanceFor(storage, namespace, branchRng)\n if (point) restoreNamespace(sqlite, storageNamespace(storage), point.value.snapshot)\n if (point) captured.set(storage, point.value.snapshot)\n } else if (at !== undefined && history.head(branch)?.id !== at) {\n const point = history.checkout(branch, at)\n if (!instances.has(storage)) {\n const branchRng = createRng(options.seed ?? 0)\n branchRng.setState(point.value.rngState)\n instanceFor(storage, namespace, branchRng)\n }\n branchRngs.get(storage)?.setState(point.value.rngState)\n restoreNamespace(sqlite, storageNamespace(storage), point.value.snapshot)\n captured.set(storage, point.value.snapshot)\n } else {\n if (!instances.has(storage)) {\n const point = history.head(branch)\n const branchRng = createRng(options.seed ?? 0)\n if (point) branchRng.setState(point.value.rngState)\n instanceFor(storage, namespace, branchRng)\n }\n }\n return storage\n }\n\n const checkpoint = (namespace = DEFAULT_NAMESPACE, branch = \"main\"): ServiceCheckpoint => {\n const storage = ensureBranch(namespace, branch)\n return timeline(namespace).commit(capture(storage), { branch })\n }\n\n const branch = (\n name: string,\n branchOptions: { namespace?: string; at?: string } = {},\n ): ServiceCheckpoint => {\n const namespace = branchOptions.namespace ?? DEFAULT_NAMESPACE\n ensureBranch(namespace, name, branchOptions.at)\n const head = timeline(namespace).head(name)\n if (!head) throw new RangeError(`branch ${name} has no checkpoint`)\n return head\n }\n\n const checkout = (\n checkpointId: string,\n checkoutOptions: { namespace?: string; branch?: string } = {},\n ): void => {\n const namespace = checkoutOptions.namespace ?? DEFAULT_NAMESPACE\n const branchName = checkoutOptions.branch ?? \"main\"\n const history = timeline(namespace)\n const point = history.checkout(branchName, checkpointId)\n const storage = ensureBranch(namespace, branchName)\n restoreNamespace(sqlite, storageNamespace(storage), point.value.snapshot)\n captured.set(storage, point.value.snapshot)\n clock.set(point.value.clock.now)\n if (point.value.clock.frozen) clock.freeze()\n else clock.unfreeze()\n ;(branchRngs.get(storage) ?? rng).setState(point.value.rngState)\n }\n\n const reset = async (name: string = DEFAULT_NAMESPACE): Promise<void> => {\n if (name === \"*\") {\n options.webhooks?.clear()\n for (const each of instances.values()) await each.reset()\n timelines.clear()\n branchStorage.clear()\n branchRngs.clear()\n captured.clear()\n return\n }\n options.webhooks?.clear(name)\n const target = instances.get(name)\n if (target) await target.reset()\n else clearNamespace(sqlite, storageNamespace(name))\n for (const [mapping, storage] of branchStorage) {\n if (!mapping.startsWith(`${name}\\0`)) continue\n const branchInstance = instances.get(storage)\n if (branchInstance) await branchInstance.reset()\n else clearNamespace(sqlite, storageNamespace(storage))\n branchStorage.delete(mapping)\n branchRngs.delete(storage)\n captured.delete(storage)\n }\n timelines.delete(name)\n captured.delete(name)\n }\n\n const snapshot = (name: string = DEFAULT_NAMESPACE): NamespaceSnapshot => {\n return checkpoint(name, \"main\").value.snapshot\n }\n\n const restore = (from: NamespaceSnapshot, name: string = DEFAULT_NAMESPACE): void => {\n instance(name)\n restoreNamespace(sqlite, storageNamespace(name), from)\n captured.set(name, from)\n // Import legacy snapshots into the canonical history instead of creating a second rollback\n // mechanism. The compatibility method stays synchronous and keeps its original return type.\n const history = timelines.get(name)\n if (history) history.commit(capture(name), { branch: \"main\" })\n else timeline(name)\n }\n\n const runtime: ServiceRuntime<T> = {\n name: options.name,\n sqlite,\n clock,\n faults,\n metrics,\n journal,\n rng,\n credentials,\n webhooks: options.webhooks,\n applyPreset: (name, namespace = DEFAULT_NAMESPACE, overrides = {}) => {\n const preset = options.presets?.[name]\n if (!preset) throw new RangeError(`no fault preset ${JSON.stringify(name)}`)\n const added = (preset.rules ?? []).map((rule, index) =>\n faults.add({\n namespace,\n ...rule,\n ...overrides,\n preset: name,\n id: `${overrides.id ?? name}${(preset.rules ?? []).length > 1 ? `_${index + 1}` : \"\"}`,\n } as FaultRule),\n )\n if (preset.webhook && options.webhooks) {\n options.webhooks.fault(namespace, {\n ...preset.webhook,\n ...(overrides.count !== undefined ? { count: overrides.count } : {}),\n })\n }\n return added\n },\n instance,\n namespaces: () => [...publicNamespaces].sort(),\n reset,\n snapshot,\n restore,\n checkpoint,\n branch,\n checkout,\n timeline,\n fetch: async (incoming) => {\n let request = incoming\n // `/ns/<name>/\u2026` selects a namespace (and is stripped) for SDKs that cannot add headers.\n const prefixed = PATH_PREFIX.exec(new URL(request.url).pathname)\n if (prefixed) {\n const url = new URL(request.url)\n url.pathname = prefixed[2] ?? \"/\"\n const headers = new Headers(request.headers)\n if (!headers.has(NAMESPACE_HEADER)) {\n headers.set(NAMESPACE_HEADER, decodeURIComponent(prefixed[1] as string))\n }\n const hasBody = request.method !== \"GET\" && request.method !== \"HEAD\"\n request = new Request(url, {\n method: request.method,\n headers,\n ...(hasBody ? { body: await request.arrayBuffer() } : {}),\n signal: request.signal,\n })\n }\n let namespace = control.namespaceOf(request)\n if (!request.headers.has(NAMESPACE_HEADER) && options.credential) {\n const credential = options.credential(request)\n const mapped = credential !== undefined ? credentials.get(credential) : undefined\n if (mapped !== undefined) namespace = mapped\n }\n const selectedBranch = request.headers.get(BRANCH_HEADER) ?? \"main\"\n const at = request.headers.get(AT_HEADER) ?? undefined\n const stamp = (response: Response): Response => {\n // An invalid namespace is not echoed back.\n const value = NAMESPACE_PATTERN.test(namespace)\n ? `${options.name}@${version}; ns=${namespace}`\n : `${options.name}@${version}`\n try {\n response.headers.set(MOCKINGBIRD_HEADER, value)\n return response\n } catch {\n // Immutable headers (a response passed through from `fetch`): copy it.\n const copy = new Response(response.body, response)\n copy.headers.set(MOCKINGBIRD_HEADER, value)\n return copy\n }\n }\n const handled = await control.handle(request)\n if (handled) return stamp(handled)\n const started = monotonicNow()\n const url = new URL(request.url)\n const operationId = operationIdFor(request, url.pathname)\n const log = (status: number, faultId?: string, response?: Response) => {\n const noted = response ? responseNotes(response) : undefined\n const entry: RequestLog = {\n service: options.name,\n namespace,\n operationId,\n method: request.method,\n path: url.pathname,\n status,\n durationMs: Math.round((monotonicNow() - started) * 100) / 100,\n unmatched: options.document !== undefined && operationId === undefined,\n ...(faultId !== undefined ? { faultId } : {}),\n ...(noted?.ids && Object.keys(noted.ids).length > 0 ? { ids: noted.ids } : {}),\n ...(noted?.adopted ? { adopted: true } : {}),\n }\n metrics.record(entry)\n journal.record({ ...entry, at: new Date(clock.now()).toISOString() })\n options.onLog?.(entry)\n }\n if (!NAMESPACE_PATTERN.test(namespace)) {\n log(400)\n return stamp(\n new Response(\n JSON.stringify({\n error: {\n type: \"mockingbird_admin\",\n message: `${NAMESPACE_HEADER} must match ${NAMESPACE_PATTERN}`,\n },\n }),\n { status: 400, headers: { \"content-type\": \"application/json\" } },\n ),\n )\n }\n if (!BRANCH_PATTERN.test(selectedBranch)) {\n log(400)\n return stamp(adminFail(400, `${BRANCH_HEADER} must match ${BRANCH_PATTERN}`))\n }\n let storage: string\n try {\n if (\n at !== undefined &&\n selectedBranch === \"main\" &&\n !MUTATING_METHODS.has(request.method)\n ) {\n const point = timeline(namespace).get(at)\n storage = physicalBranch(namespace, `at_${at}`)\n let viewRng = branchRngs.get(storage)\n if (!viewRng) {\n viewRng = createRng(options.seed ?? 0)\n instanceFor(storage, namespace, viewRng)\n }\n viewRng.setState(point.value.rngState)\n restoreNamespace(sqlite, storageNamespace(storage), point.value.snapshot)\n captured.set(storage, point.value.snapshot)\n } else {\n storage = ensureBranch(namespace, selectedBranch, at)\n }\n } catch (error) {\n log(409)\n return stamp(adminFail(409, error instanceof Error ? error.message : String(error)))\n }\n const hits = await faults.take({\n operationId,\n method: request.method,\n path: url.pathname,\n namespace,\n })\n const final = hits.find((hit) => hit.drop || hit.response)\n if (final?.drop) {\n log(0, final.id)\n throw new DroppedConnectionError()\n }\n if (final?.response) {\n log(final.response.status, final.id)\n return stamp(final.response)\n }\n const fired = hits.filter((hit) => hit.effect !== undefined)\n if (fired.length > 0)\n effects.set(\n request,\n fired.map((hit) => hit.effect),\n )\n let response = await instanceFor(storage, namespace).fetch(request)\n if (MUTATING_METHODS.has(request.method) && response.status >= 200 && response.status < 400) {\n const point = timeline(namespace).commit(capture(storage), { branch: selectedBranch })\n response = mutableResponse(response)\n response.headers.set(CHECKPOINT_HEADER, point.id)\n }\n if (selectedBranch !== \"main\") {\n response = mutableResponse(response)\n response.headers.set(BRANCH_HEADER, selectedBranch)\n }\n if (at !== undefined) {\n response = mutableResponse(response)\n response.headers.set(AT_HEADER, at)\n }\n log(response.status, fired[0]?.id, response)\n return stamp(response)\n },\n }\n\n const control = createControlPlane({\n name: options.name,\n startedAt: wallNow(),\n wallNow,\n clock,\n faults,\n metrics,\n journal,\n defaultNamespace: DEFAULT_NAMESPACE,\n namespaces: runtime.namespaces,\n reset,\n timeTravel: {\n checkpoint: (name, branchName) => {\n const point = checkpoint(name, branchName)\n return {\n id: point.id,\n branch: point.branch,\n parent: point.parent,\n at: point.at,\n records: point.value.snapshot.records.length,\n }\n },\n branch: (branchName, branchOptions) => {\n const point = branch(branchName, branchOptions)\n return { id: point.id, branch: point.branch, parent: point.parent, at: point.at }\n },\n checkout: (checkpointId, checkoutOptions) => checkout(checkpointId, checkoutOptions),\n retain: (name, checkpointId) => {\n timeline(name).retain(checkpointId)\n },\n release: (name, checkpointId) => timeline(name).release(checkpointId),\n inspect: (name) => {\n const history = timeline(name)\n return {\n branches: history.branches(),\n checkpoints: history.checkpoints().map(({ id, branch: branchName, parent, at }) => ({\n id,\n branch: branchName,\n parent,\n at,\n })),\n }\n },\n },\n describe: options.describe ?? (() => ({})),\n ...(options.presets\n ? {\n applyPreset: (name: string, namespace: string, overrides: Partial<FaultRule>) =>\n runtime.applyPreset(name, namespace, overrides),\n }\n : {}),\n routes: {\n ...credentialRoutes(credentials),\n ...(options.presets ? presetRoutes(options.presets, runtime) : {}),\n ...(options.webhooks ? webhookAdminRoutes(options.webhooks) : {}),\n ...(options.admin?.(runtime) ?? {}),\n },\n adminKey: options.adminKey,\n })\n\n return runtime\n}\n\nconst mutableResponse = (response: Response): Response => {\n try {\n response.headers.set(\"x-mockingbird-mutable-probe\", \"1\")\n response.headers.delete(\"x-mockingbird-mutable-probe\")\n return response\n } catch {\n return new Response(response.body, response)\n }\n}\n\nconst adminJson = (status: number, body: unknown): Response =>\n new Response(JSON.stringify(body), { status, headers: { \"content-type\": \"application/json\" } })\n\nconst adminFail = (status: number, message: string): Response =>\n adminJson(status, { error: { type: \"mockingbird_admin\", message } })\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\n/**\n * `PUT /__admin/credentials` accepts `{ credentials: { \"<credential>\": \"<namespace>\" } }`,\n * `[{ credential, namespace }]`, or `{ credentials: [\"<credential>\"] }` with `?namespace=`\n * (maps each to the calling namespace). `GET` lists them masked; `DELETE` removes one\n * (`?credential=`) or all.\n */\nconst credentialRoutes = (registry: CredentialRegistry): AdminRoutes => ({\n \"GET /credentials\": () =>\n adminJson(200, {\n credentials: registry.entries().map(({ credential, namespace }) => ({\n credential: maskCredential(credential),\n namespace,\n })),\n }),\n \"PUT /credentials\": ({ body, namespace }) => {\n const pairs: [string, string][] = []\n const list = Array.isArray(body) ? body : isObject(body) ? body.credentials : undefined\n if (Array.isArray(list)) {\n for (const each of list) {\n if (typeof each === \"string\") pairs.push([each, namespace])\n else if (isObject(each) && typeof each.credential === \"string\") {\n pairs.push([\n each.credential,\n typeof each.namespace === \"string\" ? each.namespace : namespace,\n ])\n } else return adminFail(400, \"each entry is a credential string or {credential, namespace}\")\n }\n } else if (isObject(list)) {\n for (const [credential, target] of Object.entries(list)) {\n if (typeof target !== \"string\")\n return adminFail(400, `namespace for ${credential} must be a string`)\n pairs.push([credential, target])\n }\n } else if (isObject(body) && typeof body.credential === \"string\") {\n pairs.push([body.credential, typeof body.namespace === \"string\" ? body.namespace : namespace])\n } else {\n return adminFail(400, 'expected {\"credentials\": {\"<credential>\": \"<namespace>\"}}')\n }\n for (const [credential, target] of pairs) {\n if (!NAMESPACE_PATTERN.test(target))\n return adminFail(400, `bad namespace ${JSON.stringify(target)}`)\n registry.set(credential, target)\n }\n return adminJson(200, { mapped: pairs.length })\n },\n \"DELETE /credentials\": ({ url }) => {\n const credential = url.searchParams.get(\"credential\")\n if (credential === null) registry.clear()\n else registry.remove(credential)\n return adminJson(200, { status: \"ok\" })\n },\n})\n\nconst presetRoutes = <T extends ServiceInstance>(\n presets: Record<string, FaultPreset>,\n runtime: ServiceRuntime<T>,\n): AdminRoutes => ({\n \"GET /faults/presets\": () =>\n adminJson(200, {\n presets: Object.entries(presets).map(([name, preset]) => ({ name, ...preset })),\n }),\n \"POST /faults/presets/:name\": ({ params, body, namespace }) => {\n const name = params.name as string\n if (!presets[name])\n return adminFail(404, `no fault preset ${name}; GET /__admin/faults/presets`)\n const overrides = isObject(body) ? (body as Partial<FaultRule>) : {}\n return adminJson(201, { preset: name, rules: runtime.applyPreset(name, namespace, overrides) })\n },\n})\n", "// Generated by @crvouga/mockingbird-openapi-codegen from openapi.yaml. Do not edit.\n\nimport type { OpenAPIDocument } from \"@crvouga/mockingbird-openapi\"\n\nexport const document: OpenAPIDocument = JSON.parse(`{\"openapi\":\"3.1.0\",\"info\":{\"title\":\"Formbricks client + management API (Mockingbird subset, Geviti fork)\",\"description\":\"Stateful mock subset of Formbricks as our fork (geviti-formbrick) serves it: the client\\\\nenvironment state (surveys) and response creation the member app and backend use, the v1\\\\nmanagement API for responses and surveys (\\`x-api-key\\`), and the widget script the web SDK\\\\nloads. Errors use the fork's \\`{code, message, details}\\` shape\\\\n(\\`apps/web/app/lib/api/response.ts\\`).\\\\n\",\"version\":\"1\",\"x-mockingbird-upstream\":{\"note\":\"Hand-authored from the fork's route handlers (v1 client environment, v2 client responses, v1 management responses/surveys) and our consumers: M/lib/dynamic-form/dynamic-form-service/ formbricks.ts, B/erx/services/erx-forms.service.ts, B/onboarding-tasks/formbricks-intake.service.ts, tooling/formbricks-cli, and the responseFinished webhook receiver.\"}},\"servers\":[{\"url\":\"https://forms.gogeviti.com\"}],\"paths\":{\"/api/v1/client/{environmentId}/environment\":{\"parameters\":[{\"$ref\":\"#/components/parameters/EnvironmentId\"}],\"get\":{\"operationId\":\"GetEnvironmentState\",\"x-mockingbird\":{\"supported\":true,\"parity\":{\"enabled\":true,\"safe\":true}},\"responses\":{\"200\":{\"description\":\"The environment state the SDK caches (surveys, action classes, project)\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"data\"],\"properties\":{\"data\":{\"type\":\"object\",\"required\":[\"data\",\"expiresAt\"],\"properties\":{\"data\":{\"type\":\"object\",\"required\":[\"surveys\",\"actionClasses\",\"project\"],\"properties\":{\"surveys\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Survey\"}},\"actionClasses\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"project\":{\"type\":\"object\"}}},\"expiresAt\":{\"type\":\"string\",\"x-mockingbird-volatile\":{\"kind\":\"timestamp\"}}}}}}}}},\"400\":{\"$ref\":\"#/components/responses/Error\"},\"404\":{\"$ref\":\"#/components/responses/Error\"}}}},\"/api/v2/client/{environmentId}/responses\":{\"parameters\":[{\"$ref\":\"#/components/parameters/EnvironmentId\"}],\"post\":{\"operationId\":\"CreateClientResponse\",\"x-mockingbird\":{\"supported\":true,\"parity\":{\"enabled\":true,\"safe\":false}},\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"surveyId\",\"finished\",\"data\"],\"properties\":{\"surveyId\":{\"type\":\"string\",\"x-mockingbird-resource-ref\":{\"type\":\"survey\",\"missing\":\"czzzzzzzzzzzzzzzzzzzzzzzz\"}},\"finished\":{\"type\":\"boolean\"},\"data\":{\"$ref\":\"#/components/schemas/ResponseData\"},\"userId\":{\"type\":[\"string\",\"null\"],\"minLength\":1,\"maxLength\":120},\"contactId\":{\"type\":[\"string\",\"null\"]},\"displayId\":{\"type\":[\"string\",\"null\"]},\"singleUseId\":{\"type\":[\"string\",\"null\"]},\"endingId\":{\"type\":[\"string\",\"null\"]},\"language\":{\"type\":\"string\",\"maxLength\":10},\"variables\":{\"type\":\"object\"},\"ttc\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"number\"}},\"meta\":{\"type\":\"object\",\"properties\":{\"source\":{\"type\":\"string\"},\"url\":{\"type\":\"string\"},\"action\":{\"type\":\"string\"},\"gevitiUserId\":{\"type\":\"string\"},\"cognitoSub\":{\"type\":\"string\"}}}}}}}},\"responses\":{\"200\":{\"description\":\"The created response's id\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"data\"],\"properties\":{\"data\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"x-mockingbird-resource\":{\"type\":\"response\",\"identity\":true}},\"quotaFull\":{\"type\":\"boolean\"}}}}}}}},\"400\":{\"$ref\":\"#/components/responses/Error\"},\"403\":{\"$ref\":\"#/components/responses/Error\"},\"404\":{\"$ref\":\"#/components/responses/Error\"}}}},\"/api/v1/management/responses\":{\"get\":{\"operationId\":\"ListResponses\",\"security\":[{\"apiKey\":[]}],\"x-mockingbird\":{\"supported\":true,\"parity\":{\"enabled\":true,\"safe\":true}},\"parameters\":[{\"name\":\"surveyId\",\"in\":\"query\",\"schema\":{\"type\":\"string\",\"x-mockingbird-resource-ref\":{\"type\":\"survey\",\"missing\":\"czzzzzzzzzzzzzzzzzzzzzzzz\"}}},{\"name\":\"limit\",\"in\":\"query\",\"schema\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":100}},{\"name\":\"skip\",\"in\":\"query\",\"schema\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":100}}],\"responses\":{\"200\":{\"description\":\"Responses, newest first\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"data\"],\"properties\":{\"data\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Response\"}}}}}}},\"401\":{\"$ref\":\"#/components/responses/Error\"}}}},\"/api/v1/management/responses/{responseId}\":{\"parameters\":[{\"name\":\"responseId\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"x-mockingbird-resource-ref\":{\"type\":\"response\",\"missing\":\"czzzzzzzzzzzzzzzzzzzzzzzy\"}}}],\"get\":{\"operationId\":\"GetResponse\",\"security\":[{\"apiKey\":[]}],\"x-mockingbird\":{\"supported\":true,\"parity\":{\"enabled\":true,\"safe\":true}},\"responses\":{\"200\":{\"description\":\"One response\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"data\"],\"properties\":{\"data\":{\"$ref\":\"#/components/schemas/Response\"}}}}}},\"401\":{\"$ref\":\"#/components/responses/Error\"},\"404\":{\"$ref\":\"#/components/responses/Error\"}}}},\"/api/v1/management/surveys\":{\"get\":{\"operationId\":\"ListSurveys\",\"security\":[{\"apiKey\":[]}],\"x-mockingbird\":{\"supported\":true,\"parity\":{\"enabled\":true,\"safe\":true}},\"parameters\":[{\"name\":\"environmentId\",\"in\":\"query\",\"schema\":{\"type\":\"string\",\"enum\":[\"cmlhiza9j0009lj01my5c1g0q\",\"cmlhiza9c0004lj01jbuhp0nz\"]}}],\"responses\":{\"200\":{\"description\":\"Surveys\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"data\"],\"properties\":{\"data\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Survey\"}}}}}}},\"401\":{\"$ref\":\"#/components/responses/Error\"}}},\"post\":{\"operationId\":\"CreateSurvey\",\"security\":[{\"apiKey\":[]}],\"x-mockingbird\":{\"supported\":true,\"parity\":{\"enabled\":true,\"safe\":false}},\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"environmentId\",\"name\"],\"properties\":{\"environmentId\":{\"type\":\"string\",\"enum\":[\"cmlhiza9j0009lj01my5c1g0q\",\"cmlhiza9c0004lj01jbuhp0nz\"]},\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":80},\"type\":{\"type\":\"string\",\"enum\":[\"app\",\"link\"]},\"status\":{\"type\":\"string\",\"enum\":[\"draft\",\"inProgress\",\"paused\",\"completed\"]},\"questions\":{\"type\":\"array\",\"maxItems\":3,\"items\":{\"$ref\":\"#/components/schemas/Element\"}},\"blocks\":{\"type\":\"array\",\"maxItems\":3,\"items\":{\"type\":\"object\",\"required\":[\"id\",\"elements\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":30},\"name\":{\"type\":\"string\",\"maxLength\":30},\"elements\":{\"type\":\"array\",\"maxItems\":3,\"items\":{\"$ref\":\"#/components/schemas/Element\"}}}}}}}}}},\"responses\":{\"200\":{\"description\":\"The created survey\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"data\"],\"properties\":{\"data\":{\"$ref\":\"#/components/schemas/Survey\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Error\"},\"401\":{\"$ref\":\"#/components/responses/Error\"}}}},\"/api/v1/management/surveys/{surveyId}\":{\"parameters\":[{\"name\":\"surveyId\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"x-mockingbird-resource-ref\":{\"type\":\"survey\",\"missing\":\"czzzzzzzzzzzzzzzzzzzzzzzz\"}}}],\"get\":{\"operationId\":\"GetSurvey\",\"security\":[{\"apiKey\":[]}],\"x-mockingbird\":{\"supported\":true,\"parity\":{\"enabled\":true,\"safe\":true}},\"responses\":{\"200\":{\"description\":\"One survey\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"data\"],\"properties\":{\"data\":{\"$ref\":\"#/components/schemas/Survey\"}}}}}},\"401\":{\"$ref\":\"#/components/responses/Error\"},\"404\":{\"$ref\":\"#/components/responses/Error\"}}}},\"/js/formbricks.umd.cjs\":{\"get\":{\"operationId\":\"GetWidgetScript\",\"description\":\"The widget bundle the web SDK loads; served as a no-op script.\",\"security\":[],\"x-mockingbird\":{\"supported\":true,\"parity\":{\"enabled\":true,\"safe\":true}},\"responses\":{\"200\":{\"description\":\"A no-op script defining \\`window.formbricks\\`\",\"content\":{\"application/javascript\":{\"schema\":{\"type\":\"string\"}}}}}}}},\"components\":{\"securitySchemes\":{\"apiKey\":{\"type\":\"apiKey\",\"in\":\"header\",\"name\":\"x-api-key\"}},\"parameters\":{\"EnvironmentId\":{\"name\":\"environmentId\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"enum\":[\"cmlhiza9j0009lj01my5c1g0q\",\"cmlhiza9c0004lj01jbuhp0nz\"]}}},\"responses\":{\"Error\":{\"description\":\"The fork's \\`{code, message, details}\\` error\",\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"code\",\"message\",\"details\"],\"properties\":{\"code\":{\"type\":\"string\",\"enum\":[\"not_found\",\"gone\",\"bad_request\",\"internal_server_error\",\"unauthorized\",\"method_not_allowed\",\"not_authenticated\",\"forbidden\",\"too_many_requests\"]},\"message\":{\"type\":\"string\"},\"details\":{\"type\":\"object\"}}}}}}},\"schemas\":{\"ResponseData\":{\"type\":\"object\",\"maxProperties\":5,\"additionalProperties\":{\"anyOf\":[{\"type\":\"string\",\"maxLength\":60},{\"type\":\"number\"},{\"type\":\"array\",\"maxItems\":3,\"items\":{\"type\":\"string\",\"maxLength\":30}},{\"type\":\"object\",\"maxProperties\":3,\"additionalProperties\":{\"type\":\"string\",\"maxLength\":30}}]}},\"Element\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"headline\"],\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":30},\"type\":{\"type\":\"string\",\"enum\":[\"openText\",\"multipleChoiceSingle\",\"multipleChoiceMulti\",\"nps\",\"rating\",\"date\",\"cta\",\"consent\"]},\"headline\":{\"type\":\"object\",\"required\":[\"default\"],\"properties\":{\"default\":{\"type\":\"string\",\"maxLength\":80}}},\"required\":{\"type\":\"boolean\"},\"inputType\":{\"type\":\"string\",\"enum\":[\"text\",\"email\",\"url\",\"number\",\"phone\"]},\"metadata\":{\"type\":\"object\",\"properties\":{\"intakeField\":{\"type\":\"string\",\"maxLength\":40}}}}},\"Survey\":{\"type\":\"object\",\"required\":[\"id\",\"name\",\"type\",\"status\"],\"properties\":{\"id\":{\"type\":\"string\",\"x-mockingbird-resource\":{\"type\":\"survey\",\"identity\":true}},\"name\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"},\"status\":{\"type\":\"string\"},\"environmentId\":{\"type\":\"string\"},\"questions\":{\"type\":[\"array\",\"object\"]},\"blocks\":{\"type\":\"array\"},\"createdAt\":{\"type\":\"string\",\"x-mockingbird-volatile\":{\"kind\":\"timestamp\"}},\"updatedAt\":{\"type\":\"string\",\"x-mockingbird-volatile\":{\"kind\":\"timestamp\"}}}},\"Response\":{\"type\":\"object\",\"required\":[\"id\",\"createdAt\",\"updatedAt\",\"surveyId\",\"finished\",\"data\"],\"properties\":{\"id\":{\"type\":\"string\",\"x-mockingbird-resource\":{\"type\":\"response\",\"identity\":true}},\"createdAt\":{\"type\":\"string\",\"x-mockingbird-volatile\":{\"kind\":\"timestamp\"}},\"updatedAt\":{\"type\":\"string\",\"x-mockingbird-volatile\":{\"kind\":\"timestamp\"}},\"surveyId\":{\"type\":\"string\"},\"displayId\":{\"type\":[\"string\",\"null\"]},\"contact\":{\"type\":[\"object\",\"null\"],\"properties\":{\"id\":{\"type\":\"string\",\"x-mockingbird-volatile\":{\"kind\":\"id\"}},\"userId\":{\"type\":\"string\"}}},\"contactAttributes\":{\"type\":[\"object\",\"null\"]},\"finished\":{\"type\":\"boolean\"},\"endingId\":{\"type\":[\"string\",\"null\"]},\"data\":{\"description\":\"An object, or (for some deployments) the same object as a JSON string.\",\"type\":[\"object\",\"string\"]},\"variables\":{\"type\":\"object\"},\"ttc\":{\"type\":\"object\"},\"tags\":{\"type\":\"array\"},\"meta\":{\"type\":\"object\"},\"singleUseId\":{\"type\":[\"string\",\"null\"]},\"language\":{\"type\":[\"string\",\"null\"]}}}}}}`) as OpenAPIDocument\n\nexport type OperationId = \"GetEnvironmentState\" | \"CreateClientResponse\" | \"ListResponses\" | \"GetResponse\" | \"ListSurveys\" | \"CreateSurvey\" | \"GetSurvey\" | \"GetWidgetScript\"\nexport type SupportedOperationId = \"GetEnvironmentState\" | \"CreateClientResponse\" | \"ListResponses\" | \"GetResponse\" | \"ListSurveys\" | \"CreateSurvey\" | \"GetSurvey\" | \"GetWidgetScript\"\nexport const operationIds = [\"GetEnvironmentState\",\"CreateClientResponse\",\"ListResponses\",\"GetResponse\",\"ListSurveys\",\"CreateSurvey\",\"GetSurvey\",\"GetWidgetScript\"] as const\nexport const supportedOperationIds = [\"GetEnvironmentState\",\"CreateClientResponse\",\"ListResponses\",\"GetResponse\",\"ListSurveys\",\"CreateSurvey\",\"GetSurvey\",\"GetWidgetScript\"] as const\n", "{\n \"exportedAt\": \"2026-08-02T20:10:27.000Z\",\n \"sourceHost\": \"forms.gogeviti.com\",\n \"sourceEnvironmentId\": \"cmlhiza9j0009lj01my5c1g0q\",\n \"sourceNote\": \"Copied from geviti-monorepo packages/forms-fixtures/formbricks/prod-clone.json (a committed clone of Formbricks production survey definitions).\",\n \"surveys\": [\n {\n \"id\": \"cms3ird3d097zmu01831xzijs\",\n \"welcomeCard\": {\n \"enabled\": false,\n \"headline\": {\n \"default\": \"Welcome!\"\n },\n \"subheader\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Thanks for providing your feedback - let\\u2019s go!</span></p>\"\n },\n \"buttonLabel\": {\n \"default\": \"Next\"\n },\n \"timeToFinish\": false,\n \"showResponseCount\": false\n },\n \"name\": \"Post-Bloodwork Review Survey\",\n \"questions\": [],\n \"blocks\": [\n {\n \"id\": \"rnyvm70o2ks8fetqwc8v2lz5\",\n \"name\": \"Block 1\",\n \"elements\": [\n {\n \"id\": \"v4xhlnhoxkhnopcafav2ible\",\n \"type\": \"rating\",\n \"range\": 5,\n \"scale\": \"star\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Overall, how satisfied were you with your bloodwork review?</span></p>\"\n },\n \"required\": true,\n \"lowerLabel\": {\n \"default\": \"Very Dissatisfied\"\n },\n \"upperLabel\": {\n \"default\": \"Very Satisfied\"\n },\n \"isColorCodingEnabled\": false\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next\"\n }\n },\n {\n \"id\": \"yv6qpslv73dzh5yzzsbr6nbu\",\n \"name\": \"Block 2\",\n \"elements\": [\n {\n \"id\": \"e7979igcr50rnsqlcm2be8s7\",\n \"type\": \"rating\",\n \"range\": 5,\n \"scale\": \"star\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">How clear and easy to understand was your results summary?</span></p>\"\n },\n \"required\": false,\n \"lowerLabel\": {\n \"default\": \"Very Unclear\"\n },\n \"upperLabel\": {\n \"default\": \"Very Clear\"\n },\n \"isColorCodingEnabled\": false\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"qaupysgcs3xaiawjdo4zzj85\",\n \"name\": \"Block 3\",\n \"elements\": [\n {\n \"id\": \"wqfp6lzh4zgc1418162h89e5\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"bkuc9l65k2fl6ry633cpfefu\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"ekhu0rdn2z7sgpdsapag3h82\",\n \"label\": {\n \"default\": \"Somewhat\"\n }\n },\n {\n \"id\": \"g1pp6vapt3ejks0rndp9bh02\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Did your Longevity Specialist explain what your results mean for your health in a way that made sense to you?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"pb7rdpohlbxto8cd7592ii89\",\n \"name\": \"Block 4\",\n \"elements\": [\n {\n \"id\": \"ka1phjwfwk6tsuz3zw8f8y81\",\n \"type\": \"rating\",\n \"range\": 5,\n \"scale\": \"star\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">How well did the review address your specific questions or concerns?</span></p>\"\n },\n \"required\": false,\n \"lowerLabel\": {\n \"default\": \"Not good\"\n },\n \"upperLabel\": {\n \"default\": \"Very good\"\n },\n \"isColorCodingEnabled\": false\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"zwym5mimp6ek5noxzcjclwbe\",\n \"name\": \"Block 5\",\n \"elements\": [\n {\n \"id\": \"v8rmi3eb6wtfohfyj5kvmbff\",\n \"type\": \"nps\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">How likely are you to recommend Geviti's testing/review process to a friend or family member?</span></p>\"\n },\n \"required\": false,\n \"lowerLabel\": {\n \"default\": \"Not at all likely\"\n },\n \"upperLabel\": {\n \"default\": \"Extremely likely\"\n },\n \"isColorCodingEnabled\": false\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"lq29s543ryesy4f0wejxhovn\",\n \"name\": \"Block 6\",\n \"elements\": [\n {\n \"id\": \"yisaf1nf5bx4ygr7llrrdpt9\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Any additional feedback for your Longevity Specialist or the team?</span></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n }\n ],\n \"variables\": [],\n \"type\": \"app\",\n \"showLanguageSwitch\": null,\n \"languages\": [],\n \"endings\": [\n {\n \"id\": \"fg3bfo774kpcvkh4wdvdsmic\",\n \"type\": \"endScreen\",\n \"headline\": {\n \"default\": \"Thank you!\"\n },\n \"subheader\": {\n \"default\": \"We appreciate your feedback.\"\n },\n \"buttonLink\": \"https://formbricks.com\",\n \"buttonLabel\": {\n \"default\": \"Create your own Survey\"\n }\n }\n ],\n \"autoClose\": null,\n \"styling\": null,\n \"status\": \"inProgress\",\n \"recaptcha\": {\n \"enabled\": false,\n \"threshold\": 0.1\n },\n \"segment\": {\n \"id\": \"cms3ird410982mu01h2p48sfy\",\n \"createdAt\": \"2026-07-27T17:47:03.842Z\",\n \"updatedAt\": \"2026-07-27T17:47:03.842Z\",\n \"title\": \"cms3ird3d097zmu01831xzijs\",\n \"description\": null,\n \"isPrivate\": true,\n \"filters\": [],\n \"environmentId\": \"cmlhiza9j0009lj01my5c1g0q\",\n \"surveys\": [\n \"cms3ird3d097zmu01831xzijs\"\n ]\n },\n \"recontactDays\": null,\n \"displayLimit\": 2,\n \"displayOption\": \"displaySome\",\n \"hiddenFields\": {\n \"enabled\": true,\n \"fieldIds\": []\n },\n \"isBackButtonHidden\": false,\n \"triggers\": [\n {\n \"actionClass\": {\n \"name\": \"Geviti EMR Form (never fires)\"\n }\n }\n ],\n \"displayPercentage\": null,\n \"delay\": 0,\n \"projectOverwrites\": null\n },\n {\n \"id\": \"cmq8drljn00f6pl01j9rqzn1o\",\n \"welcomeCard\": {\n \"enabled\": false,\n \"headline\": {\n \"default\": \"Welcome!\"\n },\n \"subheader\": {\n \"default\": \"Thanks for providing your feedback - let\\u2019s go!\"\n },\n \"buttonLabel\": {\n \"default\": \"Next\"\n },\n \"timeToFinish\": false,\n \"showResponseCount\": false\n },\n \"name\": \"Redeemer Bible Church Survey\",\n \"questions\": [],\n \"blocks\": [\n {\n \"id\": \"ogj3yfploisp6z3775qxp0fn\",\n \"name\": \"Block 1\",\n \"elements\": [\n {\n \"id\": \"fuzsy594vz5nz99esuagswzl\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Before Geviti, how would you describe how you felt about your overall health and energy? (1 = Running on empty most days, 5 = Getting by, 10 = Felt great)</span></p>\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"w8zkqych3mwhwatqulb9uhn3\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">What were you hoping to get out of the program?</span></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next\"\n }\n },\n {\n \"id\": \"ybc3e1giwh9sxbvzvyqxwevp\",\n \"name\": \"Block 2\",\n \"elements\": [\n {\n \"id\": \"plx60qlrxuplwc1wk9otu3sw\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">How do you feel now compared to when you started? (1 = Poor, 5 = Okay, 10 = Excellent)</span></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"lg79dokspjib53gbnb0s6igx\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Have you noticed any changes in your energy, sleep, focus, mood, or physical performance? Tell us about them. </span></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"ehuulhy6i6o59kpke6vh70j7\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">On a scale of 1-10, how would you rate the way you feel today versus before starting Geviti? (1 = I feel worse than before, 5 = About the same, 10 = I feel dramatically better)</span></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"m7ljp8g1jqoxotavl4566r9n\",\n \"name\": \"Block 3\",\n \"elements\": [\n {\n \"id\": \"mjzhb3zb7020bsnfpzjhdwef\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">How was your experience working with your Longevity Specialist?</span></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"dhkk45eie369l9nv47yu3d85\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">How easy or difficult was it to fit Geviti into your daily routine?</span></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"yx85jeteaskysprp82m2pkzn\",\n \"name\": \"Block 4\",\n \"elements\": [\n {\n \"id\": \"ysseqgpzd5g5345108nnh939\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">How likely are you to recommend Geviti to a coworker or friend? (0 = Not at all likely, 10 = Extremely likely)</span></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"lnm8nrn3qie2oyjkm09g01ty\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">What's one thing we could do to make the experience better?</span></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"xsqbkesufya8p3v37btjvaga\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">If you had to describe your Geviti experience to a coworker in a sentence or two, what would you say?</span></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n }\n ],\n \"variables\": [],\n \"type\": \"app\",\n \"showLanguageSwitch\": null,\n \"languages\": [],\n \"endings\": [\n {\n \"id\": \"l2cev1us6pyw36co2wwwq41r\",\n \"type\": \"endScreen\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Thank you!</strong></b></p>\"\n },\n \"subheader\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">We appreciate your feedback.</span></p>\"\n }\n }\n ],\n \"autoClose\": null,\n \"styling\": null,\n \"status\": \"inProgress\",\n \"recaptcha\": {\n \"enabled\": false,\n \"threshold\": 0.1\n },\n \"segment\": {\n \"id\": \"cmq8drlk700f9pl01w0hms4qe\",\n \"createdAt\": \"2026-06-10T18:06:42.919Z\",\n \"updatedAt\": \"2026-06-10T18:06:42.919Z\",\n \"title\": \"cmq8drljn00f6pl01j9rqzn1o\",\n \"description\": null,\n \"isPrivate\": true,\n \"filters\": [],\n \"environmentId\": \"cmlhiza9j0009lj01my5c1g0q\",\n \"surveys\": [\n \"cmq8drljn00f6pl01j9rqzn1o\"\n ]\n },\n \"recontactDays\": null,\n \"displayLimit\": null,\n \"displayOption\": \"displayOnce\",\n \"hiddenFields\": {\n \"enabled\": true,\n \"fieldIds\": []\n },\n \"isBackButtonHidden\": false,\n \"triggers\": [\n {\n \"actionClass\": {\n \"name\": \"Geviti EMR Form (never fires)\"\n }\n }\n ],\n \"displayPercentage\": null,\n \"delay\": 0,\n \"projectOverwrites\": null\n },\n {\n \"id\": \"cmpx0qyv8005apb015lmthk2f\",\n \"welcomeCard\": {\n \"enabled\": false,\n \"headline\": {\n \"default\": \"Welcome!\"\n },\n \"subheader\": {\n \"default\": \"Thanks for providing your feedback - let\\u2019s go!\"\n },\n \"buttonLabel\": {\n \"default\": \"Next\"\n },\n \"timeToFinish\": false,\n \"showResponseCount\": false\n },\n \"name\": \"Net Promoter Score (NPS)\",\n \"questions\": [],\n \"blocks\": [\n {\n \"id\": \"y63cgybtlq1rkoilgiz4h6j5\",\n \"name\": \"Block 1\",\n \"elements\": [\n {\n \"id\": \"gm449dulzjecb9hkih1m74b1\",\n \"type\": \"nps\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">How likely are you to recommend Geviti-member-app to a friend or colleague?</strong></b></p>\"\n },\n \"required\": false,\n \"lowerLabel\": {\n \"default\": \"Not likely\"\n },\n \"upperLabel\": {\n \"default\": \"Very likely\"\n },\n \"isColorCodingEnabled\": true\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"rpfxd0lwutolce6ble21dlg6\",\n \"name\": \"Block 2\",\n \"elements\": [\n {\n \"id\": \"omhlv32vq3vnuregvuqhblug\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Please explain the reason behind your rating.</strong></b></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Finish\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"c3mbo6hcezxumvejqp68o1ry\",\n \"name\": \"Block 3\",\n \"elements\": [\n {\n \"id\": \"tpdlcgzinfdr21ys7dyfnl0m\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"mc8a64by85zohxm9gpkghufh\",\n \"label\": {\n \"default\": \"Bloodwork Analysis\"\n }\n },\n {\n \"id\": \"c2nmugfwszh6x6um1r8e6vxg\",\n \"label\": {\n \"default\": \"Custom Supplement Packs\"\n }\n },\n {\n \"id\": \"bkact1bjjjdi6e4apzqxvgyv\",\n \"label\": {\n \"default\": \"Care Team Insights and Support\"\n }\n },\n {\n \"id\": \"v94rqyj7fvqqjrhplin558co\",\n \"label\": {\n \"default\": \"At-Home Convenience\"\n }\n },\n {\n \"id\": \"hwcqi9qlig9q6pt4l65gqoee\",\n \"label\": {\n \"default\": \"Application and Tech\"\n }\n },\n {\n \"id\": \"izvjuvtyxe8b5gt8q1yf7ihb\",\n \"label\": {\n \"default\": \"Peptide and Compound Pharmacy Access \"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">What has been the most valuable part of your Geviti experience so far?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n }\n ],\n \"variables\": [],\n \"type\": \"app\",\n \"showLanguageSwitch\": null,\n \"languages\": [],\n \"endings\": [\n {\n \"id\": \"oa34l1t4bgi8170oyv3wxxnr\",\n \"type\": \"endScreen\",\n \"headline\": {\n \"default\": \"Thank you!\"\n },\n \"subheader\": {\n \"default\": \"We appreciate your feedback.\"\n },\n \"buttonLink\": \"https://formbricks.com\",\n \"buttonLabel\": {\n \"default\": \"Create your own Survey\"\n }\n }\n ],\n \"autoClose\": null,\n \"styling\": null,\n \"status\": \"inProgress\",\n \"recaptcha\": {\n \"enabled\": false,\n \"threshold\": 0.1\n },\n \"segment\": {\n \"id\": \"cmpx0qyvt005dpb01jptj5t1n\",\n \"createdAt\": \"2026-06-02T19:16:50.586Z\",\n \"updatedAt\": \"2026-06-02T19:16:50.586Z\",\n \"title\": \"cmpx0qyv8005apb015lmthk2f\",\n \"description\": null,\n \"isPrivate\": true,\n \"filters\": [],\n \"environmentId\": \"cmlhiza9j0009lj01my5c1g0q\",\n \"surveys\": [\n \"cmpx0qyv8005apb015lmthk2f\"\n ]\n },\n \"recontactDays\": null,\n \"displayLimit\": null,\n \"displayOption\": \"displayOnce\",\n \"hiddenFields\": {\n \"enabled\": true,\n \"fieldIds\": []\n },\n \"isBackButtonHidden\": false,\n \"triggers\": [\n {\n \"actionClass\": {\n \"name\": \"Geviti EMR Form (never fires)\"\n }\n }\n ],\n \"displayPercentage\": null,\n \"delay\": 0,\n \"projectOverwrites\": null\n },\n {\n \"id\": \"cmprjier7001jo001u8laigcz\",\n \"welcomeCard\": {\n \"enabled\": false,\n \"headline\": {\n \"default\": \"Welcome!\"\n },\n \"subheader\": {\n \"default\": \"Thanks for providing your feedback - let\\u2019s go!\"\n },\n \"buttonLabel\": {\n \"default\": \"Next\"\n },\n \"timeToFinish\": false,\n \"showResponseCount\": false\n },\n \"name\": \"Cancellation Survey\",\n \"questions\": [],\n \"blocks\": [\n {\n \"id\": \"cf63css6p2ybk9ttexlxrl8q\",\n \"name\": \"Block 1\",\n \"logic\": [\n {\n \"id\": \"z68zifwjjw5qty6ovj1yoy2r\",\n \"actions\": [\n {\n \"id\": \"pu2d1ax62iabaz26juiit8e1\",\n \"target\": \"hqfc21brbefqctq24l9g53v6\",\n \"objective\": \"jumpToBlock\"\n }\n ],\n \"conditions\": {\n \"id\": \"rcgj8uiyvm9vvm3vcwcv95oq\",\n \"connector\": \"and\",\n \"conditions\": [\n {\n \"id\": \"n1yw52g62dled4zk61gr2qi5\",\n \"operator\": \"equals\",\n \"leftOperand\": {\n \"type\": \"element\",\n \"value\": \"zfrqkd83e7fs2enbh4aytbo5\"\n },\n \"rightOperand\": {\n \"type\": \"static\",\n \"value\": \"hvlixsi7y7e2eswgj3u6zdzs\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"wixy4oxia9cg9gm1gee0vl92\",\n \"actions\": [\n {\n \"id\": \"gkm3u136ut5n09yvqjhxityq\",\n \"target\": \"hqfc21brbefqctq24l9g53v6\",\n \"objective\": \"jumpToBlock\"\n }\n ],\n \"conditions\": {\n \"id\": \"o0e49sugh2p05gir110nuy2b\",\n \"connector\": \"and\",\n \"conditions\": [\n {\n \"id\": \"onwdlkaumgjit0xinhejzx2f\",\n \"operator\": \"equals\",\n \"leftOperand\": {\n \"type\": \"element\",\n \"value\": \"zfrqkd83e7fs2enbh4aytbo5\"\n },\n \"rightOperand\": {\n \"type\": \"static\",\n \"value\": \"tm33ppsk3is0ep68o58ck0wr\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"fh1mi0qsuzeh8iz2nke4g2x4\",\n \"actions\": [\n {\n \"id\": \"xi9sn641fsi55bpazxrmgjp6\",\n \"target\": \"hqfc21brbefqctq24l9g53v6\",\n \"objective\": \"jumpToBlock\"\n }\n ],\n \"conditions\": {\n \"id\": \"y5swlbo0l1o7e9xaie40prcc\",\n \"connector\": \"and\",\n \"conditions\": [\n {\n \"id\": \"qq16y7ipyrc55ju1yrkc2336\",\n \"operator\": \"equals\",\n \"leftOperand\": {\n \"type\": \"element\",\n \"value\": \"zfrqkd83e7fs2enbh4aytbo5\"\n },\n \"rightOperand\": {\n \"type\": \"static\",\n \"value\": \"fo8l0c3hqsdnyt91ks7dwbzn\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"zkdwzomlnkbi9xbhr486tdjz\",\n \"actions\": [\n {\n \"id\": \"srb1aphaiieg65ohgdmnd31k\",\n \"target\": \"hqfc21brbefqctq24l9g53v6\",\n \"objective\": \"jumpToBlock\"\n }\n ],\n \"conditions\": {\n \"id\": \"ofahx7ajnvchtg20t4jd94lu\",\n \"connector\": \"and\",\n \"conditions\": [\n {\n \"id\": \"wmll1qfn0nzzqefjz3df37vu\",\n \"operator\": \"equals\",\n \"leftOperand\": {\n \"type\": \"element\",\n \"value\": \"zfrqkd83e7fs2enbh4aytbo5\"\n },\n \"rightOperand\": {\n \"type\": \"static\",\n \"value\": \"h8cstu5t5kjys1zsyrlhxj7p\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"b0xh2z9wk8eiwcvy27okyujw\",\n \"actions\": [\n {\n \"id\": \"ofdrfcyrwpyh8cdnp2ch0bwt\",\n \"target\": \"hqfc21brbefqctq24l9g53v6\",\n \"objective\": \"jumpToBlock\"\n }\n ],\n \"conditions\": {\n \"id\": \"vuknq3rlx6waz0bvfdplcgx7\",\n \"connector\": \"and\",\n \"conditions\": [\n {\n \"id\": \"eycz53t2438mdbyvjriago1n\",\n \"operator\": \"equals\",\n \"leftOperand\": {\n \"type\": \"element\",\n \"value\": \"zfrqkd83e7fs2enbh4aytbo5\"\n },\n \"rightOperand\": {\n \"type\": \"static\",\n \"value\": \"hb27nawlb610sl7csu0me8vt\"\n }\n }\n ]\n }\n }\n ],\n \"elements\": [\n {\n \"id\": \"zfrqkd83e7fs2enbh4aytbo5\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"hvlixsi7y7e2eswgj3u6zdzs\",\n \"label\": {\n \"default\": \"I achieved my health goals\"\n }\n },\n {\n \"id\": \"tm33ppsk3is0ep68o58ck0wr\",\n \"label\": {\n \"default\": \"Too expensive for what I received\"\n }\n },\n {\n \"id\": \"fo8l0c3hqsdnyt91ks7dwbzn\",\n \"label\": {\n \"default\": \"My financial situation changed\"\n }\n },\n {\n \"id\": \"h8cstu5t5kjys1zsyrlhxj7p\",\n \"label\": {\n \"default\": \"I didnt see enough improvement in my health\"\n }\n },\n {\n \"id\": \"hb27nawlb610sl7csu0me8vt\",\n \"label\": {\n \"default\": \"I'm switching to another service\"\n }\n },\n {\n \"id\": \"eg4axo3nxunyfrinzit5mxyo\",\n \"label\": {\n \"default\": \"I want more access to my providers\"\n }\n },\n {\n \"id\": \"efd4j7cdjjjndoesc20lu40s\",\n \"label\": {\n \"default\": \"The app or process was too difficult\"\n }\n },\n {\n \"id\": \"aghqm0j778d90o6w1ta7jlal\",\n \"label\": {\n \"default\": \"My needs changes or I'm taking a break\"\n }\n },\n {\n \"id\": \"other\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">You've set your membership to end, and we'd love to understand why. What worked? What didn't? Your honest feedback is greatly appreciated.</span></p>\"\n },\n \"required\": true,\n \"subheader\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">What is the primary reason you decided to cancel with Geviti?</span></p>\"\n },\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"hqfc21brbefqctq24l9g53v6\",\n \"name\": \"Block 2\",\n \"logic\": [\n {\n \"id\": \"xm6l0v91by3hm7pg5kdme37x\",\n \"actions\": [\n {\n \"id\": \"ft753aq1gjwm2pejp0uta6v5\",\n \"target\": \"dy5iusunlzt3br80ck57oibp\",\n \"objective\": \"jumpToBlock\"\n }\n ],\n \"conditions\": {\n \"id\": \"mll7y2ymd81t2hp3qb56lbla\",\n \"connector\": \"and\",\n \"conditions\": [\n {\n \"id\": \"c9hmdr21q2dkqilom487unbv\",\n \"operator\": \"isSubmitted\",\n \"leftOperand\": {\n \"type\": \"element\",\n \"value\": \"apfy38gxcokr5hnivvw655y5\"\n }\n }\n ]\n }\n }\n ],\n \"elements\": [\n {\n \"id\": \"apfy38gxcokr5hnivvw655y5\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Any other feedback or comments to share with our team?</strong></b></p>\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"dy5iusunlzt3br80ck57oibp\",\n \"name\": \"Block 3\",\n \"logic\": [\n {\n \"id\": \"ipkkcd435ph5r8p3w6qctfdu\",\n \"actions\": [\n {\n \"id\": \"drx2mm9h6epuo89b5rclss4i\",\n \"target\": \"fxcgfwarcx013ntypesb9l77\",\n \"objective\": \"jumpToBlock\"\n }\n ],\n \"conditions\": {\n \"id\": \"a45xn30oovzf05wqq2ehlnfq\",\n \"connector\": \"and\",\n \"conditions\": [\n {\n \"id\": \"afqg2cxx5ri16cixf6vtwtvq\",\n \"operator\": \"equals\",\n \"leftOperand\": {\n \"type\": \"element\",\n \"value\": \"cp48cjnyqupzm3i5jn0rrg00\"\n },\n \"rightOperand\": {\n \"type\": \"static\",\n \"value\": \"nhmqk3l7yy8ftl6spvkmtlij\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"krn5w3qvocydlibof2boxtd2\",\n \"actions\": [\n {\n \"id\": \"x50osbl6da55mnufquqyo7ib\",\n \"target\": \"dgdbkdwhgamyhulaeu2h6xkk\",\n \"objective\": \"jumpToBlock\"\n }\n ],\n \"conditions\": {\n \"id\": \"iskirzqmspnx2rdt5z24sgx4\",\n \"connector\": \"and\",\n \"conditions\": [\n {\n \"id\": \"ce3dthb3jo7fqsqglth72lfg\",\n \"operator\": \"equals\",\n \"leftOperand\": {\n \"type\": \"element\",\n \"value\": \"cp48cjnyqupzm3i5jn0rrg00\"\n },\n \"rightOperand\": {\n \"type\": \"static\",\n \"value\": \"gpqh2znnvi8hx5h28c0hbrfl\"\n }\n }\n ]\n }\n }\n ],\n \"elements\": [\n {\n \"id\": \"cp48cjnyqupzm3i5jn0rrg00\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"nhmqk3l7yy8ftl6spvkmtlij\",\n \"label\": {\n \"default\": \"Yes, please! I'd love to give it another try!\"\n }\n },\n {\n \"id\": \"gpqh2znnvi8hx5h28c0hbrfl\",\n \"label\": {\n \"default\": \"No, thank you. I'm not interested in continuing with Geviti.\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Interested in continuing if we can make it right?</strong></b></p>\"\n },\n \"required\": false,\n \"subheader\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">We would love to have you continue your Geviti Journey with us. Would you be interested in a discount on upcoming membership fees?</span></p>\"\n },\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n }\n ],\n \"variables\": [],\n \"type\": \"app\",\n \"showLanguageSwitch\": null,\n \"languages\": [],\n \"endings\": [\n {\n \"id\": \"fxcgfwarcx013ntypesb9l77\",\n \"type\": \"endScreen\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Thank you for your feedback!</strong></b></p>\"\n },\n \"subheader\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Our team will be in touch regarding discount options for you to continue your membership!</span><br><br><span style=\\\"\\\">You'll continue to have full access to all member benefits through the end of your billing period.</span></p>\"\n },\n \"buttonLink\": \"https://formbricks.com\",\n \"buttonLabel\": {\n \"default\": \"Create your own Survey\"\n }\n },\n {\n \"id\": \"dgdbkdwhgamyhulaeu2h6xkk\",\n \"type\": \"endScreen\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Thank you for your feedback!</strong></b><br><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">We are sorry to see you go.</strong></b></p>\"\n },\n \"subheader\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Please reach out if there is anything we can do to improve your experience. You'll continue to have full access to all member benefits through the end of your billing period.</span></p>\"\n },\n \"buttonLink\": \"https://formbricks.com\",\n \"buttonLabel\": {\n \"default\": \"Create your own Survey\"\n }\n }\n ],\n \"autoClose\": null,\n \"styling\": null,\n \"status\": \"inProgress\",\n \"recaptcha\": {\n \"enabled\": false,\n \"threshold\": 0.1\n },\n \"segment\": {\n \"id\": \"cmprjiert001ko0014d09wqib\",\n \"createdAt\": \"2026-05-29T23:15:26.921Z\",\n \"updatedAt\": \"2026-05-29T23:15:26.921Z\",\n \"title\": \"cmprjier7001jo001u8laigcz\",\n \"description\": null,\n \"isPrivate\": true,\n \"filters\": [],\n \"environmentId\": \"cmlhiza9j0009lj01my5c1g0q\",\n \"surveys\": [\n \"cmprjier7001jo001u8laigcz\"\n ]\n },\n \"recontactDays\": null,\n \"displayLimit\": null,\n \"displayOption\": \"displayOnce\",\n \"hiddenFields\": {\n \"enabled\": true,\n \"fieldIds\": []\n },\n \"isBackButtonHidden\": false,\n \"triggers\": [\n {\n \"actionClass\": {\n \"name\": \"Geviti EMR Form (never fires)\"\n }\n }\n ],\n \"displayPercentage\": null,\n \"delay\": 0,\n \"projectOverwrites\": null\n },\n {\n \"id\": \"cmorpct3a00qumt01f9rnpnpg\",\n \"welcomeCard\": {\n \"enabled\": false,\n \"headline\": {\n \"default\": \"Welcome!\"\n },\n \"subheader\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Thanks for providing your feedback - let\\u2019s go!</span></p>\"\n },\n \"buttonLabel\": {\n \"default\": \"Next\"\n },\n \"timeToFinish\": false,\n \"showResponseCount\": false\n },\n \"name\": \"Lyme-and-co-infection-intake\",\n \"questions\": [],\n \"blocks\": [\n {\n \"id\": \"dtyb85k7ri1ffvcoywv5e53z\",\n \"name\": \"Block 1\",\n \"elements\": [\n {\n \"id\": \"ewe4xmovc2flcr4cqvvr54e2\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"fij0f7bqapev6oxmbkd35l2v\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"as966i14jdy01lk3sggknvvr\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Have you had a known tick bite within the past 6 months?</strong></b></p>\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next\"\n }\n },\n {\n \"id\": \"z6eyk68p1p7r4pn8ghpl9abf\",\n \"name\": \"Block 2\",\n \"elements\": [\n {\n \"id\": \"e9tbhztx14kann79j7txnvtt\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"gmbwylm7vcf5s6971ccirg4q\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"vpb7y9rs4lh5a11edrck91ip\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you live in, or have you recently visited, a wooded, grassy, or rural area?</span></p>\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"il1db0blc8mcir9eh5u2923m\",\n \"name\": \"Block 3\",\n \"elements\": [\n {\n \"id\": \"qdgcwh40o45gvs4j6i3orz78\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"yvuv2ckygh0fkv6wr0vedqnz\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"gl5b7p8vcppnbn2u8ooiqfmo\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Have you had contact with cats, strays, or been scratched/bitten by a cat?</span></p>\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"jdsrtobjxtvoj4z030smpr5h\",\n \"name\": \"Block 4\",\n \"elements\": [\n {\n \"id\": \"yiq8g5ajt1ijmj8vwodjsk7p\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"jhvguq3hcjla28fzjr85xtki\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"fwjxedws6xzfik3leizwus5z\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you experience joint pain, stiffness, or swelling (migratory or persistent)?</span></p>\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"f4nsak8auq96jlhtkck6qvvs\",\n \"name\": \"Block 5\",\n \"elements\": [\n {\n \"id\": \"rm2z9fonqkjtl1lee5hftrhu\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"fguevy0bn2as8wqi5u0oyo85\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"hai3mposcsnumo1twa4qhn33\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you have a bull's-eye rash (erythema migrans) or unexplained skin rash?</span></p>\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"bpe07nstpv8va4easa8lyfjm\",\n \"name\": \"Block 6\",\n \"elements\": [\n {\n \"id\": \"r71klfw1nrzfptvhhyx1i4tt\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"ddk5uok6xoldmp15mngtkptj\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"qyvw8o9j0ep934sp3lz3sdcn\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you experience neurological symptoms: brain fog, memory issues, or numbness?</span></p>\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"e86x41km1zk8x8rixzl3d433\",\n \"name\": \"Block 7\",\n \"elements\": [\n {\n \"id\": \"rt35vsloy4kxtgi7trpp48di\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"u88d376idgogti1bivbm38ao\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"vb7wnr0l58p5s467my1s31rp\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you have episodes of high fever, chills, or drenching night sweats?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"etz2ff9vgcjqkw1vd9g3f9wt\",\n \"name\": \"Block 8\",\n \"elements\": [\n {\n \"id\": \"tv9z66ljom58sk6f826dxrpr\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"biyvsymwzqtb6nf1dtvbx2ff\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"l3b87ca8fbicppl0y3zv8g4q\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you experience air hunger, shortness of breath, or unexplained sighing?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"abskgfbxjy3j5e4o3r878dqx\",\n \"name\": \"Block 9\",\n \"elements\": [\n {\n \"id\": \"bxw67jhe95u3hqf7ke6521ae\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"qbdsywn9wugekftwkou69wcv\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"d8g1n881hp3zfao4zpk5nzbz\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Have you been diagnosed with or suspected of having hemolytic anemia (low RBC/Hgb)?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"v0cg475q18uoehmrth9me68n\",\n \"name\": \"Block 10\",\n \"elements\": [\n {\n \"id\": \"vn6qpysc5w1g617ar9li34po\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"h65vz27k1l481crb75ow8jgm\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"fpsqqbiyhz9zwd8otllu2bol\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you have a history of splenomegaly or your spleen has been removed?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"h2gfjljpfcbl50jge73u3w0m\",\n \"name\": \"Block 11\",\n \"elements\": [\n {\n \"id\": \"sq502ijn9o9qy21q4r2wcwz2\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"yu2lkklu7oxug3bx0ru9g32x\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"fcfj7v7mc1ovged1ioarsrxt\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you have stretch-mark-like rashes (striae) on abdomen, thighs, or back?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"xzto2kzgnp7foyuw4mhyp6c3\",\n \"name\": \"Block 12\",\n \"elements\": [\n {\n \"id\": \"i6uwl3tfvgexfn440qg7a530\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"oohr1a6iprzup5ti1kwy38e0\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"vb7q14zt1x6kino56kkhpghg\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you experience burning, stabbing, or electric-shock nerve pain?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"xsvootygtgki08aardykn2l2\",\n \"name\": \"Block 13\",\n \"elements\": [\n {\n \"id\": \"u9qu2hl6mro6ncyh00vc47a7\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"bajeh8jdyii5gn3xesshg015\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"rhqi2cib10rhutcg0rqm7y25\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you have swollen lymph nodes (especially in neck, axilla, or groin)?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"f795zo7y9527fpwmha2yb6yf\",\n \"name\": \"Block 14\",\n \"elements\": [\n {\n \"id\": \"sfahjptg635aaft6ieb4fzzx\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"w3uvukvm0dt1nuwv9c5gif1a\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"niqj1uuj9vxr1txqakcyhlda\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you have psychiatric symptoms: anxiety, rage episodes, or OCD-like behavior?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"ulwcg38gjlwgg4i736ac1qet\",\n \"name\": \"Block 15\",\n \"elements\": [\n {\n \"id\": \"nqjk9yfv62691acj7urgw50a\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"k5z4y4k6ibquiqqacz2carkd\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"dsovgxps6igklju2bxxhrzu9\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Have you had a prior positive or equivocal Lyme (Borrelia) test result?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n },\n {\n \"id\": \"l0kjthyvc6cd4smg4vy886n1\",\n \"name\": \"Block 16\",\n \"elements\": [\n {\n \"id\": \"qozvdwig9ubm8c33kjjj5z20\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Clinical notes / additional context</span></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"\"\n },\n \"backButtonLabel\": {\n \"default\": \"\"\n }\n }\n ],\n \"variables\": [],\n \"type\": \"app\",\n \"showLanguageSwitch\": null,\n \"languages\": [],\n \"endings\": [\n {\n \"id\": \"nkrh7m6en5w2f75e809g32jo\",\n \"type\": \"endScreen\",\n \"headline\": {\n \"default\": \"Thank you!\"\n },\n \"subheader\": {\n \"default\": \"We appreciate your feedback.\"\n },\n \"buttonLink\": \"https://formbricks.com\",\n \"buttonLabel\": {\n \"default\": \"Create your own Survey\"\n }\n }\n ],\n \"autoClose\": null,\n \"styling\": null,\n \"status\": \"inProgress\",\n \"recaptcha\": {\n \"enabled\": false,\n \"threshold\": 0.1\n },\n \"segment\": {\n \"id\": \"cmorpct3q00qvmt014le09288\",\n \"createdAt\": \"2026-05-04T21:19:20.918Z\",\n \"updatedAt\": \"2026-05-04T21:19:20.918Z\",\n \"title\": \"cmorpct3a00qumt01f9rnpnpg\",\n \"description\": null,\n \"isPrivate\": true,\n \"filters\": [],\n \"environmentId\": \"cmlhiza9j0009lj01my5c1g0q\",\n \"surveys\": [\n \"cmorpct3a00qumt01f9rnpnpg\"\n ]\n },\n \"recontactDays\": null,\n \"displayLimit\": null,\n \"displayOption\": \"displayOnce\",\n \"hiddenFields\": {\n \"enabled\": true,\n \"fieldIds\": []\n },\n \"isBackButtonHidden\": false,\n \"triggers\": [\n {\n \"actionClass\": {\n \"name\": \"Geviti EMR Form (never fires)\"\n }\n }\n ],\n \"displayPercentage\": null,\n \"delay\": 0,\n \"projectOverwrites\": null\n },\n {\n \"id\": \"cmnkx4xj1004mla01ui4toj1v\",\n \"welcomeCard\": {\n \"enabled\": false,\n \"headline\": {\n \"default\": \"Welcome!\"\n },\n \"subheader\": {\n \"default\": \"Thanks for providing your feedback - let\\u2019s go!\"\n },\n \"buttonLabel\": {\n \"default\": \"Next\"\n },\n \"timeToFinish\": false,\n \"showResponseCount\": false\n },\n \"name\": \"longeviti-specialist-visit\",\n \"questions\": [],\n \"blocks\": [\n {\n \"id\": \"aadruz1q1tswbcnf5pmzucy7\",\n \"name\": \"Block 1\",\n \"elements\": [\n {\n \"id\": \"ya6it3fefdrs1bxpdrtm8bwp\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">What is the reason for this visit</strong></b></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next\"\n }\n }\n ],\n \"variables\": [],\n \"type\": \"app\",\n \"showLanguageSwitch\": null,\n \"languages\": [],\n \"endings\": [],\n \"autoClose\": null,\n \"styling\": null,\n \"status\": \"inProgress\",\n \"recaptcha\": {\n \"enabled\": false,\n \"threshold\": 0.1\n },\n \"segment\": {\n \"id\": \"cmnkx4xjh004nla012w6fv10a\",\n \"createdAt\": \"2026-04-04T22:43:04.781Z\",\n \"updatedAt\": \"2026-04-04T22:43:04.781Z\",\n \"title\": \"cmnkx4xj1004mla01ui4toj1v\",\n \"description\": null,\n \"isPrivate\": true,\n \"filters\": [],\n \"environmentId\": \"cmlhiza9j0009lj01my5c1g0q\",\n \"surveys\": [\n \"cmnkx4xj1004mla01ui4toj1v\"\n ]\n },\n \"recontactDays\": null,\n \"displayLimit\": null,\n \"displayOption\": \"displayOnce\",\n \"hiddenFields\": {\n \"enabled\": true,\n \"fieldIds\": []\n },\n \"isBackButtonHidden\": false,\n \"triggers\": [\n {\n \"actionClass\": {\n \"name\": \"Geviti EMR Form (never fires)\"\n }\n }\n ],\n \"displayPercentage\": null,\n \"delay\": 0,\n \"projectOverwrites\": null\n },\n {\n \"id\": \"cmn531bn90006l901w6qj0tw7\",\n \"welcomeCard\": {\n \"enabled\": true,\n \"headline\": {\n \"default\": \"Health Intake Form\"\n },\n \"subheader\": {\n \"default\": \"This helps your provider understand your health history. Takes about 10-15 minutes.\"\n },\n \"buttonLabel\": {\n \"default\": \"Get Started\"\n },\n \"timeToFinish\": true,\n \"showResponseCount\": false\n },\n \"name\": \"Male Intake Form - v2\",\n \"questions\": [],\n \"blocks\": [\n {\n \"id\": \"block_1\",\n \"name\": \"Biometrics\",\n \"elements\": [\n {\n \"id\": \"tizmqun9033o82uy4tv9dm9t\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Height Feet\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"kuxj20cu5x62bc0fddue6ykh\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Height Inches\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"at8x9e8n4v1x6gwl56g7t5tl\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Current weight Lbs\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"h037vv2thdxh3r4jz49qcn2w\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Target weight Lbs\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"hcbbor6htqbe5pea1078xl7k\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_1\",\n \"label\": {\n \"default\": \"African American\"\n }\n },\n {\n \"id\": \"choice_2\",\n \"label\": {\n \"default\": \"Hispanic\"\n }\n },\n {\n \"id\": \"choice_3\",\n \"label\": {\n \"default\": \"Mediterranean\"\n }\n },\n {\n \"id\": \"choice_4\",\n \"label\": {\n \"default\": \"East Asian\"\n }\n },\n {\n \"id\": \"choice_5\",\n \"label\": {\n \"default\": \"Native American\"\n }\n },\n {\n \"id\": \"choice_6\",\n \"label\": {\n \"default\": \"Caucasian\"\n }\n },\n {\n \"id\": \"choice_7\",\n \"label\": {\n \"default\": \"Northern European\"\n }\n },\n {\n \"id\": \"choice_8\",\n \"label\": {\n \"default\": \"South Asian\"\n }\n },\n {\n \"id\": \"choice_9\",\n \"label\": {\n \"default\": \"Pacific Islander\"\n }\n },\n {\n \"id\": \"choice_10\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Genetic Background\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Your Goals\"\n }\n },\n {\n \"id\": \"block_2\",\n \"name\": \"Goals & Concerns\",\n \"elements\": [\n {\n \"id\": \"ggngrt0gj8lvow85321291ex\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_11\",\n \"label\": {\n \"default\": \"Age healthfully\"\n }\n },\n {\n \"id\": \"choice_12\",\n \"label\": {\n \"default\": \"Prevent chronic disease\"\n }\n },\n {\n \"id\": \"choice_13\",\n \"label\": {\n \"default\": \"Protect cognitive health\"\n }\n },\n {\n \"id\": \"choice_14\",\n \"label\": {\n \"default\": \"Reduce toxins and support detoxification\"\n }\n },\n {\n \"id\": \"choice_15\",\n \"label\": {\n \"default\": \"Maintain hormone balance\"\n }\n },\n {\n \"id\": \"choice_16\",\n \"label\": {\n \"default\": \"Optimize and sustain performance\"\n }\n },\n {\n \"id\": \"choice_17\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which long-term health goals are most important to you?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"sww7cawdhntd4bhc7c1nhx9p\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_18\",\n \"label\": {\n \"default\": \"Fatigue/low energy\"\n }\n },\n {\n \"id\": \"choice_19\",\n \"label\": {\n \"default\": \"Decreased libido sex drive\"\n }\n },\n {\n \"id\": \"choice_20\",\n \"label\": {\n \"default\": \"Erectile dysfunction (ED)\"\n }\n },\n {\n \"id\": \"choice_21\",\n \"label\": {\n \"default\": \"Loss of muscle mass\"\n }\n },\n {\n \"id\": \"choice_22\",\n \"label\": {\n \"default\": \"Increase in body fat\"\n }\n },\n {\n \"id\": \"choice_23\",\n \"label\": {\n \"default\": \"Mood changes/irritability\"\n }\n },\n {\n \"id\": \"choice_24\",\n \"label\": {\n \"default\": \"Brain fog/concentration issues\"\n }\n },\n {\n \"id\": \"choice_25\",\n \"label\": {\n \"default\": \"Difficulty sleeping\"\n }\n },\n {\n \"id\": \"choice_26\",\n \"label\": {\n \"default\": \"Depression\"\n }\n },\n {\n \"id\": \"choice_27\",\n \"label\": {\n \"default\": \"Hair loss/thinning\"\n }\n },\n {\n \"id\": \"choice_28\",\n \"label\": {\n \"default\": \"Anxiety\"\n }\n },\n {\n \"id\": \"choice_29\",\n \"label\": {\n \"default\": \"Joint pain\"\n }\n },\n {\n \"id\": \"choice_30\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which of the following symptoms are you currently experiencing?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"j5pajkm615zv69fv1m1flw92\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list your top 3-5 current and ongoing health concerns in order of priority:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"vbdq376thtz2oluyiolt9fw8\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_31\",\n \"label\": {\n \"default\": \"Less than 3 months ago\"\n }\n },\n {\n \"id\": \"choice_32\",\n \"label\": {\n \"default\": \"Between 3 and 12 months ago\"\n }\n },\n {\n \"id\": \"choice_33\",\n \"label\": {\n \"default\": \"Between 1 and 3 years ago\"\n }\n },\n {\n \"id\": \"choice_34\",\n \"label\": {\n \"default\": \"Between 3 and 5 years ago\"\n }\n },\n {\n \"id\": \"choice_35\",\n \"label\": {\n \"default\": \"More than 5 years ago\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"When did these concerns begin?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"bjk57fth6a81u76e1qyszwd6\",\n \"type\": \"rating\",\n \"range\": 10,\n \"scale\": \"number\",\n \"headline\": {\n \"default\": \"On a scale of 1 to 10, how much do these concerns impact your daily life?\"\n },\n \"required\": true,\n \"lowerLabel\": {\n \"default\": \"Not at all\"\n },\n \"upperLabel\": {\n \"default\": \"Severely\"\n }\n },\n {\n \"id\": \"z1mu4olyr5bitufdw2pwmkp8\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_36\",\n \"label\": {\n \"default\": \"Medications\"\n }\n },\n {\n \"id\": \"choice_37\",\n \"label\": {\n \"default\": \"Supplements\"\n }\n },\n {\n \"id\": \"choice_38\",\n \"label\": {\n \"default\": \"Diet changes\"\n }\n },\n {\n \"id\": \"choice_39\",\n \"label\": {\n \"default\": \"Exercise\"\n }\n },\n {\n \"id\": \"choice_40\",\n \"label\": {\n \"default\": \"Therapy or counseling\"\n }\n },\n {\n \"id\": \"choice_41\",\n \"label\": {\n \"default\": \"Alternative or complementary therapies\"\n }\n },\n {\n \"id\": \"choice_42\",\n \"label\": {\n \"default\": \"I have not tried any treatments\"\n }\n },\n {\n \"id\": \"choice_43\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which treatments have you tried for these concerns?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"m8i4kwojh9l320g4kxma6mk9\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_44\",\n \"label\": {\n \"default\": \"1-3 months\"\n }\n },\n {\n \"id\": \"choice_45\",\n \"label\": {\n \"default\": \"4-6 months\"\n }\n },\n {\n \"id\": \"choice_46\",\n \"label\": {\n \"default\": \"7-12 months\"\n }\n },\n {\n \"id\": \"choice_47\",\n \"label\": {\n \"default\": \"A year or more\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"What is your expected timeline to see meaningful changes?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Medications\"\n }\n },\n {\n \"id\": \"block_3\",\n \"name\": \"Medications & Supplements\",\n \"elements\": [\n {\n \"id\": \"u2puugnwuic8bthec0onn0db\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_48\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_49\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you currently taking any prescription or over-the-counter medications or peptides?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"am1t9hmjab4wuwadt3gr8d62\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list your medications:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"mxpestjlebgwb3m1340qyd3x\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_50\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_51\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you currently take any dietary supplements?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"nnc3ay4bfsy8bxzeaza2adrd\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list your supplements:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"bpref8v2n5q7w4r9t1y6u3im\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_279\",\n \"label\": {\n \"default\": \"Mimic current regimen\"\n }\n },\n {\n \"id\": \"choice_280\",\n \"label\": {\n \"default\": \"Switch over completely\"\n }\n },\n {\n \"id\": \"choice_281\",\n \"label\": {\n \"default\": \"Fill in the gaps\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"How would you like your Longeviti Blend Packs to work with your current supplement routine?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"fyizo4n6zyaydyy5q679lhy2\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_52\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_53\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you take biotin supplements?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"y88provlgt4ul4h2ilzwjnk2\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_54\",\n \"label\": {\n \"default\": \"<1mg\"\n }\n },\n {\n \"id\": \"choice_55\",\n \"label\": {\n \"default\": \"1-5mg\"\n }\n },\n {\n \"id\": \"choice_56\",\n \"label\": {\n \"default\": \">5mg\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"If yes, what dose?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"y9s0wzmerd71evft67qdjrsz\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_57\",\n \"label\": {\n \"default\": \"Acupuncture\"\n }\n },\n {\n \"id\": \"choice_58\",\n \"label\": {\n \"default\": \"Chiropractic care\"\n }\n },\n {\n \"id\": \"choice_59\",\n \"label\": {\n \"default\": \"Massage therapy\"\n }\n },\n {\n \"id\": \"choice_60\",\n \"label\": {\n \"default\": \"Herbal medicine\"\n }\n },\n {\n \"id\": \"choice_61\",\n \"label\": {\n \"default\": \"Homeopathy\"\n }\n },\n {\n \"id\": \"choice_62\",\n \"label\": {\n \"default\": \"Detoxes or cleanses\"\n }\n },\n {\n \"id\": \"choice_63\",\n \"label\": {\n \"default\": \"Other\"\n }\n },\n {\n \"id\": \"choice_64\",\n \"label\": {\n \"default\": \"None\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which natural or integrative therapies have you used?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Allergies\"\n }\n },\n {\n \"id\": \"block_4\",\n \"name\": \"Allergies & Conditions\",\n \"elements\": [\n {\n \"id\": \"cq65pyfz8uprox2b8xa8q1to\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_65\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_66\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you have any allergies or sensitivities?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ihgmaxdr6mn5uijg43egcd6u\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list your allergies:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"cm63q13bevl5fa63l51i4n3q\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_67\",\n \"label\": {\n \"default\": \"High blood pressure\"\n }\n },\n {\n \"id\": \"choice_68\",\n \"label\": {\n \"default\": \"Heart disease\"\n }\n },\n {\n \"id\": \"choice_69\",\n \"label\": {\n \"default\": \"Stroke/TIA\"\n }\n },\n {\n \"id\": \"choice_70\",\n \"label\": {\n \"default\": \"Blood clots/DVT\"\n }\n },\n {\n \"id\": \"choice_71\",\n \"label\": {\n \"default\": \"Diabetes/pre-diabetes\"\n }\n },\n {\n \"id\": \"choice_72\",\n \"label\": {\n \"default\": \"Cancer\"\n }\n },\n {\n \"id\": \"choice_73\",\n \"label\": {\n \"default\": \"Thyroid disorder\"\n }\n },\n {\n \"id\": \"choice_74\",\n \"label\": {\n \"default\": \"Liver disease\"\n }\n },\n {\n \"id\": \"choice_75\",\n \"label\": {\n \"default\": \"Kidney disease\"\n }\n },\n {\n \"id\": \"choice_76\",\n \"label\": {\n \"default\": \"Neurological/emotional conditions\"\n }\n },\n {\n \"id\": \"choice_77\",\n \"label\": {\n \"default\": \"Autoimmune conditions\"\n }\n },\n {\n \"id\": \"choice_78\",\n \"label\": {\n \"default\": \"Sleep apnea\"\n }\n },\n {\n \"id\": \"choice_79\",\n \"label\": {\n \"default\": \"Respiratory conditions\"\n }\n },\n {\n \"id\": \"choice_80\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n },\n {\n \"id\": \"choice_81\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which medical conditions have you been diagnosed with?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"wjufc9doacgltb8qc82jrb3v\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"If you selected any of the above, please list specific diagnosis along with estimated date of diagnosis and if this is a current issue\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"jyirs6y4qdbde3ufj6kpcld0\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"If this is a current condition, how is it being treated/managed?\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\ufffd\\ufffd\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Environmental\"\n }\n },\n {\n \"id\": \"block_5\",\n \"name\": \"Environmental & Family\",\n \"elements\": [\n {\n \"id\": \"ptd1407e9aafu3ncpwdqw7tl\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_82\",\n \"label\": {\n \"default\": \"Mold\"\n }\n },\n {\n \"id\": \"choice_83\",\n \"label\": {\n \"default\": \"Renovations\"\n }\n },\n {\n \"id\": \"choice_84\",\n \"label\": {\n \"default\": \"Electromagnetic radiation\"\n }\n },\n {\n \"id\": \"choice_85\",\n \"label\": {\n \"default\": \"Water leaks\"\n }\n },\n {\n \"id\": \"choice_86\",\n \"label\": {\n \"default\": \"Harsh chemicals\"\n }\n },\n {\n \"id\": \"choice_87\",\n \"label\": {\n \"default\": \"Damp environments\"\n }\n },\n {\n \"id\": \"choice_88\",\n \"label\": {\n \"default\": \"Pesticides / Herbicides\"\n }\n },\n {\n \"id\": \"choice_89\",\n \"label\": {\n \"default\": \"Cleaning chemicals\"\n }\n },\n {\n \"id\": \"choice_90\",\n \"label\": {\n \"default\": \"Heavy metals\"\n }\n },\n {\n \"id\": \"choice_91\",\n \"label\": {\n \"default\": \"Airplane Travel\"\n }\n },\n {\n \"id\": \"choice_92\",\n \"label\": {\n \"default\": \"Paints\"\n }\n },\n {\n \"id\": \"choice_93\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"To the best of your knowledge, in your work or home environment, are you regularly exposed to (check all that apply)\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"zz2e9u4ytmvk18jgndkphlq2\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_94\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_95\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Have you had significant exposure to any harmful chemicals?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"v5reto9rx3qqlkf95pmqcrdr\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"jzsl7oqs8zfzazfqzat0uvs7\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_96\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_97\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you have any pets or farm animals?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ym4t66zx598v4o0h14x1iim0\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"xpsueqst7qnwfrwetcih222e\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_98\",\n \"label\": {\n \"default\": \"Lyme disease\"\n }\n },\n {\n \"id\": \"choice_99\",\n \"label\": {\n \"default\": \"Candida overgrowth\"\n }\n },\n {\n \"id\": \"choice_100\",\n \"label\": {\n \"default\": \"Epstein\\u2013Barr virus (EBV)\"\n }\n },\n {\n \"id\": \"choice_101\",\n \"label\": {\n \"default\": \"Mold exposure\"\n }\n },\n {\n \"id\": \"choice_102\",\n \"label\": {\n \"default\": \"Heavy metal exposure\"\n }\n },\n {\n \"id\": \"choice_103\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Have you had any of the following chronic infections or environmental exposures?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"vrln2lfmzprvz1yifcnkbp4f\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_104\",\n \"label\": {\n \"default\": \"High blood pressure\"\n }\n },\n {\n \"id\": \"choice_105\",\n \"label\": {\n \"default\": \"Heart disease\"\n }\n },\n {\n \"id\": \"choice_106\",\n \"label\": {\n \"default\": \"Stroke/TIA\"\n }\n },\n {\n \"id\": \"choice_107\",\n \"label\": {\n \"default\": \"Blood clots/DVT\"\n }\n },\n {\n \"id\": \"choice_108\",\n \"label\": {\n \"default\": \"Diabetes/pre-diabetes\"\n }\n },\n {\n \"id\": \"choice_109\",\n \"label\": {\n \"default\": \"Cancer\"\n }\n },\n {\n \"id\": \"choice_110\",\n \"label\": {\n \"default\": \"Thyroid disorder\"\n }\n },\n {\n \"id\": \"choice_111\",\n \"label\": {\n \"default\": \"Liver disease\"\n }\n },\n {\n \"id\": \"choice_112\",\n \"label\": {\n \"default\": \"Kidney disease\"\n }\n },\n {\n \"id\": \"choice_113\",\n \"label\": {\n \"default\": \"Neurological conditions\"\n }\n },\n {\n \"id\": \"choice_114\",\n \"label\": {\n \"default\": \"Autoimmune Conditions\"\n }\n },\n {\n \"id\": \"choice_115\",\n \"label\": {\n \"default\": \"Sleep apnea\"\n }\n },\n {\n \"id\": \"choice_116\",\n \"label\": {\n \"default\": \"Respiratory conditions\"\n }\n },\n {\n \"id\": \"choice_117\",\n \"label\": {\n \"default\": \"Other\"\n }\n },\n {\n \"id\": \"choice_118\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which medical conditions apply to your immediate family members (parents, grandparents, siblings)?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"h77pek13vkv2bvq9w5gs8uwm\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_119\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_120\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Does anyone in your immediate family have a history of hormone-related issues?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ws5e2nmnq5mda6hsqerx5am5\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"If you selected \\\"yes\\\", please specify:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Hormones\"\n }\n },\n {\n \"id\": \"block_6\",\n \"name\": \"Hormones\",\n \"elements\": [\n {\n \"id\": \"fivcg4wrbh4sl439mjtj8s96\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_121\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_122\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Have you had your testosterone levels tested before?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"hb370iiou7kfv32bsoj2yai7\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_123\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_124\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Have you previously used any form of hormone therapy?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"zgaplcoee187bvq852eajx0g\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_125\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_126\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you currently on hormone replacement therapy (HRT)?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"qx2u9rejd5p37lb6n0ufbx1y\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_127\",\n \"label\": {\n \"default\": \"Testosterone injectable\"\n }\n },\n {\n \"id\": \"choice_128\",\n \"label\": {\n \"default\": \"Testosterone topical/pellet\"\n }\n },\n {\n \"id\": \"choice_129\",\n \"label\": {\n \"default\": \"Estrogen\"\n }\n },\n {\n \"id\": \"choice_130\",\n \"label\": {\n \"default\": \"Progesterone\"\n }\n },\n {\n \"id\": \"choice_131\",\n \"label\": {\n \"default\": \"DHEA\"\n }\n },\n {\n \"id\": \"choice_132\",\n \"label\": {\n \"default\": \"Thyroid hormone\"\n }\n },\n {\n \"id\": \"choice_133\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"If yes, which type(s) of HRT are you currently using? (check all that apply)\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"kti99c9irugffh25pdpjzdd8\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_134\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_135\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Have you had any surgeries or injuries involving the testicles, prostate, or pituitary gland?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"t4mmhx2woemzwgexl0c5sw03\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe your surgery or injury:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"rje7ggquaodw039nb95oyasg\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_136\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_137\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you currently experiencing any prostate-related concerns (e.g., urinary symptoms, pain)?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"llekb728boo17m07i7sb9tpd\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe your prostate concerns:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"heosmbysulg7jxqkdjir7ktk\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_138\",\n \"label\": {\n \"default\": \"High estrogen\"\n }\n },\n {\n \"id\": \"choice_139\",\n \"label\": {\n \"default\": \"Gynecomastia (breast tissue growth)\"\n }\n },\n {\n \"id\": \"choice_140\",\n \"label\": {\n \"default\": \"Past steroid or prohormone use\"\n }\n },\n {\n \"id\": \"choice_141\",\n \"label\": {\n \"default\": \"Sexually transmitted disease\"\n }\n },\n {\n \"id\": \"choice_142\",\n \"label\": {\n \"default\": \"Reproductive cancer\"\n }\n },\n {\n \"id\": \"choice_143\",\n \"label\": {\n \"default\": \"Infertility\"\n }\n },\n {\n \"id\": \"choice_144\",\n \"label\": {\n \"default\": \"Thick blood / elevated hematocrit\"\n }\n },\n {\n \"id\": \"choice_145\",\n \"label\": {\n \"default\": \"DHT-related issues (e.g., hair loss, acne)\"\n }\n },\n {\n \"id\": \"choice_146\",\n \"label\": {\n \"default\": \"None\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which hormone/sexual-related issues have you experienced?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"nmomu4e03n2u8wbaaikdbfa7\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_147\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_148\",\n \"label\": {\n \"default\": \"No\"\n }\n },\n {\n \"id\": \"choice_149\",\n \"label\": {\n \"default\": \"Unsure\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you plan to have children in the future?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Weight\"\n }\n },\n {\n \"id\": \"block_7\",\n \"name\": \"Weight Management\",\n \"elements\": [\n {\n \"id\": \"eble6x0lt796un966f6unqlx\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_150\",\n \"label\": {\n \"default\": \"My weight has been mostly stable.\"\n }\n },\n {\n \"id\": \"choice_151\",\n \"label\": {\n \"default\": \"My weight fluctuates up and down.\"\n }\n },\n {\n \"id\": \"choice_152\",\n \"label\": {\n \"default\": \"I have had a recent weight gain.\"\n }\n },\n {\n \"id\": \"choice_153\",\n \"label\": {\n \"default\": \"I have had a recent weight loss.\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which statement best describes your recent weight pattern?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"wd8ixy3ymr5chk9e2c0bqmtd\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_154\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_155\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Have you used prescription medications for weight loss?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"wlmty5q8v2n7w4r9t1y6u3ik\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_282\",\n \"label\": {\n \"default\": \"GLP-1 receptor agonist\"\n }\n },\n {\n \"id\": \"choice_283\",\n \"label\": {\n \"default\": \"Metformin\"\n }\n },\n {\n \"id\": \"choice_284\",\n \"label\": {\n \"default\": \"SGLT2 inhibitor\"\n }\n },\n {\n \"id\": \"choice_285\",\n \"label\": {\n \"default\": \"Thyroid medication\"\n }\n },\n {\n \"id\": \"choice_286\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which type(s)?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"e3scav40pkcuplq84zhmt5k6\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"ecpya6416e0knupwcej44cfz\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"If you are trying to lose weight please elaborate on what you've tried so far and whether or not it has helped:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Digestion\"\n }\n },\n {\n \"id\": \"block_8\",\n \"name\": \"Digestion\",\n \"elements\": [\n {\n \"id\": \"jn6enqdup2adlm5t7crqfd3x\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_156\",\n \"label\": {\n \"default\": \"1\\u20133 times per day\"\n }\n },\n {\n \"id\": \"choice_157\",\n \"label\": {\n \"default\": \"More than 3 times per day\"\n }\n },\n {\n \"id\": \"choice_158\",\n \"label\": {\n \"default\": \"Not regularly every day\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Bowel Movement Frequency\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"z8gj5nafr4xr0xnjosinw356\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_159\",\n \"label\": {\n \"default\": \"Soft & well formed\"\n }\n },\n {\n \"id\": \"choice_160\",\n \"label\": {\n \"default\": \"Easy to pass\"\n }\n },\n {\n \"id\": \"choice_161\",\n \"label\": {\n \"default\": \"Often float\"\n }\n },\n {\n \"id\": \"choice_162\",\n \"label\": {\n \"default\": \"Difficult to pass\"\n }\n },\n {\n \"id\": \"choice_163\",\n \"label\": {\n \"default\": \"Diarrhea\"\n }\n },\n {\n \"id\": \"choice_164\",\n \"label\": {\n \"default\": \"Thin, long or narrow\"\n }\n },\n {\n \"id\": \"choice_165\",\n \"label\": {\n \"default\": \"Small and hard\"\n }\n },\n {\n \"id\": \"choice_166\",\n \"label\": {\n \"default\": \"Loose but not watery\"\n }\n },\n {\n \"id\": \"choice_167\",\n \"label\": {\n \"default\": \"Alternating between hard and loose\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Bowel Movement Consistency\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"y94j130ia429zrmoo03ih5ae\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_168\",\n \"label\": {\n \"default\": \"Medium brown\"\n }\n },\n {\n \"id\": \"choice_169\",\n \"label\": {\n \"default\": \"Very dark or black\"\n }\n },\n {\n \"id\": \"choice_170\",\n \"label\": {\n \"default\": \"Greenish\"\n }\n },\n {\n \"id\": \"choice_171\",\n \"label\": {\n \"default\": \"Blood is visible\"\n }\n },\n {\n \"id\": \"choice_172\",\n \"label\": {\n \"default\": \"Variable\"\n }\n },\n {\n \"id\": \"choice_173\",\n \"label\": {\n \"default\": \"Yellow, light brown\"\n }\n },\n {\n \"id\": \"choice_174\",\n \"label\": {\n \"default\": \"Chalky colored\"\n }\n },\n {\n \"id\": \"choice_175\",\n \"label\": {\n \"default\": \"Greasy, shiny\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Bowel Movement Color\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"v52yehqt8ryywnkgxsb3a57s\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_176\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_177\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you experience any ongoing digestion issues?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"e1zlacbbho7cu7cptrq3njq5\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Diet\"\n }\n },\n {\n \"id\": \"block_9\",\n \"name\": \"Diet & Nutrition\",\n \"elements\": [\n {\n \"id\": \"ppwck6gxpc3v2vt9zxqt7hku\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_178\",\n \"label\": {\n \"default\": \"Standard (no specific diet)\"\n }\n },\n {\n \"id\": \"choice_179\",\n \"label\": {\n \"default\": \"High-protein (120g a day or more)\"\n }\n },\n {\n \"id\": \"choice_180\",\n \"label\": {\n \"default\": \"Mediterranean\"\n }\n },\n {\n \"id\": \"choice_181\",\n \"label\": {\n \"default\": \"Ketogenic (keto)\"\n }\n },\n {\n \"id\": \"choice_182\",\n \"label\": {\n \"default\": \"Paleo\"\n }\n },\n {\n \"id\": \"choice_183\",\n \"label\": {\n \"default\": \"Vegan\"\n }\n },\n {\n \"id\": \"choice_184\",\n \"label\": {\n \"default\": \"Vegetarian\"\n }\n },\n {\n \"id\": \"choice_185\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which of the following best describes your current eating pattern or diet style?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"h16oatmqm7kv45udafre9gt5\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_186\",\n \"label\": {\n \"default\": \"Mostly whole, minimally processed foods\"\n }\n },\n {\n \"id\": \"choice_187\",\n \"label\": {\n \"default\": \"A balanced mix of whole and processed foods\"\n }\n },\n {\n \"id\": \"choice_188\",\n \"label\": {\n \"default\": \"Mostly processed or convenience foods\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"How would you describe the overall quality of your diet?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"nz6sg1uw1xo6482sck80v1fv\",\n \"type\": \"rating\",\n \"range\": 10,\n \"scale\": \"number\",\n \"headline\": {\n \"default\": \"On a scale of 1-10, how would you rate your ability and willingness to make dietary shifts, if needed?\"\n },\n \"required\": true,\n \"lowerLabel\": {\n \"default\": \"Not willing\"\n },\n \"upperLabel\": {\n \"default\": \"Very willing\"\n }\n },\n {\n \"id\": \"gmw9igr51dy6wa8cqsw0zab4\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_189\",\n \"label\": {\n \"default\": \"1 meal a day\"\n }\n },\n {\n \"id\": \"choice_190\",\n \"label\": {\n \"default\": \"2-3\"\n }\n },\n {\n \"id\": \"choice_191\",\n \"label\": {\n \"default\": \"3 or more\"\n }\n },\n {\n \"id\": \"choice_192\",\n \"label\": {\n \"default\": \"Varies\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"How many meals do you eat a day?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"o0x7cqnbddnjqy0irpx8sdp9\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_193\",\n \"label\": {\n \"default\": \"0 meals\"\n }\n },\n {\n \"id\": \"choice_194\",\n \"label\": {\n \"default\": \"1\\u20132 meals\"\n }\n },\n {\n \"id\": \"choice_195\",\n \"label\": {\n \"default\": \"3\\u20135 meals\"\n }\n },\n {\n \"id\": \"choice_196\",\n \"label\": {\n \"default\": \"6 or more meals\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"How many meals do you typically eat out per week?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"qt7qsapl6ur301r1jrcagcbp\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"To the best of your ability, please record what you eat in a typical day. Include meals (breakfast, lunch, dinner, snacks), fluids and time of day:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"ivp8f0m3mmq5nkspoi7hbw5t\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_197\",\n \"label\": {\n \"default\": \"Less than 4 cups / < 1 liter\"\n }\n },\n {\n \"id\": \"choice_198\",\n \"label\": {\n \"default\": \"4-7 cups / 1-2 liters\"\n }\n },\n {\n \"id\": \"choice_199\",\n \"label\": {\n \"default\": \"8-11 cups / 2-3 liters\"\n }\n },\n {\n \"id\": \"choice_200\",\n \"label\": {\n \"default\": \"12+ cups / > 3 liters\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Approximately how much water do you drink each day?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Exercise\"\n }\n },\n {\n \"id\": \"block_10\",\n \"name\": \"Exercise\",\n \"elements\": [\n {\n \"id\": \"ocaoxm3caykmtpeiz52fkauk\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_201\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_202\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you exercise on a regular basis?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"brqvyaodecdf5tb5fzdbkl9u\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe your exercise routine:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"u4vxm139vp2tru7l7ofnxrig\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Are there any problems that limit exercise?\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Sleep\"\n }\n },\n {\n \"id\": \"block_11\",\n \"name\": \"Sleep\",\n \"elements\": [\n {\n \"id\": \"pxsvycmwcg9yj12lharnlsar\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_203\",\n \"label\": {\n \"default\": \"Fewer than 5 hours\"\n }\n },\n {\n \"id\": \"choice_204\",\n \"label\": {\n \"default\": \"5\\u20136 hours\"\n }\n },\n {\n \"id\": \"choice_205\",\n \"label\": {\n \"default\": \"6\\u20137 hours\"\n }\n },\n {\n \"id\": \"choice_206\",\n \"label\": {\n \"default\": \"7\\u20138 hours\"\n }\n },\n {\n \"id\": \"choice_207\",\n \"label\": {\n \"default\": \"More than 8 hours\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"On average, how many hours of sleep do you get per night?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"wg6achdqgdh691g5on2o4kz2\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_208\",\n \"label\": {\n \"default\": \"Very Good\"\n }\n },\n {\n \"id\": \"choice_209\",\n \"label\": {\n \"default\": \"Good\"\n }\n },\n {\n \"id\": \"choice_210\",\n \"label\": {\n \"default\": \"Fair\"\n }\n },\n {\n \"id\": \"choice_211\",\n \"label\": {\n \"default\": \"Poor\"\n }\n },\n {\n \"id\": \"choice_212\",\n \"label\": {\n \"default\": \"Very Poor\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"How would you rate your overall sleep quality?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ogljmjuocx2k3a3jb0jzgzrp\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_213\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_214\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you have trouble falling asleep?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"rk26phgfbww5wato0ybbu38f\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_215\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_216\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you have trouble staying asleep?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ij7h42ovqyadvrns77dkxfjk\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_217\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_218\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you usually feel rested when you wake up?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"golk5jopbl7nb3g37oxui43b\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Do you use sleeping aids? If so, please list below:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Stress & Lifestyle\"\n }\n },\n {\n \"id\": \"block_12\",\n \"name\": \"Stress & Lifestyle\",\n \"elements\": [\n {\n \"id\": \"cva0i5ybkfgqp14796xhlexu\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_219\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_220\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you feel you have an excessive amount of stress in your life?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"nydv15x1loaokhq9dbydlivt\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_221\",\n \"label\": {\n \"default\": \"Family / Relationships\"\n }\n },\n {\n \"id\": \"choice_222\",\n \"label\": {\n \"default\": \"Finances\"\n }\n },\n {\n \"id\": \"choice_223\",\n \"label\": {\n \"default\": \"Work\"\n }\n },\n {\n \"id\": \"choice_224\",\n \"label\": {\n \"default\": \"Health\"\n }\n },\n {\n \"id\": \"choice_225\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"What is your primary source of stress / excess stress in your life?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"i1uct6typq3z5beip2pcgfx4\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_226\",\n \"label\": {\n \"default\": \"Exercise\"\n }\n },\n {\n \"id\": \"choice_227\",\n \"label\": {\n \"default\": \"Meditation\"\n }\n },\n {\n \"id\": \"choice_228\",\n \"label\": {\n \"default\": \"Prayer\"\n }\n },\n {\n \"id\": \"choice_229\",\n \"label\": {\n \"default\": \"Journaling\"\n }\n },\n {\n \"id\": \"choice_230\",\n \"label\": {\n \"default\": \"Breathwork\"\n }\n },\n {\n \"id\": \"choice_231\",\n \"label\": {\n \"default\": \"I do not use any specific coping strategies\"\n }\n },\n {\n \"id\": \"choice_232\",\n \"label\": {\n \"default\": \"Therapy\"\n }\n },\n {\n \"id\": \"choice_233\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"How do you typically cope with stress?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"id1r56spatomlz9980dpddja\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"If you selected \\\"other\\\" please specify:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"kojx7b9wmf87irn6aaw2y9ob\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_234\",\n \"label\": {\n \"default\": \"Never\"\n }\n },\n {\n \"id\": \"choice_235\",\n \"label\": {\n \"default\": \"Former\"\n }\n },\n {\n \"id\": \"choice_236\",\n \"label\": {\n \"default\": \"Current\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you use tobacco products?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"t3y953kesylv15job4e0qce5\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_237\",\n \"label\": {\n \"default\": \"None\"\n }\n },\n {\n \"id\": \"choice_238\",\n \"label\": {\n \"default\": \"Occasional\"\n }\n },\n {\n \"id\": \"choice_239\",\n \"label\": {\n \"default\": \"Regular\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you drink alcohol?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"xexckhe0eees2yg8lqiv8ntn\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_240\",\n \"label\": {\n \"default\": \"None\"\n }\n },\n {\n \"id\": \"choice_241\",\n \"label\": {\n \"default\": \"Occasional\"\n }\n },\n {\n \"id\": \"choice_242\",\n \"label\": {\n \"default\": \"Daily\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you consume caffeine on a regular basis?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"gdtiutut6d88dicgev88yvpt\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_243\",\n \"label\": {\n \"default\": \"Never\"\n }\n },\n {\n \"id\": \"choice_244\",\n \"label\": {\n \"default\": \"Former\"\n }\n },\n {\n \"id\": \"choice_245\",\n \"label\": {\n \"default\": \"Current\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you use recreational drugs?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"mus81ezl1vutp0xbd3xxu5ii\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_246\",\n \"label\": {\n \"default\": \"Cold plunge\"\n }\n },\n {\n \"id\": \"choice_247\",\n \"label\": {\n \"default\": \"Sauna\"\n }\n },\n {\n \"id\": \"choice_248\",\n \"label\": {\n \"default\": \"Red light therapy\"\n }\n },\n {\n \"id\": \"choice_249\",\n \"label\": {\n \"default\": \"Fasting\"\n }\n },\n {\n \"id\": \"choice_250\",\n \"label\": {\n \"default\": \"Herbal teas or adaptogens\"\n }\n },\n {\n \"id\": \"choice_251\",\n \"label\": {\n \"default\": \"Meditation\"\n }\n },\n {\n \"id\": \"choice_252\",\n \"label\": {\n \"default\": \"Breathwork\"\n }\n },\n {\n \"id\": \"choice_253\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which wellness practices do you currently use?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"qyje63j5rly2524epjmwgyzw\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_254\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_255\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you wear any health or fitness wearable devices?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Appearance\"\n }\n },\n {\n \"id\": \"block_13\",\n \"name\": \"Appearance\",\n \"elements\": [\n {\n \"id\": \"k0k8g4y0i5rxz7m0201ckvcm\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_256\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_257\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you currently experiencing hair loss?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"hyviapv5gbgap227psj2cylk\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"dkdjgscqefzv4shefeof4vse\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_258\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_259\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you have any skin concerns you would like to address?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"vshr18brhz3gclsjzwt9t97p\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Work\"\n }\n },\n {\n \"id\": \"block_14\",\n \"name\": \"Work & Activity\",\n \"elements\": [\n {\n \"id\": \"o1xz7t8j3cu91uacwv2tzbl2\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please specify your current occupation:\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"fg2cv1fwzyanp530z8zt9cdg\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"How many hours do you work per week, on average?\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"q9vz3f4c8vvc92okh4no2o1d\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_260\",\n \"label\": {\n \"default\": \"Sedentary (primarily sitting)\"\n }\n },\n {\n \"id\": \"choice_261\",\n \"label\": {\n \"default\": \"Active (on your feet or physical work)\"\n }\n },\n {\n \"id\": \"choice_262\",\n \"label\": {\n \"default\": \"Mixed (combination of sitting and active)\"\n }\n },\n {\n \"id\": \"choice_263\",\n \"label\": {\n \"default\": \"Retired\"\n }\n },\n {\n \"id\": \"choice_264\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which option best describes your current occupation or work activity level?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"efmw0e2lgjt6bfs5q42119t4\",\n \"type\": \"rating\",\n \"range\": 10,\n \"scale\": \"number\",\n \"headline\": {\n \"default\": \"On a scale of 1 to 10, how stressful is your work environment?\"\n },\n \"required\": true,\n \"lowerLabel\": {\n \"default\": \"Low stress\"\n },\n \"upperLabel\": {\n \"default\": \"High stress\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Preferences\"\n }\n },\n {\n \"id\": \"block_15\",\n \"name\": \"Treatment Preferences\",\n \"elements\": [\n {\n \"id\": \"rf21p7rcg76b3vr9aguvfh74\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"choice_265\",\n \"label\": {\n \"default\": \"Genetic\"\n }\n },\n {\n \"id\": \"choice_266\",\n \"label\": {\n \"default\": \"Environmental toxins exposure\"\n }\n },\n {\n \"id\": \"choice_267\",\n \"label\": {\n \"default\": \"Mold\"\n }\n },\n {\n \"id\": \"choice_268\",\n \"label\": {\n \"default\": \"Digestive\"\n }\n },\n {\n \"id\": \"choice_269\",\n \"label\": {\n \"default\": \"Lyme\"\n }\n },\n {\n \"id\": \"choice_270\",\n \"label\": {\n \"default\": \"Other\"\n }\n },\n {\n \"id\": \"choice_271\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"What specialty testing are you interested in?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ylsm4wggyuvuvlbofo0oa65s\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_272\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_273\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you comfortable with injections?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"dlnseraf8zd2qeguo5h90164\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_274\",\n \"label\": {\n \"default\": \"Daily (pills or creams)\"\n }\n },\n {\n \"id\": \"choice_275\",\n \"label\": {\n \"default\": \"Weekly (injections)\"\n }\n },\n {\n \"id\": \"choice_276\",\n \"label\": {\n \"default\": \"Monthly or long-acting options\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which treatment cadence would you prefer if options are available?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"j6h7wmlp6siprkoc53d8n6qm\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"choice_277\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"choice_278\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you comfortable with having regular bloodwork done?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Submit\"\n }\n }\n ],\n \"variables\": [],\n \"type\": \"app\",\n \"showLanguageSwitch\": null,\n \"languages\": [],\n \"endings\": [\n {\n \"id\": \"ending_complete\",\n \"type\": \"endScreen\",\n \"headline\": {\n \"default\": \"You're all set!\"\n },\n \"subheader\": {\n \"default\": \"Your provider will review your responses before your consultation.\"\n }\n }\n ],\n \"autoClose\": null,\n \"styling\": null,\n \"status\": \"inProgress\",\n \"recaptcha\": {\n \"enabled\": false,\n \"threshold\": 0.1\n },\n \"segment\": {\n \"id\": \"cmmu05cv2000ilc01y8psd000\",\n \"createdAt\": \"2026-03-17T02:37:36.735Z\",\n \"updatedAt\": \"2026-03-17T02:37:36.735Z\",\n \"title\": \"cmmu05cur000hlc01zfm8uo9t\",\n \"description\": null,\n \"isPrivate\": true,\n \"filters\": [],\n \"environmentId\": \"cmlhiza9j0009lj01my5c1g0q\",\n \"surveys\": [\n \"cmn531bn90006l901w6qj0tw7\"\n ]\n },\n \"recontactDays\": null,\n \"displayLimit\": null,\n \"displayOption\": \"displayOnce\",\n \"hiddenFields\": {\n \"enabled\": true,\n \"fieldIds\": []\n },\n \"isBackButtonHidden\": false,\n \"triggers\": [\n {\n \"actionClass\": {\n \"name\": \"Geviti EMR Form (never fires)\"\n }\n }\n ],\n \"displayPercentage\": null,\n \"delay\": 0,\n \"projectOverwrites\": null\n },\n {\n \"id\": \"cmn52d1d10001l9011k4ndqol\",\n \"welcomeCard\": {\n \"enabled\": true,\n \"headline\": {\n \"default\": \"Health Intake Form\"\n },\n \"subheader\": {\n \"default\": \"This helps your provider understand your health history. Takes about 10-15 minutes.\"\n },\n \"buttonLabel\": {\n \"default\": \"Get Started\"\n },\n \"timeToFinish\": true,\n \"showResponseCount\": false\n },\n \"name\": \"Female Intake Form - v2\",\n \"questions\": [],\n \"blocks\": [\n {\n \"id\": \"h7rtfjqnjsmonlckcrlhs8pu\",\n \"name\": \"Biometrics\",\n \"elements\": [\n {\n \"id\": \"tizmqun9033o82uy4tv9dm9t\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Height (feet)</strong></b></p>\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"kuxj20cu5x62bc0fddue6ykh\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Height (inches)\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"at8x9e8n4v1x6gwl56g7t5tl\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Current weight (in pounds)\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"h037vv2thdxh3r4jz49qcn2w\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Target weight (in pounds)\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"hcbbor6htqbe5pea1078xl7k\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"jehg2s4wul8lj8a52krtryem\",\n \"label\": {\n \"default\": \"African American\"\n }\n },\n {\n \"id\": \"vdn4zfrs2qxh54edmt54gltu\",\n \"label\": {\n \"default\": \"Hispanic\"\n }\n },\n {\n \"id\": \"ll9rmr576igx65vli2k3bmsz\",\n \"label\": {\n \"default\": \"Mediterranean\"\n }\n },\n {\n \"id\": \"rujxac4kgizh1expvui73gee\",\n \"label\": {\n \"default\": \"East Asian\"\n }\n },\n {\n \"id\": \"p64cenau5d540n54cp74ih3n\",\n \"label\": {\n \"default\": \"Native American\"\n }\n },\n {\n \"id\": \"harykrpe5s9y9cq9e8zbxdt2\",\n \"label\": {\n \"default\": \"Caucasian\"\n }\n },\n {\n \"id\": \"ci61aiyxgh544a5kan4heqgj\",\n \"label\": {\n \"default\": \"Northern European\"\n }\n },\n {\n \"id\": \"dhf987fs8wmj0g3ksam1u1li\",\n \"label\": {\n \"default\": \"South Asian\"\n }\n },\n {\n \"id\": \"j587mx6gqnox9b5r2mc5s3dm\",\n \"label\": {\n \"default\": \"Pacific Islander\"\n }\n },\n {\n \"id\": \"bnf4icwtwnurscpdd2qb6wuh\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Genetic Background\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Your Goals\"\n }\n },\n {\n \"id\": \"i7gs6xr8iu1j352rrkzrd5dh\",\n \"name\": \"Goals & Concerns\",\n \"elements\": [\n {\n \"id\": \"ggngrt0gj8lvow85321291ex\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"g8y27lar1npebud7ctaz7dnn\",\n \"label\": {\n \"default\": \"Age healthfully\"\n }\n },\n {\n \"id\": \"x2wdyqdl92vw5pua3n8ms7an\",\n \"label\": {\n \"default\": \"Prevent chronic disease\"\n }\n },\n {\n \"id\": \"p3rdydu1vd0a6rx5pmvlrq4t\",\n \"label\": {\n \"default\": \"Protect cognitive health\"\n }\n },\n {\n \"id\": \"bhz3ae7udvuqnk8xdnv2mlg4\",\n \"label\": {\n \"default\": \"Reduce toxins and support detoxification\"\n }\n },\n {\n \"id\": \"glbhr5on5277nff968bab5zd\",\n \"label\": {\n \"default\": \"Maintain hormone balance\"\n }\n },\n {\n \"id\": \"etsadzmziorkuh1dvkuk6o3f\",\n \"label\": {\n \"default\": \"Optimize and sustain performance\"\n }\n },\n {\n \"id\": \"nzikck3bu1hv7yrsvxu7w6nv\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which long-term health goals are most important to you?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"sww7cawdhntd4bhc7c1nhx9p\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"vapf35iyyw935g65su1td9qc\",\n \"label\": {\n \"default\": \"Fatigue/low energy\"\n }\n },\n {\n \"id\": \"qa3bd3w75os0e5ye2txaddl1\",\n \"label\": {\n \"default\": \"Decreased libido/sex drive\"\n }\n },\n {\n \"id\": \"swn24hx34jbnxzwe9xg6vmdy\",\n \"label\": {\n \"default\": \"Vaginal dryness\"\n }\n },\n {\n \"id\": \"uhs2khgow4dc8b1jq07bessi\",\n \"label\": {\n \"default\": \"Weight gain (especially midsection)\"\n }\n },\n {\n \"id\": \"rlhj3ct4ybny4jvckprjtb8f\",\n \"label\": {\n \"default\": \"Hot flashes/night sweats\"\n }\n },\n {\n \"id\": \"itzvef8nhxrsian4tmt611mx\",\n \"label\": {\n \"default\": \"Mood changes/irritability\"\n }\n },\n {\n \"id\": \"a8cl15mvvllyym3bpj35qc3z\",\n \"label\": {\n \"default\": \"Brain fog/concentration issues\"\n }\n },\n {\n \"id\": \"sfdxjszyaxsg7fpm1sja5mno\",\n \"label\": {\n \"default\": \"Difficulty sleeping\"\n }\n },\n {\n \"id\": \"sxeppc9upnm86g8pdgia32g2\",\n \"label\": {\n \"default\": \"Hair loss / thinning\"\n }\n },\n {\n \"id\": \"dzl76sercdudgo4h3zbjkzj5\",\n \"label\": {\n \"default\": \"Depression\"\n }\n },\n {\n \"id\": \"o5te58vocvecw83ubnudzxty\",\n \"label\": {\n \"default\": \"Anxiety\"\n }\n },\n {\n \"id\": \"ujf8xii0fnjqkosgqzf0jh1w\",\n \"label\": {\n \"default\": \"Joint pain\"\n }\n },\n {\n \"id\": \"d1szu3iu52mlkkucwcet3sgq\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which of the following symptoms are you currently experiencing?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"j5pajkm615zv69fv1m1flw92\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list your top 3-5 current and ongoing health concerns in order of priority:\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"vbdq376thtz2oluyiolt9fw8\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"n3meswes3djhw987qjzt5twd\",\n \"label\": {\n \"default\": \"Less than 3 months ago\"\n }\n },\n {\n \"id\": \"eb9qzn2w4ii69hzaid2itjh1\",\n \"label\": {\n \"default\": \"Between 3 and 12 months ago\"\n }\n },\n {\n \"id\": \"bfs911rsyjq5yinesxs3usku\",\n \"label\": {\n \"default\": \"Between 1 and 3 years ago\"\n }\n },\n {\n \"id\": \"r63ub7hcwrb7hoqq6nw9indr\",\n \"label\": {\n \"default\": \"Between 3 and 5 years ago\"\n }\n },\n {\n \"id\": \"hnss2nakpzdyi5ndtwj1fvqs\",\n \"label\": {\n \"default\": \"More than 5 years ago\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"When did these concerns begin?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"bjk57fth6a81u76e1qyszwd6\",\n \"type\": \"rating\",\n \"range\": 10,\n \"scale\": \"number\",\n \"headline\": {\n \"default\": \"On a scale of 1 to 10, how much do these concerns impact your daily life?\"\n },\n \"required\": true,\n \"lowerLabel\": {\n \"default\": \"Not at all\"\n },\n \"upperLabel\": {\n \"default\": \"Severely\"\n },\n \"isColorCodingEnabled\": false\n },\n {\n \"id\": \"z1mu4olyr5bitufdw2pwmkp8\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"g4g2241vypzhdn2anqcv94fa\",\n \"label\": {\n \"default\": \"Medications\"\n }\n },\n {\n \"id\": \"p6y1avgjhum03f4w06a36dar\",\n \"label\": {\n \"default\": \"Supplements\"\n }\n },\n {\n \"id\": \"jzjqpbje73po1srnh6opojl7\",\n \"label\": {\n \"default\": \"Diet changes\"\n }\n },\n {\n \"id\": \"zklqaad82zozf0ejd5y9xown\",\n \"label\": {\n \"default\": \"Exercise\"\n }\n },\n {\n \"id\": \"g5gdayoyiaj1roh6j4da4yie\",\n \"label\": {\n \"default\": \"Therapy or counseling\"\n }\n },\n {\n \"id\": \"sem86ydlbp1ylvs6oijka5gf\",\n \"label\": {\n \"default\": \"Alternative or complementary therapies\"\n }\n },\n {\n \"id\": \"jtlrz2ebax0t1xez2ehespp9\",\n \"label\": {\n \"default\": \"I have not tried any treatments\"\n }\n },\n {\n \"id\": \"fylneu96ahrgr2s2rehiufqo\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which treatments have you tried for these concerns?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"m8i4kwojh9l320g4kxma6mk9\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"p4nzwvl64yqe5opv8au5xm7l\",\n \"label\": {\n \"default\": \"1-3 months\"\n }\n },\n {\n \"id\": \"oz3kly04qvrxaojvgyocfnlt\",\n \"label\": {\n \"default\": \"4-6 months\"\n }\n },\n {\n \"id\": \"sdk7nsm10bfi6xyvqvrezwjg\",\n \"label\": {\n \"default\": \"7-12 months\"\n }\n },\n {\n \"id\": \"l0cxexm1dj7g2r2cjrx6hit9\",\n \"label\": {\n \"default\": \"A year or more\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"What is your expected timeline to see meaningful changes?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Medications\"\n }\n },\n {\n \"id\": \"a03z7171l9qd5jh015eq5xw8\",\n \"name\": \"Medications & Supplements\",\n \"elements\": [\n {\n \"id\": \"u2puugnwuic8bthec0onn0db\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"jzssl6fuz96lpoat1bpz5egy\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"yebawyjuzqsr2n9whjllxitn\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you currently taking any prescription or over-the-counter medications or peptides?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"am1t9hmjab4wuwadt3gr8d62\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list your medications:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"mxpestjlebgwb3m1340qyd3x\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"k3y4aqv2jxcldmqu1w76j7cx\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"b8z03xawaieo50didzlwh5za\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you currently take any dietary supplements?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"nnc3ay4bfsy8bxzeaza2adrd\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list your supplements:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"fyizo4n6zyaydyy5q679lhy2\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"olv6wptecdf7yf97hnc8a8i4\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"sbufr58xa2r8mo25ljwlll8c\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you take biotin supplements?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"y88provlgt4ul4h2ilzwjnk2\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"ejitm5ctagpwsoccoh176yme\",\n \"label\": {\n \"default\": \"<1mg\"\n }\n },\n {\n \"id\": \"kiblhip0bmdlyt53gjqzysp1\",\n \"label\": {\n \"default\": \"1-5mg\"\n }\n },\n {\n \"id\": \"kcjcgctaghx398ob90l21l4p\",\n \"label\": {\n \"default\": \">5mg\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"If yes, what dose?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"y9s0wzmerd71evft67qdjrsz\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"vlka7w2bznznkdduynqcs7tl\",\n \"label\": {\n \"default\": \"Acupuncture\"\n }\n },\n {\n \"id\": \"o1f5xv25kf13krzpo7jgn6w1\",\n \"label\": {\n \"default\": \"Chiropractic care\"\n }\n },\n {\n \"id\": \"baqow55qjnfuob9462iqczze\",\n \"label\": {\n \"default\": \"Massage therapy\"\n }\n },\n {\n \"id\": \"ufi82qf1a9ut955bjp3sxedz\",\n \"label\": {\n \"default\": \"Homeopathy\"\n }\n },\n {\n \"id\": \"tpy147yls3kj8vsqj8el7ybt\",\n \"label\": {\n \"default\": \"Detoxes or cleanses\"\n }\n },\n {\n \"id\": \"xrenylneazczeuntu4iwcu56\",\n \"label\": {\n \"default\": \"Other\"\n }\n },\n {\n \"id\": \"rzgsq0jswzuvvrn4cd8rulzq\",\n \"label\": {\n \"default\": \"None\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which natural or integrative therapies have you used?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"qruyyobecnvd2wd0b1a2ikml\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"pqujlq67869wdlf1ka8y8ean\",\n \"label\": {\n \"default\": \"Open to switching!\"\n }\n },\n {\n \"id\": \"jt6ktjni4ncads18l1ik7o1n\",\n \"label\": {\n \"default\": \"I'd like to keep my current supplement regimen\"\n }\n },\n {\n \"id\": \"other\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><span style=\\\"\\\">Do you want to switch your current supplements/peptides/HRT to Geviti, or continue with your current regimen?</span></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Allergies\"\n }\n },\n {\n \"id\": \"o1mnqb9uxl4eqp1vh797bcnl\",\n \"name\": \"Allergies & Conditions\",\n \"elements\": [\n {\n \"id\": \"cq65pyfz8uprox2b8xa8q1to\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"nq8ted5mvd0381j0ehhyg0qb\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"nyzzb65v6msz057abruaqhwe\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you have any allergies or sensitivities?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ihgmaxdr6mn5uijg43egcd6u\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list your allergies:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"cm63q13bevl5fa63l51i4n3q\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"dtjdzq83wibo74btjx8oojvz\",\n \"label\": {\n \"default\": \"High blood pressure\"\n }\n },\n {\n \"id\": \"s0xgxab3oekwonr9bqyxc1pf\",\n \"label\": {\n \"default\": \"Heart disease\"\n }\n },\n {\n \"id\": \"rb3tlutsgwtrg5vpuosvdhao\",\n \"label\": {\n \"default\": \"Stroke/TIA\"\n }\n },\n {\n \"id\": \"xt78396lnfx7hgbyln28bb3o\",\n \"label\": {\n \"default\": \"Blood clots/DVT\"\n }\n },\n {\n \"id\": \"ncw8xfy6w1bbf3e2c6yc151x\",\n \"label\": {\n \"default\": \"Diabetes/pre-diabetes\"\n }\n },\n {\n \"id\": \"cok9k4sih35hxeycc99o5c4i\",\n \"label\": {\n \"default\": \"Cancer\"\n }\n },\n {\n \"id\": \"mxpqzly9k4ww1acrbhv5kwk7\",\n \"label\": {\n \"default\": \"Thyroid disorder\"\n }\n },\n {\n \"id\": \"h5lbowtnbizgzkrp7a9r5uhq\",\n \"label\": {\n \"default\": \"Liver disease\"\n }\n },\n {\n \"id\": \"q826p92b7whm7zyf6iqmt3a3\",\n \"label\": {\n \"default\": \"Kidney disease\"\n }\n },\n {\n \"id\": \"om45sgdjjl9zzt7wocdj0pcr\",\n \"label\": {\n \"default\": \"Neurological/emotional conditions\"\n }\n },\n {\n \"id\": \"bpqsqoskdealzm4gv6f8xtx6\",\n \"label\": {\n \"default\": \"Autoimmune conditions\"\n }\n },\n {\n \"id\": \"bx0s0cl5qv0hbyexebnqofxf\",\n \"label\": {\n \"default\": \"Sleep apnea\"\n }\n },\n {\n \"id\": \"n6y8xns6sv90jautx92ay5cl\",\n \"label\": {\n \"default\": \"Respiratory conditions\"\n }\n },\n {\n \"id\": \"mvaz2kkps3syml4d8y9vw435\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n },\n {\n \"id\": \"s3q8db3l1z18vef1bl8vhate\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which medical conditions have you been diagnosed with?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"wjufc9doacgltb8qc82jrb3v\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"If you selected any of the above, please list specific diagnosis along with estimated date of diagnosis and if this is a current issue:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"jyirs6y4qdbde3ufj6kpcld0\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"If this is a current condition, how is it being treated/managed?\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Environmental\"\n }\n },\n {\n \"id\": \"kxiy6d8zrq7q9mu0rtw0uhtl\",\n \"name\": \"Environmental & Family\",\n \"elements\": [\n {\n \"id\": \"ptd1407e9aafu3ncpwdqw7tl\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"mnanper7oveb3s2jinclyt9b\",\n \"label\": {\n \"default\": \"Mold\"\n }\n },\n {\n \"id\": \"ke52ecv2zechjs7odekeyytn\",\n \"label\": {\n \"default\": \"Renovations\"\n }\n },\n {\n \"id\": \"ytlabkxa5dvy6u060wp5ihdc\",\n \"label\": {\n \"default\": \"Electromagnetic radiation\"\n }\n },\n {\n \"id\": \"ezj2uzeao5kx76n8hbddhhnn\",\n \"label\": {\n \"default\": \"Water leaks\"\n }\n },\n {\n \"id\": \"mr5e8pj3sgn0dl1n55bc6z30\",\n \"label\": {\n \"default\": \"Harsh chemicals\"\n }\n },\n {\n \"id\": \"wbj4336wusnli5u50mus8ftp\",\n \"label\": {\n \"default\": \"Damp environments\"\n }\n },\n {\n \"id\": \"k8sn2njon15vsalp90w4dtho\",\n \"label\": {\n \"default\": \"Pesticides / Herbicides\"\n }\n },\n {\n \"id\": \"tpxqggjqlyr8yt7kybb8afre\",\n \"label\": {\n \"default\": \"Cleaning chemicals\"\n }\n },\n {\n \"id\": \"bviphabv9r0wud7q3larpq1h\",\n \"label\": {\n \"default\": \"Heavy metals\"\n }\n },\n {\n \"id\": \"uxz10kl7lguihcd7217kf39x\",\n \"label\": {\n \"default\": \"Airplane Travel\"\n }\n },\n {\n \"id\": \"epe98x5sv32eh3g93bileyr2\",\n \"label\": {\n \"default\": \"Paints\"\n }\n },\n {\n \"id\": \"m1o7mz17mrhxj5lvczantvgr\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"To the best of your knowledge, in your work or home environment, are you regularly exposed to (check all that apply)\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"jzsl7oqs8zfzazfqzat0uvs7\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"le6ptj8bfv7wut9jnv1qnegh\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"z8up2ik65xn2ca6z16lpwzcz\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you have any pets or farm animals?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ym4t66zx598v4o0h14x1iim0\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"zz2e9u4ytmvk18jgndkphlq2\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"necg43h1l2jzng5g3ynyrugz\",\n \"label\": {\n \"default\": \"Endometriosis\"\n }\n },\n {\n \"id\": \"upjn5qnrk1gytmv8ouv0cl7t\",\n \"label\": {\n \"default\": \"PCOS (Polycystic Ovary Syndrome)\"\n }\n },\n {\n \"id\": \"d49guwhj873sdxw25d5trifm\",\n \"label\": {\n \"default\": \"Uterine fibroids\"\n }\n },\n {\n \"id\": \"s011kwuhnqii30ghutctk61c\",\n \"label\": {\n \"default\": \"Ovarian cysts\"\n }\n },\n {\n \"id\": \"lt1fkljk6zeyqu6twka77zy0\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n },\n {\n \"id\": \"ibsc6gndibkys63dz4cd5xsd\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which gynecological conditions have you been diagnosed with?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"v5reto9rx3qqlkf95pmqcrdr\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"If you selected any of the above, please list specific diagnosis along with estimated date of diagnosis and if this is a current issue:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"xpsueqst7qnwfrwetcih222e\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"ybtzel3fry788gcjq0unvg70\",\n \"label\": {\n \"default\": \"Lyme disease\"\n }\n },\n {\n \"id\": \"hmldkzme2y1t83idduwxtwln\",\n \"label\": {\n \"default\": \"Candida overgrowth\"\n }\n },\n {\n \"id\": \"q0cgtdrmj0pnxn4onxo96t0l\",\n \"label\": {\n \"default\": \"Epstein\\u2013Barr virus (EBV)\"\n }\n },\n {\n \"id\": \"npjy9z55kx4e7qvl3u2zyir2\",\n \"label\": {\n \"default\": \"Mold exposure\"\n }\n },\n {\n \"id\": \"c0keqg8y94kovpxri534gpzu\",\n \"label\": {\n \"default\": \"Heavy metal exposure\"\n }\n },\n {\n \"id\": \"cghmuv7elrs6fj0gcjbwbr37\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Have you had any of the following chronic infections or environmental exposures?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"vrln2lfmzprvz1yifcnkbp4f\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"th78vsdzyp4juchotvjrz90a\",\n \"label\": {\n \"default\": \"High blood pressure\"\n }\n },\n {\n \"id\": \"qhbdx6q3p8mwj1c76ef76lpe\",\n \"label\": {\n \"default\": \"Heart disease\"\n }\n },\n {\n \"id\": \"n22w77jf7z9rm18f51cof5ku\",\n \"label\": {\n \"default\": \"Stroke/TIA\"\n }\n },\n {\n \"id\": \"bntufqkftkmsixc8jxhl01fp\",\n \"label\": {\n \"default\": \"Blood clots/DVT\"\n }\n },\n {\n \"id\": \"lhzb3ydsofnoo663oq1o32ew\",\n \"label\": {\n \"default\": \"Diabetes / pre diabetes\"\n }\n },\n {\n \"id\": \"w1w04emwhkpzr301edjsrmya\",\n \"label\": {\n \"default\": \"Thyroid Disorder\"\n }\n },\n {\n \"id\": \"gtjnblyh67wbybt4pc97vi5n\",\n \"label\": {\n \"default\": \"Liver disease\"\n }\n },\n {\n \"id\": \"h9fr8blvbk52spx48j4pyjvi\",\n \"label\": {\n \"default\": \"Kidney disease\"\n }\n },\n {\n \"id\": \"nrmqnogwu1yttijauma3vvd9\",\n \"label\": {\n \"default\": \"Neurological conditions\"\n }\n },\n {\n \"id\": \"mjmkhdb0vaadx1mbst0p610j\",\n \"label\": {\n \"default\": \"Autoimmune conditions\"\n }\n },\n {\n \"id\": \"gtaj6gejz2sww59exogyt8h0\",\n \"label\": {\n \"default\": \"Sleep apnea\"\n }\n },\n {\n \"id\": \"l3pex0w4tbvmr17u54iwd3sg\",\n \"label\": {\n \"default\": \"Respiratory conditions\"\n }\n },\n {\n \"id\": \"a5bxbvthqucyjwdcyymn8j42\",\n \"label\": {\n \"default\": \"Menopause-related issues\"\n }\n },\n {\n \"id\": \"tee86hqovt257djkzpj99gzo\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n },\n {\n \"id\": \"ee5980okigrm25o4eq8bc93w\",\n \"label\": {\n \"default\": \"Hormone-sensitive cancers\"\n }\n },\n {\n \"id\": \"qyqj7u3hc5p5ihw7e7ici1e6\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which medical conditions apply to your immediate (parents, siblings, grandparents) family members?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ws5e2nmnq5mda6hsqerx5am5\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"If you selected any, please list which family members have the conditions:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Menstrual Health\"\n }\n },\n {\n \"id\": \"xa9d58pz8yvk8wj3t44oy5yr\",\n \"name\": \"Menstrual Health\",\n \"elements\": [\n {\n \"id\": \"fivcg4wrbh4sl439mjtj8s96\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"lo37aeumh9zde53vw8jh7cax\",\n \"label\": {\n \"default\": \"Regular menstrual cycles\"\n }\n },\n {\n \"id\": \"kl8m650k0nt1zafgmubfnpda\",\n \"label\": {\n \"default\": \"Perimenopausal (symptoms appearing and/or cycle changes have begun, but still having periods)\"\n }\n },\n {\n \"id\": \"lmh54ezng8un3b5y57bxq567\",\n \"label\": {\n \"default\": \"Postmenopausal (no period for 12 months or longer)\"\n }\n },\n {\n \"id\": \"vkr2vwlzpustxtjq7il6vuz5\",\n \"label\": {\n \"default\": \"Surgical menopause\"\n }\n },\n {\n \"id\": \"kyufcf6sbgk2qgtqq18vabru\",\n \"label\": {\n \"default\": \"Unsure\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Which best describes your current menstrual status?</strong></b></p>\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"hb370iiou7kfv32bsoj2yai7\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Age at first period:</strong></b></p>\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"zgaplcoee187bvq852eajx0g\",\n \"type\": \"date\",\n \"format\": \"M-d-y\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">If you are currently having periods, when was the first day of your most recent menstrual period?</strong></b></p>\"\n },\n \"required\": false\n },\n {\n \"id\": \"qx2u9rejd5p37lb6n0ufbx1y\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">To the best of your knowledge, how many days is your typical monthly cycle (from the start of one period to the other i.e. 28 days)?</strong></b></p>\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"rje7ggquaodw039nb95oyasg\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"jtetbzxjobilp5c70wso4lbh\",\n \"label\": {\n \"default\": \"Heavy/painful periods\"\n }\n },\n {\n \"id\": \"fv2axkl4idcld6h83qamy08x\",\n \"label\": {\n \"default\": \"PMS symptoms\"\n }\n },\n {\n \"id\": \"aswk6qouchlkbawirwh8fmnq\",\n \"label\": {\n \"default\": \"Spotting between periods\"\n }\n },\n {\n \"id\": \"j7zf7bkijp58zmchi2uysy4n\",\n \"label\": {\n \"default\": \"Menstrual migraines\"\n }\n },\n {\n \"id\": \"mjecajtn1e6133hgz94ub736\",\n \"label\": {\n \"default\": \"Irregular cycles\"\n }\n },\n {\n \"id\": \"f52levdzhyrs1sb7w06rssok\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">If applicable, which cycle-related issues do you experience?</strong></b></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"llekb728boo17m07i7sb9tpd\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"dgyjo07663q1rqjratfzseqg\",\n \"label\": {\n \"default\": \"Bloating\"\n }\n },\n {\n \"id\": \"ttotdammtpt3xzumarhs752k\",\n \"label\": {\n \"default\": \"Breast tenderness\"\n }\n },\n {\n \"id\": \"n6edv78b44lqa0lf5kul2t21\",\n \"label\": {\n \"default\": \"Irritability\"\n }\n },\n {\n \"id\": \"b1h6pdrily20iep572c0pbwc\",\n \"label\": {\n \"default\": \"Other\"\n }\n },\n {\n \"id\": \"zhl691o5k63hbegrmftvxsf9\",\n \"label\": {\n \"default\": \"None\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Do you experience any of the following premenstrual problems?</strong></b></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Maternity\"\n }\n },\n {\n \"id\": \"v3pjaavuffuomzx6a48n78h0\",\n \"name\": \"Maternity\",\n \"elements\": [\n {\n \"id\": \"heosmbysulg7jxqkdjir7ktk\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"kpobpxl6pvl6wamrepwg419r\",\n \"label\": {\n \"default\": \"Pregnancies\"\n }\n },\n {\n \"id\": \"dwidzwfxxram9k8vicfny7v3\",\n \"label\": {\n \"default\": \"Miscarriages\"\n }\n },\n {\n \"id\": \"dc26721obrsmlkolktrpwro1\",\n \"label\": {\n \"default\": \"Abortions\"\n }\n },\n {\n \"id\": \"z2vn6ljqdmraaua8141ricqy\",\n \"label\": {\n \"default\": \"Living children\"\n }\n },\n {\n \"id\": \"xdv1hd4m2bn12yfu24tg9swd\",\n \"label\": {\n \"default\": \"Vaginal deliveries\"\n }\n },\n {\n \"id\": \"h30xgx4rg2x0910z1bd4fczd\",\n \"label\": {\n \"default\": \"Cesarean\"\n }\n },\n {\n \"id\": \"ytbh9znpjwczvpb2esqgz4wk\",\n \"label\": {\n \"default\": \"Term births\"\n }\n },\n {\n \"id\": \"v1px4k1zr4wd7ptbyxg8ksk0\",\n \"label\": {\n \"default\": \"Premature births\"\n }\n },\n {\n \"id\": \"cm296ai761bwllrn7c8bssip\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Maternity History (please select all that apply)\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"nmomu4e03n2u8wbaaikdbfa7\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"cy5a7jd9h17mb8zkzf8cgac6\",\n \"label\": {\n \"default\": \"Toxemia (high blood pressure)\"\n }\n },\n {\n \"id\": \"wq6zzauepgsfs8j7i3pwj48c\",\n \"label\": {\n \"default\": \"Post-partum depression\"\n }\n },\n {\n \"id\": \"bribek2dajsqv3vljblh6gtw\",\n \"label\": {\n \"default\": \"Diabetes\"\n }\n },\n {\n \"id\": \"dunigi9448fg41buh3y4d4om\",\n \"label\": {\n \"default\": \"Issues with breast-feeding\"\n }\n },\n {\n \"id\": \"zudmxvbwx2pwvnxx92ibavrz\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n },\n {\n \"id\": \"rxophxuqngdtu5vbalpul6on\",\n \"label\": {\n \"default\": \"Other\"\n }\n },\n {\n \"id\": \"w9b6hnnstd47igb0bhgb5n14\",\n \"label\": {\n \"default\": \"N/A\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Did you develop any problems in or after pregnancy? (check all that apply)</strong></b></p>\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"eble6x0lt796un966f6unqlx\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"aub1pje8rpij9cuabosldf6v\",\n \"label\": {\n \"default\": \"0\\u20136 weeks\"\n }\n },\n {\n \"id\": \"oi25ri0w3jmmelpoxt4ua3tj\",\n \"label\": {\n \"default\": \"6 weeks\\u20133 months\"\n }\n },\n {\n \"id\": \"zebqr3780zfvz7hawb6lmu6f\",\n \"label\": {\n \"default\": \"3\\u20136 months\"\n }\n },\n {\n \"id\": \"d1qooh32ez280r1ls3nipjmx\",\n \"label\": {\n \"default\": \"6\\u201312 months\"\n }\n },\n {\n \"id\": \"exoyrr0v9pdfqtcxn1j4yfn6\",\n \"label\": {\n \"default\": \"More than 12 months ago\"\n }\n },\n {\n \"id\": \"p18fj1wgzbdih7f0bm30v4e5\",\n \"label\": {\n \"default\": \"N/A\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"If applicable, how long ago was your most recent delivery?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"wd8ixy3ymr5chk9e2c0bqmtd\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"gayn8ap5irxazezf0pi93ruj\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"wv3w90ot43gqak9s8n8vzx3j\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you currently breastfeeding?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"e3scav40pkcuplq84zhmt5k6\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"ww6lfr3nl58zq2ekv3fw5ozr\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"xfeb7o3xnvohrxqids574zuj\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Are you currently pregnant?</strong></b></p>\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ecpya6416e0knupwcej44cfz\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"kc8vkxvhyl7fpnoh932k4osh\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"xkvo08a6u9odpxc8tfuzehej\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\">Are you currently trying to conceive?</strong></b></p>\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"tnn8qdj9yobrp1aqy10s6m4h\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"igh4nq2nueocw6l4qmyjpy4w\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"sqohpi3ajcpgm10mu7bxbi68\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"<p class=\\\"fb-editor-paragraph\\\"><b><strong class=\\\"fb-editor-text-bold\\\" style=\\\"\\\"> Are you planning for future pregnancies?</strong></b></p>\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Hormones\"\n }\n },\n {\n \"id\": \"qy16ctdxext466rkc4ebtsb9\",\n \"name\": \"Hormones\",\n \"elements\": [\n {\n \"id\": \"jn6enqdup2adlm5t7crqfd3x\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Are you currently or have you previously used hormonal birth control? If yes, please list which kinds and if it is current or past.\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"z8gj5nafr4xr0xnjosinw356\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"fa86bh2zaa7rsdxgag1wu4cf\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"edrfog85cn84rs5z9lu776e1\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Have you had your hormone levels tested before?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"y94j130ia429zrmoo03ih5ae\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"ef4xtsvq6sbasttt3fqehdon\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"vxhs5cxx5ryvnwf8hgbc9c9u\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you currently on hormone replacement therapy (HRT)?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"v52yehqt8ryywnkgxsb3a57s\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"d7u43yncuw0ol4ogwdnjfe6j\",\n \"label\": {\n \"default\": \"Testosterone injectable\"\n }\n },\n {\n \"id\": \"fkyf29fpe3t2z4pgeoftakvr\",\n \"label\": {\n \"default\": \"Testosterone topical/pellet\"\n }\n },\n {\n \"id\": \"vl66v5ubu9g49hngfmm7xkid\",\n \"label\": {\n \"default\": \"Estrogen\"\n }\n },\n {\n \"id\": \"hmf9ezt43blnnjha6jdhj3ft\",\n \"label\": {\n \"default\": \"Progesterone\"\n }\n },\n {\n \"id\": \"uxqaabvrb1y04gfr9bczey8x\",\n \"label\": {\n \"default\": \"DHEA\"\n }\n },\n {\n \"id\": \"d4ifdeah8a7lszuey2z92j6q\",\n \"label\": {\n \"default\": \"Thyroid hormone\"\n }\n },\n {\n \"id\": \"angfqltvce6d6m3h2lpfsynl\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"If yes, which type(s) of HRT are you currently using? (check all that apply)\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"e1zlacbbho7cu7cptrq3njq5\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"l9c1tq2x7bm37e4vhf07f95j\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"ez20u4gbyvarmt8hr03ljc4u\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Have you had any surgeries or injuries involving the reproductive system or pituitary gland?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ppwck6gxpc3v2vt9zxqt7hku\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe your surgery or injury:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Gynecological\"\n }\n },\n {\n \"id\": \"dsq3q75bfqoxomun49whr5pu\",\n \"name\": \"Gynecological Conditions\",\n \"elements\": [\n {\n \"id\": \"h16oatmqm7kv45udafre9gt5\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"lp6pqx9cb41ph4gqgxjx9pcp\",\n \"label\": {\n \"default\": \"Endometriosis\"\n }\n },\n {\n \"id\": \"msoyiye11iwyq5ijy2ydbiiv\",\n \"label\": {\n \"default\": \"Fibrocystic breasts\"\n }\n },\n {\n \"id\": \"ko88byeaqv8rdf5tmd2darsx\",\n \"label\": {\n \"default\": \"Pelvic inflammatory disease\"\n }\n },\n {\n \"id\": \"tphc3gw1ld48sbgmh5gp1at6\",\n \"label\": {\n \"default\": \"Sexually transmitted disease\"\n }\n },\n {\n \"id\": \"uy7yp4vpnnv8lnlajjwavzgk\",\n \"label\": {\n \"default\": \"Reproductive cancer\"\n }\n },\n {\n \"id\": \"f4mjocuehg6s1csmq9gx4qm6\",\n \"label\": {\n \"default\": \"Infertility\"\n }\n },\n {\n \"id\": \"mtc1zwu5neicsi4tihtzac05\",\n \"label\": {\n \"default\": \"Reoccurring vaginal infection\"\n }\n },\n {\n \"id\": \"b1c6v3r19sogm6gbec63u0qf\",\n \"label\": {\n \"default\": \"Ovarian cysts\"\n }\n },\n {\n \"id\": \"m4mr1s3ozwb5y81iokilqhqt\",\n \"label\": {\n \"default\": \"None\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Other Gynecological Conditions (check if applicable)\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Weight\"\n }\n },\n {\n \"id\": \"ifha47jl2w7ddstx202251p8\",\n \"name\": \"Weight Management\",\n \"elements\": [\n {\n \"id\": \"nz6sg1uw1xo6482sck80v1fv\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"vhorc1bpuon8hyh5kf2v7g8b\",\n \"label\": {\n \"default\": \"My weight has been mostly stable.\"\n }\n },\n {\n \"id\": \"lk4lx1fqalchmruoiifiq89v\",\n \"label\": {\n \"default\": \"My weight fluctuates up and down.\"\n }\n },\n {\n \"id\": \"j73moerq1k1xut3adm2b7lez\",\n \"label\": {\n \"default\": \"I have had a recent weight gain.\"\n }\n },\n {\n \"id\": \"qsdy93awk6g3vf2lhyoqqsf4\",\n \"label\": {\n \"default\": \"I have had a recent weight loss.\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which statement best describes your recent weight pattern?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"gmw9igr51dy6wa8cqsw0zab4\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"gplnd62v8g6ex93yjyovi7xy\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"wyl4ddm2pfpt90u1c38w18na\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Have you used prescription medications for weight loss?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"o0x7cqnbddnjqy0irpx8sdp9\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please list:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"qt7qsapl6ur301r1jrcagcbp\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"If you are trying to lose weight please elaborate on what you've tried so far and whether or not it has helped:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Digestion\"\n }\n },\n {\n \"id\": \"vptd5x8l8xczastcarfl6jma\",\n \"name\": \"Digestion\",\n \"elements\": [\n {\n \"id\": \"ivp8f0m3mmq5nkspoi7hbw5t\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"kmhhu8tvgfcbe59kmlnuitg3\",\n \"label\": {\n \"default\": \"1\\u20133 times per day\"\n }\n },\n {\n \"id\": \"s5hjxktx1oj89gwtrhsid0xb\",\n \"label\": {\n \"default\": \"More than 3 times per day\"\n }\n },\n {\n \"id\": \"mdacw59eb99ta60uikh2gz8t\",\n \"label\": {\n \"default\": \"Not regularly every day\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Bowel Movement Frequency\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ocaoxm3caykmtpeiz52fkauk\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"d8yyl51f4j4ecxm9fxnch9a6\",\n \"label\": {\n \"default\": \"Soft & well formed\"\n }\n },\n {\n \"id\": \"mkmxpt1h26yk3grcbnf4apic\",\n \"label\": {\n \"default\": \"Easy to pass\"\n }\n },\n {\n \"id\": \"ckdhvrjg0yid25xizu2odcro\",\n \"label\": {\n \"default\": \"Often float\"\n }\n },\n {\n \"id\": \"caqkudwcmxq5cn8z4pi0rhxc\",\n \"label\": {\n \"default\": \"Difficult to pass\"\n }\n },\n {\n \"id\": \"ak1elfwpo1hrnaxrqksfmejt\",\n \"label\": {\n \"default\": \"Diarrhea\"\n }\n },\n {\n \"id\": \"gvboa4w1wmm07g4rbdhtcl18\",\n \"label\": {\n \"default\": \"Thin, long or narrow\"\n }\n },\n {\n \"id\": \"fz8khvdyyiozodl8gjuvw678\",\n \"label\": {\n \"default\": \"Small and hard\"\n }\n },\n {\n \"id\": \"gh3w6ndsz4h57rf7xtbnh7uy\",\n \"label\": {\n \"default\": \"Loose but not watery\"\n }\n },\n {\n \"id\": \"ycd1ueim0n48w4233g9o9ql0\",\n \"label\": {\n \"default\": \"Alternating between hard and loose\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Bowel Movement Consistency\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"brqvyaodecdf5tb5fzdbkl9u\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"oqz082bfe7hyzci7nsc9gg5t\",\n \"label\": {\n \"default\": \"Medium brown\"\n }\n },\n {\n \"id\": \"qqzt5eyvssxy8j3vvjzrb0vv\",\n \"label\": {\n \"default\": \"Very dark or black\"\n }\n },\n {\n \"id\": \"n0a478jzfrms4oy8kpxfhnvg\",\n \"label\": {\n \"default\": \"Greenish\"\n }\n },\n {\n \"id\": \"r28tzsnw9tqmznwgr08wqrtb\",\n \"label\": {\n \"default\": \"Blood is visible\"\n }\n },\n {\n \"id\": \"cd6n4c2ql24tesac61lyitln\",\n \"label\": {\n \"default\": \"Variable\"\n }\n },\n {\n \"id\": \"av32v56xjlnp7a0q7wm6lzty\",\n \"label\": {\n \"default\": \"Yellow, light brown\"\n }\n },\n {\n \"id\": \"srogtqd7ufghmw7svneal4t2\",\n \"label\": {\n \"default\": \"Chalky colored\"\n }\n },\n {\n \"id\": \"ubwis7ajeqi0w3a8a0g81jc4\",\n \"label\": {\n \"default\": \"Greasy, shiny\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Bowel Movement Color\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"u4vxm139vp2tru7l7ofnxrig\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"togks1dpamvp8vgixz108fyj\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"cxpplq333b7mbonmr5jfmrnx\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you experience any ongoing digestion issues?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"pxsvycmwcg9yj12lharnlsar\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Diet\"\n }\n },\n {\n \"id\": \"tuoo1k4oig7vqpuzg57wecjg\",\n \"name\": \"Diet & Nutrition\",\n \"elements\": [\n {\n \"id\": \"wg6achdqgdh691g5on2o4kz2\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"fh2jlx2y3nsskv9y5u6lrv4r\",\n \"label\": {\n \"default\": \"Standard (no specific diet)\"\n }\n },\n {\n \"id\": \"zme7loljxs7542vt9sk0sw3t\",\n \"label\": {\n \"default\": \"High-protein (120g a day or more)\"\n }\n },\n {\n \"id\": \"od6w3ya3e49ahhrcv4rpd764\",\n \"label\": {\n \"default\": \"Mediterranean\"\n }\n },\n {\n \"id\": \"qequ4mrwux7ewp5zgbaldbj8\",\n \"label\": {\n \"default\": \"Ketogenic (keto)\"\n }\n },\n {\n \"id\": \"hxq7stftht4kd78qgb4k69ka\",\n \"label\": {\n \"default\": \"Paleo\"\n }\n },\n {\n \"id\": \"o9m2exbd59dt1o7b93kmdblu\",\n \"label\": {\n \"default\": \"Vegan\"\n }\n },\n {\n \"id\": \"fxdd7qsu0wqgdd9kl5r0tyio\",\n \"label\": {\n \"default\": \"Vegetarian\"\n }\n },\n {\n \"id\": \"xdy5k8969qy59nvjt8z29qrr\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which of the following best describes your current eating pattern or diet style?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ogljmjuocx2k3a3jb0jzgzrp\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"u97ltxhvdnoxoag4klo998pf\",\n \"label\": {\n \"default\": \"Mostly whole, minimally processed foods\"\n }\n },\n {\n \"id\": \"slfnr4d6na2zhgnijxanjjlt\",\n \"label\": {\n \"default\": \"A balanced mix of whole and processed foods\"\n }\n },\n {\n \"id\": \"tju0dntyh4qi0dv6cqd0bevv\",\n \"label\": {\n \"default\": \"Mostly processed or convenience foods\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"How would you describe the overall quality of your diet?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"rk26phgfbww5wato0ybbu38f\",\n \"type\": \"rating\",\n \"range\": 10,\n \"scale\": \"number\",\n \"headline\": {\n \"default\": \"On a scale of 1-10, how confident are you in your ability and readiness to change your nutrition patterns, if needed?\"\n },\n \"required\": true,\n \"lowerLabel\": {\n \"default\": \"Not willing\"\n },\n \"upperLabel\": {\n \"default\": \"Very willing\"\n },\n \"isColorCodingEnabled\": false\n },\n {\n \"id\": \"ij7h42ovqyadvrns77dkxfjk\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"g4telv92rbpobjzl5ecubqvt\",\n \"label\": {\n \"default\": \"1 meal a day\"\n }\n },\n {\n \"id\": \"coe57vhbe3tnwbmvzmyrfbbw\",\n \"label\": {\n \"default\": \"2-3 meals a day\"\n }\n },\n {\n \"id\": \"d2hhdyecpwtkrhso0eatbsz8\",\n \"label\": {\n \"default\": \"3 meals a day or more\"\n }\n },\n {\n \"id\": \"g4jar1s6i8ekz18u3qzxu2yz\",\n \"label\": {\n \"default\": \"Varies\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"How often do you eat?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"golk5jopbl7nb3g37oxui43b\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"bp2bx9clyczuvdmxb3kgk53f\",\n \"label\": {\n \"default\": \"0 meals\"\n }\n },\n {\n \"id\": \"x9p7ms9jtqlt3npezpeoknd0\",\n \"label\": {\n \"default\": \"1\\u20132 meals\"\n }\n },\n {\n \"id\": \"dgzddwpli5rigv4fal8231cs\",\n \"label\": {\n \"default\": \"3\\u20135 meals\"\n }\n },\n {\n \"id\": \"vh6gb4bfdj07ckb2ny2aufuk\",\n \"label\": {\n \"default\": \"6 or more meals\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"How many meals do you typically eat out per week?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"cva0i5ybkfgqp14796xhlexu\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"To the best of your ability, please record what you eat in a typical day. Include meals (breakfast, lunch, dinner, snacks), fluids and time of day:\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"nydv15x1loaokhq9dbydlivt\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"a15ejhxy7hxvunb6b3wpf33j\",\n \"label\": {\n \"default\": \"Less than 4 cups / < 1 liter\"\n }\n },\n {\n \"id\": \"llvzf0s6vzpo6k5pumbbqwm4\",\n \"label\": {\n \"default\": \"4-7 cups / 1-2 liters\"\n }\n },\n {\n \"id\": \"w4pxrpr2yb3ezoetdnws7mv2\",\n \"label\": {\n \"default\": \"8-11 cups / 2-3 liters\"\n }\n },\n {\n \"id\": \"py2fsud64vc06pziltaeb3dq\",\n \"label\": {\n \"default\": \"12+ cups / > 3 liters\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Approximately how much water do you drink each day?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Exercise\"\n }\n },\n {\n \"id\": \"st6zts8wti6ab6zaoy34sfkt\",\n \"name\": \"Exercise\",\n \"elements\": [\n {\n \"id\": \"i1uct6typq3z5beip2pcgfx4\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"jyrmyb5083camdwnvneqntly\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"oayxbkfqorblm4bxybbeocw8\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you exercise on a regular basis?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"id1r56spatomlz9980dpddja\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe your exercise routine:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"kojx7b9wmf87irn6aaw2y9ob\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Are there any problems that limit exercise?\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Sleep\"\n }\n },\n {\n \"id\": \"fckg1nrzisggzresxfvljzey\",\n \"name\": \"Sleep\",\n \"elements\": [\n {\n \"id\": \"t3y953kesylv15job4e0qce5\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"v5cmciw36fbepogyup5ynl12\",\n \"label\": {\n \"default\": \"Fewer than 5 hours\"\n }\n },\n {\n \"id\": \"npt36eq9o02po6p3qqym2g9l\",\n \"label\": {\n \"default\": \"5\\u20136 hours\"\n }\n },\n {\n \"id\": \"p8ixnueqfd97qp0aasclu3hh\",\n \"label\": {\n \"default\": \"6\\u20137 hours\"\n }\n },\n {\n \"id\": \"imi1kometojos01kz2b2g681\",\n \"label\": {\n \"default\": \"7\\u20138 hours\"\n }\n },\n {\n \"id\": \"cegxexklygpbed358tbjgdad\",\n \"label\": {\n \"default\": \"More than 8 hours\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"On average, how many hours of sleep do you get per night?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"xexckhe0eees2yg8lqiv8ntn\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"p382g05om6fzf7fo7hwc6nna\",\n \"label\": {\n \"default\": \"Very Good\"\n }\n },\n {\n \"id\": \"f3yx83m0k8g39y4eiwr5wlpx\",\n \"label\": {\n \"default\": \"Good\"\n }\n },\n {\n \"id\": \"otkpbadrn7zh44e2wny4m2y4\",\n \"label\": {\n \"default\": \"Fair\"\n }\n },\n {\n \"id\": \"stvunk11urhxwoib04tpdur1\",\n \"label\": {\n \"default\": \"Poor\"\n }\n },\n {\n \"id\": \"qceg8j5rcl2hp3kq6oqfmwl9\",\n \"label\": {\n \"default\": \"Very Poor\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"How would you rate your overall sleep quality?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"gdtiutut6d88dicgev88yvpt\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"gomrpwb5rlydk03cbdklqxld\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"kfw93kz63698dgjqhjqv8bgj\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you have trouble falling asleep?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"mus81ezl1vutp0xbd3xxu5ii\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"dqhmr1ezrl63i375l34r9okd\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"fvky54pahqqscgd6kjakeen7\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you have trouble staying asleep?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"qyje63j5rly2524epjmwgyzw\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"ls4zjx340hsqgh2144i62lvx\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"hpr6ek1yi7fnqbrq5ay4ipwd\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you usually feel rested when you wake up?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"k0k8g4y0i5rxz7m0201ckvcm\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Do you use sleeping aids? If so, please list below:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": true,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Stress & Lifestyle\"\n }\n },\n {\n \"id\": \"txap4q6nr5u0kujspbwf4cjo\",\n \"name\": \"Stress & Lifestyle\",\n \"elements\": [\n {\n \"id\": \"hyviapv5gbgap227psj2cylk\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"eh7sh0boxyq2mfs5u221a7lt\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"quwuga0zj3cs5yjk7tphp13j\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you feel you have an excessive amount of stress in your life?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"dkdjgscqefzv4shefeof4vse\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"f2f3zoch0w1x47i88grzo4oi\",\n \"label\": {\n \"default\": \"Work\"\n }\n },\n {\n \"id\": \"ibx55dr3hi9xlvotkv3miurz\",\n \"label\": {\n \"default\": \"Family / Relationships\"\n }\n },\n {\n \"id\": \"ct663bhoiva3pptq6lqed0mm\",\n \"label\": {\n \"default\": \"Health\"\n }\n },\n {\n \"id\": \"ux2pvt1ag0fleybzs2t9gwpg\",\n \"label\": {\n \"default\": \"Finances\"\n }\n },\n {\n \"id\": \"e6i3zlnwtjn847twb9094220\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"What is your primary source of stress / excess stress in your life?\"\n },\n \"required\": false,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"vshr18brhz3gclsjzwt9t97p\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"zjp16db9dg4ir47jiryq3mz1\",\n \"label\": {\n \"default\": \"Exercise\"\n }\n },\n {\n \"id\": \"gwk1zxiamlimq93w44657zv3\",\n \"label\": {\n \"default\": \"Meditation\"\n }\n },\n {\n \"id\": \"yh34lo1pcr1jdplx6cg47dp4\",\n \"label\": {\n \"default\": \"Prayer\"\n }\n },\n {\n \"id\": \"hgzy3tu7c0bdljw6jfuk19cz\",\n \"label\": {\n \"default\": \"Journaling\"\n }\n },\n {\n \"id\": \"mt4o9fougfe6st660b369cwy\",\n \"label\": {\n \"default\": \"Breathwork\"\n }\n },\n {\n \"id\": \"lufnmcvymz3m0aducpj5iqfb\",\n \"label\": {\n \"default\": \"I do not use any specific coping strategies\"\n }\n },\n {\n \"id\": \"jdfkbxp0dsx3w8cbiwmrszm9\",\n \"label\": {\n \"default\": \"Therapy\"\n }\n },\n {\n \"id\": \"hogjmh9hejhgvt3s5wck95bv\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"How do you typically cope with stress?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"o1xz7t8j3cu91uacwv2tzbl2\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"fqlsk6bolzm9o4ayfkenmqww\",\n \"label\": {\n \"default\": \"Never\"\n }\n },\n {\n \"id\": \"z638pez3mcp6ouigevex8whq\",\n \"label\": {\n \"default\": \"Former\"\n }\n },\n {\n \"id\": \"ezbb57qbxyq48c3bglpcsnhd\",\n \"label\": {\n \"default\": \"Current\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you use tobacco products?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"fg2cv1fwzyanp530z8zt9cdg\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"osx8bpwo5w2opveptid09lty\",\n \"label\": {\n \"default\": \"None\"\n }\n },\n {\n \"id\": \"x2he4s7vf8eyauoz5g7erka7\",\n \"label\": {\n \"default\": \"Occasional\"\n }\n },\n {\n \"id\": \"ldmcvre957gejvkzaqmxdcq3\",\n \"label\": {\n \"default\": \"Regular\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you drink alcohol?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"q9vz3f4c8vvc92okh4no2o1d\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"ld0yhd6i46mgn2h4euk01vfe\",\n \"label\": {\n \"default\": \"None\"\n }\n },\n {\n \"id\": \"zo0aplgwj1sz14dx8t4daktp\",\n \"label\": {\n \"default\": \"Occasional\"\n }\n },\n {\n \"id\": \"r4nbzikoutt4mv8ybhqlckcc\",\n \"label\": {\n \"default\": \"Daily\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you consume caffeine on a regular basis?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"efmw0e2lgjt6bfs5q42119t4\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"nson2ca9gtc4flm73ssuj4i5\",\n \"label\": {\n \"default\": \"Never\"\n }\n },\n {\n \"id\": \"clqu5ms7cyo6mik2wsu6hh6b\",\n \"label\": {\n \"default\": \"Former\"\n }\n },\n {\n \"id\": \"aabmi5uaxycpcahqk68ndbvv\",\n \"label\": {\n \"default\": \"Current\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you use recreational drugs?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"rf21p7rcg76b3vr9aguvfh74\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"lqb4iu071kbb1laql195kqpj\",\n \"label\": {\n \"default\": \"Cold plunge\"\n }\n },\n {\n \"id\": \"s24ly6kkoq2agr3qn8vqexbn\",\n \"label\": {\n \"default\": \"Sauna\"\n }\n },\n {\n \"id\": \"t9ezbfcnv2f0vihfwj7af66o\",\n \"label\": {\n \"default\": \"Red light therapy\"\n }\n },\n {\n \"id\": \"p4oo9srmv533ynyuffxcu3lh\",\n \"label\": {\n \"default\": \"Fasting\"\n }\n },\n {\n \"id\": \"co8yo78ld6jzdl3uzlmtpegd\",\n \"label\": {\n \"default\": \"Herbal teas or adaptogens\"\n }\n },\n {\n \"id\": \"urp94srsfyp7hdxtxhglduo4\",\n \"label\": {\n \"default\": \"Meditation\"\n }\n },\n {\n \"id\": \"lpsb6f4qmqlityakfzndjm2i\",\n \"label\": {\n \"default\": \"Breathwork\"\n }\n },\n {\n \"id\": \"sjjncl3pj0mimpuasy89e2qx\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which wellness practices do you currently use?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ylsm4wggyuvuvlbofo0oa65s\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"n9w6gv3ffpiqee0wgf4mkocn\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"tyrk435dqndfpt43eyb794zk\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you wear any health or fitness wearable devices?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Appearance\"\n }\n },\n {\n \"id\": \"w438bemm6hsm9vj8snnc6r0u\",\n \"name\": \"Appearance\",\n \"elements\": [\n {\n \"id\": \"dlnseraf8zd2qeguo5h90164\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"uan6dtz8kijjs6sc255r9wg7\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"qzgq6wgqtcgqdzchb0387u43\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you currently experiencing hair loss?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"j6h7wmlp6siprkoc53d8n6qm\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"etl9yb4nsefapvsd9nxznb07\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"icnvq8u8efham370c09ktjxt\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"lfu9b8c3jszs65shd96eg8xb\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Do you have any skin concerns you would like to address?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"tbalj73i4as0c8prnc1c55gz\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please describe:\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Work\"\n }\n },\n {\n \"id\": \"egyjoj4i5yw0kqxuh32hbcnm\",\n \"name\": \"Work & Activity\",\n \"elements\": [\n {\n \"id\": \"voiz2oepzkq4okgga5c307u9\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Please specify your current occupation:\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"rw3vklo3d3y3e46d3tingext\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"How many hours do you work per week, on average?\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"number\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"twwf1sdp1w2c4dcow0ozx0m0\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"v7zfson9ku4eoe89qs3ucuyg\",\n \"label\": {\n \"default\": \"Sedentary (primarily sitting)\"\n }\n },\n {\n \"id\": \"x8komuij9v59w7f4qhpnm4dd\",\n \"label\": {\n \"default\": \"Active (on your feet or physical work)\"\n }\n },\n {\n \"id\": \"p0js1q83iylnb0rzneu0b7ii\",\n \"label\": {\n \"default\": \"Mixed (combination of sitting and active)\"\n }\n },\n {\n \"id\": \"hm2xorfkyilfut131k0wmmu3\",\n \"label\": {\n \"default\": \"Retired\"\n }\n },\n {\n \"id\": \"o19oi9407k48zx1jwqjdmsdk\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Which option best describes your current occupation or work activity level?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ikzydvj1k5tvqdxl54xk07ku\",\n \"type\": \"rating\",\n \"range\": 10,\n \"scale\": \"number\",\n \"headline\": {\n \"default\": \"On a scale of 1 to 10, how stressful is your work environment?\"\n },\n \"required\": true,\n \"lowerLabel\": {\n \"default\": \"Low stress\"\n },\n \"upperLabel\": {\n \"default\": \"High stress\"\n },\n \"isColorCodingEnabled\": false\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next: Preferences\"\n }\n },\n {\n \"id\": \"bl2jci6mnuwttppxkubaoy2k\",\n \"name\": \"Treatment Preferences\",\n \"elements\": [\n {\n \"id\": \"tojkg1d4efy1gnc4hn8nvfus\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"s4kf3aruqywud78yyvb6rb5o\",\n \"label\": {\n \"default\": \"Genetic\"\n }\n },\n {\n \"id\": \"n7u3cosp04adl1tve3e6h2j0\",\n \"label\": {\n \"default\": \"Environmental toxins exposure\"\n }\n },\n {\n \"id\": \"nrcp5hmi5rvrhp5s0j1xow3s\",\n \"label\": {\n \"default\": \"Mold\"\n }\n },\n {\n \"id\": \"ad28x5jkla2s64c1l8r3kpw5\",\n \"label\": {\n \"default\": \"Digestive\"\n }\n },\n {\n \"id\": \"b6miagthc5codi2gqivubobw\",\n \"label\": {\n \"default\": \"Lyme\"\n }\n },\n {\n \"id\": \"wjn7ytrdhvra3sndzpyamw88\",\n \"label\": {\n \"default\": \"Other\"\n }\n },\n {\n \"id\": \"u0fo726lria75v65wzhzxq8o\",\n \"label\": {\n \"default\": \"None of the above\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"What specialty testing are you interested in?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"g2pg8axaf3gvscn4vwim8wcj\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"hcpmgyi0558jbposw97tq7fn\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"i5x3x4c8n0dejsuzo2h232vk\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you comfortable with injections?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"zj9jxvqus6si82lld6o28za3\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"o5lwonz78wwp1w5uye28pj5l\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"otfkdczprg0dxrf6vpxhfqp5\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Are you comfortable with having regular bloodwork done?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Submit\"\n }\n }\n ],\n \"variables\": [],\n \"type\": \"app\",\n \"showLanguageSwitch\": null,\n \"languages\": [],\n \"endings\": [\n {\n \"id\": \"ppabfd48t579hhw39rq88t0y\",\n \"type\": \"endScreen\",\n \"headline\": {\n \"default\": \"You're all set!\"\n },\n \"subheader\": {\n \"default\": \"Your provider will review your responses before your consultation.\"\n }\n }\n ],\n \"autoClose\": null,\n \"styling\": null,\n \"status\": \"inProgress\",\n \"recaptcha\": {\n \"enabled\": false,\n \"threshold\": 0.1\n },\n \"segment\": {\n \"id\": \"cmno45wve0063lb0184nmb75e\",\n \"createdAt\": \"2026-04-07T04:23:06.410Z\",\n \"updatedAt\": \"2026-04-07T04:23:06.410Z\",\n \"title\": \"cmn52d1d10001l9011k4ndqol\",\n \"description\": null,\n \"isPrivate\": true,\n \"filters\": [],\n \"environmentId\": \"cmlhiza9j0009lj01my5c1g0q\",\n \"surveys\": [\n \"cmn52d1d10001l9011k4ndqol\"\n ]\n },\n \"recontactDays\": null,\n \"displayLimit\": null,\n \"displayOption\": \"displayOnce\",\n \"hiddenFields\": {\n \"enabled\": true,\n \"fieldIds\": []\n },\n \"isBackButtonHidden\": false,\n \"triggers\": [\n {\n \"actionClass\": {\n \"name\": \"Geviti EMR Form (never fires)\"\n }\n }\n ],\n \"displayPercentage\": null,\n \"delay\": 0,\n \"projectOverwrites\": null\n },\n {\n \"id\": \"c8a390883c4f4be3aa1742987\",\n \"welcomeCard\": {\n \"enabled\": false,\n \"headline\": {\n \"default\": \"Welcome!\"\n },\n \"subheader\": {\n \"default\": \"\"\n },\n \"buttonLabel\": {\n \"default\": \"Next\"\n },\n \"timeToFinish\": false,\n \"showResponseCount\": false\n },\n \"name\": \"Onboarding Intake\",\n \"questions\": {},\n \"blocks\": [\n {\n \"id\": \"6735bae8cf76455396d677696\",\n \"name\": \"Block 1\",\n \"elements\": [\n {\n \"id\": \"elem_firstname_001\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"First Name\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"elem_lastname_002\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Last Name\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"elem_dob_003\",\n \"type\": \"date\",\n \"format\": \"M-d-y\",\n \"headline\": {\n \"default\": \"Date of Birth\"\n },\n \"required\": true\n },\n {\n \"id\": \"elem_phone_009\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Phone Number\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"phone\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"elem_address1_004\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Address Line 1\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"elem_address2_005\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Address Line 2\"\n },\n \"required\": false,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"elem_city_006\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"City\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"elem_state_007\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"State\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"elem_zip_008\",\n \"type\": \"openText\",\n \"headline\": {\n \"default\": \"Zip Code\"\n },\n \"required\": true,\n \"charLimit\": {\n \"enabled\": false\n },\n \"inputType\": \"text\",\n \"longAnswer\": false,\n \"placeholder\": {\n \"default\": \"Type your answer here\\u2026\"\n }\n },\n {\n \"id\": \"af1b4a0daf144a23bccf88d2e\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"add66b854696400f87a906830\",\n \"label\": {\n \"default\": \"Male\"\n }\n },\n {\n \"id\": \"9b4f22e7334a4984bca9b94ed\",\n \"label\": {\n \"default\": \"Female\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Choose Your Gender\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"d1bb6a2036924811bce4c3b35\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"05312ed31c2a44139eec46edf\",\n \"label\": {\n \"default\": \"Routine Bloodwork Cadence\"\n }\n },\n {\n \"id\": \"4491397261e5423f91c98dad9\",\n \"label\": {\n \"default\": \"Solve a health issue\"\n }\n },\n {\n \"id\": \"d78be9c9c5e14c36bc1f12477\",\n \"label\": {\n \"default\": \"Maximize longevity\"\n }\n },\n {\n \"id\": \"27e8883513574d119e6fb59a2\",\n \"label\": {\n \"default\": \"Optimize hormones\"\n }\n },\n {\n \"id\": \"e47b1cbdf0844ef3a5e15590c\",\n \"label\": {\n \"default\": \"Enhance with peptides\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"What Are Your Goals?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"0e38197a5a594c2f87eab6756\",\n \"type\": \"multipleChoiceMulti\",\n \"choices\": [\n {\n \"id\": \"8beee416b7904175964e1d27f\",\n \"label\": {\n \"default\": \"Instagram\"\n }\n },\n {\n \"id\": \"b23f2ea733e448399e912abd3\",\n \"label\": {\n \"default\": \"Reddit\"\n }\n },\n {\n \"id\": \"3a765d31cf5b4027874764fe0\",\n \"label\": {\n \"default\": \"LinkedIn\"\n }\n },\n {\n \"id\": \"42d1fffb59cc4a3aa531b3bd0\",\n \"label\": {\n \"default\": \"ChatGPT or Claude\"\n }\n },\n {\n \"id\": \"f7938a3665824f539ed5319f8\",\n \"label\": {\n \"default\": \"TikTok\"\n }\n },\n {\n \"id\": \"708fd0d02870443493c9a1323\",\n \"label\": {\n \"default\": \"Podcast\"\n }\n },\n {\n \"id\": \"b56f52d936b74826a5b7dcf69\",\n \"label\": {\n \"default\": \"YouTube\"\n }\n },\n {\n \"id\": \"dd123922b9b84aac919d6d087\",\n \"label\": {\n \"default\": \"Other\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Where Did You Hear About Us?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n },\n {\n \"id\": \"ca84e539911844959f4cc8936\",\n \"type\": \"multipleChoiceSingle\",\n \"choices\": [\n {\n \"id\": \"cb8ffea4bfa54c6699d281807\",\n \"label\": {\n \"default\": \"Yes\"\n }\n },\n {\n \"id\": \"4197bbcd66f24252911da1133\",\n \"label\": {\n \"default\": \"No\"\n }\n }\n ],\n \"headline\": {\n \"default\": \"Have You Done Bloodwork Within Last 6 Months?\"\n },\n \"required\": true,\n \"shuffleOption\": \"none\"\n }\n ],\n \"buttonLabel\": {\n \"default\": \"Next\"\n }\n }\n ],\n \"variables\": [],\n \"type\": \"app\",\n \"showLanguageSwitch\": null,\n \"languages\": [],\n \"endings\": [\n {\n \"id\": \"65878ef2d0604a32b114259d0\",\n \"type\": \"endScreen\",\n \"headline\": {\n \"default\": \"Thank you!\"\n },\n \"subheader\": {\n \"default\": \"\"\n },\n \"buttonLink\": \"\",\n \"buttonLabel\": {\n \"default\": \"Done\"\n }\n }\n ],\n \"autoClose\": null,\n \"styling\": null,\n \"status\": \"inProgress\",\n \"recaptcha\": {\n \"enabled\": false,\n \"threshold\": 0.1\n },\n \"segment\": null,\n \"recontactDays\": null,\n \"displayLimit\": null,\n \"displayOption\": \"displayOnce\",\n \"hiddenFields\": {\n \"enabled\": false\n },\n \"isBackButtonHidden\": false,\n \"triggers\": [\n {\n \"actionClass\": {\n \"name\": \"Geviti EMR Form (never fires)\"\n }\n }\n ],\n \"displayPercentage\": null,\n \"delay\": 0,\n \"projectOverwrites\": null\n }\n ]\n}", "import { Collection, IdSequence } from \"@crvouga/mockingbird-service\"\nimport type { SqliteClient } from \"@crvouga/mockingbird-sqlite\"\nimport prodClone from \"./corpus/prod-clone.json\" with { type: \"json\" }\n\n/** A survey definition, passed through as Formbricks serves it (blocks, elements, logic, \u2026). */\nexport type Survey = Record<string, unknown> & {\n id: string\n name: string\n type: string\n status: string\n /** `null` for the shared fixture surveys, which every configured environment serves. */\n environmentId?: string | null\n}\n\n/** One stored response, in Formbricks' `TResponse` shape. */\nexport type ResponseRecord = {\n id: string\n createdAt: string\n updatedAt: string\n surveyId: string\n environmentId: string\n displayId: string | null\n contact: { id: string; userId: string } | null\n contactAttributes: Record<string, string> | null\n finished: boolean\n endingId: string | null\n data: Record<string, unknown>\n variables: Record<string, unknown>\n ttc: Record<string, number>\n tags: unknown[]\n meta: Record<string, unknown>\n singleUseId: string | null\n language: string | null\n}\n\n/** Per-namespace knobs, set through `PUT /__admin/settings`; cleared on reset. */\nexport type Settings = {\n /** Environment ids that serve the shared fixture surveys. */\n environments: string[]\n /** Accepted management API keys; empty means any non-empty `x-api-key` works. */\n apiKeys: string[]\n /** The `webhookId` put in webhook bodies. */\n webhookId: string\n /** Whether a `userId` on a response finds-or-creates a contact (the fork's behaviour). */\n contactsEnabled: boolean\n}\n\n/** Our member-app production and development Formbricks environments. */\nexport const PRODUCTION_ENVIRONMENT_ID = \"cmlhiza9j0009lj01my5c1g0q\"\nexport const DEVELOPMENT_ENVIRONMENT_ID = \"cmlhiza9c0004lj01jbuhp0nz\"\n\nexport const DEFAULT_SETTINGS: Settings = {\n environments: [PRODUCTION_ENVIRONMENT_ID, DEVELOPMENT_ENVIRONMENT_ID],\n apiKeys: [],\n webhookId: \"cm0mockingbirdwebhook0001\",\n contactsEnabled: true,\n}\n\n/**\n * The committed clone of our production survey definitions\n * (`packages/forms-fixtures/formbricks/prod-clone.json` in geviti-monorepo).\n */\nexport const PROD_CLONE_SURVEYS: readonly Survey[] = (prodClone as unknown as { surveys: Survey[] })\n .surveys\n\nexport const PROD_CLONE_EXPORTED_AT: string = (prodClone as { exportedAt: string }).exportedAt\n\n/** The project block of the environment state (as the backend's compat shim serves it). */\nexport const PROJECT = {\n id: \"cmlhiza930003lj01jz0hfnkz\",\n recontactDays: 7,\n clickOutsideClose: true,\n overlay: \"none\",\n placement: \"bottomRight\",\n inAppSurveyBranding: true,\n styling: { brandColor: { light: \"#64748b\" }, allowStyleOverwrite: true },\n}\n\nexport class FormbricksState {\n readonly surveys: Collection<Survey>\n readonly responses: Collection<ResponseRecord>\n readonly contacts: Collection<{ id: string; environmentId: string; userId: string }>\n readonly settings: Collection<Settings>\n readonly ids: IdSequence\n\n constructor(\n sqlite: SqliteClient,\n namespace: string,\n private readonly seed: { surveys: readonly Survey[]; settings: Partial<Settings> },\n ) {\n this.surveys = new Collection(sqlite, namespace, \"surveys\")\n this.responses = new Collection(sqlite, namespace, \"responses\")\n this.contacts = new Collection(sqlite, namespace, \"contacts\")\n this.settings = new Collection(sqlite, namespace, \"settings\")\n this.ids = new IdSequence(sqlite, namespace, \"formbricks\")\n this.ensureSeeded()\n }\n\n ensureSeeded(): void {\n if (this.surveys.count() === 0) {\n for (const survey of this.seed.surveys) {\n this.surveys.insert(survey.id, { ...survey, environmentId: survey.environmentId ?? null })\n }\n }\n if (!this.settings.has(\"settings\")) {\n this.settings.insert(\"settings\", { ...DEFAULT_SETTINGS, ...this.seed.settings })\n }\n }\n\n current(): Settings {\n return this.settings.get(\"settings\") ?? DEFAULT_SETTINGS\n }\n\n update(patch: Partial<Settings>): Settings {\n const next = { ...this.current(), ...patch }\n this.settings.insert(\"settings\", next)\n return next\n }\n\n /** Formbricks ids are cuid2: lower-case alphanumerics starting with a letter, 25 long. */\n nextId(): string {\n return `c${this.ids.next(\"\", 24).toLowerCase()}`\n }\n\n knownEnvironment(environmentId: string): boolean {\n return (\n this.current().environments.includes(environmentId) ||\n this.allSurveys().some((s) => s.environmentId === environmentId)\n )\n }\n\n allSurveys(): Survey[] {\n return this.surveys.list({ order: \"oldest\" }).map((row) => row.value)\n }\n\n /** Surveys an environment serves: its own, plus the shared fixture when it is configured. */\n surveysOf(environmentId: string): Survey[] {\n const shared = this.current().environments.includes(environmentId)\n return this.allSurveys().filter(\n (s) => s.environmentId === environmentId || (shared && (s.environmentId ?? null) === null),\n )\n }\n\n /** Whether a survey belongs to an environment (the fork's `survey.environmentId` check). */\n belongsTo(survey: Survey, environmentId: string): boolean {\n return (survey.environmentId ?? null) === null\n ? this.current().environments.includes(environmentId)\n : survey.environmentId === environmentId\n }\n\n /** The fork's find-or-create contact for a response `userId` (the member's email). */\n contactFor(environmentId: string, userId: string): { id: string; userId: string } {\n const found = this.contacts\n .list({ where: (c) => c.environmentId === environmentId && c.userId === userId })\n .at(0)?.value\n if (found) return { id: found.id, userId: found.userId }\n const created = { id: this.nextId(), environmentId, userId }\n this.contacts.insert(created.id, created)\n return { id: created.id, userId }\n }\n}\n", "/**\n * The fork's response validation (`modules/api/lib/validation.ts` \u2192 `validateBlockResponses`\n * in `packages/surveys/src/lib/validation/evaluator.ts`), trimmed to what our surveys use:\n * required elements, and the implicit email / url / phone rules of openText elements. When the\n * response is finished every element is checked (including ones logic would skip); when it is\n * not, only the elements present in `data`.\n */\nimport type { Survey } from \"./state.js\"\n\ntype Element = {\n id: string\n type?: string\n required?: boolean\n inputType?: string\n rows?: unknown[]\n}\n\nconst isEmpty = (value: unknown): boolean =>\n value === undefined ||\n value === null ||\n value === \"\" ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === \"object\" && !Array.isArray(value) && Object.keys(value as object).length === 0)\n\nconst EMAIL = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\nconst PHONE = /^[\\d+][\\d+\\- ]*\\d$/\nconst validUrl = (value: string) => {\n try {\n new URL(value)\n return true\n } catch {\n return false\n }\n}\n\n/** Every element of a survey: from `blocks[].elements`, else the legacy `questions[]`. */\nexport const surveyElements = (survey: Survey): Element[] => {\n const blocks = Array.isArray(survey.blocks) ? (survey.blocks as { elements?: unknown }[]) : []\n const fromBlocks = blocks.flatMap((b) =>\n Array.isArray(b.elements) ? (b.elements as Element[]) : [],\n )\n if (fromBlocks.length > 0) return fromBlocks\n return Array.isArray(survey.questions) ? (survey.questions as Element[]) : []\n}\n\n/** `{<elementId>: [messages]}`, or `null` when the response passes. */\nexport const validateResponseData = (\n survey: Survey,\n data: Record<string, unknown>,\n finished: boolean,\n): Record<string, string[]> | null => {\n const all = surveyElements(survey)\n const elements = finished ? all : all.filter((e) => Object.keys(data).includes(e.id))\n const errors: Record<string, string[]> = {}\n for (const element of elements) {\n const value = data[element.id]\n const messages: string[] = []\n if (element.required) {\n if (element.type === \"matrix\") {\n const answered = value && typeof value === \"object\" ? Object.values(value) : []\n if (!answered.some((v) => !isEmpty(v))) messages.push(\"Please fill out this field\")\n } else if (isEmpty(value)) {\n messages.push(\"Please fill out this field\")\n }\n }\n if (element.type === \"openText\" && typeof value === \"string\" && value !== \"\") {\n if (element.inputType === \"email\" && !EMAIL.test(value)) {\n messages.push(\"Please enter a valid email address\")\n } else if (element.inputType === \"url\" && !validUrl(value)) {\n messages.push(\"Please enter a valid URL\")\n } else if (element.inputType === \"phone\" && !PHONE.test(value)) {\n messages.push(\"Please enter a valid phone number\")\n }\n }\n if (messages.length > 0) errors[element.id] = messages\n }\n return Object.keys(errors).length === 0 ? null : errors\n}\n", "import {\n type AdminRoutes,\n type Clock,\n createRuntime as createServiceRuntime,\n createWebhookHub,\n type FaultPreset,\n type RequestLog,\n type ServiceRuntime,\n signers,\n signSvix,\n type WebhookEndpoint,\n type WebhookHub,\n} from \"@crvouga/mockingbird-service\"\nimport type { SqliteClient } from \"@crvouga/mockingbird-sqlite\"\nimport { document } from \"./generated/openapi.js\"\nimport { FORMBRICKS_NAMESPACE, FormbricksAPI } from \"./index.js\"\nimport type { Settings, Survey } from \"./state.js\"\n\n/** Where our backend receives the webhook (`onboarding-tasks.controller.ts`; `?token=` checked). */\nexport const WEBHOOK_PATH = \"/onboarding-tasks/formbricks-webhook\"\n\nconst error = (code: string, message: string) => ({ code, message, details: {} })\n\n/**\n * Every named Formbricks misbehaviour our consumers branch on, switched on with\n * `POST /__admin/faults {\"preset\": \"<name>\"}` (add `count` to limit it).\n */\nexport const FORMBRICKS_PRESETS: Record<string, FaultPreset> = {\n rate_limited: {\n description: \"Response creation answers 429 (the member app retries 3 times with backoff)\",\n rules: [\n {\n operationId: \"CreateClientResponse\",\n status: 429,\n body: error(\"too_many_requests\", \"Too many requests, please try again later\"),\n },\n ],\n },\n server_error: {\n description: \"Response creation answers 500 (the backend maps it to 502)\",\n rules: [\n {\n operationId: \"CreateClientResponse\",\n status: 500,\n body: error(\"internal_server_error\", \"Internal server error\"),\n },\n ],\n },\n missing_response_id: {\n description:\n \"Response creation stores the response but answers without an id (502 / 503 in our backend)\",\n rules: [{ operationId: \"CreateClientResponse\", effect: \"missing_response_id\" }],\n },\n environment_unavailable: {\n description: \"The environment state answers 500 (the member app cannot load surveys)\",\n rules: [\n {\n operationId: \"GetEnvironmentState\",\n status: 500,\n body: error(\"internal_server_error\", \"Internal server error\"),\n },\n ],\n },\n data_as_string: {\n description: \"Management reads return each response's data as a JSON string\",\n rules: [\n { operationId: \"ListResponses\", effect: \"data_as_string\" },\n { operationId: \"GetResponse\", effect: \"data_as_string\" },\n ],\n },\n management_unauthorized: {\n description: \"Management calls answer 401 not_authenticated (a revoked API key)\",\n rules: [\n {\n pathPrefix: \"/api/v1/management\",\n status: 401,\n body: {\n code: \"not_authenticated\",\n message: \"Not authenticated\",\n details: { \"x-Api-Key\": \"Header not provided or API Key invalid\" },\n },\n },\n ],\n },\n connection_drop: {\n description: \"Response creation drops the connection (our 30 s backend timeout path)\",\n rules: [{ operationId: \"CreateClientResponse\", drop: true }],\n },\n duplicate: {\n description: \"The next webhook is delivered twice (our receiver does not dedupe)\",\n webhook: { mode: \"duplicate\" },\n },\n webhook_drop: {\n description: \"The next webhook is never delivered\",\n webhook: { mode: \"drop\" },\n },\n webhook_reorder: {\n description: \"The next two webhooks arrive swapped\",\n webhook: { mode: \"reorder\" },\n },\n}\n\ntype WebhookHubOptionsSubset = {\n retryDelaysMs?: readonly number[]\n fetch?: (request: Request) => Promise<Response>\n}\n\nexport type FormbricksRuntimeOptions = {\n sqlite?: SqliteClient\n clock?: Clock\n seed?: number | string\n adminKey?: string\n onLog?: (entry: RequestLog) => void\n surveys?: readonly Survey[]\n settings?: Partial<Settings>\n /**\n * Where webhooks go: `url` carries our `?token=<FORMBRICKS_WEBHOOK_SECRET>`; `secret` (a\n * `whsec_\u2026` Standard Webhooks key) signs `webhook-signature`; `events` defaults to\n * `[\"responseFinished\"]` (add `\"responseCreated\"` for both).\n */\n webhooks?: Omit<WebhookEndpoint, \"id\"> & WebhookHubOptionsSubset\n}\n\nexport type FormbricksRuntime = ServiceRuntime<FormbricksAPI> & { readonly webhooks: WebhookHub }\n\nconst json = (status: number, body: unknown) =>\n new Response(JSON.stringify(body), { status, headers: { \"content-type\": \"application/json\" } })\nconst adminError = (status: number, message: string) =>\n json(status, { error: { type: \"mockingbird_admin\", message } })\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nconst adminRoutes = (runtime: ServiceRuntime<FormbricksAPI>): AdminRoutes => ({\n \"GET /responses\": ({ url, namespace }) => {\n const surveyId = url.searchParams.get(\"surveyId\")\n return json(200, {\n responses: runtime\n .instance(namespace)\n .responses()\n .filter((r) => surveyId === null || r.surveyId === surveyId),\n })\n },\n \"GET /surveys\": ({ namespace }) =>\n json(200, { surveys: runtime.instance(namespace).state.allSurveys() }),\n \"PUT /surveys\": ({ body, namespace }) => {\n const list = Array.isArray(body) ? body : isRecord(body) ? body.surveys : undefined\n if (!Array.isArray(list)) return adminError(400, \"expected [survey] or {surveys: [survey]}\")\n const state = runtime.instance(namespace).state\n for (const [index, survey] of list.entries()) {\n if (!isRecord(survey) || typeof survey.id !== \"string\" || typeof survey.name !== \"string\") {\n return adminError(400, `surveys[${index}]: id and name are required`)\n }\n }\n for (const survey of list as Survey[]) {\n state.surveys.insert(survey.id, {\n ...survey,\n type: survey.type ?? \"app\",\n status: survey.status ?? \"inProgress\",\n environmentId: survey.environmentId ?? null,\n })\n }\n return json(200, { surveys: state.allSurveys().map((s) => s.id) })\n },\n \"GET /settings\": ({ namespace }) => json(200, runtime.instance(namespace).state.current()),\n \"PUT /settings\": ({ body, namespace }) => {\n if (!isRecord(body)) return adminError(400, \"expected a JSON object\")\n const patch: Partial<Settings> = {}\n if (Array.isArray(body.environments)) patch.environments = body.environments.map(String)\n if (Array.isArray(body.apiKeys)) patch.apiKeys = body.apiKeys.map(String)\n if (typeof body.webhookId === \"string\") patch.webhookId = body.webhookId\n if (typeof body.contactsEnabled === \"boolean\") patch.contactsEnabled = body.contactsEnabled\n return json(200, runtime.instance(namespace).state.update(patch))\n },\n})\n\n/**\n * The namespace carrier for the client API is the environment id in the path (the member app's\n * fetch cannot add headers); the management API's is its `x-api-key`.\n */\nexport const formbricksCredential = (request: Request): string | undefined => {\n const key = request.headers.get(\"x-api-key\")?.trim()\n if (key) return key\n return /\\/api\\/v[12]\\/client\\/([^/]+)\\//.exec(new URL(request.url).pathname)?.[1]\n}\n\n/**\n * The Formbricks mock with Mockingbird's full service contract: `/health`, `/__admin/*`,\n * namespaces by header, by `/ns/<name>` prefix on `FORMBRICKS_APP_URL`, or by environment id /\n * API key (`PUT /__admin/credentials {\"credentials\": {\"<env id or key>\": \"<namespace>\"}}`),\n * clock control, fault presets, and Standard-Webhooks-signed `responseFinished` webhooks.\n */\nexport const createRuntime = (options: FormbricksRuntimeOptions = {}): FormbricksRuntime => {\n const { retryDelaysMs, fetch: send, ...endpoint } = options.webhooks ?? { url: \"\" }\n const hub = createWebhookHub({\n // Formbricks always sends webhook-id and webhook-timestamp; webhook-signature only when\n // the webhook has a secret (Standard Webhooks, `v1,<base64 HMAC>` over \"id.ts.body\").\n signer: signers.custom(async ({ messageId, timestampSeconds, body, secret }) => ({\n \"webhook-id\": messageId,\n \"webhook-timestamp\": String(timestampSeconds),\n ...(secret?.startsWith(\"whsec_\")\n ? { \"webhook-signature\": await signSvix(secret, messageId, timestampSeconds, body) }\n : {}),\n })),\n ...(retryDelaysMs ? { retryDelaysMs } : {}),\n ...(send ? { fetch: send } : {}),\n endpoints: options.webhooks\n ? [{ events: [\"responseFinished\"], ...endpoint } as WebhookEndpoint]\n : [],\n })\n const runtime = createServiceRuntime<FormbricksAPI>({\n name: FORMBRICKS_NAMESPACE,\n document,\n ...(options.sqlite ? { sqlite: options.sqlite } : {}),\n ...(options.clock ? { clock: options.clock } : {}),\n ...(options.seed !== undefined ? { seed: options.seed } : {}),\n ...(options.adminKey !== undefined ? { adminKey: options.adminKey } : {}),\n ...(options.onLog ? { onLog: options.onLog } : {}),\n credential: formbricksCredential,\n presets: FORMBRICKS_PRESETS,\n webhooks: hub,\n create: ({ sqlite, namespace, publicNamespace, clock }) =>\n new FormbricksAPI({\n sqlite,\n namespace,\n now: clock.now,\n ...(options.surveys ? { surveys: options.surveys } : {}),\n ...(options.settings ? { settings: options.settings } : {}),\n // Formbricks calls only the webhooks whose triggers include the event: publish nothing\n // (so no webhook fault is spent) when no endpoint subscribes to it.\n onWebhook: (event) => {\n const subscribed = hub\n .endpoints(publicNamespace)\n .some((e) => !e.events || e.events.includes(\"*\") || e.events.includes(event.event))\n if (subscribed)\n hub.publish({ namespace: publicNamespace, type: event.event, body: event })\n },\n }),\n describe: () => ({ webhooks: hub.endpoints(\"default\").length > 0 ? \"on\" : \"off\" }),\n admin: adminRoutes,\n })\n return Object.assign(runtime, { webhooks: hub })\n}\n", "import type { FetchAPI } from \"@crvouga/mockingbird-core\"\nimport {\n type APIOptions,\n annotateResponse,\n bootSqlite,\n createService,\n defineOperations,\n faultEffect,\n HttpError,\n jsonRes,\n type OperationContext,\n type Service,\n} from \"@crvouga/mockingbird-service\"\nimport type { SqliteClient } from \"@crvouga/mockingbird-sqlite\"\nimport type { Hono } from \"hono\"\nimport { document, type SupportedOperationId } from \"./generated/openapi.js\"\nimport {\n FormbricksState,\n PROD_CLONE_SURVEYS,\n PROJECT,\n type ResponseRecord,\n type Settings,\n type Survey,\n} from \"./state.js\"\nimport { validateResponseData } from \"./validation.js\"\n\nexport type { FetchAPI } from \"@crvouga/mockingbird-core\"\nexport type { SqliteClient } from \"@crvouga/mockingbird-sqlite\"\nexport type { OperationId, SupportedOperationId } from \"./generated/openapi.js\"\nexport { document, operationIds, supportedOperationIds } from \"./generated/openapi.js\"\nexport type { ResponseRecord, Settings, Survey } from \"./state.js\"\nexport {\n DEFAULT_SETTINGS,\n DEVELOPMENT_ENVIRONMENT_ID,\n PROD_CLONE_EXPORTED_AT,\n PROD_CLONE_SURVEYS,\n PRODUCTION_ENVIRONMENT_ID,\n} from \"./state.js\"\nexport { validateResponseData } from \"./validation.js\"\n\nexport const FORMBRICKS_NAMESPACE = \"formbricks\"\n\n/** The response as the API (and the webhook) renders it: `TResponse`. */\nexport type ApiResponse = Omit<ResponseRecord, \"environmentId\">\n\n/** The body Formbricks' pipeline posts to a webhook (`app/api/(internal)/pipeline/route.ts`). */\nexport type FormbricksWebhook = {\n webhookId: string\n event: \"responseCreated\" | \"responseFinished\"\n data: ApiResponse & {\n survey: {\n title: string\n type: string\n status: string\n createdAt: string | null\n updatedAt: string | null\n }\n }\n}\n\nexport type FormbricksAPIOptions = APIOptions & {\n /** Surveys every namespace starts with. Default: our production clone. */\n surveys?: readonly Survey[]\n settings?: Partial<Settings>\n /** Called for every pipeline event; the runtime signs and delivers it. */\n onWebhook?: (event: FormbricksWebhook) => void\n}\n\ntype ErrorCode =\n | \"not_found\"\n | \"bad_request\"\n | \"internal_server_error\"\n | \"not_authenticated\"\n | \"forbidden\"\n | \"too_many_requests\"\n\n/** The fork's error envelope (`app/lib/api/response.ts`), with its CORS/no-store headers. */\nexport const formbricksError = (\n status: number,\n code: ErrorCode,\n message: string,\n details: Record<string, unknown> = {},\n) =>\n jsonRes(\n status,\n { code, message, details },\n { \"cache-control\": \"private, no-store\", \"access-control-allow-origin\": \"*\" },\n )\n\nconst CUID2 = /^[0-9a-z]+$/\n\nconst zodType = (value: unknown) =>\n value === null ? \"null\" : Array.isArray(value) ? \"array\" : typeof value\n\n/**\n * `ZResponseInputV2.safeParse` + `transformErrorToDetails`: zod's messages, keyed by path.\n * Unknown keys (and unknown `meta` keys) are stripped, as zod objects do.\n */\nconst responseInputIssues = (body: Record<string, unknown>): Record<string, string> => {\n const details: Record<string, string> = {}\n const expect = (path: string, value: unknown, type: string, optional = false) => {\n if (value === undefined) {\n if (!optional) details[path] = \"Required\"\n return false\n }\n if (zodType(value) !== type) {\n details[path] = `Expected ${type}, received ${zodType(value)}`\n return false\n }\n return true\n }\n if (expect(\"surveyId\", body.surveyId, \"string\") && !CUID2.test(body.surveyId as string)) {\n details.surveyId = \"Invalid cuid2\"\n }\n expect(\"finished\", body.finished, \"boolean\")\n if (expect(\"data\", body.data, \"object\")) {\n for (const [key, value] of Object.entries(body.data as Record<string, unknown>)) {\n const ok =\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n (Array.isArray(value) && value.every((v) => typeof v === \"string\")) ||\n (zodType(value) === \"object\" &&\n Object.values(value as object).every((v) => typeof v === \"string\"))\n if (!ok) details[`data.${key}`] = \"Invalid input\"\n }\n }\n for (const key of [\"contactId\", \"displayId\", \"singleUseId\", \"endingId\", \"recaptchaToken\"]) {\n if (body[key] !== undefined && body[key] !== null) expect(key, body[key], \"string\")\n }\n if (\n body.userId !== undefined &&\n body.userId !== null &&\n expect(\"userId\", body.userId, \"string\")\n ) {\n if ((body.userId as string).length < 1) {\n details.userId = \"String must contain at least 1 character(s)\"\n }\n }\n if (body.language !== undefined) expect(\"language\", body.language, \"string\")\n if (body.variables !== undefined) expect(\"variables\", body.variables, \"object\")\n if (body.ttc !== undefined) expect(\"ttc\", body.ttc, \"object\")\n if (body.meta !== undefined && expect(\"meta\", body.meta, \"object\")) {\n const meta = body.meta as Record<string, unknown>\n for (const key of [\"source\", \"url\", \"country\", \"action\", \"gevitiUserId\", \"cognitoSub\"]) {\n if (meta[key] !== undefined) expect(`meta.${key}`, meta[key], \"string\")\n }\n }\n return details\n}\n\nconst WIDGET_SCRIPT = `/* Mockingbird Formbricks widget stub: a no-op window.formbricks. */\n(function () {\n var noop = function () { return Promise.resolve(); };\n var api = {\n setup: noop, init: noop, setUserId: noop, setEmail: noop, setAttribute: noop,\n setAttributes: noop, setLanguage: noop, track: noop, logout: noop, reset: noop,\n registerRouteChange: noop\n };\n if (typeof window !== \"undefined\") { window.formbricks = window.formbricks || api; }\n})();\n`\n\n/**\n * Stateful mock of Formbricks (our fork): environment state and response creation for the\n * client SDK / member app, the v1 management API, and the `responseFinished` webhook.\n */\nexport class FormbricksAPI implements FetchAPI {\n readonly app: Hono\n readonly sqlite: SqliteClient\n readonly state: FormbricksState\n private readonly service: Service\n private readonly now: () => number\n private readonly onWebhook: ((event: FormbricksWebhook) => void) | undefined\n\n constructor(options: FormbricksAPIOptions = {}) {\n const sqlite = bootSqlite(options.sqlite)\n const namespace = options.namespace ?? FORMBRICKS_NAMESPACE\n this.now = options.now ?? (() => Date.now())\n this.onWebhook = options.onWebhook\n this.state = new FormbricksState(sqlite, namespace, {\n surveys: options.surveys ?? PROD_CLONE_SURVEYS,\n settings: options.settings ?? {},\n })\n const handlers = defineOperations<SupportedOperationId>({\n GetEnvironmentState: (context) => this.environmentState(context),\n CreateClientResponse: (context) => this.createResponse(context),\n ListResponses: (context) => this.listResponses(context),\n GetResponse: (context) => {\n const record = this.state.responses.get(context.params.responseId ?? \"\")\n if (!record) {\n return formbricksError(404, \"not_found\", \"Response not found\", {\n resource_id: context.params.responseId ?? null,\n resource_type: \"Response\",\n })\n }\n return jsonRes(200, { data: this.render(record, context) })\n },\n ListSurveys: (context) => {\n const environmentId = context.url.searchParams.get(\"environmentId\")\n const surveys = environmentId\n ? this.state.surveysOf(environmentId)\n : this.state.allSurveys()\n return jsonRes(200, { data: surveys.map((s) => this.wireSurvey(s)) })\n },\n GetSurvey: (context) => {\n const survey = this.state.surveys.get(context.params.surveyId ?? \"\")\n if (!survey) {\n return formbricksError(404, \"not_found\", \"Survey not found\", {\n resource_id: context.params.surveyId ?? null,\n resource_type: \"Survey\",\n })\n }\n return jsonRes(200, { data: this.wireSurvey(survey) })\n },\n CreateSurvey: (context) => this.createSurvey(context),\n GetWidgetScript: () =>\n new Response(WIDGET_SCRIPT, {\n status: 200,\n headers: {\n \"content-type\": \"application/javascript; charset=utf-8\",\n \"cache-control\": \"public, max-age=3600\",\n \"access-control-allow-origin\": \"*\",\n },\n }),\n })\n this.service = createService({\n document,\n handlers,\n sqlite,\n namespace,\n now: this.now,\n notFound: () => formbricksError(404, \"not_found\", \"Not found\", {}),\n onError: (error) => {\n if (error instanceof HttpError) return error.toResponse()\n throw error\n },\n before: (context) => {\n if (!context.operation.path.startsWith(\"/api/v1/management/\")) return undefined\n const key = context.request.headers.get(\"x-api-key\")?.trim()\n const keys = this.state.current().apiKeys\n if (!key || (keys.length > 0 && !keys.includes(key))) {\n return formbricksError(401, \"not_authenticated\", \"Not authenticated\", {\n \"x-Api-Key\": \"Header not provided or API Key invalid\",\n })\n }\n return undefined\n },\n })\n this.app = this.service.app\n this.sqlite = this.service.sqlite\n }\n\n fetch(request: Request): Promise<Response> {\n return this.service.fetch(request)\n }\n\n async reset(): Promise<void> {\n await this.service.reset()\n this.state.ensureSeeded()\n }\n\n private iso(): string {\n return new Date(this.now()).toISOString()\n }\n\n /** A survey as the API serves it (no internal `environmentId: null`). */\n private wireSurvey(survey: Survey): Survey {\n const { environmentId, ...rest } = survey\n return environmentId ? { ...rest, environmentId } : (rest as Survey)\n }\n\n render(record: ResponseRecord, context?: OperationContext): ApiResponse {\n const { environmentId: _environmentId, ...rest } = record\n const asString = context ? faultEffect(context.request, \"data_as_string\") !== undefined : false\n return asString ? { ...rest, data: JSON.stringify(rest.data) as never } : rest\n }\n\n private environmentState(context: OperationContext): Response {\n const environmentId = (context.params.environmentId ?? \"\").trim()\n if (!CUID2.test(environmentId) || environmentId.length < 2) {\n return formbricksError(400, \"bad_request\", \"Invalid environment ID format\")\n }\n if (!this.state.knownEnvironment(environmentId)) {\n return formbricksError(404, \"not_found\", \"Environment not found\", {\n resource_id: environmentId,\n resource_type: \"Environment\",\n })\n }\n const surveys = this.state\n .surveysOf(environmentId)\n .filter((s) => s.status === \"inProgress\")\n .map((s) => {\n const { environmentId: _e, ...wire } = s\n return wire\n })\n return jsonRes(\n 200,\n {\n data: {\n data: { surveys, actionClasses: [], project: PROJECT },\n expiresAt: new Date(this.now() + 60 * 60 * 1000).toISOString(),\n },\n },\n {\n \"cache-control\":\n \"public, s-maxage=60, max-age=60, stale-while-revalidate=60, stale-if-error=60\",\n \"access-control-allow-origin\": \"*\",\n },\n )\n }\n\n private createResponse(context: OperationContext): Response {\n if (context.body.kind !== \"json\") {\n return formbricksError(400, \"bad_request\", \"Invalid JSON in request body\", {\n error: \"request body is not valid JSON\",\n })\n }\n const environmentId = context.params.environmentId ?? \"\"\n if (!CUID2.test(environmentId)) {\n return formbricksError(400, \"bad_request\", \"Fields are missing or incorrectly formatted\", {\n environmentId: \"Invalid cuid2\",\n })\n }\n const body =\n zodType(context.body.value) === \"object\"\n ? (context.body.value as Record<string, unknown>)\n : {}\n const issues = responseInputIssues(body)\n if (Object.keys(issues).length > 0) {\n return formbricksError(\n 400,\n \"bad_request\",\n \"Fields are missing or incorrectly formatted\",\n issues,\n )\n }\n if (typeof body.contactId === \"string\") {\n return formbricksError(\n 403,\n \"forbidden\",\n \"User identification is only available for enterprise users.\",\n )\n }\n const survey = this.state.surveys.get(body.surveyId as string)\n if (!survey) {\n return formbricksError(404, \"not_found\", \"Survey not found\", {\n resource_id: body.surveyId as string,\n resource_type: \"Survey\",\n })\n }\n if (!this.state.belongsTo(survey, environmentId)) {\n return formbricksError(400, \"bad_request\", \"Survey is part of another environment\", {\n \"survey.environmentId\": survey.environmentId ?? this.state.current().environments[0] ?? \"\",\n environmentId,\n })\n }\n const data = body.data as Record<string, unknown>\n const finished = body.finished as boolean\n const language = typeof body.language === \"string\" ? body.language : \"en\"\n const errors = validateResponseData(survey, data, finished)\n if (errors) {\n const details: Record<string, string> = {}\n for (const [elementId, messages] of Object.entries(errors)) {\n details[`response.data.${elementId}`] = messages.join(\"; \")\n }\n return formbricksError(400, \"bad_request\", \"Validation failed\", details)\n }\n const now = this.iso()\n const meta = (body.meta ?? {}) as Record<string, unknown>\n const userId = typeof body.userId === \"string\" ? body.userId : null\n const contact =\n userId && this.state.current().contactsEnabled\n ? this.state.contactFor(environmentId, userId)\n : null\n const record: ResponseRecord = {\n id: this.state.nextId(),\n createdAt: now,\n updatedAt: now,\n surveyId: survey.id,\n environmentId,\n displayId: typeof body.displayId === \"string\" ? body.displayId : null,\n contact,\n contactAttributes: contact ? { userId: contact.userId } : null,\n finished,\n endingId: typeof body.endingId === \"string\" ? body.endingId : null,\n data,\n variables: (body.variables ?? {}) as Record<string, unknown>,\n ttc: (body.ttc ?? {}) as Record<string, number>,\n tags: [],\n meta: Object.fromEntries(\n [\"source\", \"url\", \"action\", \"gevitiUserId\", \"cognitoSub\"]\n .filter((key) => typeof meta[key] === \"string\")\n .map((key) => [key, meta[key]]),\n ),\n singleUseId: typeof body.singleUseId === \"string\" ? body.singleUseId : null,\n language,\n }\n this.state.responses.insert(record.id, record)\n this.pipeline(\"responseCreated\", record, survey)\n if (record.finished) this.pipeline(\"responseFinished\", record, survey)\n const ids = { responseId: record.id, surveyId: survey.id }\n if (faultEffect(context.request, \"missing_response_id\") !== undefined) {\n return annotateResponse(jsonRes(200, { data: { quotaFull: false } }), { ids })\n }\n return annotateResponse(\n jsonRes(\n 200,\n { data: { id: record.id, quotaFull: false } },\n { \"cache-control\": \"private, no-store\", \"access-control-allow-origin\": \"*\" },\n ),\n { ids },\n )\n }\n\n /** Emit a pipeline event for a stored response (also used by `/__admin/responses/:id/finish`). */\n pipeline(event: FormbricksWebhook[\"event\"], record: ResponseRecord, survey: Survey): void {\n this.onWebhook?.({\n webhookId: this.state.current().webhookId,\n event,\n data: {\n ...this.render(record),\n survey: {\n title: survey.name,\n type: survey.type,\n status: survey.status,\n createdAt: typeof survey.createdAt === \"string\" ? survey.createdAt : null,\n updatedAt: typeof survey.updatedAt === \"string\" ? survey.updatedAt : null,\n },\n },\n })\n }\n\n private listResponses(context: OperationContext): Response {\n const surveyId = context.url.searchParams.get(\"surveyId\")\n const limit = Number(context.url.searchParams.get(\"limit\") ?? \"\") || undefined\n const skip = Number(context.url.searchParams.get(\"skip\") ?? \"\") || 0\n const all = this.state.responses\n .list({ order: \"newest\", where: (r) => surveyId === null || r.surveyId === surveyId })\n .map((row) => row.value)\n const page = all.slice(skip, limit === undefined ? undefined : skip + limit)\n return jsonRes(200, { data: page.map((r) => this.render(r, context)) })\n }\n\n private createSurvey(context: OperationContext): Response {\n const body =\n context.body.kind === \"json\" && zodType(context.body.value) === \"object\"\n ? (context.body.value as Record<string, unknown>)\n : undefined\n if (!body) return formbricksError(400, \"bad_request\", \"Malformed request body\")\n const details: Record<string, string> = {}\n if (typeof body.environmentId !== \"string\" || !CUID2.test(body.environmentId)) {\n details.environmentId = body.environmentId === undefined ? \"Required\" : \"Invalid cuid2\"\n }\n if (typeof body.name !== \"string\" || body.name.length === 0) {\n details.name = body.name === undefined ? \"Required\" : \"Invalid input\"\n }\n for (const key of [\"questions\", \"blocks\"] as const) {\n if (body[key] !== undefined && !Array.isArray(body[key])) {\n details[key] = `Expected array, received ${zodType(body[key])}`\n }\n }\n if (Object.keys(details).length > 0) {\n return formbricksError(\n 400,\n \"bad_request\",\n \"Fields are missing or incorrectly formatted\",\n details,\n )\n }\n const now = this.iso()\n const survey: Survey = {\n id: this.state.nextId(),\n createdAt: now,\n updatedAt: now,\n name: body.name as string,\n type: typeof body.type === \"string\" ? body.type : \"link\",\n status: typeof body.status === \"string\" ? body.status : \"draft\",\n environmentId: body.environmentId as string,\n welcomeCard: { enabled: false },\n questions: (body.questions as unknown[] | undefined) ?? [],\n blocks: (body.blocks as unknown[] | undefined) ?? [],\n endings: [],\n hiddenFields: { enabled: true, fieldIds: [] },\n variables: [],\n displayOption: \"displayOnce\",\n recontactDays: null,\n displayLimit: null,\n autoClose: null,\n delay: 0,\n displayPercentage: null,\n segment: null,\n triggers: [],\n }\n this.state.surveys.insert(survey.id, survey)\n return annotateResponse(jsonRes(200, { data: this.wireSurvey(survey) }), {\n ids: { surveyId: survey.id },\n })\n }\n\n responses(): ApiResponse[] {\n return this.state.responses.list({ order: \"oldest\" }).map((row) => this.render(row.value))\n }\n}\n\nexport type { FormbricksRuntime, FormbricksRuntimeOptions } from \"./runtime.js\"\nexport {\n createRuntime,\n FORMBRICKS_PRESETS,\n formbricksCredential,\n WEBHOOK_PATH,\n} from \"./runtime.js\"\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["error", "next", "document", "document", "error", "isRecord", "document", "error", "error", "id", "json", "adminError", "isRecord", "BRANCH_PATTERN", "document", "snapshot", "branch", "url", "response", "error", "json", "adminError", "isRecord", "createRuntime", "error"]
|
|
7
|
+
}
|