snapback2 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/test.mjs.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/test.ts", "../src/client-wire.ts", "../src/api.ts", "../src/assets.ts", "../../evaluator/src/errors.ts", "../../evaluator/src/certificate-identity.ts", "../../evaluator/src/hash.ts", "../src/offline-schema.ts", "../src/offline-protocol.ts", "../src/store/outbox.ts", "../src/store/byte-cache.ts", "../src/store/canonical.ts", "../src/store/overlay-retirement.ts", "../src/store/range-store.ts", "../../../crates/snapback2-core/ir-contract.json", "../../evaluator/src/cursor.ts", "../../evaluator/src/value-runtime.ts", "../../evaluator/src/text.ts", "../../evaluator/src/runner.ts", "../../evaluator/src/authority.ts", "../../evaluator/src/store.ts", "../src/twin-hydrate.ts", "../src/twin.ts", "../src/offline.ts", "../src/client-outbox.ts", "../src/drain.ts", "../src/types.ts", "../src/client-offline.ts", "../src/client-assets.ts", "../src/client-upload.ts", "../src/sse.ts", "../src/client.ts", "../src/store/file.ts", "../src/store/projection.ts"],
4
- "sourcesContent": ["import { rm } from \"node:fs/promises\";\nimport { basename, join, resolve } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport {\n createClient,\n stableSerialize,\n type OfflineClientOptions,\n type SnapbackClient,\n} from \"./client.js\";\nimport { fileRangeStore } from \"./store/file.js\";\n\nexport { fileRangeStore };\n\ntype TransportFault = { path: string; status: number };\ntype JourneyDevice = SnapbackClient & {\n failNextResponse(path: string, status: number): void;\n settled(): ReturnType<SnapbackClient[\"outbox\"][\"settled\"]>;\n};\ntype JourneyContext = {\n as(name: string, options?: {\n store?: \"file\";\n onTombstone?: OfflineClientOptions[\"onTombstone\"];\n viewOnce?: OfflineClientOptions[\"viewOnce\"];\n }): JourneyDevice;\n tick(ms: number): Promise<Record<string, unknown>>;\n url: string;\n};\ntype JourneyBody = (context: JourneyContext) => void | Promise<void>;\ntype RegisteredJourney = { name: string; body: JourneyBody };\n\nconst registryKey = Symbol.for(\"snapback2.journey.registry\");\nconst registered = ((globalThis as Record<PropertyKey, unknown>)[registryKey] ??= []) as RegisteredJourney[];\n\n/** Register one \u22645 s acceptance journey against the fresh owner started by `snapback2 test`. */\nexport function journey(name?: string, body?: JourneyBody): void {\n if (typeof name !== \"string\" || !name.trim() || typeof body !== \"function\") {\n throw new TypeError(\"journey(name, fn) requires a name and function\");\n }\n registered.push({ name, body });\n}\n\nfunction argument(name: string): string | undefined {\n const index = process.argv.indexOf(name);\n return index >= 0 ? process.argv[index + 1] : undefined;\n}\n\nfunction runnerFiles(): string[] {\n const separator = process.argv.indexOf(\"--\");\n return separator >= 0 ? process.argv.slice(separator + 1).map((path) => resolve(path)) : [];\n}\n\nasync function loadJourneyFile(path: string): Promise<RegisteredJourney[]> {\n registered.length = 0;\n const moduleUrl = `${pathToFileURL(path).href}?run=${Date.now()}-${Math.random()}`;\n await import(moduleUrl);\n if (registered.length === 0) throw new Error(\"journey file registered zero checks; call journey(name, fn)\");\n return [...registered];\n}\n\nasync function control(url: string, secret: string, path: string, body: unknown): Promise<Record<string, unknown>> {\n const response = await fetch(`${url}${path}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", \"x-snapback-control\": secret },\n body: JSON.stringify(body),\n });\n const value = await response.json() as Record<string, unknown>;\n if (!response.ok) throw Object.assign(new Error(String(value.message ?? `control HTTP ${response.status}`)), value);\n return value;\n}\n\nasync function within<T>(ms: number, body: () => Promise<T>): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([\n body(),\n new Promise<never>((_resolve, reject) => {\n timer = setTimeout(() => reject(new Error(`journey exceeded ${ms} ms`)), ms);\n }),\n ]);\n } finally {\n if (timer) clearTimeout(timer);\n }\n}\n\nasync function runEntry(): Promise<void> {\n const url = argument(\"--url\");\n const secret = argument(\"--secret\");\n const files = runnerFiles();\n const storeRoot = argument(\"--store-root\");\n if (!url || !secret || files.length === 0) {\n process.stdout.write(`${JSON.stringify({ name: \"journeys\", kind: \"journey\", verdict: \"fail\", ms: 0, detail: \"runner requires --url, --secret, and files\" })}\\n`);\n process.exitCode = 1;\n return;\n }\n if (process.argv.includes(\"--list\")) {\n for (const file of files) {\n try {\n const journeys = await loadJourneyFile(file);\n process.stdout.write(`${JSON.stringify({ runner: \"list\", file, journeys: journeys.map((check) => check.name) })}\\n`);\n } catch (error) {\n process.stdout.write(`${JSON.stringify({ name: file, kind: \"journey\", verdict: \"fail\", ms: 0, detail: String(error) })}\\n`);\n process.exitCode = 1;\n }\n }\n return;\n }\n const selected = argument(\"--journey-index\");\n if (selected !== undefined) {\n const index = Number(selected);\n if (files.length !== 1 || !Number.isSafeInteger(index) || index < 0) {\n process.stdout.write(`${JSON.stringify({ name: \"journey runner\", kind: \"journey\", verdict: \"fail\", ms: 0, detail: \"--journey-index requires one file and a non-negative integer\" })}\\n`);\n process.exitCode = 1;\n return;\n }\n try {\n const journeys = await loadJourneyFile(files[0]!);\n const check = journeys[index];\n if (!check) throw new Error(`journey index ${index} is out of range`);\n if (!await runCheck(check, files[0]!, url, secret, storeRoot)) process.exitCode = 1;\n } catch (error) {\n process.stdout.write(`${JSON.stringify({ name: files[0], kind: \"journey\", verdict: \"fail\", ms: 0, detail: String(error) })}\\n`);\n process.exitCode = 1;\n }\n return;\n }\n let failed = false;\n for (const file of files) {\n let journeys: RegisteredJourney[];\n try {\n journeys = await loadJourneyFile(file);\n } catch (error) {\n failed = true;\n process.stdout.write(`${JSON.stringify({ name: file, kind: \"journey\", verdict: \"fail\", ms: 0, detail: String(error) })}\\n`);\n continue;\n }\n for (const check of journeys) {\n if (!await runCheck(check, file, url, secret, storeRoot)) failed = true;\n }\n }\n if (failed) process.exitCode = 1;\n}\n\ntype QueryRecord = { ref: any; args: unknown; expected: unknown };\ntype Device = {\n client: SnapbackClient;\n records: Map<string, QueryRecord>;\n durable: boolean;\n faults: TransportFault[];\n};\n\nfunction queryBytes(value: unknown): string {\n return stableSerialize(value);\n}\n\n/**\n * The device's transport. A registered fault lets the request reach the owner\n * (so a commit happens), then discards the response and answers the status\n * instead: LLP 1012 \u00A710's \"503 after the commit\", injected without touching\n * the owner.\n */\nfunction faultingFetch(faults: TransportFault[]): typeof globalThis.fetch {\n return async (input, init) => {\n const response = await globalThis.fetch(input, init);\n const path = new URL(String(input)).pathname;\n const index = faults.findIndex((fault) => fault.path === path);\n if (index < 0) return response;\n const [fault] = faults.splice(index, 1);\n await response.arrayBuffer().catch(() => undefined);\n return new Response(JSON.stringify({ message: `injected HTTP ${fault!.status}` }), {\n status: fault!.status,\n headers: { \"content-type\": \"application/json\" },\n });\n };\n}\n\nfunction wrapDevice(device: Device, clients: Set<SnapbackClient>): JourneyDevice {\n return new Proxy(device.client, {\n get(target, property) {\n if (property === \"restart\") return async () => {\n const restarted = await target.restart();\n device.client = restarted;\n clients.add(restarted);\n return wrapDevice(device, clients);\n };\n if (property === \"failNextResponse\") return (path: string, status: number) => {\n device.faults.push({ path, status });\n };\n if (property === \"settled\") return () => device.client.outbox.settled();\n const value = Reflect.get(target, property, target);\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n }) as JourneyDevice;\n}\n\nasync function runOfflineDerived(devices: Set<Device>): Promise<number> {\n const started = performance.now();\n let checked = 0;\n const durable = [...devices].filter((device) => device.durable);\n if (durable.length === 0) return 0;\n for (const device of durable) {\n if (device.records.size === 0) continue;\n // @ref LLP 1012#6-reads-offline \u2014 the twin evaluates over the coverage the\n // device holds now, which the drain's tail and later pages may have grown\n // since a query was first recorded; the expectation is the last online\n // answer, so each recorded query is read online once more before the\n // transport is cut, and the offline replay must match it byte for byte.\n if (device.client.snapshot.connection !== \"offline\") {\n for (const { ref, args } of [...device.records.values()]) {\n await device.client.query(ref, args as never).catch(() => undefined);\n }\n }\n await device.client.offline();\n for (const { ref, args, expected } of device.records.values()) {\n const replayed = await device.client.query(ref, args as never);\n if (queryBytes(replayed) !== queryBytes(expected)) {\n throw new Error(`offline replay changed bytes: ${queryBytes(expected)} != ${queryBytes(replayed)}`);\n }\n checked += 1;\n }\n }\n if (checked === 0) throw new Error(\"offline derived check observed no online durable query\");\n process.stdout.write(`${JSON.stringify({ name: \"offline\", kind: \"derived\", verdict: \"pass\", ms: Math.round(performance.now() - started), detail: { queries: checked } })}\\n`);\n return checked;\n}\n\nasync function runCheck(\n check: RegisteredJourney,\n file: string,\n url: string,\n secret: string,\n storeRoot?: string,\n): Promise<boolean> {\n const started = performance.now();\n const clients = new Set<SnapbackClient>();\n const devices = new Set<Device>();\n process.stdout.write(`${JSON.stringify({ runner: \"start\", name: check.name })}\\n`);\n try {\n if (storeRoot) await rm(storeRoot, { recursive: true, force: true });\n await within(5_000, async () => check.body({\n as: (name, options = {}) => {\n if (options.store !== undefined && options.store !== \"file\") {\n throw new TypeError(\"journey as(...).store must be 'file'\");\n }\n if (options.store === \"file\" && !storeRoot) throw new Error(\"file journey store root was not supplied\");\n const records = new Map<string, QueryRecord>();\n const faults: TransportFault[] = [];\n const fetch = faultingFetch(faults);\n const client = createClient(options.store === \"file\"\n ? {\n url,\n as: name,\n fetch,\n offline: {\n store: fileRangeStore(join(storeRoot!, name)),\n onTombstone: options.onTombstone,\n viewOnce: options.viewOnce,\n },\n // Test-only custody observer: unlike the public proxy, this sees\n // drain pages issued by the client's internal query path too.\n offlineReadObserver: (ref: any, args: unknown, expected: unknown) => {\n const key = `${String(ref?.op ?? ref)}:${stableSerialize(args)}`;\n records.set(key, { ref, args, expected });\n },\n } as Parameters<typeof createClient>[0]\n : { url, as: name, fetch });\n clients.add(client);\n const device = { client, records, durable: options.store === \"file\", faults };\n devices.add(device);\n return wrapDevice(device, clients);\n },\n tick: (ms) => control(url, secret, \"/control/clock\", { advanceMs: ms }),\n url,\n }));\n await within(5_000, () => runOfflineDerived(devices));\n process.stdout.write(`${JSON.stringify({ name: check.name, kind: \"journey\", verdict: \"pass\", ms: Math.round(performance.now() - started), detail: { file } })}\\n`);\n return true;\n } catch (error) {\n process.stdout.write(`${JSON.stringify({ name: check.name, kind: \"journey\", verdict: \"fail\", ms: Math.round(performance.now() - started), detail: error instanceof Error ? error.message : String(error) })}\\n`);\n return false;\n } finally {\n for (const client of clients) client.close();\n if (storeRoot) await rm(storeRoot, { recursive: true, force: true }).catch(() => undefined);\n }\n}\n\nif (\n basename(process.argv[1] ?? \"\") === \"test-runner.mjs\"\n && resolve(fileURLToPath(import.meta.url)) === resolve(process.argv[1] ?? \"\")\n) await runEntry();\n", "// @ref LLP 1002#4-the-wire \u2014 every owner response is validated before public client code observes it.\nimport type {\n AuthMe,\n AuthSession,\n ChannelDelivery,\n ChannelPublishResult,\n Cursor,\n LiveQueryDelivery,\n Manifest,\n MutationResult,\n Principal,\n QueryRefusedDelivery,\n RefusalEnvelope,\n RefusedDelivery,\n ServerQueryResult,\n} from \"./types.js\";\n\nexport function fallbackRefusal(code: string, message: string): RefusalEnvelope {\n return { code, family: \"owner\", message, guide: \"owner/connect\" };\n}\n\nconst snapbackRefusalBrand = Symbol.for(\"snapback2.SnapbackRefusal\");\n\nexport class SnapbackRefusal extends Error {\n readonly [snapbackRefusalBrand] = true;\n readonly envelope: RefusalEnvelope;\n readonly code: string;\n\n constructor(envelope: RefusalEnvelope, readonly retryable = false, readonly status?: number) {\n super(envelope.message);\n this.name = \"SnapbackRefusal\";\n this.envelope = envelope;\n this.code = envelope.code;\n }\n}\n\nexport function isSnapbackRefusal(value: unknown): value is SnapbackRefusal {\n return typeof value === \"object\"\n && value !== null\n && (value as { name?: unknown }).name === \"SnapbackRefusal\"\n && (value as Record<symbol, unknown>)[snapbackRefusalBrand] === true;\n}\n\nexport function wireShape(message: string): SnapbackRefusal {\n return new SnapbackRefusal({ code: \"E_WIRE_SHAPE\", family: \"op\", message, guide: \"op/wire-shape\" });\n}\n\nexport function wireObject(value: unknown, surface: string): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw wireShape(`${surface} must be an object`);\n return value as Record<string, unknown>;\n}\n\nfunction has(record: Record<string, unknown>, field: string): boolean {\n return Object.prototype.hasOwnProperty.call(record, field);\n}\n\nfunction present(record: Record<string, unknown>, field: string, surface: string): unknown {\n if (!has(record, field)) throw wireShape(`${surface} is missing ${field}`);\n return record[field];\n}\n\nfunction stringField(record: Record<string, unknown>, field: string, surface: string): string {\n const value = present(record, field, surface);\n if (typeof value !== \"string\" || value.length === 0) throw wireShape(`${surface}.${field} must be a non-empty string`);\n return value;\n}\n\nfunction numberField(record: Record<string, unknown>, field: string, surface: string): number {\n const value = present(record, field, surface);\n if (typeof value !== \"number\" || !Number.isFinite(value)) throw wireShape(`${surface}.${field} must be a number`);\n return value;\n}\n\nfunction optionalString(record: Record<string, unknown>, field: string, surface: string): string | undefined {\n if (!has(record, field)) return undefined;\n const value = record[field];\n if (typeof value !== \"string\") throw wireShape(`${surface}.${field} must be a string`);\n return value;\n}\n\nfunction optionalNumber(record: Record<string, unknown>, field: string, surface: string): number | undefined {\n if (!has(record, field)) return undefined;\n const value = record[field];\n if (typeof value !== \"number\" || !Number.isFinite(value)) throw wireShape(`${surface}.${field} must be a number`);\n return value;\n}\n\nfunction nullableString(record: Record<string, unknown>, field: string, surface: string): string | null {\n const value = present(record, field, surface);\n if (value !== null && typeof value !== \"string\") throw wireShape(`${surface}.${field} must be a string or null`);\n return value;\n}\n\nexport function wireRefusalEnvelope(value: unknown, surface: string): RefusalEnvelope {\n const record = wireObject(value, surface);\n const envelope: RefusalEnvelope = {\n code: stringField(record, \"code\", surface),\n family: stringField(record, \"family\", surface),\n message: stringField(record, \"message\", surface),\n guide: stringField(record, \"guide\", surface),\n };\n for (const field of [\"site\", \"rule\", \"rewrite\"] as const) {\n const item = optionalString(record, field, surface);\n if (item !== undefined) envelope[field] = item;\n }\n const which = optionalString(record, \"which\", surface);\n if (which !== undefined) envelope.which = which;\n const cap = optionalNumber(record, \"cap\", surface);\n if (cap !== undefined) envelope.cap = cap;\n return envelope;\n}\n\nexport function copyRefusal(envelope: RefusalEnvelope): RefusalEnvelope {\n const refusal: RefusalEnvelope = {\n code: envelope.code, family: envelope.family, message: envelope.message, guide: envelope.guide,\n };\n if (envelope.site !== undefined) refusal.site = envelope.site;\n if (envelope.rule !== undefined) refusal.rule = envelope.rule;\n if (envelope.rewrite !== undefined) refusal.rewrite = envelope.rewrite;\n if (envelope.which !== undefined) refusal.which = envelope.which;\n if (envelope.cap !== undefined) refusal.cap = envelope.cap;\n return refusal;\n}\n\nexport function isTerminalSession(envelope: Pick<RefusalEnvelope, \"code\" | \"family\">): boolean {\n return envelope.code === \"E_AUTH_SESSION\" && envelope.family === \"auth\";\n}\n\nexport function wireQuery<Result>(value: unknown, surface = \"query response\"): ServerQueryResult<Result> {\n const record = wireObject(value, surface);\n switch (stringField(record, \"state\", surface)) {\n case \"complete\":\n return {\n state: \"complete\", data: present(record, \"data\", surface) as Result,\n seq: numberField(record, \"seq\", surface), next: nullableString(record, \"next\", surface) as Cursor | null,\n };\n case \"capped\":\n for (const field of [\"site\", \"take\", \"reason\"]) {\n if (has(record, field)) throw wireShape(`${surface}.capped must not carry ${field}`);\n }\n return {\n state: \"capped\", data: present(record, \"data\", surface) as Result,\n seq: numberField(record, \"seq\", surface), next: nullableString(record, \"next\", surface) as Cursor | null,\n };\n case \"partial\": {\n if (has(record, \"next\")) throw wireShape(`${surface}.partial must not carry next`);\n const partial = {\n state: \"partial\" as const,\n seq: numberField(record, \"seq\", surface),\n reason: stringField(record, \"reason\", surface),\n };\n return has(record, \"data\") ? { ...partial, data: record.data as Result } : partial;\n }\n case \"denied\":\n if (has(record, \"next\")) throw wireShape(`${surface}.denied must not carry next`);\n return { state: \"denied\", seq: numberField(record, \"seq\", surface), rule: stringField(record, \"rule\", surface) };\n default:\n throw wireShape(`${surface}.state must be complete, capped, partial, or denied`);\n }\n}\n\nexport function wireMutation<Result>(value: unknown): MutationResult<Result> {\n const surface = \"mutation response\";\n const record = wireObject(value, surface);\n if (has(record, \"next\")) throw wireShape(`${surface} must not carry next`);\n switch (stringField(record, \"state\", surface)) {\n case \"committed\":\n return { state: \"committed\", data: present(record, \"data\", surface) as Result, seq: numberField(record, \"seq\", surface) };\n case \"rejected\":\n return { state: \"rejected\", ...wireRefusalEnvelope(record, \"mutation rejected response\") };\n default:\n throw wireShape(`${surface}.state must be committed or rejected`);\n }\n}\n\nexport function wireSubscription<Result>(data: string): LiveQueryDelivery<Result> | QueryRefusedDelivery {\n const surface = \"subscription delivery\";\n const record = sseObject(data, surface);\n if (stringField(record, \"state\", surface) === \"refused\") {\n if (has(record, \"next\")) throw wireShape(`${surface}.refused must not carry next`);\n const refusal = wireRefusalEnvelope(record, `${surface} refusal`);\n const seq = optionalNumber(record, \"seq\", surface);\n return { state: \"refused\", live: false, ...refusal, ...(seq === undefined ? {} : { seq }) };\n }\n return { ...wireQuery<Result>(record, surface), live: true };\n}\n\nexport function wireChannelDelivery<Payload>(data: string): ChannelDelivery<Payload> {\n const surface = \"channel delivery\";\n const record = sseObject(data, surface);\n if (record.state === \"refused\") {\n return { state: \"refused\", ...wireRefusalEnvelope(record, `${surface} refusal`) } as RefusedDelivery;\n }\n return {\n from: stringField(record, \"from\", surface) as Principal,\n payload: present(record, \"payload\", surface) as Payload,\n at: numberField(record, \"at\", surface),\n };\n}\n\nexport function wireChannelPublish(value: unknown): ChannelPublishResult {\n const surface = \"channel publish response\";\n const record = wireObject(value, surface);\n if (record.ok === true) return { ok: true };\n if (record.state !== \"refused\") throw wireShape(`${surface} must contain ok: true or state: refused`);\n return { state: \"refused\", ...wireRefusalEnvelope(record, `${surface} refusal`) };\n}\n\nexport function terminalSessionEnvelope(value: unknown): RefusalEnvelope | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n if (record.state !== \"rejected\" && record.state !== \"refused\") return undefined;\n // A replayed write's trace conflict carries no code (LLP 1012 \u00A77); it is never a session terminal.\n if (record.state === \"rejected\" && record.reason === \"conflict\") return undefined;\n const refusal = wireRefusalEnvelope(record, \"terminal session response\");\n return isTerminalSession(refusal) ? refusal : undefined;\n}\n\nexport function wireAuthSession(value: unknown, surface: string): AuthSession {\n const record = wireObject(value, surface);\n return { token: stringField(record, \"token\", surface), viewer: stringField(record, \"viewer\", surface) as Principal };\n}\n\nexport function wireAuthMe(value: unknown): AuthMe {\n const surface = \"auth me response\";\n const record = wireObject(value, surface);\n return { viewer: stringField(record, \"viewer\", surface) as Principal, kind: stringField(record, \"kind\", surface) };\n}\n\nexport function wireLogout(value: unknown): { ok: boolean } {\n const surface = \"auth logout response\";\n const record = wireObject(value, surface);\n if (typeof present(record, \"ok\", surface) !== \"boolean\") throw wireShape(`${surface}.ok must be a boolean`);\n return { ok: record.ok as boolean };\n}\n\nexport function wireManifest(value: unknown): Manifest {\n const surface = \"manifest response\";\n const record = wireObject(value, surface);\n const ops = wireObject(present(record, \"ops\", surface), `${surface}.ops`);\n for (const [name, operation] of Object.entries(ops)) {\n const item = wireObject(operation, `${surface}.ops.${name}`);\n stringField(item, \"kind\", `${surface}.ops.${name}`);\n stringField(item, \"planHash\", `${surface}.ops.${name}`);\n present(item, \"args\", `${surface}.ops.${name}`);\n }\n const manifest: Manifest = {\n generation: stringField(record, \"generation\", surface),\n programGeneration: stringField(record, \"programGeneration\", surface),\n ops: ops as unknown as Manifest[\"ops\"],\n channels: wireObject(present(record, \"channels\", surface), `${surface}.channels`),\n auth: wireObject(present(record, \"auth\", surface), `${surface}.auth`),\n };\n if (typeof record.schemaHash === \"string\") manifest.schemaHash = record.schemaHash;\n if (record.tables && typeof record.tables === \"object\" && !Array.isArray(record.tables)) {\n manifest.tables = record.tables as Manifest[\"tables\"];\n }\n if (record.schema && typeof record.schema === \"object\" && !Array.isArray(record.schema)) {\n manifest.schema = record.schema as Manifest[\"schema\"];\n }\n return manifest;\n}\n\nexport function wireAssetSession(value: unknown): { token: string; expiresAt: number } {\n const surface = \"asset session response\";\n const record = wireObject(value, surface);\n return { token: stringField(record, \"token\", surface), expiresAt: numberField(record, \"expiresAt\", surface) };\n}\n\nexport async function responseRefusal(response: Response): Promise<SnapbackRefusal> {\n let value: unknown;\n try {\n value = await response.json();\n } catch {\n throw new SnapbackRefusal(\n fallbackRefusal(\"E_TRANSPORT\", `HTTP ${response.status} did not contain a refusal envelope`),\n true,\n response.status,\n );\n }\n if (!value || typeof value !== \"object\" || Array.isArray(value)\n || ![\"code\", \"family\", \"guide\"].some((field) => has(value as Record<string, unknown>, field))) {\n throw new SnapbackRefusal(\n fallbackRefusal(\"E_TRANSPORT\", `HTTP ${response.status} did not contain a refusal envelope`),\n true,\n response.status,\n );\n }\n return new SnapbackRefusal(wireRefusalEnvelope(value, `HTTP ${response.status} refusal`), false, response.status);\n}\n\nexport function sseObject(data: string, surface: string): Record<string, unknown> {\n try {\n return wireObject(JSON.parse(data), surface);\n } catch (error) {\n if (isSnapbackRefusal(error)) throw error;\n throw wireShape(`${surface} must contain valid JSON`);\n }\n}\n\n/**\n * `AbortSignal.prototype.throwIfAborted` does not exist on React Native's AbortSignal\n * (Hermes, RN 0.81 / Expo SDK 54), so every abort check goes through this helper.\n */\nexport function throwIfAborted(signal?: AbortSignal | null): void {\n if (!signal?.aborted) return;\n const reason: unknown = (signal as { reason?: unknown }).reason;\n if (reason instanceof Error) throw reason;\n const error = new Error(typeof reason === \"string\" ? reason : \"The operation was aborted\");\n error.name = \"AbortError\";\n throw error;\n}\n", "export const referencePath: unique symbol = Symbol.for(\"snapback.referencePath\");\n\nexport interface Op<Args, Result> {\n readonly op: string;\n readonly [referencePath]: string;\n readonly __args?: (args: Args) => void;\n readonly __result?: Result;\n}\n\nexport interface Channel<Args, Payload = unknown> {\n readonly [referencePath]: string;\n readonly __channelArgs?: (args: Args) => void;\n readonly __payload?: Payload;\n}\n\nexport interface Api {}\n\nexport type AnyOp = Op<any, any>;\n\nexport interface ApiProxy {\n readonly [referencePath]: string;\n}\n\nconst proxies = new Map<string, ApiProxy>();\n\nfunction proxy(path: string[]): ApiProxy {\n const op = path.join(\".\");\n const existing = proxies.get(op);\n if (existing) return existing;\n\n const target = Object.assign({}, { op, [referencePath]: op }) as ApiProxy;\n const value = new Proxy(target, {\n get(_current, property) {\n if (property === referencePath) return op;\n if (property === Symbol.toStringTag) return \"SnapbackOp\";\n if (property === \"then\") return undefined;\n if (property === \"op\" && path.length >= 2) return op;\n return typeof property === \"string\" ? proxy([...path, property]) : undefined;\n },\n });\n proxies.set(op, value);\n return value;\n}\n\nexport function referenceName(ref: ApiProxy): string {\n return ref[referencePath];\n}\n\n// @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 generated Api augmentation types the inert operation proxy.\nexport const api: Api = proxy([]) as Api;\n", "import type {\n AssetRecord,\n AssetUploadOptions,\n AssetUploadSource,\n ImageAsset,\n NativeAssetSource,\n VideoAsset,\n} from \"./types.js\";\n\nexport class AssetInputError extends Error {\n constructor(\n readonly code: \"E_ASSET_TYPE\" | \"E_ASSET_TOO_LARGE\" | \"E_ASSET_NOT_READY\" | \"E_ASSET_CARRIER_IMAGE\" | \"E_ASSET_NATIVE_FILE_API\",\n message: string,\n ) {\n super(message);\n this.name = \"AssetInputError\";\n }\n}\n\nexport interface BlobLike {\n readonly size: number;\n arrayBuffer(): Promise<ArrayBuffer>;\n stream(): ReadableStream<Uint8Array>;\n}\n\ntype RuntimeAssetUploadSource = AssetUploadSource | BlobLike;\n\nexport interface PreparedAssetSource {\n readonly source: RuntimeAssetUploadSource;\n readonly bytes: number;\n body?: BlobLike | ReadableStream<Uint8Array>;\n}\n\nexport interface AssetPlacement {\n readonly path: readonly (string | number)[];\n readonly max: number;\n readonly prepared: PreparedAssetSource;\n}\n\ntype AssetKind = \"image\" | \"video\";\ntype PlacementCandidate = {\n readonly path: readonly (string | number)[];\n readonly max: number;\n readonly source: RuntimeAssetUploadSource;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isBrowserFile(value: unknown): value is File | Blob {\n return isBlobLike(value)\n && ((typeof globalThis.File === \"function\" && value instanceof globalThis.File)\n || (typeof globalThis.Blob === \"function\" && value instanceof globalThis.Blob));\n}\n\nexport function isBlobLike(value: unknown): value is BlobLike {\n return isRecord(value)\n && typeof value.size === \"number\"\n && typeof value.arrayBuffer === \"function\"\n && typeof value.stream === \"function\";\n}\n\nexport function isNativeAssetSource(value: unknown): value is NativeAssetSource {\n return isRecord(value) && typeof value.uri === \"string\" && value.uri.length > 0;\n}\n\n// This is only a cheap signal that a manifest walk may be needed. It does not\n// classify a value as an upload source; only collectPlacements may do that.\nexport function mayNeedAssetPlanning(value: unknown, ancestors = new Set<object>()): boolean {\n if (isBlobLike(value) || isNativeAssetSource(value)) return true;\n if (typeof value !== \"object\" || value === null) return false;\n if (ancestors.has(value)) return false;\n ancestors.add(value);\n const found = Array.isArray(value)\n ? value.some((item) => mayNeedAssetPlanning(item, ancestors))\n : Object.values(value).some((item) => mayNeedAssetPlanning(item, ancestors));\n ancestors.delete(value);\n return found;\n}\n\nfunction descriptorAsset(value: unknown): { kind: AssetKind; max: number } | undefined {\n if (!isRecord(value)) return undefined;\n for (const [tag, kind] of [[\"Image\", \"image\"], [\"Video\", \"video\"]] as const) {\n const tagged = value[tag];\n if (!isRecord(tagged) || Object.keys(value).length !== 1) continue;\n const max = tagged.max;\n if (typeof max === \"number\" && Number.isSafeInteger(max) && max > 0) return { kind, max };\n }\n return undefined;\n}\n\n// Every non-structural ArgType tag: a {uri} object arriving where one of these\n// is declared is a misplaced upload source, never a record to traverse.\nconst scalarDescriptorTags = new Set([\n \"Ref\", \"Text\", \"Bytes\", \"Json\", \"Enum\", \"Decimal\", \"Money\",\n \"Int\", \"Bool\", \"Time\", \"Id\", \"Principal\", \"Cursor\", \"Scalar\",\n]);\n\nfunction isScalarDescriptor(value: unknown): boolean {\n if (typeof value === \"string\") return true;\n if (!isRecord(value)) return false;\n const keys = Object.keys(value);\n return keys.length === 1 && scalarDescriptorTags.has(keys[0]!);\n}\n\nfunction collectPlacements(\n value: unknown,\n descriptor: unknown,\n path: readonly (string | number)[],\n output: PlacementCandidate[],\n): void {\n const asset = descriptorAsset(descriptor);\n if (asset) {\n if (isBlobLike(value) || isNativeAssetSource(value)) {\n output.push({ path, max: asset.max, source: value });\n }\n return;\n }\n if (!isRecord(descriptor)) {\n if (isBlobLike(value) || isNativeAssetSource(value)) {\n throw new AssetInputError(\n \"E_ASSET_TYPE\",\n `asset upload source at ${path.join(\".\") || \"<root>\"} may only be used at an image or video argument`,\n );\n }\n return;\n }\n if (Object.keys(descriptor).length === 1 && \"Optional\" in descriptor) {\n if (value !== null && value !== undefined) collectPlacements(value, descriptor.Optional, path, output);\n return;\n }\n if (Object.keys(descriptor).length === 1 && isRecord(descriptor.List) && Array.isArray(value)) {\n for (let index = 0; index < value.length; index += 1) {\n collectPlacements(value[index], descriptor.List.of, [...path, index], output);\n }\n return;\n }\n if (isBlobLike(value) || (isNativeAssetSource(value) && isScalarDescriptor(descriptor))) {\n throw new AssetInputError(\n \"E_ASSET_TYPE\",\n `asset upload source at ${path.join(\".\") || \"<root>\"} may only be used at an image or video argument`,\n );\n }\n if (!isRecord(value)) return;\n for (const [name, child] of Object.entries(descriptor)) {\n collectPlacements(value[name], child, [...path, name], output);\n }\n}\n\nfunction checkedLength(value: unknown, surface: string): number {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value <= 0) {\n throw new AssetInputError(\"E_ASSET_TYPE\", `${surface} must have a positive integer byte length`);\n }\n return value;\n}\n\ntype ExpoFile = BlobLike & { readonly uri: string };\ntype ExpoFileConstructor = new (uri: string) => ExpoFile;\n\nasync function expoFile(source: NativeAssetSource): Promise<ExpoFile> {\n let module: { File?: unknown };\n try {\n // The build leaves this optional native peer external, and this branch is\n // reached only for a manifest-classified native URI source.\n module = await import(\"expo-file-system\") as { File?: unknown };\n } catch (error) {\n throw new AssetInputError(\n \"E_ASSET_NOT_READY\",\n `cannot open native asset URI ${source.uri} with expo-file-system: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n if (typeof module.File !== \"function\") {\n throw new AssetInputError(\n \"E_ASSET_NATIVE_FILE_API\",\n \"native asset URIs require expo-file-system >=19 (Expo SDK 54), whose package root exports the File constructor\",\n );\n }\n try {\n return new (module.File as ExpoFileConstructor)(source.uri);\n } catch (error) {\n throw new AssetInputError(\n \"E_ASSET_NOT_READY\",\n `cannot open native asset URI ${source.uri} with expo-file-system: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\nexport async function expoUploadFetch(): Promise<typeof globalThis.fetch> {\n try {\n const module = await import(\"expo/fetch\") as { fetch?: unknown };\n if (typeof module.fetch !== \"function\") throw new TypeError(\"expo/fetch does not export fetch\");\n return module.fetch as typeof globalThis.fetch;\n } catch (error) {\n throw new AssetInputError(\n \"E_ASSET_NOT_READY\",\n `native asset upload requires expo/fetch: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\nasync function fetchedNativeBody(source: NativeAssetSource): Promise<PreparedAssetSource> {\n let response: Response;\n try {\n response = await globalThis.fetch(source.uri);\n } catch (error) {\n throw new AssetInputError(\n \"E_ASSET_NOT_READY\",\n `cannot open native asset URI ${source.uri}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n if (!response.ok) throw new AssetInputError(\"E_ASSET_NOT_READY\", `native asset URI ${source.uri} returned HTTP ${response.status}`);\n if (!response.body) throw new AssetInputError(\"E_ASSET_TYPE\", `native asset URI ${source.uri} has no streaming body`);\n const declared = source.size ?? source.fileSize;\n const bytes = declared === undefined\n ? checkedLength(Number(response.headers.get(\"Content-Length\")), `Content-Length for ${source.uri}`)\n : checkedLength(declared, source.size === undefined ? \"native asset source.fileSize\" : \"native asset source.size\");\n return { source, bytes, body: response.body };\n}\n\nexport async function prepareAssetSource(\n source: RuntimeAssetUploadSource,\n): Promise<PreparedAssetSource> {\n if (isBlobLike(source)) {\n return { source, bytes: checkedLength(source.size, \"File/Blob size\") };\n }\n if (!isNativeAssetSource(source)) {\n throw new AssetInputError(\"E_ASSET_TYPE\", \"asset source must be a File or { uri, size?/fileSize?, type?/mimeType? }\");\n }\n if (/^(?:data|https?):/i.test(source.uri)) return fetchedNativeBody(source);\n const body = await expoFile(source);\n const declared = source.size ?? source.fileSize;\n const bytes = declared === undefined\n ? checkedLength(body.size, `expo-file-system File.size for ${source.uri}`)\n : checkedLength(declared, source.size === undefined ? \"native asset source.fileSize\" : \"native asset source.size\");\n if (body.size !== bytes) {\n throw new AssetInputError(\n \"E_ASSET_TYPE\",\n `native asset source declared ${bytes} bytes but expo-file-system reports ${body.size}`,\n );\n }\n return { source, bytes, body };\n}\n\n// @ref LLP 1006#10-clients \u2014 every File/URI occurrence is length-checked against\n// its manifest descriptor before the first server upload starts.\nexport async function planAssetArguments(\n args: unknown,\n descriptor: unknown,\n): Promise<AssetPlacement[]> {\n const candidates: PlacementCandidate[] = [];\n collectPlacements(args, descriptor, [], candidates);\n const prepared = await Promise.all(candidates.map(async (candidate) => ({\n ...candidate,\n prepared: await prepareAssetSource(candidate.source),\n })));\n for (const item of prepared) {\n if (item.prepared.bytes > item.max) {\n throw new AssetInputError(\n \"E_ASSET_TOO_LARGE\",\n `asset argument at ${item.path.join(\".\") || \"<root>\"} has ${item.prepared.bytes} bytes, over its ${item.max} byte bound`,\n );\n }\n }\n return prepared.map(({ path, max, prepared: source }) => ({ path, max, prepared: source }));\n}\n\nexport async function preparedBody(\n prepared: PreparedAssetSource,\n): Promise<BlobLike | ReadableStream<Uint8Array>> {\n if (isBlobLike(prepared.source)) return prepared.source;\n if (prepared.body) return prepared.body;\n const reopened = (await prepareAssetSource(prepared.source)).body;\n if (!reopened) throw new AssetInputError(\"E_ASSET_TYPE\", `native asset URI ${prepared.source.uri} has no body`);\n return reopened;\n}\n\nexport function withProgress(\n body: BlobLike | ReadableStream<Uint8Array>,\n bytes: number,\n options: AssetUploadOptions,\n): BlobLike | ReadableStream<Uint8Array> {\n const callback = options.onProgress;\n if (!callback) return body;\n const source = isBlobLike(body) ? body.stream() : body;\n const reader = source.getReader();\n let loaded = 0;\n callback({ loaded, total: bytes });\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n const next = await reader.read();\n if (next.done) {\n loaded = bytes;\n callback({ loaded, total: bytes });\n controller.close();\n return;\n }\n loaded = Math.min(bytes, loaded + next.value.byteLength);\n callback({ loaded, total: bytes });\n controller.enqueue(next.value);\n },\n cancel(reason) {\n return reader.cancel(reason);\n },\n });\n}\n\nfunction setAtPath(value: unknown, path: readonly (string | number)[], replacement: AssetRecord): unknown {\n if (path.length === 0) return replacement;\n const [head, ...tail] = path;\n if (Array.isArray(value) && typeof head === \"number\") {\n const copy = [...value];\n copy[head] = setAtPath(copy[head], tail, replacement);\n return copy;\n }\n if (isRecord(value) && typeof head === \"string\") {\n return { ...value, [head]: setAtPath(value[head], tail, replacement) };\n }\n throw new AssetInputError(\"E_ASSET_TYPE\", `asset argument path ${path.join(\".\")} no longer matches its manifest descriptor`);\n}\n\nexport function substituteAssetRecords(\n args: unknown,\n placements: readonly AssetPlacement[],\n records: readonly AssetRecord[],\n): unknown {\n if (placements.length !== records.length) throw new AssetInputError(\"E_ASSET_NOT_READY\", \"an asset upload did not produce a record\");\n return placements.reduce((value, placement, index) => setAtPath(value, placement.path, records[index]!), args);\n}\n\nfunction positiveInteger(record: Record<string, unknown>, field: string, surface: string): number {\n const value = record[field];\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value <= 0) {\n throw new AssetInputError(\"E_ASSET_TYPE\", `${surface}.${field} must be a positive integer`);\n }\n return value;\n}\n\nfunction checkedAssetRecord(value: unknown, surface: string): ImageAsset | VideoAsset {\n if (!isRecord(value)) throw new AssetInputError(\"E_ASSET_TYPE\", `${surface} must be an asset record`);\n const keys = Object.keys(value).sort();\n const video = Object.hasOwn(value, \"duration\");\n const expected = (video ? [\"duration\", \"height\", \"id\", \"width\"] : [\"height\", \"id\", \"width\"]);\n if (keys.length !== expected.length || keys.some((key, index) => key !== expected[index])) {\n throw new AssetInputError(\"E_ASSET_TYPE\", `${surface} must contain exactly ${expected.join(\", \")}`);\n }\n if (typeof value.id !== \"string\"\n || !/^s2id-[0-9a-f]{32}-[0-9a-f]{16}$/.test(value.id)\n || /-0{16}$/.test(value.id)) {\n throw new AssetInputError(\"E_ASSET_TYPE\", `${surface}.id must be an engine-minted id`);\n }\n const record = {\n id: value.id,\n width: positiveInteger(value, \"width\", surface),\n height: positiveInteger(value, \"height\", surface),\n };\n // The brand is type-level only; the wire record carries exactly the checked fields.\n return (video ? { ...record, duration: positiveInteger(value, \"duration\", surface) } : record) as ImageAsset | VideoAsset;\n}\n\nexport function assetRecord(value: unknown): ImageAsset | VideoAsset {\n return checkedAssetRecord(value, \"upload response\");\n}\n\nexport function assetPath(baseUrl: string, asset: AssetRecord, width?: number, carrier?: string): string {\n const record = checkedAssetRecord(asset, \"asset URL record\");\n if (width !== undefined && (!Number.isSafeInteger(width) || width <= 0)) {\n throw new AssetInputError(\"E_ASSET_TYPE\", \"asset width must be a positive integer\");\n }\n const query = new URLSearchParams();\n if (width !== undefined) query.set(\"w\", String(width));\n if (carrier !== undefined) {\n if (!(\"duration\" in record)) {\n throw new AssetInputError(\"E_ASSET_CARRIER_IMAGE\", \"image asset URLs never carry a session token; fetch the URL with assetHeaders or assetBlob\");\n }\n query.set(\"s\", carrier);\n }\n const suffix = query.size === 0 ? \"\" : `?${query}`;\n return `${baseUrl}/api/asset/${encodeURIComponent(record.id)}${suffix}`;\n}\n", "import type { Trace } from \"./types\";\n\nexport class EvalError extends Error {\n /** The run's trace up to the failure, attached by the store so a caller can tell an uncovered read from a genuine refusal. */\n trace?: Trace;\n /** The sites the failed run read outside coverage; empty when every read before the failure was covered. */\n partialSites?: string[];\n\n constructor(readonly code: string, message: string, readonly authoredCode: string | null = null) {\n super(`${code}: ${message}`);\n }\n}\n\nexport function requireRowIdentity(\n table: string,\n operation: string,\n keyId: string,\n rowId: string,\n): void {\n if (keyId !== rowId) {\n throw new EvalError(\"E_INPUT\", `${table} ${operation} key ${keyId} does not match row id ${rowId}`);\n }\n}\n", "// @ref LLP 1001#10-what-binds-and-how-it-is-checked \u2014 certificate identity uses\n// Rust serde's BTreeMap order even when a direct TypeScript caller constructed\n// the equivalent object with a different property insertion order.\n\nimport { EvalError } from \"./errors\";\n\nexport function canonicalProgramJson(program: any): string {\n return JSON.stringify({\n ...program,\n args: sortedMap(program.args ?? {}, normalizeArgType),\n body: (program.body ?? []).map(normalizeStatement),\n });\n}\n\n// @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 schema and\n// rule identity mirror serde's struct-field order and skip rules exactly, so\n// the hash is the same whether the schema arrived in struct order (the\n// corpus) or through a sorted `serde_json::Value` (`GET /api/program`).\n//\n// An unseen shape never hashes equal to a known one: a payload with a field\n// serde's struct does not carry is refused (`E_SCHEMA`) rather than dropped,\n// since dropping would let two different schemas hash the same; an unknown\n// variant is kept whole with its payload deep-sorted, so it hashes\n// deterministically and unlike anything this normalizer knows. The twin\n// treats a refusal as `hydrating` and never predicts under it.\nexport function canonicalSchemaJson(schema: any): string {\n known(schema, [\"tables\", \"maintains\", \"channels\", \"auth\", \"effects\"], \"schema\");\n const canonical: Record<string, any> = {\n tables: sortedMap(schema.tables ?? {}, normalizeTable),\n maintains: (schema.maintains ?? []).map(normalizeMaintain),\n };\n if (schema.channels !== undefined && Object.keys(schema.channels).length > 0) {\n canonical.channels = sortedMap(schema.channels, normalizeChannel);\n }\n if (schema.auth !== undefined && schema.auth !== null) known(schema.auth, [\"password\", \"guests\"], \"auth\");\n if (schema.auth !== undefined && (schema.auth.password || schema.auth.guests)) {\n canonical.auth = { password: schema.auth.password, guests: schema.auth.guests };\n }\n if (schema.effects !== undefined && schema.effects.length > 0) canonical.effects = schema.effects;\n return JSON.stringify(canonical);\n}\n\n/** Refuses a payload carrying a field the serde struct does not: a shape this hasher has never seen. */\nfunction known(record: any, fields: readonly string[], what: string): void {\n if (typeof record !== \"object\" || record === null || Array.isArray(record)) {\n throw new EvalError(\"E_SCHEMA\", `${what} must be an object`);\n }\n const unknown = Object.keys(record).filter((key) => !fields.includes(key));\n if (unknown.length > 0) {\n throw new EvalError(\"E_SCHEMA\", `unknown ${what} field ${unknown.join(\", \")}: a schema shape newer than this evaluator`);\n }\n}\n\n/** The struct's fields in serde order, and nothing else: `known` plus the reconstruction in one step. */\nfunction pick(record: any, fields: readonly string[], what: string): Record<string, any> {\n known(record, fields, what);\n const out: Record<string, any> = {};\n for (const field of fields) if (record[field] !== undefined) out[field] = record[field];\n return out;\n}\n\n/** An unknown variant's payload with every object's keys sorted: deterministic, and never a known shape's bytes. */\nfunction deepSorted(value: any): any {\n if (Array.isArray(value)) return value.map(deepSorted);\n if (typeof value !== \"object\" || value === null) return value;\n return sortedMap(value, deepSorted);\n}\n\n/** A rule in serde's field order: what `Schema::rule_hash` serializes beside the schema hash. */\nexport function canonicalRuleJson(rule: any): string {\n return JSON.stringify(normalizeRule(rule));\n}\n\nfunction normalizeMaintain(maintain: any): any {\n known(maintain, [\"kind\", \"source\", \"by\", \"target\", \"readable\"], \"maintain\");\n return {\n kind: normalizeMaintainKind(maintain.kind),\n source: maintain.source,\n by: maintain.by,\n target: maintain.target,\n readable: maintain.readable === null || maintain.readable === undefined ? null : normalizeRule(maintain.readable),\n };\n}\n\nfunction normalizeMaintainKind(kind: any): any {\n if (typeof kind !== \"object\" || kind === null) return kind;\n const [tag, data] = tagged(kind);\n return { [tag]: tag === \"Sum\" ? pick(data, [\"of\"], \"maintain.kind.Sum\") : deepSorted(data) };\n}\n\nfunction normalizeTable(table: any): any {\n known(table, [\"columns\", \"indexes\", \"rules\", \"constraints\", \"retain\"], \"table\");\n return {\n columns: sortedMap(table.columns ?? {}, normalizeColumnType),\n indexes: sortedMap(table.indexes ?? {}, normalizeIndex),\n rules: normalizeRules(table.rules),\n constraints: (table.constraints ?? []).map(normalizeConstraint),\n retain: table.retain ?? \"until-revoked\",\n };\n}\n\nfunction normalizeIndex(index: any): any {\n return pick(index, [\"columns\", \"unique\"], \"index\");\n}\n\nfunction normalizeChannel(channel: any): any {\n known(channel, [\"args\", \"publish\", \"subscribe\", \"ttl_ms\"], \"channel\");\n return {\n args: sortedMap(channel.args ?? {}, normalizeArgType),\n publish: normalizeRule(channel.publish),\n subscribe: normalizeRule(channel.subscribe),\n ttl_ms: channel.ttl_ms,\n };\n}\n\nfunction normalizeRules(rules: any): any {\n if (rules === undefined || rules === null) return rules;\n known(rules, [\"read\", \"insert\", \"update\", \"delete\"], \"rules\");\n return {\n read: normalizeRule(rules.read),\n insert: normalizeRule(rules.insert),\n update: normalizeRule(rules.update),\n delete: normalizeRule(rules.delete),\n };\n}\n\nexport function normalizeRule(rule: any): any {\n if (typeof rule !== \"object\" || rule === null) return rule;\n const [kind, data] = tagged(rule);\n switch (kind) {\n case \"Eq\":\n case \"Ne\":\n return { [kind]: data.map(normalizeRuleTerm) };\n case \"And\":\n case \"Or\":\n return { [kind]: data.map(normalizeRule) };\n case \"Not\":\n return { [kind]: normalizeRule(data) };\n case \"Exists\":\n case \"Created\":\n return { [kind]: { ...pick(data, [\"table\", \"index\", \"key\", \"provenance\"], `rule.${kind}`), key: data.key.map(normalizeRuleTerm) } };\n case \"Public\":\n return { Public: pick(data, [\"reason\"], \"rule.Public\") };\n default:\n return { [kind]: deepSorted(data) };\n }\n}\n\nfunction normalizeRuleTerm(term: any): any {\n if (typeof term !== \"object\" || term === null) return term;\n const [kind, data] = tagged(term);\n if (kind === \"Literal\") return { Literal: normalizeValue(data) };\n if (kind === \"Field\" || kind === \"OldField\" || kind === \"NextField\") return term;\n return { [kind]: deepSorted(data) };\n}\n\nfunction normalizeConstraint(constraint: any): any {\n if (typeof constraint !== \"object\" || constraint === null) return constraint;\n const [kind, data] = tagged(constraint);\n const what = `constraint.${kind}`;\n switch (kind) {\n case \"Unique\": return { Unique: pick(data, [\"index\"], what) };\n case \"Cap\": return { Cap: pick(data, [\"by\", \"max\"], what) };\n case \"Immutable\": return { Immutable: pick(data, [\"fields\"], what) };\n case \"Text\":\n known(data, [\"field\", \"min\", \"format\"], what);\n return { Text: {\n field: data.field,\n min: data.min ?? 0,\n ...(data.format === undefined || data.format === null ? {} : { format: data.format }),\n } };\n case \"FinalExistsOnInsert\":\n return { FinalExistsOnInsert: { ...pick(data, [\"table\", \"index\", \"key\"], what), key: data.key.map(normalizeRuleTerm) } };\n default: return { [kind]: deepSorted(data) };\n }\n}\n\nfunction normalizeColumnType(column: any): any {\n if (typeof column !== \"object\" || column === null) return column;\n const [kind, data] = tagged(column);\n if (kind === \"Optional\") return { Optional: normalizeColumnType(data) };\n const what = `column.${kind}`;\n if (kind === \"List\") return { List: { ...pick(data, [\"of\", \"max\"], what), of: normalizeColumnType(data.of) } };\n const fields = COLUMN_FIELDS[kind];\n return { [kind]: fields === undefined ? deepSorted(data) : pick(data, fields, what) };\n}\n\n/** The payload fields of each struct-variant column kind, in serde order. */\nconst COLUMN_FIELDS: Record<string, readonly string[]> = {\n Text: [\"max\"], Bytes: [\"max\"], Image: [\"max\"], Video: [\"max\"], Enum: [\"variants\"], Decimal: [\"scale\"],\n Money: [\"currency\", \"scale\"], Ref: [\"table\"], Json: [\"max_bytes\"],\n};\n\nfunction normalizeArgType(arg: any): any {\n if (typeof arg !== \"object\" || arg === null) return arg;\n const [kind, data] = tagged(arg);\n if (kind === \"Optional\") return { Optional: normalizeArgType(data) };\n if (kind === \"List\") {\n // `ArgType::List { of: Option<Box<ArgType>>, max }`: `of` is skipped when\n // absent, and a payload carrying any other field is refused like every\n // struct variant, never rebuilt without it.\n known(data, [\"of\", \"max\"], \"arg.List\");\n return { List: {\n ...(data.of === null || data.of === undefined ? {} : { of: normalizeArgType(data.of) }),\n max: data.max,\n } };\n }\n return normalizeColumnType(arg);\n}\n\nfunction normalizeStatement(statement: any): any {\n if (typeof statement === \"string\") return statement;\n const [kind, data] = tagged(statement);\n switch (kind) {\n case \"Const\":\n case \"Let\":\n case \"Assign\":\n case \"Push\":\n return { [kind]: { ...data, value: normalizeExpression(data.value) } };\n case \"If\":\n return { If: {\n ...data,\n condition: normalizeExpression(data.condition),\n then_body: data.then_body.map(normalizeStatement),\n else_body: data.else_body.map(normalizeStatement),\n } };\n case \"For\":\n return { For: {\n ...data,\n domain: normalizeDomain(data.domain),\n body: data.body.map(normalizeStatement),\n } };\n case \"Require\":\n return { Require: { ...data, condition: normalizeExpression(data.condition) } };\n case \"Insert\":\n return { Insert: { ...data, row: normalizeExpression(data.row) } };\n case \"Update\":\n return { Update: {\n ...data,\n key: normalizeExpression(data.key),\n patch: normalizeExpression(data.patch),\n } };\n case \"Upsert\":\n return { Upsert: {\n ...data,\n key: normalizeExpression(data.key),\n row: normalizeExpression(data.row),\n } };\n case \"Delete\":\n return { Delete: { ...data, key: normalizeExpression(data.key) } };\n case \"Emit\":\n return { Emit: { ...data, payload: normalizeExpression(data.payload) } };\n case \"Return\":\n return { Return: normalizeExpression(data) };\n default:\n return statement;\n }\n}\n\nfunction normalizeDomain(domain: any): any {\n const [kind, data] = tagged(domain);\n switch (kind) {\n case \"Page\":\n return { Page: normalizeScan(data) };\n case \"DerivedArray\":\n return { DerivedArray: { ...data, value: normalizeExpression(data.value) } };\n case \"Recurse\":\n return { Recurse: { ...data, seed: normalizeExpression(data.seed) } };\n default:\n return domain;\n }\n}\n\nfunction normalizeExpression(expression: any): any {\n const [kind, data] = tagged(expression);\n switch (kind) {\n case \"Literal\":\n return { Literal: normalizeValue(data) };\n case \"Field\":\n return { Field: { ...data, base: normalizeExpression(data.base) } };\n case \"Array\":\n return { Array: data.map(normalizeExpression) };\n case \"Object\":\n return { Object: sortedMap(data, normalizeExpression) };\n case \"Binary\":\n return { Binary: {\n ...data,\n left: normalizeExpression(data.left),\n right: normalizeExpression(data.right),\n } };\n case \"Unary\":\n return { Unary: { ...data, value: normalizeExpression(data.value) } };\n case \"Builtin\":\n return { Builtin: { ...data, args: data.args.map(normalizeExpression) } };\n case \"Get\":\n case \"Exists\":\n return { [kind]: normalizeRead(data) };\n case \"Scan\":\n return { Scan: normalizeScan(data) };\n default:\n return expression;\n }\n}\n\nfunction normalizeRead(read: any): any {\n return { ...read, key: read.key.map(normalizeExpression) };\n}\n\nfunction normalizeScan(scan: any): any {\n return {\n ...scan,\n prefix: scan.prefix.map(normalizeExpression),\n after: nullableExpression(scan.after),\n before: nullableExpression(scan.before),\n range: scan.range === null ? null : {\n ...scan.range,\n gt: nullableExpression(scan.range.gt),\n gte: nullableExpression(scan.range.gte),\n lt: nullableExpression(scan.range.lt),\n lte: nullableExpression(scan.range.lte),\n },\n };\n}\n\nfunction nullableExpression(expression: any): any {\n return expression === null ? null : normalizeExpression(expression);\n}\n\nfunction normalizeValue(value: any): any {\n if (typeof value === \"string\") return value;\n const [kind, data] = tagged(value);\n if (kind === \"Array\") return { Array: data.map(normalizeValue) };\n if (kind === \"Row\" || kind === \"Map\") return { [kind]: sortedMap(data, normalizeValue) };\n return value;\n}\n\nfunction sortedMap(value: Record<string, any>, normalize: (item: any) => any): Record<string, any> {\n const result: Record<string, any> = Object.create(null);\n for (const key of Object.keys(value).sort(compareCodepoints)) result[key] = normalize(value[key]);\n return result;\n}\n\nfunction tagged(value: any): [string, any] {\n const keys = Object.keys(value);\n if (keys.length !== 1) throw new Error(\"E_TRACE_SUBSET: malformed externally tagged IR\");\n return [keys[0]!, value[keys[0]!]];\n}\n\nfunction compareCodepoints(left: string, right: string): number {\n const leftPoints = Array.from(left, (value) => value.codePointAt(0)!);\n const rightPoints = Array.from(right, (value) => value.codePointAt(0)!);\n for (let index = 0; index < Math.min(leftPoints.length, rightPoints.length); index += 1) {\n if (leftPoints[index] !== rightPoints[index]) return leftPoints[index]! - rightPoints[index]!;\n }\n return leftPoints.length - rightPoints.length;\n}\n", "export function sha256(text: string): string {\n const bytes = utf8(text);\n const bitLength = bytes.length * 8;\n bytes.push(0x80);\n while (bytes.length % 64 !== 56) bytes.push(0);\n const high = Math.floor(bitLength / 0x1_0000_0000);\n const low = bitLength >>> 0;\n for (let shift = 24; shift >= 0; shift -= 8) bytes.push((high >>> shift) & 0xff);\n for (let shift = 24; shift >= 0; shift -= 8) bytes.push((low >>> shift) & 0xff);\n\n const state = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c,\n 0x1f83d9ab, 0x5be0cd19,\n ];\n const words = new Array<number>(64);\n for (let offset = 0; offset < bytes.length; offset += 64) {\n for (let index = 0; index < 16; index += 1) {\n const start = offset + index * 4;\n words[index] =\n ((bytes[start] << 24) |\n (bytes[start + 1] << 16) |\n (bytes[start + 2] << 8) |\n bytes[start + 3]) >>>\n 0;\n }\n for (let index = 16; index < 64; index += 1) {\n const a = words[index - 15];\n const b = words[index - 2];\n const s0 = rotate(a, 7) ^ rotate(a, 18) ^ (a >>> 3);\n const s1 = rotate(b, 17) ^ rotate(b, 19) ^ (b >>> 10);\n words[index] = (words[index - 16] + s0 + words[index - 7] + s1) >>> 0;\n }\n let [a, b, c, d, e, f, g, h] = state;\n for (let index = 0; index < 64; index += 1) {\n const s1 = rotate(e, 6) ^ rotate(e, 11) ^ rotate(e, 25);\n const choice = (e & f) ^ (~e & g);\n const temp1 = (h + s1 + choice + SHA256_K[index] + words[index]) >>> 0;\n const s0 = rotate(a, 2) ^ rotate(a, 13) ^ rotate(a, 22);\n const majority = (a & b) ^ (a & c) ^ (b & c);\n const temp2 = (s0 + majority) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d + temp1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temp1 + temp2) >>> 0;\n }\n state[0] = (state[0] + a) >>> 0;\n state[1] = (state[1] + b) >>> 0;\n state[2] = (state[2] + c) >>> 0;\n state[3] = (state[3] + d) >>> 0;\n state[4] = (state[4] + e) >>> 0;\n state[5] = (state[5] + f) >>> 0;\n state[6] = (state[6] + g) >>> 0;\n state[7] = (state[7] + h) >>> 0;\n }\n return state.map((value) => value.toString(16).padStart(8, \"0\")).join(\"\");\n}\n\nexport function utf8Length(text: string): number {\n return utf8(text).length;\n}\n\nfunction rotate(value: number, bits: number): number {\n return (value >>> bits) | (value << (32 - bits));\n}\n\nfunction utf8(text: string): number[] {\n const bytes: number[] = [];\n for (const character of text) {\n const point = character.codePointAt(0)!;\n if (point <= 0x7f) bytes.push(point);\n else if (point <= 0x7ff) bytes.push(0xc0 | (point >> 6), 0x80 | (point & 0x3f));\n else if (point <= 0xffff)\n bytes.push(0xe0 | (point >> 12), 0x80 | ((point >> 6) & 0x3f), 0x80 | (point & 0x3f));\n else\n bytes.push(\n 0xf0 | (point >> 18),\n 0x80 | ((point >> 12) & 0x3f),\n 0x80 | ((point >> 6) & 0x3f),\n 0x80 | (point & 0x3f),\n );\n }\n return bytes;\n}\n\nconst SHA256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,\n 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,\n 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n];\n", "// One hasher of the schema: the evaluator's struct-order canonical form, the\n// same code the twin runs, proven against Rust's `Schema::hash()` on every golden.\n// @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 closure reconstruction is admitted only under the envelope's exact generation schema.\nimport { canonicalSchemaJson } from \"../../evaluator/src/certificate-identity.js\";\nimport { sha256 } from \"../../evaluator/src/hash.js\";\n\nexport function schemaDigest(schema: any): string {\n return sha256(canonicalSchemaJson(schema));\n}\n", "// @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 this is the strict public mirror of the frozen server envelope.\n\nimport { schemaDigest } from \"./offline-schema.js\";\n\n/** Exact pooled-row reference spelling. Application objects with `$row` are escaped on the wire. */\nexport type WireRowReference = { $row: { table: string; id: string } };\nexport type WireEscapedObject = { $row: { $value: Record<string, WireValue> } };\nexport type WireValue =\n | null\n | boolean\n | number\n | string\n | WireValue[]\n | { [key: string]: WireValue }\n | WireRowReference\n | WireEscapedObject;\n\nexport interface DeliveryRow {\n table: string;\n id: string;\n row: Record<string, WireValue>;\n}\n\nexport interface DeliveryRange {\n site: string;\n table: string;\n index: string;\n prefix: WireValue[];\n order: \"Asc\" | \"Desc\";\n take: number;\n after: WireValue | null;\n before: WireValue | null;\n gt: WireValue | null;\n gte: WireValue | null;\n lt: WireValue | null;\n lte: WireValue | null;\n ruleHash: string;\n rowIds: string[];\n stop: \"Limit\" | \"Exhausted\";\n absence: boolean;\n haloId?: string;\n}\n\nexport interface DeliveryVerdict {\n ruleHash: string;\n /**\n * The verdict's pinned inputs, digested as a wire fact:\n * `sha256(canonical([table, index, key]))` \u2014 the JSON array of the rule\n * input's table name, index name, and key values in wire encoding (ids and\n * text as strings, integers as numbers, null as null, bytes as\n * `{ \"Bytes\": hex }`), serialized with sorted object keys and no whitespace.\n * A twin evaluating a rule computes it from the schema and the wire values it\n * holds and looks the verdict up by `ruleHash` plus this digest; a replay\n * trace's `inputsDigest` is the same value. A transaction-local created-row\n * probe prefixes the array with `\"created\"`. Defined once in\n * `snapback2-core/src/offline.rs` (`rule_inputs_digest`).\n */\n pinnedInputsDigest: string;\n principal: string;\n authEpoch: number;\n result: boolean;\n}\n\nexport interface DeliveryReceipt {\n ranges: DeliveryRange[];\n absences: Array<[table: string, index: string, key: WireValue[]]>;\n verdicts: DeliveryVerdict[];\n}\n\nexport interface DeliveryAuthority {\n principal: string;\n authEpoch: number;\n}\n\nexport interface DeliveryEnvelopeV1 {\n protocol: 1;\n generation: string;\n schemaHash: string;\n planHash: string;\n authority: DeliveryAuthority;\n state: \"complete\" | \"capped\" | \"partial\" | \"denied\";\n reason?: string;\n rule?: string;\n data: WireValue;\n next: string | null;\n seq: number;\n rows: DeliveryRow[];\n receipt: DeliveryReceipt;\n validator: string;\n}\n\nexport interface DeliveryUnchanged {\n state: \"unchanged\";\n seq: number;\n validator: string;\n}\n\nexport type DeliveryMessage = DeliveryEnvelopeV1 | DeliveryUnchanged;\n\nexport type TaggedValue =\n | \"Null\"\n | { Bool: boolean }\n | { Int: number }\n | { String: string }\n | { Id: string }\n | { Bytes: string }\n | { Row: Record<string, TaggedValue> }\n | { Array: TaggedValue[] }\n | { Map: Record<string, TaggedValue> };\n\nexport interface EvaluatorClosureReceipt {\n schema_hash: string;\n rows: Array<{ table: string; id: string; row: TaggedValue }>;\n ranges: Array<{\n site: string;\n table: string;\n index: string;\n prefix: TaggedValue[];\n order: \"Asc\" | \"Desc\";\n take: number;\n after: TaggedValue | null;\n before: TaggedValue | null;\n gt: TaggedValue | null;\n gte: TaggedValue | null;\n lt: TaggedValue | null;\n lte: TaggedValue | null;\n rule_hash: string;\n row_ids: string[];\n stop: \"Limit\" | \"Exhausted\";\n absence: boolean;\n halo: { table: string; id: string; row: TaggedValue } | null;\n n2_key: null;\n /** Members a later swap evicted from this page; absent when none (the goldens' bytes carry none). */\n evicted_ids?: string[];\n }>;\n absences: Array<[string, string, TaggedValue[]]>;\n verdicts: Array<{\n rule_hash: string;\n pinned_inputs_digest: string;\n principal: string;\n auth_epoch: number;\n result: boolean;\n }>;\n}\n\nexport class DeliveryEnvelopeDecodeError extends TypeError {\n constructor(readonly path: string, detail: string) {\n super(`${path}: ${detail}`);\n this.name = \"DeliveryEnvelopeDecodeError\";\n }\n}\n\nexport function decodeDeliveryEnvelope(json: unknown): DeliveryEnvelopeV1 {\n object(json, \"$\", [\n \"protocol\", \"generation\", \"schemaHash\", \"planHash\", \"authority\", \"state\",\n \"data\", \"next\", \"seq\", \"rows\", \"receipt\", \"validator\",\n ], [\"reason\", \"rule\"]);\n if (json.protocol !== 1) fail(\"$.protocol\", \"unsupported delivery protocol\");\n digest(json.generation, \"$.generation\");\n digest(json.schemaHash, \"$.schemaHash\");\n digest(json.planHash, \"$.planHash\");\n object(json.authority, \"$.authority\", [\"principal\", \"authEpoch\"]);\n string(json.authority.principal, \"$.authority.principal\");\n uint(json.authority.authEpoch, \"$.authority.authEpoch\");\n if (![\"complete\", \"capped\", \"partial\", \"denied\"].includes(String(json.state)))\n fail(\"$.state\", \"expected complete, capped, partial, or denied\");\n if (json.state === \"partial\") string(json.reason, \"$.reason\");\n else if (json.reason !== undefined) fail(\"$.reason\", \"is only valid for partial state\");\n if (json.state === \"denied\") string(json.rule, \"$.rule\");\n else if (json.rule !== undefined) fail(\"$.rule\", \"is only valid for denied state\");\n wire(json.data, \"$.data\");\n if (json.next !== null) string(json.next, \"$.next\");\n uint(json.seq, \"$.seq\");\n array(json.rows, \"$.rows\");\n const pool = new Set<string>();\n json.rows.forEach((row: unknown, index: number) => {\n object(row, `$.rows[${index}]`, [\"table\", \"id\", \"row\"]);\n string(row.table, `$.rows[${index}].table`);\n string(row.id, `$.rows[${index}].id`);\n object(row.row, `$.rows[${index}].row`, [], [], true);\n wire(row.row, `$.rows[${index}].row`);\n const key = poolKey(row.table, row.id);\n if (pool.has(key)) fail(`$.rows[${index}]`, \"duplicates a pooled row\");\n pool.add(key);\n });\n receipt(json.receipt, pool, json.authority as DeliveryAuthority);\n validateReferences(json.data, pool, \"$.data\");\n digest(json.validator, \"$.validator\");\n return json as DeliveryEnvelopeV1;\n}\n\n/** Decode either a full authority envelope or a conditional `unchanged` marker. */\nexport function decodeDeliveryMessage(json: unknown): DeliveryMessage {\n if (plain(json) && json.state === \"unchanged\") {\n object(json, \"$\", [\"state\", \"seq\", \"validator\"]);\n uint(json.seq, \"$.seq\");\n digest(json.validator, \"$.validator\");\n return json as unknown as DeliveryUnchanged;\n }\n return decodeDeliveryEnvelope(json);\n}\n\nexport function encodeDeliveryEnvelope(envelope: DeliveryEnvelopeV1): string {\n const decoded = decodeDeliveryEnvelope(envelope);\n const ordered: Record<string, unknown> = {\n protocol: decoded.protocol,\n generation: decoded.generation,\n schemaHash: decoded.schemaHash,\n planHash: decoded.planHash,\n authority: {\n principal: decoded.authority.principal,\n authEpoch: decoded.authority.authEpoch,\n },\n state: decoded.state,\n };\n if (decoded.reason !== undefined) ordered.reason = decoded.reason;\n if (decoded.rule !== undefined) ordered.rule = decoded.rule;\n ordered.data = canonicalWire(decoded.data);\n ordered.next = decoded.next;\n ordered.seq = decoded.seq;\n ordered.rows = [...decoded.rows]\n .sort((left, right) => compareText(left.table, right.table) || compareText(left.id, right.id))\n .map((row) => ({ table: row.table, id: row.id, row: canonicalWire(row.row) }));\n ordered.receipt = {\n ranges: decoded.receipt.ranges.map((range) => {\n const item: Record<string, unknown> = {\n site: range.site,\n table: range.table,\n index: range.index,\n prefix: range.prefix.map(canonicalWire),\n order: range.order,\n take: range.take,\n after: range.after === null ? null : canonicalWire(range.after),\n before: range.before === null ? null : canonicalWire(range.before),\n gt: range.gt === null ? null : canonicalWire(range.gt),\n gte: range.gte === null ? null : canonicalWire(range.gte),\n lt: range.lt === null ? null : canonicalWire(range.lt),\n lte: range.lte === null ? null : canonicalWire(range.lte),\n ruleHash: range.ruleHash,\n rowIds: [...range.rowIds],\n stop: range.stop,\n absence: range.absence,\n };\n if (range.haloId !== undefined) item.haloId = range.haloId;\n return item;\n }),\n absences: decoded.receipt.absences.map(([table, index, key]) => [\n table,\n index,\n key.map(canonicalWire),\n ]),\n verdicts: decoded.receipt.verdicts.map((verdict) => ({\n ruleHash: verdict.ruleHash,\n pinnedInputsDigest: verdict.pinnedInputsDigest,\n principal: verdict.principal,\n authEpoch: verdict.authEpoch,\n result: verdict.result,\n })),\n };\n ordered.validator = decoded.validator;\n return JSON.stringify(ordered);\n}\n\nexport function expandRows(envelope: DeliveryEnvelopeV1): WireValue {\n const decoded = decodeDeliveryEnvelope(envelope);\n const rows = new Map(decoded.rows.map((row) => [poolKey(row.table, row.id), row.row]));\n const expand = (value: WireValue): WireValue => {\n if (rowReference(value)) {\n const row = rows.get(poolKey(value.$row.table, value.$row.id));\n if (row === undefined) fail(\"$.data\", `references missing row ${value.$row.table}/${value.$row.id}`);\n return clone(row);\n }\n if (escapedObject(value)) {\n return Object.fromEntries(\n Object.entries(value.$row.$value).map(([key, item]) => [key, expand(item)]),\n );\n }\n if (Array.isArray(value)) return value.map(expand);\n if (plain(value)) return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, expand(item)]));\n return value;\n };\n return expand(decoded.data);\n}\n\n/** Rebuild the evaluator's externally-tagged private receipt from the public pool. */\nexport function toClosureReceipt(envelope: DeliveryEnvelopeV1, schema: any): EvaluatorClosureReceipt {\n const decoded = decodeDeliveryEnvelope(envelope);\n let actualSchemaHash: string;\n try {\n actualSchemaHash = schemaDigest(schema);\n } catch (error) {\n fail(\"schema\", error instanceof Error ? error.message : String(error));\n }\n if (actualSchemaHash !== decoded.schemaHash) {\n fail(\"schema\", `hash ${actualSchemaHash} does not match envelope schemaHash ${decoded.schemaHash}`);\n }\n const taggedRows = new Map<string, { table: string; id: string; row: TaggedValue }>();\n for (const row of decoded.rows) {\n const tagged = { table: row.table, id: row.id, row: tagRow(schema, row.table, row.row) };\n taggedRows.set(poolKey(row.table, row.id), tagged);\n }\n const ranges = decoded.receipt.ranges.map((range) => ({\n site: range.site,\n table: range.table,\n index: range.index,\n prefix: tagIndexValues(schema, range.table, range.index, range.prefix, 0),\n order: range.order,\n take: range.take,\n after: tagBoundary(schema, range, range.after),\n before: tagBoundary(schema, range, range.before),\n gt: tagBoundary(schema, range, range.gt),\n gte: tagBoundary(schema, range, range.gte),\n lt: tagBoundary(schema, range, range.lt),\n lte: tagBoundary(schema, range, range.lte),\n rule_hash: range.ruleHash,\n row_ids: [...range.rowIds],\n stop: range.stop,\n absence: range.absence,\n halo: range.haloId === undefined\n ? null\n : clone(taggedRows.get(poolKey(range.table, range.haloId))\n ?? fail(`$.receipt.ranges[${range.site}].haloId`, \"references a missing pooled row\")),\n n2_key: null,\n }));\n return {\n schema_hash: decoded.schemaHash,\n rows: Array.from(taggedRows.values()).map(clone),\n ranges,\n absences: decoded.receipt.absences.map(([table, index, key]) => [\n table,\n index,\n tagIndexValues(schema, table, index, key, 0),\n ]),\n verdicts: decoded.receipt.verdicts.map((verdict) => ({\n rule_hash: verdict.ruleHash,\n pinned_inputs_digest: verdict.pinnedInputsDigest,\n principal: verdict.principal,\n auth_epoch: verdict.authEpoch,\n result: verdict.result,\n })),\n };\n}\n\nexport type DeliveryRangeExtent =\n | { stop: \"Limit\"; firstKey: WireValue[]; lastKey: WireValue[]; presentIds: string[] }\n | {\n stop: \"Exhausted\";\n prefix: WireValue[];\n bounds: Pick<DeliveryRange, \"after\" | \"before\" | \"gt\" | \"gte\" | \"lt\" | \"lte\">;\n presentIds: string[];\n };\n\n/** Derive the rule-2 range extent solely from a delivery and its generation schema. */\nexport function deliveryRangeExtent(\n envelope: DeliveryEnvelopeV1,\n schema: any,\n range: DeliveryRange,\n): DeliveryRangeExtent {\n const decoded = decodeDeliveryEnvelope(envelope);\n const selected = decoded.receipt.ranges.find((candidate) => candidate === range)\n ?? decoded.receipt.ranges.find((candidate) => candidate.site === range.site);\n if (!selected) fail(\"$.receipt.ranges\", `does not contain site ${range.site}`);\n const presentIds = selected.haloId === undefined\n ? [...selected.rowIds]\n : [...selected.rowIds, selected.haloId];\n if (selected.stop === \"Exhausted\") {\n return {\n stop: \"Exhausted\",\n prefix: clone(selected.prefix),\n bounds: {\n after: clone(selected.after), before: clone(selected.before),\n gt: clone(selected.gt), gte: clone(selected.gte),\n lt: clone(selected.lt), lte: clone(selected.lte),\n },\n presentIds,\n };\n }\n if (selected.rowIds.length === 0) fail(`$.receipt.ranges[${selected.site}].rowIds`, \"Limit extent needs a returned row\");\n const rows = new Map(decoded.rows.map((row) => [poolKey(row.table, row.id), row]));\n const key = (id: string): WireValue[] => {\n const row = rows.get(poolKey(selected.table, id))!;\n return indexColumns(schema, selected.table, selected.index).map((column) => {\n if (!(column in row.row)) fail(`$.rows.${selected.table}/${id}.${column}`, \"is required by the range index\");\n return clone(row.row[column]!);\n });\n };\n return {\n stop: \"Limit\",\n firstKey: key(selected.rowIds[0]!),\n lastKey: key(selected.rowIds[selected.rowIds.length - 1]!),\n presentIds,\n };\n}\n\nfunction receipt(value: unknown, pool: Set<string>, authority: DeliveryAuthority): void {\n object(value, \"$.receipt\", [\"ranges\", \"absences\", \"verdicts\"]);\n array(value.ranges, \"$.receipt.ranges\");\n value.ranges.forEach((range: unknown, index: number) => {\n const path = `$.receipt.ranges[${index}]`;\n object(range, path, [\n \"site\", \"table\", \"index\", \"prefix\", \"order\", \"take\", \"after\", \"before\",\n \"gt\", \"gte\", \"lt\", \"lte\", \"ruleHash\", \"rowIds\", \"stop\", \"absence\",\n ], [\"haloId\"]);\n for (const name of [\"site\", \"table\", \"index\", \"ruleHash\"] as const) string(range[name], `${path}.${name}`);\n digest(range.ruleHash, `${path}.ruleHash`);\n array(range.prefix, `${path}.prefix`); range.prefix.forEach((item: unknown, at: number) => wire(item, `${path}.prefix[${at}]`));\n if (![\"Asc\", \"Desc\"].includes(String(range.order))) fail(`${path}.order`, \"expected Asc or Desc\");\n uint(range.take, `${path}.take`);\n for (const name of [\"after\", \"before\", \"gt\", \"gte\", \"lt\", \"lte\"] as const)\n if (range[name] !== null) wire(range[name], `${path}.${name}`);\n array(range.rowIds, `${path}.rowIds`);\n const rowIds = new Set<string>();\n range.rowIds.forEach((id: unknown, at: number) => {\n string(id, `${path}.rowIds[${at}]`);\n if (rowIds.has(id)) fail(`${path}.rowIds[${at}]`, \"duplicates a row id\");\n rowIds.add(id);\n if (!pool.has(poolKey(range.table, id))) fail(`${path}.rowIds[${at}]`, \"references a missing same-table pooled row\");\n });\n if (![\"Limit\", \"Exhausted\"].includes(String(range.stop))) fail(`${path}.stop`, \"expected Limit or Exhausted\");\n boolean(range.absence, `${path}.absence`);\n if (range.haloId !== undefined) {\n string(range.haloId, `${path}.haloId`);\n if (!pool.has(poolKey(range.table, range.haloId))) fail(`${path}.haloId`, \"references a missing pooled row\");\n }\n });\n array(value.absences, \"$.receipt.absences\");\n value.absences.forEach((absence: unknown, index: number) => {\n const path = `$.receipt.absences[${index}]`;\n array(absence, path);\n if (absence.length !== 3) fail(path, \"expected [table, index, key]\");\n string(absence[0], `${path}[0]`);\n if (absence[1] !== \"byId\") fail(`${path}[1]`, \"only primary byId absences may be delivered\");\n array(absence[2], `${path}[2]`); absence[2].forEach((item: unknown, at: number) => wire(item, `${path}[2][${at}]`));\n });\n array(value.verdicts, \"$.receipt.verdicts\");\n value.verdicts.forEach((verdict: unknown, index: number) => {\n const path = `$.receipt.verdicts[${index}]`;\n object(verdict, path, [\"ruleHash\", \"pinnedInputsDigest\", \"principal\", \"authEpoch\", \"result\"]);\n digest(verdict.ruleHash, `${path}.ruleHash`);\n digest(verdict.pinnedInputsDigest, `${path}.pinnedInputsDigest`);\n string(verdict.principal, `${path}.principal`);\n uint(verdict.authEpoch, `${path}.authEpoch`);\n boolean(verdict.result, `${path}.result`);\n if (verdict.principal !== authority.principal) fail(`${path}.principal`, \"does not match envelope authority\");\n if (verdict.authEpoch !== authority.authEpoch) fail(`${path}.authEpoch`, \"does not match envelope authority\");\n });\n}\n\n/** Tag one pooled wire row by its table's declared column types (the evaluator's private form). */\nexport function tagWireRow(schema: any, table: string, row: Record<string, WireValue>): TaggedValue {\n return tagRow(schema, table, row);\n}\n\n/** Tag index key values (a prefix, a key, or a cursor position) by the index's column types from `offset`. */\nexport function tagWireIndexValues(schema: any, table: string, index: string, values: WireValue[], offset = 0): TaggedValue[] {\n return tagIndexValues(schema, table, index, values, offset);\n}\n\n/** Tag a range boundary (`after`, `before`, `gt`, \u2026): an array is a position after the prefix, a scalar its first column. */\nexport function tagWireBoundary(schema: any, range: Pick<DeliveryRange, \"table\" | \"index\" | \"prefix\">, value: WireValue | null): TaggedValue | null {\n return tagBoundary(schema, range as DeliveryRange, value);\n}\n\n/** Tag one wire value by a declared column or argument descriptor. */\nexport function tagWireValue(descriptor: unknown, value: WireValue, path: string): TaggedValue {\n return tagTyped(descriptor, value, path);\n}\n\nfunction tagRow(schema: any, table: string, row: Record<string, WireValue>): TaggedValue {\n const columns = schema?.tables?.[table]?.columns;\n if (!plain(columns)) fail(`schema.tables.${table}.columns`, \"is missing\");\n const tagged: Record<string, TaggedValue> = Object.create(null);\n for (const [name, value] of Object.entries(row)) {\n if (!(name in columns)) fail(`rows.${table}.${name}`, \"is not a declared column\");\n tagged[name] = tagTyped(columns[name], value, `rows.${table}.${name}`);\n }\n return { Row: tagged };\n}\n\nfunction tagIndexValues(schema: any, table: string, index: string, values: WireValue[], offset: number): TaggedValue[] {\n const columns = indexColumns(schema, table, index);\n return values.map((value, at) => {\n const name = columns[offset + at];\n if (name === undefined) fail(`schema.tables.${table}.indexes.${index}`, \"has too few columns\");\n return tagTyped(schema.tables[table].columns[name], value, `${table}.${index}[${offset + at}]`);\n });\n}\n\nfunction tagBoundary(schema: any, range: DeliveryRange, value: WireValue | null): TaggedValue | null {\n if (value === null) return null;\n if (Array.isArray(value)) return { Array: tagIndexValues(schema, range.table, range.index, value, range.prefix.length) };\n return tagIndexValues(schema, range.table, range.index, [value], range.prefix.length)[0]!;\n}\n\nfunction tagTyped(descriptor: any, value: WireValue, path: string): TaggedValue {\n if (plain(descriptor) && \"Optional\" in descriptor) return value === null ? \"Null\" : tagTyped(descriptor.Optional, value, path);\n if (value === null) return \"Null\";\n if (descriptor === \"Id\" || descriptor === \"Principal\" || plain(descriptor) && \"Ref\" in descriptor) {\n if (typeof value !== \"string\") fail(path, \"expected id string\");\n return { Id: value };\n }\n if (plain(descriptor) && (\"Text\" in descriptor || \"Enum\" in descriptor)) {\n if (typeof value !== \"string\") fail(path, \"expected text string\");\n return { String: value };\n }\n if ([\"Int\", \"Time\"].includes(String(descriptor)) || plain(descriptor) && (\"Decimal\" in descriptor || \"Money\" in descriptor)) {\n uintOrSigned(value, path); return { Int: value as number };\n }\n if (descriptor === \"Bool\") { boolean(value, path); return { Bool: value as boolean }; }\n if (plain(descriptor) && \"Bytes\" in descriptor) {\n const bytes = plain(value) && \"Bytes\" in value ? value.Bytes : undefined;\n if (!plain(value) || Object.keys(value).length !== 1 || typeof bytes !== \"string\" || !/^(?:[0-9a-f]{2})*$/.test(bytes))\n fail(path, \"expected canonical Bytes\");\n return { Bytes: bytes };\n }\n if (plain(descriptor) && \"List\" in descriptor) {\n array(value, path);\n return { Array: value.map((item: WireValue, index: number) => tagTyped(descriptor.List.of, item, `${path}[${index}]`)) };\n }\n if (plain(descriptor) && (\"Image\" in descriptor || \"Video\" in descriptor)) {\n object(value, path, [], [], true);\n const kind = \"Image\" in descriptor ? \"Image\" : \"Video\";\n const fields = ASSET_RECORD_FIELDS[kind];\n const names = Object.keys(value);\n if (names.length !== Object.keys(fields).length || names.some((name) => !(name in fields)))\n fail(path, `must contain exactly ${Object.keys(fields).sort().join(\", \")}`);\n return { Map: Object.fromEntries(Object.entries(value).map(([key, item]) => [\n key,\n tagAssetField(fields[key as keyof typeof fields], item, `${path}.${key}`),\n ])) };\n }\n // @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 tag by\n // the declared column type only: a `json` value shaped `{ \"Bytes\": \"\u2026\" }` is\n // application data, never the byte variant (O1a review).\n if (plain(descriptor) && \"Json\" in descriptor) return tagJson(value);\n fail(path, \"has an unsupported schema descriptor\");\n}\n\nfunction tagJson(value: WireValue): TaggedValue {\n if (value === null) return \"Null\";\n if (typeof value === \"boolean\") return { Bool: value };\n if (typeof value === \"number\") return { Int: value };\n if (typeof value === \"string\") return { String: value };\n if (Array.isArray(value)) return { Array: value.map(tagJson) };\n return { Map: Object.fromEntries(Object.entries(value).map(([key, item]) => [key, tagJson(item)])) };\n}\n\nconst ASSET_RECORD_FIELDS = {\n Image: { id: \"String\", width: \"Int\", height: \"Int\" },\n Video: { id: \"String\", width: \"Int\", height: \"Int\", duration: \"Int\" },\n} as const;\n\nfunction tagAssetField(descriptor: \"String\" | \"Int\", value: WireValue, path: string): TaggedValue {\n if (descriptor === \"String\") {\n if (typeof value !== \"string\") fail(path, \"expected string\");\n return { String: value };\n }\n uintOrSigned(value, path);\n return { Int: value as number };\n}\n\nfunction indexColumns(schema: any, table: string, index: string): string[] {\n const columns = schema?.tables?.[table]?.indexes?.[index]?.columns;\n if (!Array.isArray(columns) || !columns.every((item) => typeof item === \"string\"))\n fail(`schema.tables.${table}.indexes.${index}`, \"is missing columns\");\n return columns;\n}\n\nfunction validateReferences(value: unknown, pool: Set<string>, path: string): void {\n if (rowReference(value)) {\n if (!pool.has(poolKey(value.$row.table, value.$row.id))) fail(path, \"references a missing pooled row\");\n return;\n }\n if (escapedObject(value)) {\n for (const [key, item] of Object.entries(value.$row.$value)) {\n validateReferences(item, pool, `${path}.$row.$value.${key}`);\n }\n return;\n }\n if (Array.isArray(value)) value.forEach((item, index) => validateReferences(item, pool, `${path}[${index}]`));\n else if (plain(value)) {\n if (\"$row\" in value) fail(path, \"has a malformed reserved $row value\");\n for (const [key, item] of Object.entries(value)) validateReferences(item, pool, `${path}.${key}`);\n }\n}\n\nfunction canonicalWire(value: WireValue): WireValue {\n if (Array.isArray(value)) return value.map(canonicalWire);\n if (plain(value)) {\n const record = value as Record<string, WireValue>;\n return Object.fromEntries(\n Object.keys(record).sort().map((key) => [key, canonicalWire(record[key]!)]),\n );\n }\n return value;\n}\n\nfunction wire(value: unknown, path: string): void {\n if (value === null || typeof value === \"boolean\" || typeof value === \"string\") return;\n if (typeof value === \"number\") { uintOrSigned(value, path); return; }\n if (Array.isArray(value)) { value.forEach((item, index) => wire(item, `${path}[${index}]`)); return; }\n object(value, path, [], [], true);\n for (const [key, item] of Object.entries(value)) wire(item, `${path}.${key}`);\n}\n\nfunction rowReference(value: unknown): value is WireRowReference {\n return plain(value) && Object.keys(value).length === 1 && plain(value.$row)\n && Object.keys(value.$row).sort().join(\",\") === \"id,table\"\n && typeof value.$row.table === \"string\" && typeof value.$row.id === \"string\";\n}\n\nfunction escapedObject(value: unknown): value is WireEscapedObject {\n return plain(value) && Object.keys(value).length === 1 && plain(value.$row)\n && Object.keys(value.$row).length === 1 && plain(value.$row.$value);\n}\n\nfunction object(value: any, path: string, required: string[], optional: string[] = [], open = false): asserts value is Record<string, any> {\n if (!plain(value)) fail(path, \"expected object\");\n for (const name of required) if (!(name in value)) fail(`${path}.${name}`, \"is required\");\n if (!open) for (const name of Object.keys(value)) if (!required.includes(name) && !optional.includes(name)) fail(`${path}.${name}`, \"is unknown\");\n}\nfunction array(value: any, path: string): asserts value is any[] { if (!Array.isArray(value)) fail(path, \"expected array\"); }\nfunction string(value: unknown, path: string): asserts value is string { if (typeof value !== \"string\" || value.length === 0) fail(path, \"expected non-empty string\"); }\nfunction boolean(value: unknown, path: string): asserts value is boolean { if (typeof value !== \"boolean\") fail(path, \"expected boolean\"); }\nfunction uint(value: unknown, path: string): asserts value is number { if (!Number.isSafeInteger(value) || Number(value) < 0) fail(path, \"expected non-negative safe integer\"); }\nfunction uintOrSigned(value: unknown, path: string): asserts value is number { if (!Number.isSafeInteger(value)) fail(path, \"expected safe integer\"); }\nfunction digest(value: unknown, path: string): asserts value is string { if (typeof value !== \"string\" || !/^[0-9a-f]{64}$/.test(value)) fail(path, \"expected lowercase SHA-256 digest\"); }\nfunction plain(value: any): value is Record<string, any> { return value !== null && typeof value === \"object\" && !Array.isArray(value) && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null); }\nfunction poolKey(table: string, id: string): string { return `${table.length}:${table}${id}`; }\nfunction compareText(left: string, right: string): number { return left < right ? -1 : left > right ? 1 : 0; }\nfunction clone<T>(value: T): T { return structuredClone(value); }\nfunction fail(path: string, detail: string): never { throw new DeliveryEnvelopeDecodeError(path, detail); }\n", "// @ref LLP 1012#7-writes-offline \u2014 the outbox is durable custody of unsent\n// intents: each one owns a contiguous slice of a principal-bound replay grant,\n// so its ids are known before the server has seen it and a retry is the same\n// envelope. Settlement never deletes; `dismiss` is the app's choice.\nimport type {\n OutboxEntry,\n OutboxGrant,\n OutboxState,\n OutboxTrace,\n OverlayRow,\n RangeStore,\n StoreDelivery,\n} from \"./range-store.js\";\n\nexport const ENGINE_ID = /^s2id-([0-9a-f]{32})-([0-9a-f]{16})$/;\n\nexport type OutboxRefusalCode = \"E_OFFLINE_ID_BLOCK\";\n\n/** A local custody refusal at enqueue time; the client maps it onto the offline family. */\nexport class OutboxRefusal extends Error {\n constructor(readonly code: OutboxRefusalCode, message: string, readonly site: string, readonly rewrite: string) {\n super(message);\n this.name = \"OutboxRefusal\";\n }\n}\n\nexport function emptyTrace(): OutboxTrace {\n return { points: [], verdicts: [] };\n}\n\n/** Reads `grant` off a login, guest, or resume response; anything malformed is ignored. */\nexport function decodeGrant(value: unknown): OutboxGrant | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const grant = (value as { grant?: unknown }).grant;\n if (!grant || typeof grant !== \"object\" || Array.isArray(grant)) return undefined;\n const record = grant as Record<string, unknown>;\n if (typeof record.id !== \"string\" || typeof record.from !== \"string\" || !ENGINE_ID.test(record.from)\n || !Number.isSafeInteger(record.count) || Number(record.count) <= 0\n || !Number.isSafeInteger(record.mintedAt) || !Number.isSafeInteger(record.expiresAt)) return undefined;\n return {\n id: record.id,\n from: record.from,\n count: record.count as number,\n mintedAt: record.mintedAt as number,\n expiresAt: record.expiresAt as number,\n used: 0,\n };\n}\n\n/** The engine ids `from + offset \u2026`, spelled exactly as `Store::replay_slice_ids` spells them. */\nexport function sliceIds(grant: Pick<OutboxGrant, \"from\" | \"count\">, offset: number, count: number): string[] {\n const match = ENGINE_ID.exec(grant.from);\n if (!match || count <= 0 || offset < 0 || offset + count > grant.count) return [];\n const namespace = match[1]!;\n const first = BigInt(`0x${match[2]!}`) + BigInt(offset);\n const ids: string[] = [];\n for (let index = 0; index < count; index += 1) {\n ids.push(`s2id-${namespace}-${(first + BigInt(index)).toString(16).padStart(16, \"0\")}`);\n }\n return ids;\n}\n\nexport function intentName(grant: string, offset: number): string {\n return `${grant}:${offset}`;\n}\n\nexport function settledEntry(entry: OutboxEntry, state: OutboxState, response: unknown, now: number): OutboxEntry {\n const { response: _response, ...rest } = entry;\n return { ...rest, state, ...(response === undefined ? {} : { response }), updatedAt: now };\n}\n\nexport interface EnqueueInput {\n op: string;\n args: unknown;\n issuedSeq: number;\n trace?: OutboxTrace;\n}\n\n/** The twin's run over held rows for the slice it was handed: the overlay and the trace land with the entry. */\nexport interface EnqueuePrediction {\n predicted: boolean;\n overlay: OverlayRow[];\n trace: OutboxTrace;\n /** Maintained targets the overlay intentionally omits (LLP 1012 \u00A77); recorded on the entry when non-empty. */\n omitted?: string[];\n}\n\nexport interface OutboxLedgerOptions {\n now(): number;\n fenceMs: number;\n}\n\nexport class OutboxLedger {\n private readonly listeners = new Set<() => void>();\n /** A successful resume renews trust without changing the server-minted grant's age. */\n private resumedAt?: number;\n /** Runtime lifecycle, advanced synchronously on open, seal, wipe, reset, or close. */\n private trustGeneration = 0;\n /**\n * Grant custody is one critical section: a read of the grant's cursor and the\n * swap that advances it never interleave with another enqueue or adoption, so\n * two overlapping writes can never mint the same slice.\n */\n private tail: Promise<void> = Promise.resolve();\n private fenceTimer?: ReturnType<typeof setTimeout>;\n private fenceProbe = 0;\n\n constructor(private readonly store: RangeStore, private readonly options: OutboxLedgerOptions) {}\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n this.armFence();\n return () => {\n this.listeners.delete(listener);\n if (this.listeners.size === 0) this.close();\n };\n }\n\n notify(): void {\n this.armFence();\n for (const listener of [...this.listeners]) {\n try { listener(); } catch { /* observers cannot break custody */ }\n }\n }\n\n close(): void {\n this.fenceProbe += 1;\n clearTimeout(this.fenceTimer);\n }\n\n /** Readiness changes with time even when the outbox has no entries to push. */\n private armFence(): void {\n this.close();\n if (!this.listeners.size) return;\n const probe = this.fenceProbe;\n void this.grant().then((grant) => {\n if (probe !== this.fenceProbe || !grant) return;\n const remaining = Math.min(grant.expiresAt, this.trustEndsAt(grant) + 1) - this.options.now();\n if (remaining <= 0) return;\n this.fenceTimer = setTimeout(() => this.notify(), Math.min(remaining, 2_147_483_647));\n // A readiness observer must not keep a headless process alive for days.\n (this.fenceTimer as { unref?: () => void }).unref?.();\n }, () => undefined); // Sealed custody has no usable grant; ready() reports false.\n }\n\n entries(): Promise<OutboxEntry[]> {\n return this.store.outbox.all();\n }\n\n async queued(): Promise<OutboxEntry[]> {\n return (await this.entries()).filter((entry) => entry.state === \"queued\");\n }\n\n grant(): Promise<OutboxGrant | undefined> {\n return this.store.outbox.grant();\n }\n\n async grantById(id: string): Promise<OutboxGrant | undefined> {\n return (await this.store.outbox.grants()).find((grant) => grant.id === id);\n }\n\n /** A fresh grant replaces the consumption target; older grants stay for the intents that name them. */\n adopt(grant: OutboxGrant): Promise<void> {\n return this.serial(async () => {\n const held = await this.grantById(grant.id);\n if (held) {\n await this.store.commit({ grants: { current: grant.id } });\n this.notify();\n return;\n }\n const stale = (await this.store.outbox.grants())\n .filter((item) => item.id !== grant.id)\n .map((item) => item.id);\n const queued = new Set((await this.queued()).map((entry) => entry.grant));\n await this.store.commit({\n grants: { put: [grant], current: grant.id, remove: stale.filter((id) => !queued.has(id)) },\n });\n this.notify();\n });\n }\n\n /**\n * Persists the program's write bounds (each op's `maxNewIds`) beside the grants,\n * on the same tail as enqueue, so an enqueue issued after the program loaded\n * always sees the bound it certified. The certified program itself rides the\n * same swap when given, so a cold start with the network cut evaluates and\n * prices from custody, never from a fallback (LLP 1012 \u00A77, \u00A78).\n */\n recordBounds(bounds: Record<string, number>, programs?: Record<string, unknown>): Promise<void> {\n for (const [op, bound] of Object.entries(bounds)) {\n if (!Number.isSafeInteger(bound) || bound < 0) throw new TypeError(`write bound for ${op} must be a non-negative integer`);\n }\n return this.serial(async () => {\n await this.store.commit({ bounds, ...(programs === undefined ? {} : { programs: programs as never }) });\n this.notify();\n });\n }\n\n /** Grant-only without an op; with one, probes the exact slice enqueue would need. */\n async ready(op?: string): Promise<boolean> {\n const grant = await this.grant();\n // The fence disables prediction and replay, not enqueue: a grant past it\n // still answers ready (`fence()` reports the crossing); an expired one does not.\n if (!grant || this.expired(grant)) return false;\n if (op === undefined) return true;\n const maxNewIds = (await this.store.outbox.bounds())[op];\n return maxNewIds !== undefined && grant.used + 1 + maxNewIds <= grant.count;\n }\n\n /**\n * Every outbox write shares this tail: enqueue, adoption, bounds, dismiss,\n * and \u2014 through the runtime \u2014 settlements and the predictions they drop, so\n * a settlement never interleaves with the enqueue that reads the grant.\n */\n write<T>(action: () => Promise<T>): Promise<T> {\n return this.serial(action);\n }\n\n // @ref LLP 1012#7-writes-offline \u2014 the fence bounds trust, never custody: a\n // grant older than fenceMs is past it unless this partition resumed\n // successfully after the crossing. The grant's own expiry is a separate\n // readiness fact (`expired`) that no resume renews.\n pastFence(grant: Pick<OutboxGrant, \"mintedAt\">): boolean {\n const crossedAt = grant.mintedAt + this.options.fenceMs;\n return this.options.now() > crossedAt && !this.resumedSince(crossedAt);\n }\n\n /** The server-minted grant's own lifetime; a resume renews fence trust, not the grant. */\n expired(grant: Pick<OutboxGrant, \"expiresAt\">): boolean {\n return this.options.now() >= grant.expiresAt;\n }\n\n /** When time alone next changes `fence()`: the crossing, or the lapse of a resume's renewed trust. */\n private trustEndsAt(grant: Pick<OutboxGrant, \"mintedAt\">): number {\n const crossedAt = grant.mintedAt + this.options.fenceMs;\n return this.resumedAt !== undefined && this.resumedAt >= crossedAt ? this.resumedAt + this.options.fenceMs : crossedAt;\n }\n\n private resumedSince(at: number): boolean {\n return this.resumedAt !== undefined && this.resumedAt >= at\n && this.options.now() - this.resumedAt <= this.options.fenceMs;\n }\n\n /** Trust belongs to this open partition and session, never to the next one. */\n resetTrust(): void {\n this.trustGeneration += 1;\n this.resumedAt = undefined;\n this.notify();\n }\n\n /** Capture before a resume starts; this is independent of the program generation. */\n get generation(): number { return this.trustGeneration; }\n\n /** A newer consumption grant cannot authorize work queued under an older one. */\n async canReplay(entry: OutboxEntry): Promise<boolean> {\n if (entry.reason === \"fence\" && !this.resumedSince(entry.createdAt)) return false;\n const grant = await this.grantById(entry.grant);\n // Without the original grant's trust facts only a subsequent resume can\n // authorize sending; the owner still judges the grant and the intent.\n return grant ? !this.pastFence(grant) : this.resumedSince(entry.createdAt);\n }\n\n async fence(): Promise<\"inside\" | \"past\"> {\n for (const entry of await this.queued()) {\n if (!(await this.canReplay(entry))) return \"past\";\n }\n const grant = await this.grant();\n return grant && this.pastFence(grant) ? \"past\" : \"inside\";\n }\n\n /** The owner re-authorized this partition; old intents may now replay for the server to judge. */\n resumeSucceeded(generation: number): boolean {\n // Grant persistence can finish after a seal has already invalidated trust.\n if (generation !== this.trustGeneration) return false;\n this.resumedAt = this.options.now();\n this.notify();\n return true;\n }\n\n // @ref LLP 1012#7-writes-offline \u2014 the first id names the intent; the rest\n // are the program's `new` envelope in order, as many as the certificate's\n // persisted write bound allows. No bound, or no remaining ids, is a refusal,\n // never a silent reuse or a guessed reservation.\n enqueue(input: EnqueueInput, predict?: (ids: string[]) => Promise<EnqueuePrediction>): Promise<OutboxEntry> {\n return this.serial(async () => {\n const grant = await this.grant();\n if (!grant) {\n throw new OutboxRefusal(\n \"E_OFFLINE_ID_BLOCK\",\n \"this device holds no replay grant; log in, or drain a query online, before writing\",\n \"client.outbox.enqueue\",\n \"resume as this principal for a grant (a login, or a query with { drain: true } reaching its watermark), then send again\",\n );\n }\n const maxNewIds = (await this.store.outbox.bounds())[input.op];\n if (maxNewIds === undefined) {\n throw new OutboxRefusal(\n \"E_OFFLINE_ID_BLOCK\",\n `the write bound for ${input.op} is unknown on this device: its certificate was never recorded here, so the slice size cannot be priced`,\n \"client.outbox.enqueue\",\n \"reach the owner once so /api/program is recorded, then enqueue a new intent\",\n );\n }\n const count = 1 + maxNewIds;\n if (grant.used + count > grant.count) {\n throw new OutboxRefusal(\n \"E_OFFLINE_ID_BLOCK\",\n `the replay grant has ${grant.count - grant.used} ids left and this write needs ${count}`,\n \"client.outbox.enqueue\",\n \"resume online for a fresh grant, then enqueue a new intent\",\n );\n }\n const ids = sliceIds(grant, grant.used, count);\n // @ref LLP 1012#7-writes-offline \u2014 the twin runs the mutation with the\n // slice as its `new` envelope, so the prediction and the commit mint the\n // same ids; the overlay and the trace land in the entry's own swap.\n // The fence bounds local trust, not custody: keep the write, but do not\n // predict it until a successful resume has renewed trust in this runtime.\n const pastFence = this.pastFence(grant);\n const prediction = predict === undefined || pastFence ? undefined : await predict(ids);\n const now = this.options.now();\n const entry: OutboxEntry = {\n intent: intentName(grant.id, grant.used),\n grant: grant.id,\n offset: grant.used,\n count,\n ids,\n op: input.op,\n args: structuredClone(input.args),\n issuedSeq: input.issuedSeq,\n state: \"queued\",\n ...(prediction?.predicted ? { predicted: true } : {}),\n ...(pastFence ? { predicted: false, reason: \"fence\" as const } : {}),\n ...(prediction?.predicted && prediction.omitted !== undefined && prediction.omitted.length > 0 ? { omitted: [...prediction.omitted] } : {}),\n // No trusted prediction means no trace OCC: the program's own\n // requirements (for example baseBody = body) judge this write.\n trace: pastFence ? emptyTrace() : prediction?.trace ?? input.trace ?? emptyTrace(),\n createdAt: now,\n updatedAt: now,\n };\n await this.store.commit({\n grants: { put: [{ ...grant, used: grant.used + count }] },\n outbox: { put: [entry] },\n ...(prediction?.predicted ? { overlay: { put: { [entry.intent]: prediction.overlay } } } : {}),\n });\n this.notify();\n return (await this.store.outbox.get(entry.intent)) ?? entry;\n });\n }\n\n private serial<T>(action: () => Promise<T>): Promise<T> {\n const run = this.tail.then(action);\n this.tail = run.then(() => undefined, () => undefined);\n return run;\n }\n\n settle(entry: OutboxEntry, state: OutboxState, response?: unknown): OutboxEntry {\n return settledEntry(entry, state, response, this.options.now());\n }\n\n /** Removes a settled entry; a queued intent is never dismissed. */\n dismiss(intent: string): Promise<void> {\n return this.serial(async () => {\n const entry = await this.store.outbox.get(intent);\n if (!entry || entry.state === \"queued\") return;\n await this.store.commit({ outbox: { remove: [intent] } });\n this.notify();\n });\n }\n}\n\n/** The replay envelope for one queued intent, byte-stable across retries. */\nexport function replayEnvelope(entry: OutboxEntry): {\n op: string;\n args: unknown;\n replay: { grant: string; offset: number; count: number; intent: string; trace: OutboxTrace };\n} {\n return {\n op: entry.op,\n args: entry.args,\n replay: {\n grant: entry.grant,\n offset: entry.offset,\n count: entry.count,\n intent: entry.intent,\n trace: entry.trace ?? emptyTrace(),\n },\n };\n}\n\nexport type { OutboxEntry, OutboxGrant, OutboxState, OutboxTrace, StoreDelivery };\n", "// @ref LLP 1006#9b-bytes-on-the-device-author-ruling-2026-09-04 \u2014 bytes are cached under the owning row's lease, or not at all.\n// @ref LLP 1012#9-asset-bytes-on-the-device \u2014 the ByteCache sits beside the range store and joins its swap; view-once is excluded at view time.\n\nimport type { RangeStore, RowRef, StoredRow } from \"./range-store.js\";\n\n/** One cached rendition: what a component fetched at the width it asked for. */\nexport interface ByteCacheEntry {\n assetId: string;\n width: number | null;\n size: number;\n type: string;\n /** Logical last-read stamp on the range store's clock; the LRU orders by it. */\n lastRead: number;\n}\n\n/** A view-once row that was viewed, with the asset ids it carried at that moment. */\nexport interface ViewedRecord { at: number; assets: string[] }\n\nexport interface ByteCachePut { assetId: string; width: number | null; bytes: Uint8Array; type: string }\nexport interface ByteSwapRequest { put?: ByteCachePut[]; touch?: string[]; ceiling?: number }\n\n/** What a carrier persists beside the state in the same swap: payloads to write and keys to drop. */\nexport interface ByteDelta { put: Array<{ key: string; bytes: Uint8Array }>; remove: string[] }\n\nexport interface ByteCacheStatus { entries: ByteCacheEntry[]; totalBytes: number; viewed: RowRef[] }\nexport interface AssetBytes { bytes: Uint8Array; type: string }\n/** An opaque identity held by one mounted viewing instance, never shared by asset id. */\nexport interface AssetFetchOptions { signal?: AbortSignal; viewing?: object }\nexport type ByteCacheOutcome = \"cached\" | \"viewed\" | \"unleased\" | \"refused\";\nexport type ViewOncePredicate = (table: string, row: Record<string, unknown>) => boolean;\n\n/** The byte surface the swap engine exposes beside `RangeStore`; only the carriers implement it. */\nexport interface ByteCarrier {\n readBytes(assetId: string, width: number | null): Promise<{ bytes: Uint8Array; type: string } | undefined>;\n bytes(): Promise<ByteCacheStatus>;\n rowsReferencing(assetId: string): Promise<StoredRow[]>;\n viewedAsset(assetId: string): Promise<boolean>;\n viewedRows(): Promise<RowRef[]>;\n /** LRU read stamps, coalesced: stamped in memory now, persisted by the next swap. */\n touchBytes(keys: string[]): Promise<void>;\n commit(swap: { bytes?: ByteSwapRequest; viewed?: RowRef[] }): Promise<void>;\n}\n\n/** The client-facing byte cache: `client.assetCache` when the client has an offline store. */\nexport interface AssetCache {\n /** Session custody changes revoke mounted object URLs. */\n subscribeCustody?(listener: () => void): () => void;\n getCustody?(): number;\n getBytes(assetId: string, width: number | null, viewing?: object): Promise<AssetBytes | undefined>;\n putBytes(assetId: string, width: number | null, value: AssetBytes, viewing?: object): Promise<ByteCacheOutcome>;\n canServe(assetId: string, viewing?: object): Promise<boolean>;\n /** The held bytes for an asset at a width, or nothing: never fetched, evicted with its row, viewed, or sealed. */\n get(assetId: string, width: number | null, viewing?: object): Promise<Blob | undefined>;\n /** True once a view-once row carrying this asset was viewed on this partition. */\n viewed(assetId: string): Promise<boolean>;\n /** True while a held row carrying this asset is view-once (`offline.viewOnce`) and not yet viewed. */\n viewOnce(assetId: string): Promise<boolean>;\n /** Marks the held view-once rows carrying this asset viewed: what a player calls when playback starts. */\n markViewed(assetId: string): Promise<boolean>;\n status(): Promise<ByteCacheStatus>;\n}\n\nexport const ASSET_ID = /^s2id-[0-9a-f]{32}-[0-9a-f]{16}$/;\nconst SESSION_VIEW_LIMIT = 8;\n\nexport function byteKey(assetId: string, width: number | null): string {\n return width === null ? assetId : `${assetId}.w${width}`;\n}\n\nfunction rowKey(ref: RowRef): string {\n return `${ref.table}\\u0000${ref.id}`;\n}\n\nfunction positive(value: unknown): boolean {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\n\n/** The closed asset record shape (LLP 1006 \u00A71): exactly id, width, height, and duration for video. */\nexport function assetRecordId(value: unknown): string | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record).sort().join(\",\");\n if (keys !== \"height,id,width\" && keys !== \"duration,height,id,width\") return undefined;\n if (typeof record.id !== \"string\" || !ASSET_ID.test(record.id)) return undefined;\n if (!positive(record.width) || !positive(record.height)) return undefined;\n if (\"duration\" in record && !positive(record.duration)) return undefined;\n return record.id;\n}\n\nexport function assetIdsIn(value: unknown, output = new Set<string>()): Set<string> {\n const id = assetRecordId(value);\n if (id !== undefined) output.add(id);\n else if (Array.isArray(value)) for (const item of value) assetIdsIn(item, output);\n else if (value && typeof value === \"object\") {\n for (const item of Object.values(value as Record<string, unknown>)) assetIdsIn(item, output);\n }\n return output;\n}\n\n/** Assets a held delivery references: through pooled rows and through inline answer data. */\nexport function leasedAssets(rows: Iterable<StoredRow>, answers: Iterable<{ data?: unknown }>): Set<string> {\n const leased = new Set<string>();\n for (const row of rows) assetIdsIn(row.row, leased);\n for (const answer of answers) if (answer.data !== undefined) assetIdsIn(answer.data, leased);\n return leased;\n}\n\nexport interface ByteSwapState {\n clock: number;\n rows: Record<string, StoredRow>;\n assets: Record<string, ByteCacheEntry>;\n viewed: Record<string, ViewedRecord>;\n}\n\n/**\n * View-once is tracked per row, never per asset id: an asset is refused only while\n * every held row carrying it was viewed. A row that is not viewed keeps its lease,\n * so one shared id never poisons an ordinary row's bytes.\n */\nexport function viewedOnlyAssets(state: Pick<ByteSwapState, \"rows\" | \"viewed\">): Set<string> {\n const viewed = new Set<string>();\n for (const record of Object.values(state.viewed)) for (const id of record.assets) viewed.add(id);\n if (viewed.size === 0) return viewed;\n for (const [key, row] of Object.entries(state.rows)) {\n if (state.viewed[key]) continue;\n for (const id of assetIdsIn(row.row)) viewed.delete(id);\n }\n return viewed;\n}\n\nfunction checkedPut(put: ByteCachePut): void {\n if (!put || typeof put !== \"object\" || typeof put.assetId !== \"string\" || !ASSET_ID.test(put.assetId)) {\n throw new TypeError(\"byte cache put must name an engine-minted asset id\");\n }\n if (put.width !== null && !positive(put.width)) throw new TypeError(\"byte cache put width must be null or a positive integer\");\n if (!(put.bytes instanceof Uint8Array)) throw new TypeError(\"byte cache put bytes must be a Uint8Array\");\n if (typeof put.type !== \"string\") throw new TypeError(\"byte cache put type must be a string\");\n}\n\n/**\n * The byte half of one swap, run after the row rules settled `state.rows`: viewed\n * marks, the lease purge, read touches, puts, then the ceiling. Returns what the\n * carrier must write and drop in the same transaction.\n */\nexport function applyByteSwap(\n state: ByteSwapState,\n swap: { bytes?: ByteSwapRequest; viewed?: RowRef[] },\n leased: Set<string>,\n): ByteDelta {\n const delta: ByteDelta = { put: [], remove: [] };\n for (const ref of swap.viewed ?? []) {\n if (!ref || typeof ref.table !== \"string\" || typeof ref.id !== \"string\") throw new TypeError(\"viewed rows must be row references\");\n const key = rowKey(ref);\n const assets = new Set(state.viewed[key]?.assets ?? []);\n assetIdsIn(state.rows[key]?.row, assets);\n state.viewed[key] = { at: Date.now(), assets: [...assets] };\n }\n const viewedAssets = viewedOnlyAssets(state);\n for (const [key, entry] of Object.entries(state.assets)) {\n if (leased.has(entry.assetId) && !viewedAssets.has(entry.assetId)) continue;\n delete state.assets[key];\n delta.remove.push(key);\n }\n for (const key of swap.bytes?.touch ?? []) {\n const entry = state.assets[key];\n if (entry) entry.lastRead = ++state.clock;\n }\n const ceiling = swap.bytes?.ceiling ?? Number.POSITIVE_INFINITY;\n if (!(ceiling > 0)) throw new TypeError(\"byte cache ceiling must be positive\");\n for (const put of swap.bytes?.put ?? []) {\n checkedPut(put);\n if (!leased.has(put.assetId) || viewedAssets.has(put.assetId)) continue;\n const size = put.bytes.byteLength;\n if (size === 0 || size > ceiling) continue;\n const key = byteKey(put.assetId, put.width);\n state.assets[key] = { assetId: put.assetId, width: put.width, size, type: put.type, lastRead: ++state.clock };\n delta.put.push({ key, bytes: put.bytes });\n }\n let total = Object.values(state.assets).reduce((sum, entry) => sum + entry.size, 0);\n while (total > ceiling) {\n const [key, victim] = Object.entries(state.assets)\n .reduce((least, item) => item[1].lastRead < least[1].lastRead ? item : least);\n delete state.assets[key];\n delta.remove.push(key);\n total -= victim.size;\n }\n delta.put = delta.put.filter((item) => state.assets[item.key] !== undefined);\n delta.remove = [...new Set(delta.remove)].filter((key) => state.assets[key] === undefined);\n return delta;\n}\n\nfunction isByteCarrier(store: RangeStore): store is RangeStore & ByteCarrier {\n const candidate = store as Partial<ByteCarrier>;\n return typeof candidate.readBytes === \"function\"\n && typeof candidate.bytes === \"function\"\n && typeof candidate.rowsReferencing === \"function\"\n && typeof candidate.viewedAsset === \"function\"\n && typeof candidate.viewedRows === \"function\"\n && typeof candidate.touchBytes === \"function\";\n}\n\nfunction checkedAssetId(assetId: string): string {\n if (typeof assetId !== \"string\" || !ASSET_ID.test(assetId)) throw new TypeError(\"asset id must be engine-minted\");\n return assetId;\n}\n\n/**\n * Bytes a component fetched, kept under the owning row's lease in the same\n * partition as the rows. A store without a byte carrier caches nothing.\n */\nexport class ByteCache implements AssetCache {\n /**\n * View-once bytes stay renderable inside the instance that viewed them, keyed by\n * the partition that viewed them; nothing here is durable. The runtime forgets it\n * on seal, wipe, partition change, and close, and `get` serves it only under the\n * custody the carrier path applies: this partition, unsealed, the row still held.\n */\n private readonly session = new Map<string, { viewing: object; value: AssetBytes }>();\n private partition?: string;\n private custody = 0;\n private readonly custodyListeners = new Set<() => void>();\n readonly getCustody = () => this.custody;\n readonly subscribeCustody = (listener: () => void) => {\n this.custodyListeners.add(listener);\n return () => { this.custodyListeners.delete(listener); };\n };\n private admissions: Promise<unknown> = Promise.resolve();\n\n constructor(\n readonly store: RangeStore,\n private readonly options: { maxAssetBytes: number; viewOnce?: ViewOncePredicate },\n ) {}\n\n /** The partition the runtime opened; a change drops every session blob. */\n bind(partition: string | undefined): void {\n if (this.partition !== partition) this.forget();\n this.partition = partition;\n }\n\n /** Drops the session blobs: seal, close, and wipe call this. */\n forget(): void {\n this.custody++;\n this.session.clear();\n for (const listener of this.custodyListeners) listener();\n }\n\n async get(assetId: string, width: number | null, viewing?: object): Promise<Blob | undefined> {\n const held = await this.getBytes(assetId, width, viewing);\n return held ? new Blob([held.bytes as BlobPart], { type: held.type }) : undefined;\n }\n\n // @ref LLP 1013#2-decisions \u2014 native paths exchange bytes, never RN Blobs.\n async getBytes(assetId: string, width: number | null, viewing?: object): Promise<AssetBytes | undefined> {\n const custody = this.custody;\n checkedAssetId(assetId);\n const store = this.carrier();\n if (!store) return undefined;\n // `viewedAsset` is false on a sealed partition, so the session is never consulted past a seal.\n if (await store.viewedAsset(assetId)) {\n const held = await this.sessionBytes(assetId, width, viewing);\n return custody === this.custody ? held : undefined;\n }\n if (await this.viewOnce(assetId)) return undefined;\n const held = await store.readBytes(assetId, width);\n if (!held) return undefined;\n // The touch is the LRU stamp, coalesced into the next swap; a closing partition may refuse it.\n await store.touchBytes([byteKey(assetId, width)]).catch(() => undefined);\n return await this.canServe(assetId, viewing) && custody === this.custody ? held : undefined;\n }\n\n /** Completion fence for both a cached source and an uncached ordinary source. */\n async canServe(assetId: string, viewing?: object): Promise<boolean> {\n const custody = this.custody;\n const store = this.carrier();\n if (!store) return false;\n const rows = await store.rowsReferencing(assetId);\n if (rows.length === 0) return false;\n const viewed = await store.viewedAsset(assetId);\n const once = rows.every((row) => this.options.viewOnce?.(row.table, row.row) === true);\n const owns = (!viewed && !once) || [...this.session.entries()].some(([key, entry]) =>\n entry.viewing === viewing && key.startsWith(this.sessionKey(assetId)));\n return custody === this.custody && owns;\n }\n\n async viewed(assetId: string): Promise<boolean> {\n checkedAssetId(assetId);\n const store = this.carrier();\n return store ? store.viewedAsset(assetId) : false;\n }\n\n async viewOnce(assetId: string): Promise<boolean> {\n checkedAssetId(assetId);\n const store = this.carrier();\n if (!store) return false;\n const once = await this.viewOnceRows(assetId);\n if (once.length === 0) return false;\n const viewed = new Set((await store.viewedRows()).map(rowKey));\n return once.some((ref) => !viewed.has(rowKey(ref)));\n }\n\n async markViewed(assetId: string): Promise<boolean> {\n checkedAssetId(assetId);\n const store = this.carrier();\n if (!store) return false;\n const once = await this.viewOnceRows(assetId);\n if (once.length === 0) return false;\n await store.commit({ viewed: once });\n return true;\n }\n\n /** After a network fetch: cache under the row's lease, or mark the view-once rows viewed and cache nothing. */\n async put(assetId: string, width: number | null, blob: Blob, viewing?: object): Promise<ByteCacheOutcome> {\n const custody = this.custody;\n const bytes = new Uint8Array(await blob.arrayBuffer());\n if (custody !== this.custody) return \"refused\";\n return this.putBytes(assetId, width, { bytes, type: blob.type }, viewing);\n }\n\n putBytes(assetId: string, width: number | null, value: AssetBytes, viewing?: object): Promise<ByteCacheOutcome> {\n const custody = this.custody;\n // Two concurrent consumers may fetch; only one can acquire the viewing allowance.\n const result = this.admissions.then(() => custody === this.custody\n ? this.admit(assetId, width, value, viewing) : \"refused\" as const);\n this.admissions = result.catch(() => undefined);\n return result;\n }\n\n private async admit(assetId: string, width: number | null, value: AssetBytes, viewing?: object): Promise<ByteCacheOutcome> {\n const custody = this.custody;\n checkedAssetId(assetId);\n checkedPut({ assetId, width, ...value });\n const store = this.carrier();\n if (!store) return \"unleased\";\n if (await store.viewedAsset(assetId)) return \"refused\";\n const rows = await store.rowsReferencing(assetId);\n if (rows.length === 0 || custody !== this.custody) return \"unleased\";\n const once = rows\n .filter((row) => this.options.viewOnce?.(row.table, row.row) === true)\n .map(({ table, id }) => ({ table, id }));\n // Per row: the view-once rows are marked viewed; an ordinary row sharing the id still leases the bytes.\n if (once.length > 0 && !viewing) return \"refused\";\n if (once.length === rows.length) {\n try {\n await store.commit({ viewed: once });\n } catch {\n return \"refused\";\n }\n if (custody !== this.custody || (await store.rowsReferencing(assetId)).length === 0\n || !await store.viewedAsset(assetId) || custody !== this.custody) return \"unleased\";\n if (this.session.size >= SESSION_VIEW_LIMIT) this.session.delete(this.session.keys().next().value!);\n if (viewing) this.session.set(this.sessionKey(assetId, width), { viewing, value: { bytes: value.bytes.slice(), type: value.type } });\n return \"viewed\";\n }\n try {\n await store.commit({\n ...(once.length === 0 ? {} : { viewed: once }),\n bytes: { put: [{ assetId, width, ...value }], ceiling: this.options.maxAssetBytes },\n });\n } catch {\n return \"refused\";\n }\n const status = await store.bytes();\n return custody === this.custody && status.entries.some((entry) => entry.assetId === assetId && entry.width === width) ? \"cached\" : \"refused\";\n }\n\n async status(): Promise<ByteCacheStatus> {\n const store = this.carrier();\n return store ? store.bytes() : { entries: [], totalBytes: 0, viewed: [] };\n }\n\n /** Nothing is served, marked, or cached without an open partition and a byte carrier. */\n private carrier(): (RangeStore & ByteCarrier) | undefined {\n return this.partition !== undefined && isByteCarrier(this.store) ? this.store : undefined;\n }\n\n private sessionKey(assetId: string, width?: number | null): string {\n return `${this.partition}\\u0000${assetId}\\u0000${width === undefined ? \"\" : width}`;\n }\n\n /** The session blob, only while the row that was viewed is still held on this partition. */\n private async sessionBytes(assetId: string, width: number | null, viewing?: object): Promise<AssetBytes | undefined> {\n const store = this.carrier();\n if (!store) return undefined;\n const key = this.sessionKey(assetId, width);\n const blob = this.session.get(key);\n if (!viewing || blob?.viewing !== viewing) return undefined;\n if ((await store.rowsReferencing(assetId)).length > 0) return blob.value;\n this.session.delete(key);\n return undefined;\n }\n\n private async viewOnceRows(assetId: string): Promise<RowRef[]> {\n const store = this.carrier();\n if (!store) return [];\n const rows = await store.rowsReferencing(assetId);\n return rows\n .filter((row) => this.options.viewOnce?.(row.table, row.row) === true)\n .map(({ table, id }) => ({ table, id }));\n }\n}\n", "/** The store's answer and cursor-chain keys share one shape-preserving encoding. */\nexport function canonical(value: unknown): string {\n if (value === undefined) return \"undefined\";\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n return `{${Object.keys(value as object).sort().map((key) =>\n `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`).join(\",\")}}`;\n}\n", "// @ref LLP 1012#7-writes-offline \u2014 cursor identity is not order. Only held,\n// post-commit next links prove progress; explicit negatives settle deletions.\nimport type { StoredAnswer, WatermarkRecord } from \"./range-store.js\";\nimport { canonical } from \"./canonical.js\";\n\nexport interface OverlayWatermark extends Pick<WatermarkRecord, \"op\" | \"args\" | \"watermark\"> {\n cursorArg: string;\n /** Last proven progress, and positions already consumed, survive a remount/reopen. */\n progress?: string;\n consumed?: string[];\n}\n\nfunction object(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** Each page keeps the name used when it was filed, including a pre-manifest c. */\nexport function pagePosition(page: Pick<StoredAnswer, \"op\" | \"args\" | \"cursorArg\">, mark: OverlayWatermark): string | null | undefined {\n if (page.op !== mark.op || !object(page.args) || !object(mark.args)) return undefined;\n const cursor = page.cursorArg ?? mark.cursorArg;\n const base = { ...mark.args };\n const args = { ...page.args };\n // Before the manifest, a caller can already pass { after: null } while the\n // recorded name is c. Only the now-known cursor substitutes for that missing\n // field; other nullable/string arguments remain part of the query identity.\n delete base[Object.hasOwn(base, mark.cursorArg) ? mark.cursorArg : cursor];\n delete args[cursor];\n if (canonical(base) !== canonical(args)) return undefined;\n const position = page.args[cursor];\n return position === null || typeof position === \"string\" ? position : undefined;\n}\n\n/**\n * An ordered path starting at the commit snapshot, never inferred from a newer\n * seq or a different opaque string. A cycle, ambiguity, or missing link ends\n * the proven prefix. The caller supplies only non-empty, intact held pages.\n */\nexport function cursorChain(pages: StoredAnswer[], mark: OverlayWatermark, committedSeq: number): string[] {\n const links = new Map<string | null, string | null>();\n for (const page of pages) {\n if ((page.nextSeq ?? page.seq) < committedSeq || typeof page.next !== \"string\") continue;\n const position = pagePosition(page, mark);\n if (position === undefined) continue;\n // Conflicting links quarantine only this position, including off-path ones.\n links.set(position, links.has(position) && links.get(position) !== page.next ? null : page.next);\n }\n const seen = new Set<string | null>([mark.watermark]);\n const chain: string[] = [];\n let position = mark.watermark;\n while (links.has(position)) {\n const next = links.get(position);\n if (next == null || seen.has(next)) break;\n seen.add(next);\n chain.push(next);\n position = next;\n }\n return chain;\n}\n\n/** A re-mark can consume progress only once and only beyond the last proven mark. */\nexport function advanceOverlay(mark: OverlayWatermark, tail: WatermarkRecord | undefined, chain: string[]): boolean {\n if (!tail || pagePosition({ ...tail, args: object(tail.args)\n ? { ...tail.args, [tail.cursorArg ?? mark.cursorArg]: tail.watermark } : tail.args }, mark) === undefined) return false;\n if (typeof tail.watermark !== \"string\" || (mark.consumed ?? []).includes(tail.watermark)) return false;\n const at = chain.indexOf(tail.watermark);\n if (mark.progress !== undefined && !chain.includes(mark.progress)) {\n // A page can grow or be evicted. Re-anchor at the nearest surviving consumed\n // position (or the snapshot root), without forgetting what already counted.\n mark.progress = [...(mark.consumed ?? [])].reverse().find((position) => chain.includes(position));\n }\n const previous = mark.progress === undefined ? -1 : chain.indexOf(mark.progress);\n if (at < 0 || at <= previous) return false;\n mark.progress = tail.watermark;\n mark.consumed = [...new Set([...(mark.consumed ?? []), ...chain.slice(0, at + 1)])];\n return true;\n}\n", "// @ref LLP 1012#4-the-range-store \u2014 every carrier persists the same per-principal answer/range model.\n// @ref LLP 1012#5-retention-revocation-and-the-fence \u2014 eviction is decided once over a complete swap.\n// @ref LLP 1012#9-asset-bytes-on-the-device \u2014 asset bytes leave in the same commit as the row whose lease held them.\n\nimport {\n applyByteSwap,\n assetIdsIn,\n byteKey,\n leasedAssets,\n viewedOnlyAssets,\n type ByteCacheEntry,\n type ByteCacheStatus,\n type ByteDelta,\n type ByteSwapRequest,\n type ViewedRecord,\n} from \"./byte-cache.js\";\n\nimport { advanceOverlay, cursorChain, pagePosition, type OverlayWatermark } from \"./overlay-retirement.js\";\nimport { canonical } from \"./canonical.js\";\n\nexport type PrincipalPartition = string;\nexport type RetentionPolicy = \"until-revoked\" | \"delivered-history\";\n\nexport interface RowRef { table: string; id: string }\nexport interface StoredRow extends RowRef { row: Record<string, unknown> }\n\nexport interface ReceiptRange {\n site: string;\n table: string;\n index: string;\n prefix: unknown[];\n order: \"Asc\" | \"Desc\";\n take: number;\n after: unknown;\n before: unknown;\n gt: unknown;\n gte: unknown;\n lt: unknown;\n lte: unknown;\n rowIds: string[];\n stop: \"Limit\" | \"Exhausted\";\n absence: boolean;\n haloId?: string;\n ruleHash: string;\n /**\n * Members this page was recorded with that a later swap evicted (LLP 1012 \u00A75):\n * the page's answer is `partial/evicted` from then on, and the twin's\n * drained-prefix rule (\u00A76) no longer counts the page as a link in a complete chain.\n */\n evictedIds?: string[];\n}\n\nexport interface Receipt {\n ranges: ReceiptRange[];\n absences: Array<[table: string, index: string, key: unknown[]]>;\n verdicts: unknown[];\n}\n\nexport interface HeldAnswer<Result = unknown> {\n op: string;\n args: unknown;\n state: \"complete\" | \"capped\" | \"partial\" | \"denied\";\n data?: Result;\n next?: string | null;\n seq: number;\n validator?: string;\n receipt?: Receipt;\n deliveredAt: number;\n retained?: boolean;\n caughtUp?: boolean;\n watermark?: string | null;\n reason?: string;\n rule?: string;\n}\n\nexport interface StoredAnswer extends Omit<HeldAnswer, \"data\"> {\n data?: unknown;\n refs: RowRef[];\n order: number;\n fingerprint?: string;\n /** Cursor argument used when this page was filed, before or after manifest load. */\n cursorArg?: string;\n /** Seq of the delivery that recorded `next`; conditional refreshes cannot renew a link. */\n nextSeq?: number;\n}\n\nexport interface WatermarkRecord {\n op: string;\n args: unknown;\n /** The argument the manifest types as this query's cursor; `c` before the manifest loads. */\n cursorArg?: string;\n watermark: string | null;\n validator?: string;\n generation?: string;\n schemaHash?: string;\n authEpoch?: number;\n updatedAt: number;\n /**\n * Durable position among this partition's drained queries: assigned by the store\n * when the query first records a watermark, kept across every later mark. The\n * lowest order is the log a settlement and a resume name (LLP 1012 \u00A77).\n */\n order?: number;\n}\n\n/** The generation and authority every held envelope of a partition was delivered under. */\nexport interface CoverageFacts {\n generation: string;\n schemaHash: string;\n authEpoch: number;\n}\n\n/** One certified operation as `GET /api/program` serves it: the IR the twin runs and its certificate. */\nexport interface HeldOperation {\n kind: \"query\" | \"mutation\";\n planHash: string;\n ir: unknown;\n certificate: unknown;\n}\n\n// @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 the program\n// custody the evaluator ticket names: the certified IR, certificates, and the\n// schema of one generation, held in the partition so a cold start with the\n// network cut still evaluates and prices from the certificate.\nexport interface HeldProgram {\n generation: string;\n schemaHash: string;\n schema: OfflineSchema & Record<string, unknown>;\n programs: Record<string, HeldOperation>;\n}\n\nexport interface Coverage {\n rows: StoredRow[];\n ranges: ReceiptRange[];\n absences: Receipt[\"absences\"];\n verdicts: unknown[];\n watermarks: WatermarkRecord[];\n /**\n * View-once rows already viewed on this partition: absent from `rows`, listed under\n * `absences` as a `byId` point, and named here so a replay never renders them (LLP 1012 \u00A79).\n */\n viewed?: RowRef[];\n /** Rows a swap evicted (LLP 1012 \u00A75): the twin reports a read of one as `evicted`, not `never-held`. */\n evicted?: RowRef[];\n /** The generation and auth epoch the held coverage was delivered under; absent when nothing is held. */\n facts?: CoverageFacts;\n /**\n * The facts a later delivery arrived under when its generation or schema differ\n * from `facts`: the held answers predate the program the server now runs, so the\n * twin serves nothing from them \u2014 every read is `hydrating` \u2014 until the reset\n * path drops this coverage and rebuilds it under the live generation (LLP 1012 \u00A78).\n */\n superseded?: CoverageFacts;\n /** The newest delivery's time: what an answer the twin computes reports as `stale.since`. */\n deliveredAt?: number;\n}\n\nexport type OutboxState = \"queued\" | \"committed\" | \"rejected\" | \"expired\";\n/** What the twin read when the intent was queued: the replay envelope's `trace` (LLP 1012 \u00A77). */\nexport interface OutboxTrace {\n points: Array<{ table: string; index: string; key: unknown[]; digest: string | null }>;\n verdicts: Array<{ ruleHash: string; inputsDigest: string; result: boolean }>;\n}\n// @ref LLP 1012#7-writes-offline \u2014 one durable intent: its pinned id slice, its\n// bytes, and its terminal response, so a retry is the same envelope.\nexport interface OutboxEntry {\n intent: string;\n grant: string;\n offset: number;\n count: number;\n ids: string[];\n op: string;\n args: unknown;\n issuedSeq: number;\n state: OutboxState;\n response?: unknown;\n predicted?: boolean;\n /** Prediction and its trace were skipped; the program will check this write on the server. */\n reason?: \"fence\";\n /** Engine-owned aggregate targets the prediction's overlay omits by design (the server writes them); absent when none. */\n omitted?: string[];\n trace?: OutboxTrace;\n createdAt: number;\n updatedAt: number;\n /** Durable FIFO position; assigned by the store when absent. */\n order?: number;\n}\n\n/** A principal-bound replay grant plus the client's own consumption cursor. */\nexport interface OutboxGrant {\n id: string;\n from: string;\n count: number;\n mintedAt: number;\n expiresAt: number;\n used: number;\n}\n\nexport interface OutboxStore {\n all(): Promise<OutboxEntry[]>;\n get(intent: string): Promise<OutboxEntry | undefined>;\n put(entry: OutboxEntry): Promise<void>;\n remove(intent: string): Promise<void>;\n /** The grant new intents consume from, if one is held. */\n grant(): Promise<OutboxGrant | undefined>;\n /** Every held grant, including those older queued intents still name. */\n grants(): Promise<OutboxGrant[]>;\n /** Each op's persisted write bound (`maxNewIds`); an enqueue refuses without one. */\n bounds(): Promise<Record<string, number>>;\n /** The prediction overlay by intent: the rows a queued intent's local run wrote, `removed` for a delete. */\n overlay(): Promise<Record<string, OverlayRow[]>>;\n /** The certified programs held for this partition, keyed by generation. */\n programs(): Promise<Record<string, HeldProgram>>;\n}\n\n/** A predicted row: the write's final image, or a `removed` marker for a row the intent deletes. */\nexport interface OverlayRow extends StoredRow { removed?: true }\n\nexport interface StoreDelivery {\n cursorArg?: string;\n op: string;\n args: unknown;\n state: HeldAnswer[\"state\"];\n data?: unknown;\n next?: string | null;\n seq: number;\n validator?: string;\n receipt?: Receipt;\n rows?: StoredRow[];\n deliveredAt?: number;\n reason?: string;\n rule?: string;\n}\n\nexport interface StoreTombstone extends RowRef { seq: number }\nexport interface StoreRefresh {\n op: string;\n args: unknown;\n seq: number;\n validator: string;\n deliveredAt?: number;\n}\n\nexport interface OfflineSchema {\n tables?: Record<string, {\n columns?: Record<string, unknown>;\n indexes?: Record<string, { columns?: string[] }>;\n retain?: RetentionPolicy;\n }>;\n}\n\nexport interface StoreSwap {\n deliveries?: StoreDelivery[];\n refreshes?: StoreRefresh[];\n tombstones?: StoreTombstone[];\n retention?: Record<string, RetentionPolicy>;\n schema?: OfflineSchema;\n watermark?: WatermarkRecord;\n resetCoverage?: boolean;\n /** One validated resume response, including unchanged; never a query re-delivery. */\n resumeSeq?: number;\n dropAnswers?: string[];\n outbox?: { put?: OutboxEntry[]; remove?: string[] };\n /**\n * Byte-cache puts and read touches; they land in the same swap as the rows: one\n * readwrite transaction on IndexedDB, an ordered payload write + state rename with\n * a sweep on open for the Node file carrier.\n */\n bytes?: ByteSwapRequest;\n /** View-once rows viewed now: excluded from every later answer, their bytes never cached. */\n viewed?: RowRef[];\n /** `current` names the grant new intents consume; `null` clears it. */\n grants?: { put?: OutboxGrant[]; current?: string | null; remove?: string[] };\n /** Predicted rows keyed by intent; visible to the twin's local evaluation, never to `answer()` (LLP 1012 \u00A77). */\n overlay?: { put?: Record<string, OverlayRow[]>; remove?: string[] };\n /** The certified programs, replaced whole (one generation is held at a time); custody like the outbox. */\n programs?: Record<string, HeldProgram>;\n /** The facts the swap's envelopes were delivered under; cleared by `resetCoverage`. */\n facts?: CoverageFacts;\n /** A rotation: the facts a refused delivery arrived under; held coverage is superseded until rebuild completion clears it with `null`. */\n superseded?: CoverageFacts | null;\n /**\n * The program's write bounds, replaced whole: what `/api/program` certified each op may\n * mint. Custody like the outbox \u2014 a coverage reset never touches it (LLP 1012 \u00A77).\n */\n bounds?: Record<string, number>;\n}\n\nexport interface RangeStore {\n open(partition: PrincipalPartition): Promise<void>;\n unseal(): Promise<void>;\n seal(): Promise<void>;\n wipe(partition: PrincipalPartition): Promise<void>;\n answer<Result = unknown>(op: string, args: unknown): Promise<HeldAnswer<Result> | undefined>;\n commit(swap: StoreSwap): Promise<void>;\n coverage(): Promise<Coverage>;\n readonly outbox: OutboxStore;\n close?(): Promise<void> | void;\n}\n\nexport interface RangeStoreFactory {\n (): RangeStore;\n readonly carrier?: string;\n}\n\nexport class OfflineStoreFailure extends Error {\n constructor(readonly code: \"E_OFFLINE_CARRIER\" | \"E_OFFLINE_LOCK\", message: string, readonly rewrite?: string) {\n super(message);\n this.name = \"OfflineStoreFailure\";\n }\n}\n\nexport interface PersistedRangeState {\n version: 1;\n sealed: boolean;\n clock: number;\n rows: Record<string, StoredRow>;\n answers: Record<string, StoredAnswer>;\n watermarks: Record<string, WatermarkRecord>;\n outbox: Record<string, OutboxEntry>;\n grants: Record<string, OutboxGrant>;\n currentGrant?: string;\n overlay: Record<string, OverlayRow[]>;\n /** Per committed intent, successful resumes or proven tail advances without its rows. */\n overlayMisses: Record<string, number>;\n /** The commit-time tail snapshot; null after reset until the next drain establishes a new head. */\n overlayWatermarks: Record<string, OverlayWatermark | null>;\n /** Only primary absences and tombstones, scoped to each prediction's ids. */\n overlayNegatives: Record<string, Record<string, { seq: number; source: \"absence\" | \"tombstone\" }>>;\n bounds: Record<string, number>;\n programs: Record<string, HeldProgram>;\n facts?: CoverageFacts;\n superseded?: CoverageFacts;\n negative: Record<string, number>;\n rowSeq: Record<string, number>;\n /** The byte-cache index; payloads live beside the state in the carrier, keyed by `byteKey`. */\n assets: Record<string, ByteCacheEntry>;\n viewed: Record<string, ViewedRecord>;\n}\n\nexport interface RangeStoreBackend {\n readonly carrier: string;\n open(partition: PrincipalPartition): Promise<PersistedRangeState | undefined>;\n /** One carrier transaction: the state, plus the byte payloads to write and the keys to drop. */\n replace(state: PersistedRangeState, bytes: ByteDelta): Promise<void>;\n readBytes?(key: string): Promise<Uint8Array | undefined>;\n wipe(partition: PrincipalPartition): Promise<void>;\n close(): Promise<void> | void;\n}\n\nconst NO_BYTES: ByteDelta = { put: [], remove: [] };\n\nexport function emptyState(): PersistedRangeState {\n return {\n version: 1, sealed: false, clock: 0, rows: {}, answers: {}, watermarks: {}, outbox: {},\n grants: {}, overlay: {}, overlayMisses: {}, overlayWatermarks: {}, overlayNegatives: {}, bounds: {}, programs: {}, negative: {}, rowSeq: {}, assets: {}, viewed: {},\n };\n}\n\nfunction clone<T>(value: T): T {\n return structuredClone(value);\n}\n\nexport function canonicalAnswerKey(op: string, args: unknown): string {\n return `${op}\\u0000${canonical(args === undefined ? args : jsonState(args))}`;\n}\n\nfunction rowKey(ref: RowRef): string {\n return `${ref.table}\\u0000${ref.id}`;\n}\n\nfunction viewedRef(key: string): RowRef {\n const at = key.indexOf(String.fromCharCode(0));\n return { table: key.slice(0, at), id: key.slice(at + 1) };\n}\n\nfunction recordEviction(evictions: Map<string, StoreTombstone>, eviction: StoreTombstone): void {\n const key = rowKey(eviction);\n if ((evictions.get(key)?.seq ?? -1) <= eviction.seq) evictions.set(key, eviction);\n}\n\nexport function rowReference(table: string, id: string): { $row: RowRef } {\n return { $row: { table, id } };\n}\n\nfunction asRowRef(value: unknown): RowRef | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const marker = (value as { $row?: unknown }).$row;\n return marker !== null && typeof marker === \"object\" && !Array.isArray(marker)\n && Object.keys(marker).sort().join(\",\") === \"id,table\"\n && typeof (marker as RowRef).table === \"string\" && typeof (marker as RowRef).id === \"string\"\n ? { table: (marker as RowRef).table, id: (marker as RowRef).id }\n : undefined;\n}\n\nfunction collectRefs(value: unknown, refs = new Map<string, RowRef>()): RowRef[] {\n const ref = asRowRef(value);\n if (ref) refs.set(rowKey(ref), ref);\n else if (Array.isArray(value)) for (const item of value) collectRefs(item, refs);\n else if (value && typeof value === \"object\") {\n for (const item of Object.values(value as Record<string, unknown>)) collectRefs(item, refs);\n }\n return [...refs.values()];\n}\n\nfunction expand(value: unknown, rows: Record<string, StoredRow>, viewed?: Record<string, unknown>): unknown {\n const ref = asRowRef(value);\n if (ref) return viewed?.[rowKey(ref)] ? null : rows[rowKey(ref)]?.row ?? null;\n if (Array.isArray(value)) return value.map((item) => expand(item, rows, viewed));\n if (!value || typeof value !== \"object\") return value;\n return Object.fromEntries(Object.entries(value as Record<string, unknown>)\n .map(([key, item]) => [key, expand(item, rows, viewed)]));\n}\n\nfunction hiddenRefs(before: unknown, after: unknown, output = new Map<string, RowRef>()): RowRef[] {\n if (after === null || after === undefined) {\n for (const ref of collectRefs(before)) output.set(rowKey(ref), ref);\n return [...output.values()];\n }\n const ref = asRowRef(before);\n if (ref && after === null) output.set(rowKey(ref), ref);\n else if (Array.isArray(before) && Array.isArray(after)) {\n for (let index = 0; index < before.length; index += 1) {\n hiddenRefs(before[index], index < after.length ? after[index] : undefined, output);\n }\n } else if (before && after && typeof before === \"object\" && typeof after === \"object\"\n && !Array.isArray(before) && !Array.isArray(after)) {\n for (const key of Object.keys(before as object)) {\n hiddenRefs(\n (before as Record<string, unknown>)[key],\n Object.prototype.hasOwnProperty.call(after, key) ? (after as Record<string, unknown>)[key] : undefined,\n output,\n );\n }\n }\n return [...output.values()];\n}\n\nfunction restoreRetained(before: unknown, after: unknown, retained: Set<string>): unknown {\n const ref = asRowRef(before);\n if (ref && (after === null || after === undefined) && retained.has(rowKey(ref))) return before;\n if (Array.isArray(before) && Array.isArray(after)) {\n const result = after.map((item, index) => index < before.length\n ? restoreRetained(before[index], item, retained) : item);\n for (let index = after.length; index < before.length; index += 1) {\n if (collectRefs(before[index]).some((item) => retained.has(rowKey(item)))) result.push(clone(before[index]));\n }\n return result;\n }\n if (before && after && typeof before === \"object\" && typeof after === \"object\"\n && !Array.isArray(before) && !Array.isArray(after)) {\n const result = clone(after as Record<string, unknown>);\n for (const key of Object.keys(before as object)) {\n const old = (before as Record<string, unknown>)[key];\n if (Object.prototype.hasOwnProperty.call(result, key)) result[key] = restoreRetained(old, result[key], retained);\n else if (collectRefs(old).some((item) => retained.has(rowKey(item)))) result[key] = clone(old);\n }\n return result;\n }\n if ((after === null || after === undefined)\n && collectRefs(before).some((item) => retained.has(rowKey(item)))) return clone(before);\n return after;\n}\n\nfunction sameRange(left: ReceiptRange, right: ReceiptRange): boolean {\n return left.site === right.site && left.table === right.table && left.index === right.index\n && canonical(left.prefix) === canonical(right.prefix)\n && left.order === right.order\n && canonical(left.after) === canonical(right.after)\n && canonical(left.before) === canonical(right.before)\n && canonical(left.gt) === canonical(right.gt)\n && canonical(left.gte) === canonical(right.gte)\n && canonical(left.lt) === canonical(right.lt)\n && canonical(left.lte) === canonical(right.lte)\n && left.ruleHash === right.ruleHash;\n}\n\nfunction compareValue(left: unknown, right: unknown): number {\n if (left === right) return 0;\n if (typeof left === \"number\" && typeof right === \"number\") return left < right ? -1 : 1;\n if (typeof left === \"string\" && typeof right === \"string\") return left < right ? -1 : 1;\n if (typeof left === \"boolean\" && typeof right === \"boolean\") return left ? 1 : -1;\n const a = canonical(left);\n const b = canonical(right);\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction compareKey(left: unknown[], right: unknown[]): number {\n for (let index = 0; index < Math.min(left.length, right.length); index += 1) {\n const order = compareValue(left[index], right[index]);\n if (order !== 0) return order;\n }\n return left.length - right.length;\n}\n\nfunction indexKey(schema: OfflineSchema | undefined, range: ReceiptRange, row: StoredRow | undefined): unknown[] | undefined {\n const columns = schema?.tables?.[range.table]?.indexes?.[range.index]?.columns;\n if (!row || !Array.isArray(columns) || !columns.every((item) => typeof item === \"string\")) return undefined;\n const key = columns.map((column) => row.row[column]);\n return key.some((item) => item === undefined) ? undefined : key;\n}\n\nfunction cursorKey(value: unknown, width: number): unknown[] | undefined {\n if (value === null || value === undefined) return undefined;\n if (Array.isArray(value)) return value.length === width ? value : undefined;\n return width === 1 ? [value] : undefined;\n}\n\nfunction insidePrefixBounds(key: unknown[], range: ReceiptRange): boolean {\n if (key.length < range.prefix.length\n || compareKey(key.slice(0, range.prefix.length), range.prefix) !== 0) return false;\n const suffix = key.slice(range.prefix.length);\n const after = cursorKey(range.after, suffix.length);\n const before = cursorKey(range.before, suffix.length);\n if (after && (range.order === \"Asc\" ? compareKey(suffix, after) <= 0 : compareKey(suffix, after) >= 0)) return false;\n if (before && (range.order === \"Asc\" ? compareKey(suffix, before) >= 0 : compareKey(suffix, before) <= 0)) return false;\n const first = suffix[0];\n if (range.gt !== null && range.gt !== undefined && compareValue(first, range.gt) <= 0) return false;\n if (range.gte !== null && range.gte !== undefined && compareValue(first, range.gte) < 0) return false;\n if (range.lt !== null && range.lt !== undefined && compareValue(first, range.lt) >= 0) return false;\n if (range.lte !== null && range.lte !== undefined && compareValue(first, range.lte) > 0) return false;\n return true;\n}\n\nfunction inFreshExtent(\n id: string,\n held: ReceiptRange,\n fresh: ReceiptRange,\n rows: Record<string, StoredRow>,\n schema: OfflineSchema | undefined,\n): boolean {\n const key = indexKey(schema, held, rows[rowKey({ table: held.table, id })]);\n if (!key) return fresh.stop === \"Exhausted\";\n if (!insidePrefixBounds(key, fresh)) return false;\n if (fresh.stop === \"Exhausted\") return true;\n const presentKeys = fresh.rowIds\n .map((rowId) => indexKey(schema, fresh, rows[rowKey({ table: fresh.table, id: rowId })]))\n .filter(Array.isArray) as unknown[][];\n if (presentKeys.length === 0) return false;\n const first = presentKeys.reduce((a, b) => compareKey(a, b) <= 0 ? a : b);\n const last = presentKeys.reduce((a, b) => compareKey(a, b) >= 0 ? a : b);\n return compareKey(key, first) >= 0 && compareKey(key, last) <= 0;\n}\n\n/** One JSON form for warm state and every carrier: omit undefined fields, preserve null. */\nexport function jsonState<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction normalizeState(value: PersistedRangeState | undefined): PersistedRangeState {\n if (!value) return emptyState();\n value = jsonState(value);\n if (value.version !== 1 || typeof value.rows !== \"object\" || typeof value.answers !== \"object\") {\n throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", \"range store contains an unsupported format\");\n }\n return {\n ...value,\n watermarks: value.watermarks ?? {},\n outbox: value.outbox ?? {},\n grants: value.grants ?? {},\n overlay: value.overlay ?? {},\n overlayMisses: value.overlayMisses ?? {},\n overlayWatermarks: value.overlayWatermarks ?? {},\n overlayNegatives: value.overlayNegatives ?? {},\n bounds: value.bounds ?? {},\n programs: value.programs ?? {},\n negative: value.negative ?? {},\n rowSeq: value.rowSeq ?? {},\n assets: value.assets ?? {},\n viewed: value.viewed ?? {},\n };\n}\n\n/**\n * The log a settlement's tail request and a resume's `log` both name: the drained\n * query whose watermark was recorded first in this partition \u2014 the first-mounted\n * drain, since a drain records its watermark when it first catches up \u2014 by the\n * store's durable `order`, so the choice survives restarts and re-marks and never\n * follows whichever page moved last (LLP 1012 \u00A77, \u00A78).\n */\nexport function tailWatermark(watermarks: WatermarkRecord[]): WatermarkRecord | undefined {\n return [...watermarks].sort((a, b) =>\n (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER)\n || a.updatedAt - b.updatedAt\n || canonicalAnswerKey(a.op, a.args).localeCompare(canonicalAnswerKey(b.op, b.args)))[0];\n}\n\n/** Two post-commit resumes or proven tail advances retire a stranded prediction. */\nconst OVERLAY_PATIENCE = 2;\n\nfunction outboxOrder(entries: Record<string, OutboxEntry>): OutboxEntry[] {\n return Object.values(entries).sort((a, b) =>\n (a.order ?? a.createdAt) - (b.order ?? b.createdAt) || a.createdAt - b.createdAt || (a.intent < b.intent ? -1 : 1));\n}\n\n/** Shared swap engine; carrier subclasses only provide the atomic replace. */\nexport class PersistentRangeStore implements RangeStore {\n private state = emptyState();\n private partition?: PrincipalPartition;\n private tail: Promise<void> = Promise.resolve();\n\n readonly outbox: OutboxStore = {\n all: async () => this.read(() => {\n this.ensureUnsealed();\n return clone(outboxOrder(this.state.outbox));\n }),\n get: async (intent) => this.read(() => {\n this.ensureUnsealed();\n return this.state.outbox[intent] && clone(this.state.outbox[intent]);\n }),\n put: async (entry) => this.commit({ outbox: { put: [entry] } }),\n remove: async (intent) => this.commit({ outbox: { remove: [intent] } }),\n grant: async () => this.read(() => {\n this.ensureUnsealed();\n const current = this.state.currentGrant === undefined ? undefined : this.state.grants[this.state.currentGrant];\n return current && clone(current);\n }),\n grants: async () => this.read(() => {\n this.ensureUnsealed();\n return clone(Object.values(this.state.grants));\n }),\n bounds: async () => this.read(() => {\n this.ensureUnsealed();\n return clone(this.state.bounds);\n }),\n overlay: async () => this.read(() => {\n this.ensureUnsealed();\n return clone(this.state.overlay);\n }),\n programs: async () => this.read(() => {\n this.ensureUnsealed();\n return clone(this.state.programs);\n }),\n };\n\n constructor(private readonly backend: RangeStoreBackend) {}\n\n async open(partition: PrincipalPartition): Promise<void> {\n if (typeof partition !== \"string\" || partition.length === 0) {\n throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", \"range store partition must be a principal id\");\n }\n await this.enqueue(async () => {\n if (this.partition === partition) return;\n if (this.partition !== undefined && this.partition !== partition) await this.backend.close();\n this.partition = partition;\n this.state = normalizeState(await this.backend.open(partition));\n });\n }\n\n async unseal(): Promise<void> {\n await this.enqueue(async () => {\n this.ensureOpen();\n if (!this.state.sealed) return;\n const next = { ...clone(this.state), sealed: false };\n await this.backend.replace(next, NO_BYTES);\n this.state = next;\n });\n }\n\n async seal(): Promise<void> {\n await this.enqueue(async () => {\n this.ensureOpen();\n const next = { ...clone(this.state), sealed: true };\n await this.backend.replace(next, NO_BYTES);\n this.state = next;\n });\n }\n\n async wipe(partition: PrincipalPartition): Promise<void> {\n await this.enqueue(async () => {\n await this.backend.wipe(partition);\n if (this.partition === partition) {\n this.partition = undefined;\n this.state = emptyState();\n }\n });\n }\n\n async answer<Result = unknown>(op: string, args: unknown): Promise<HeldAnswer<Result> | undefined> {\n return this.read(() => {\n if (this.state.sealed) return undefined;\n const key = canonicalAnswerKey(op, args);\n const stored = this.state.answers[key];\n if (!stored) return undefined;\n const watermark = this.state.watermarks[key];\n const { refs: _refs, order: _order, fingerprint: _fingerprint, cursorArg: _cursorArg, data, ...answer } = clone(stored);\n return {\n ...answer,\n // A viewed view-once row reads as absent: the view was its one delivery (LLP 1012 \u00A79).\n ...(data === undefined ? {} : { data: expand(data, this.state.rows, this.state.viewed) as Result }),\n ...(watermark === undefined ? {} : { caughtUp: true, watermark: watermark.watermark }),\n };\n });\n }\n\n async coverage(): Promise<Coverage> {\n return this.read(() => {\n if (this.state.sealed) return { rows: [], ranges: [], absences: [], verdicts: [], watermarks: [], viewed: [], evicted: [] };\n const ranges = new Map<string, ReceiptRange>();\n const absences = new Map<string, Receipt[\"absences\"][number]>();\n const verdicts = new Map<string, unknown>();\n for (const answer of Object.values(this.state.answers)) {\n for (const range of answer.receipt?.ranges ?? []) {\n ranges.set(`${range.site}\\u0000${canonical(range.prefix)}\\u0000${canonical([\n range.order, range.after, range.before, range.gt, range.gte, range.lt, range.lte,\n ])}`, clone(range));\n }\n for (const absence of answer.receipt?.absences ?? []) absences.set(canonical(absence), clone(absence));\n for (const verdict of answer.receipt?.verdicts ?? []) verdicts.set(canonical(verdict), clone(verdict));\n }\n // A viewed view-once row is absent to the twin: not a row, and a byId absence (LLP 1012 \u00A79).\n const viewed = Object.keys(this.state.viewed).map(viewedRef);\n for (const ref of viewed) {\n const absence: Receipt[\"absences\"][number] = [ref.table, \"byId\", [ref.id]];\n absences.set(canonical(absence), absence);\n }\n let deliveredAt: number | undefined;\n for (const answer of Object.values(this.state.answers)) {\n if (deliveredAt === undefined || answer.deliveredAt > deliveredAt) deliveredAt = answer.deliveredAt;\n }\n return {\n rows: clone(Object.entries(this.state.rows).filter(([key]) => !this.state.viewed[key]).map(([, row]) => row)),\n ranges: [...ranges.values()],\n absences: [...absences.values()],\n verdicts: [...verdicts.values()],\n watermarks: clone(Object.values(this.state.watermarks)),\n viewed,\n evicted: Object.keys(this.state.negative).map(viewedRef),\n ...(this.state.facts === undefined ? {} : { facts: clone(this.state.facts) }),\n ...(this.state.superseded === undefined ? {} : { superseded: clone(this.state.superseded) }),\n ...(deliveredAt === undefined ? {} : { deliveredAt }),\n };\n });\n }\n\n async commit(swap: StoreSwap): Promise<void> {\n await this.enqueue(async () => {\n this.ensureOpen();\n // Byte payloads are not cloned: they can be megabytes and the swap never mutates them.\n const { bytes, ...rest } = swap;\n const delta: ByteDelta = { put: [], remove: [] };\n // Normalize before deriving answer keys/fingerprints, then normalize the state we publish.\n const next = normalizeState(this.applySwap(clone(this.state), { ...jsonState(rest), ...(bytes === undefined ? {} : { bytes }) }, delta));\n await this.backend.replace(next, delta);\n this.state = next;\n });\n }\n\n /** The cached rendition for an asset at a width; nothing when unheld, sealed, or the payload is gone. */\n async readBytes(assetId: string, width: number | null): Promise<{ bytes: Uint8Array; type: string } | undefined> {\n return this.read(async () => {\n if (this.state.sealed) return undefined;\n const key = byteKey(assetId, width);\n const entry = this.state.assets[key];\n if (!entry) return undefined;\n const bytes = await this.backend.readBytes?.(key);\n return bytes && bytes.byteLength === entry.size ? { bytes, type: entry.type } : undefined;\n });\n }\n\n async bytes(): Promise<ByteCacheStatus> {\n return this.read(() => {\n if (this.state.sealed) return { entries: [], totalBytes: 0, viewed: [] };\n const entries = clone(Object.values(this.state.assets));\n return {\n entries,\n totalBytes: entries.reduce((sum, entry) => sum + entry.size, 0),\n viewed: Object.keys(this.state.viewed).map(viewedRef),\n };\n });\n }\n\n /** Held rows whose values carry this asset record: the lease under which its bytes may be cached. */\n async rowsReferencing(assetId: string): Promise<StoredRow[]> {\n return this.read(() => this.state.sealed\n ? []\n : clone(Object.values(this.state.rows).filter((row) => assetIdsIn(row.row).has(assetId))));\n }\n\n /** True while every held row carrying this asset is a viewed view-once row (per row, LLP 1012 \u00A79). */\n async viewedAsset(assetId: string): Promise<boolean> {\n return this.read(() => !this.state.sealed && viewedOnlyAssets(this.state).has(assetId));\n }\n\n /** The viewed view-once rows; a live frame nulls them exactly as a held answer does. */\n async viewedRows(): Promise<RowRef[]> {\n return this.read(() => this.state.sealed ? [] : Object.keys(this.state.viewed).map(viewedRef));\n }\n\n /**\n * LRU read stamps, coalesced per swap: a read stamps the entry in memory and the next\n * swap's `replace` persists it, so a read never rewrites the carrier (LLP 1012 \u00A79).\n */\n async touchBytes(keys: string[]): Promise<void> {\n await this.enqueue(async () => {\n if (this.partition === undefined || this.state.sealed) return;\n for (const key of keys) {\n const entry = this.state.assets[key];\n if (entry) entry.lastRead = ++this.state.clock;\n }\n });\n }\n\n async close(): Promise<void> {\n await this.enqueue(async () => {\n this.partition = undefined;\n this.state = emptyState();\n await this.backend.close();\n });\n }\n\n private applySwap(state: PersistedRangeState, swap: StoreSwap, bytes: ByteDelta): PersistedRangeState {\n if (state.sealed) throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", \"range store is sealed\");\n if (swap.resetCoverage) {\n state.rows = {};\n // Sequence guards belong to this generation's coverage, just like rows.\n // A query-only successor can deliver the same row at the same data seq.\n state.rowSeq = {};\n state.negative = {};\n state.answers = {};\n state.watermarks = {};\n // These describe coverage, unlike the overlay and its replay entry.\n state.overlayWatermarks = Object.fromEntries(Object.keys(state.overlay).map((intent) => [intent, null]));\n state.overlayMisses = {};\n delete state.facts;\n }\n if (swap.superseded === null) delete state.superseded;\n if (swap.resumeSeq !== undefined && (!Number.isSafeInteger(swap.resumeSeq) || swap.resumeSeq < 0)) {\n throw new TypeError(\"store resume seq must be a non-negative safe integer\");\n }\n if (swap.facts) state.facts = clone(swap.facts);\n if (swap.superseded) state.superseded = clone(swap.superseded);\n const explicitEvictions = new Map<string, StoreTombstone>();\n // Keep provenance distinct from hidden-row and extent evictions. These facts\n // join each matching overlay below, even while its response is still queued.\n const authoritativeNegatives = new Map<string, { seq: number; source: \"absence\" | \"tombstone\" }>();\n const recordNegative = (ref: StoreTombstone, source: \"absence\" | \"tombstone\") => {\n const key = rowKey(ref);\n if ((authoritativeNegatives.get(key)?.seq ?? -1) <= ref.seq) {\n authoritativeNegatives.set(key, { seq: ref.seq, source });\n }\n recordEviction(explicitEvictions, ref);\n };\n const recordAbsences = (answer: Pick<StoredAnswer, \"receipt\" | \"seq\">) => {\n for (const [table, index, key] of answer.receipt?.absences ?? []) {\n if (index !== \"byId\" || key.length !== 1) {\n throw new TypeError(\"store receipts may evict only a primary byId absence\");\n }\n if (typeof key[0] === \"string\") recordNegative({ table, id: key[0], seq: answer.seq }, \"absence\");\n }\n };\n for (const key of swap.dropAnswers ?? []) delete state.answers[key];\n for (const refresh of swap.refreshes ?? []) {\n const answer = state.answers[canonicalAnswerKey(refresh.op, refresh.args)];\n if (!answer || refresh.seq < answer.seq) continue;\n if (answer.validator !== undefined && answer.validator !== refresh.validator) {\n throw new TypeError(`conditional validator changed for ${refresh.op}`);\n }\n if (refresh.seq === answer.seq) continue;\n answer.nextSeq ??= answer.seq;\n answer.seq = refresh.seq;\n answer.validator = refresh.validator;\n answer.deliveredAt = refresh.deliveredAt ?? Date.now();\n answer.order = ++state.clock;\n recordAbsences(answer);\n }\n const before = clone(state.answers);\n const freshRanges: Array<{ range: ReceiptRange; seq: number }> = [];\n for (const ref of swap.tombstones ?? []) {\n recordNegative(ref, \"tombstone\");\n }\n for (const delivery of swap.deliveries ?? []) {\n if (!Number.isSafeInteger(delivery.seq) || delivery.seq < 0) {\n throw new TypeError(\"store delivery seq must be a non-negative safe integer\");\n }\n const key = canonicalAnswerKey(delivery.op, delivery.args);\n const old = before[key];\n const fingerprint = canonical({\n op: delivery.op, args: delivery.args, state: delivery.state, data: delivery.data,\n next: delivery.next, seq: delivery.seq, validator: delivery.validator,\n receipt: delivery.receipt, rows: delivery.rows, reason: delivery.reason, rule: delivery.rule,\n });\n if (old && delivery.seq < old.seq) continue;\n if (old && delivery.seq === old.seq) {\n if (old.fingerprint === fingerprint) continue;\n throw new TypeError(`conflicting deliveries for ${delivery.op} at seq ${delivery.seq}`);\n }\n for (const row of delivery.rows ?? []) {\n if (!row.table || !row.id || !row.row || typeof row.row !== \"object\") {\n throw new TypeError(\"store delivery row is malformed\");\n }\n const storageKey = rowKey(row);\n if ((state.negative[storageKey] ?? -1) >= delivery.seq) {\n recordEviction(explicitEvictions, { table: row.table, id: row.id, seq: state.negative[storageKey]! });\n continue;\n }\n if (state.rowSeq[storageKey] === delivery.seq\n && canonical(state.rows[storageKey]) !== canonical(row)) {\n throw new TypeError(`conflicting row ${row.table}/${row.id} at seq ${delivery.seq}`);\n }\n if ((state.rowSeq[storageKey] ?? -1) > delivery.seq) continue;\n state.rows[storageKey] = clone(row);\n state.rowSeq[storageKey] = delivery.seq;\n }\n let data = clone(delivery.data);\n let answerState = delivery.state;\n let retained = false;\n const hidden = delivery.state === \"denied\" && old\n ? old.refs\n : old ? hiddenRefs(old.data, data) : [];\n const retainedRefs = new Set<string>();\n for (const ref of hidden) {\n if ((swap.retention?.[ref.table] ?? \"until-revoked\") === \"delivered-history\") {\n retainedRefs.add(rowKey(ref));\n retained = true;\n } else recordEviction(explicitEvictions, { ...ref, seq: delivery.seq });\n }\n if (delivery.state === \"denied\" && old && retainedRefs.size > 0) {\n data = clone(old.data);\n answerState = old.state;\n } else if (old && retainedRefs.size > 0) {\n data = restoreRetained(old.data, data, retainedRefs);\n }\n const refs = collectRefs(data);\n for (const range of delivery.receipt?.ranges ?? []) {\n for (const id of [...range.rowIds, ...(range.haloId ? [range.haloId] : [])]) {\n if (!refs.some((ref) => ref.table === range.table && ref.id === id)) refs.push({ table: range.table, id });\n }\n }\n // The pool is the answer's closure: halo and rule-input bodies (the\n // membership a message's read rule probed) are delivered content the\n // twin evaluates over, so an answer keeps every row it was delivered with.\n for (const pooled of delivery.rows ?? []) {\n if (!refs.some((ref) => ref.table === pooled.table && ref.id === pooled.id)) refs.push({ table: pooled.table, id: pooled.id });\n }\n const stored: StoredAnswer = {\n op: delivery.op,\n ...(delivery.cursorArg === undefined ? {} : { cursorArg: delivery.cursorArg }),\n args: clone(delivery.args),\n state: answerState,\n ...(data === undefined ? {} : { data }),\n ...(delivery.next === undefined ? {} : { next: delivery.next }),\n nextSeq: delivery.seq,\n seq: delivery.seq,\n ...(delivery.validator === undefined ? {} : { validator: delivery.validator }),\n ...(delivery.receipt === undefined ? {} : { receipt: clone(delivery.receipt) }),\n deliveredAt: delivery.deliveredAt ?? Date.now(),\n ...(retained ? { retained: true } : {}),\n ...(delivery.reason === undefined ? {} : { reason: delivery.reason }),\n ...(delivery.rule === undefined ? {} : { rule: delivery.rule }),\n refs,\n order: ++state.clock,\n fingerprint,\n };\n state.answers[key] = stored;\n freshRanges.push(...(delivery.receipt?.ranges ?? []).map((range) => ({ range, seq: delivery.seq })));\n recordAbsences(stored);\n }\n\n const heldRanges = Object.values(before).flatMap((answer) => answer.receipt?.ranges ?? []);\n for (const held of heldRanges) {\n const matching = freshRanges.filter(({ range: fresh }) => sameRange(held, fresh));\n if (matching.length === 0) continue;\n const present = new Set(matching.flatMap(({ range: fresh }) => [\n ...fresh.rowIds,\n ...(fresh.haloId ? [fresh.haloId] : []),\n ]));\n for (const id of held.rowIds) {\n if (present.has(id)) continue;\n const seq = matching\n .filter(({ range: fresh }) => inFreshExtent(id, held, fresh, state.rows, swap.schema))\n .reduce((latest, item) => Math.max(latest, item.seq), -1);\n if (seq >= 0) recordEviction(explicitEvictions, { table: held.table, id, seq });\n }\n }\n\n const appliedEvictions = new Set<string>();\n for (const [key, eviction] of explicitEvictions) {\n if ((state.negative[key] ?? -1) > eviction.seq) continue;\n if ((state.rowSeq[key] ?? -1) > eviction.seq) continue;\n state.negative[key] = eviction.seq;\n appliedEvictions.add(key);\n delete state.rows[key];\n delete state.rowSeq[key];\n for (const answer of Object.values(state.answers)) {\n for (const range of answer.receipt?.ranges ?? []) {\n if (range.table !== eviction.table) continue;\n const id = eviction.id;\n if (range.rowIds.includes(id)) {\n range.rowIds = range.rowIds.filter((rowId) => rowId !== id);\n // The page remembers what it lost: an interior eviction leaves a hole\n // the twin must not paper over with \"complete\" (LLP 1012 \u00A76).\n range.evictedIds = [...(range.evictedIds ?? []), id];\n }\n if (range.haloId === id) delete range.haloId;\n }\n if (!answer.refs.some((ref) => rowKey(ref) === key)) continue;\n answer.refs = answer.refs.filter((ref) => rowKey(ref) !== key);\n if (!answer.retained && answer.state !== \"denied\") {\n answer.state = \"partial\";\n answer.reason = \"evicted\";\n delete answer.next;\n }\n }\n }\n\n for (const answer of Object.values(state.answers)) {\n if (!answer.receipt) continue;\n answer.receipt.absences = answer.receipt.absences.filter(([table, index, key]) => {\n const id = index === \"byId\" && key.length === 1 ? key[0] : undefined;\n const storageKey = typeof id === \"string\" ? rowKey({ table, id }) : undefined;\n return storageKey === undefined || (state.rowSeq[storageKey] ?? -1) < 0 || appliedEvictions.has(storageKey);\n });\n }\n\n const referenced = new Set(Object.values(state.answers).flatMap((answer) => answer.refs.map(rowKey)));\n // Every pooled row joins its answer's refs above, so nothing arrives unused;\n // a row leaves here when no answer references it any more \u2014 its answer was\n // dropped, or replaced by a delivery whose closure no longer pools it.\n for (const key of Object.keys(state.rows)) if (!referenced.has(key)) {\n delete state.rows[key];\n delete state.rowSeq[key];\n }\n\n // Bytes join the swap by row lease: whatever left `state.rows` above takes its bytes with it.\n const byteDelta = applyByteSwap(state, swap, leasedAssets(Object.values(state.rows), Object.values(state.answers)));\n bytes.put.push(...byteDelta.put);\n bytes.remove.push(...byteDelta.remove);\n\n const previousTail = tailWatermark(Object.values(state.watermarks));\n if (swap.watermark) {\n const key = canonicalAnswerKey(swap.watermark.op, swap.watermark.args);\n // The order is the store's: first recorded, kept across re-marks (LLP 1012 \u00A77's tail chooser).\n const order = state.watermarks[key]?.order ?? ++state.clock;\n state.watermarks[key] = { ...clone(swap.watermark), order };\n }\n const tail = tailWatermark(Object.values(state.watermarks));\n // The outbox, its grants, its write bounds, and the prediction overlay are\n // custody of unsent work: a coverage reset above never touches them.\n for (const intent of swap.outbox?.remove ?? []) {\n delete state.outbox[intent];\n delete state.overlayMisses[intent];\n delete state.overlay[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n }\n const committedNow = new Set<string>();\n for (const entry of swap.outbox?.put ?? []) {\n if (typeof entry.intent !== \"string\" || entry.intent.length === 0) throw new TypeError(\"outbox entry needs an intent\");\n const previous = state.outbox[entry.intent];\n if (entry.state === \"committed\" && previous?.state !== \"committed\") committedNow.add(entry.intent);\n const order = previous?.order ?? entry.order ?? ++state.clock;\n state.outbox[entry.intent] = { ...clone(entry), order };\n }\n if (swap.bounds) state.bounds = clone(swap.bounds);\n if (swap.programs) state.programs = clone(swap.programs);\n for (const id of swap.grants?.remove ?? []) {\n delete state.grants[id];\n if (state.currentGrant === id) delete state.currentGrant;\n }\n for (const grant of swap.grants?.put ?? []) state.grants[grant.id] = clone(grant);\n if (swap.grants?.current === null) delete state.currentGrant;\n else if (typeof swap.grants?.current === \"string\") {\n if (!state.grants[swap.grants.current]) throw new TypeError(\"current grant must be a held grant\");\n state.currentGrant = swap.grants.current;\n }\n for (const intent of swap.overlay?.remove ?? []) {\n delete state.overlay[intent];\n delete state.overlayMisses[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n }\n for (const [intent, rows] of Object.entries(swap.overlay?.put ?? {})) {\n state.overlay[intent] = clone(rows);\n delete state.overlayMisses[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n }\n // @ref LLP 1012#7-writes-offline \u2014 retire on authoritative row/negative\n // evidence, a non-empty page reached by a post-commit next-cursor chain,\n // or two misses (proven forward marks or successful resumes, once per swap).\n // A reset rebases the snapshot at the new drain's current head; opaque cursor names\n // and positions from the former coverage cannot order the new log.\n const answers = Object.keys(state.overlay).some((intent) => state.outbox[intent]?.state === \"committed\")\n ? Object.values(state.answers) : [];\n const pages = answers.filter((answer) => {\n const nonempty = Array.isArray(answer.data) ? answer.data.length > 0 : collectRefs(answer.data).length > 0;\n return (answer.state === \"complete\" || answer.state === \"capped\") && answer.receipt !== undefined\n && !answer.receipt.ranges.some((range) => (range.evictedIds?.length ?? 0) > 0)\n && nonempty && answer.refs.length > 0 && answer.refs.every((ref) => state.rows[rowKey(ref)] !== undefined);\n });\n const chains = new Map<string, { chain: string[]; reached: Set<string | null | undefined> }>();\n for (const intent of Object.keys(state.overlay)) {\n const entry = state.outbox[intent];\n if (entry === undefined || entry.state === \"rejected\" || entry.state === \"expired\") {\n delete state.overlay[intent];\n delete state.overlayMisses[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n if (entry) delete entry.predicted;\n continue;\n }\n for (const row of state.overlay[intent]!) {\n const key = rowKey(row);\n const evidence = authoritativeNegatives.get(key);\n if (evidence !== undefined && evidence.seq >= (state.overlayNegatives[intent]?.[key]?.seq ?? -1)) {\n (state.overlayNegatives[intent] ??= {})[key] = evidence;\n }\n }\n if (entry.state !== \"committed\") continue;\n if (state.overlayWatermarks[intent] == null && tail !== undefined) {\n const snapshot = committedNow.has(intent) && state.overlayWatermarks[intent] !== null ? previousTail ?? tail : tail;\n state.overlayWatermarks[intent] = {\n op: snapshot.op, args: clone(snapshot.args), cursorArg: snapshot.cursorArg ?? \"c\",\n watermark: snapshot.watermark,\n };\n }\n const committedSeq = (entry.response as { seq?: unknown } | undefined)?.seq;\n if (!Number.isSafeInteger(committedSeq)) {\n delete state.overlay[intent];\n delete state.overlayMisses[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n delete entry.predicted;\n continue;\n }\n const overlay = state.overlay[intent]!;\n const seq = Number(committedSeq);\n // A deletion is confirmed by absence, never by a still-present row.\n const predicted = new Set(overlay.filter((row) => !row.removed).map(rowKey));\n const committedWatermark = state.overlayWatermarks[intent] ?? undefined;\n const chainKey = committedWatermark ? canonical({ op: committedWatermark.op, args: committedWatermark.args,\n cursorArg: committedWatermark.cursorArg, watermark: committedWatermark.watermark, seq }) : \"\";\n if (!chains.has(chainKey)) {\n const chain = committedWatermark ? cursorChain(pages, committedWatermark, seq) : [];\n chains.set(chainKey, { chain, reached: new Set(chain) });\n }\n const { chain, reached } = chains.get(chainKey)!;\n const negative = overlay.some((row) => {\n const evidence = state.overlayNegatives[intent]?.[rowKey(row)];\n return evidence !== undefined && evidence.seq >= seq && (state.rowSeq[rowKey(row)] ?? -1) <= evidence.seq;\n });\n // The closure's pooled halo/rule-input row is authoritative arrival too.\n const arrived = negative || answers.some((answer) => answer.seq >= seq && !answer.retained && answer.state !== \"denied\"\n && answer.refs.some((ref) => predicted.has(rowKey(ref)) && state.rows[rowKey(ref)] !== undefined))\n || (predicted.size > 0 && committedWatermark !== undefined && pages.some((page) => page.seq >= seq\n && reached.has(pagePosition(page, committedWatermark))));\n const advanced = committedWatermark !== undefined && swap.watermark !== undefined\n && tail !== undefined && canonicalAnswerKey(tail.op, tail.args) === canonicalAnswerKey(swap.watermark.op, swap.watermark.args)\n && advanceOverlay(committedWatermark, tail, chain);\n const moved = advanced || (swap.resumeSeq !== undefined && swap.resumeSeq > seq);\n const misses = arrived ? 0 : (state.overlayMisses[intent] ?? 0)\n + (moved && !committedNow.has(intent) ? 1 : 0);\n if (!arrived && misses < OVERLAY_PATIENCE) {\n if (misses > 0) state.overlayMisses[intent] = misses;\n continue;\n }\n delete state.overlay[intent];\n delete state.overlayMisses[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n delete entry.predicted;\n }\n return state;\n }\n\n private ensureOpen(): void {\n if (this.partition === undefined) {\n throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", `${this.backend.carrier} range store is not open`);\n }\n }\n\n private ensureUnsealed(): void {\n if (this.state.sealed) throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", \"range store is sealed\");\n }\n\n private enqueue<T>(action: () => Promise<T>): Promise<T> {\n const run = this.tail.then(action);\n this.tail = run.then(() => undefined, () => undefined);\n return run;\n }\n\n private async read<T>(action: () => T): Promise<T> {\n await this.tail;\n this.ensureOpen();\n return action();\n }\n}\n", "{\n \"systemPrincipalId\": \"system\",\n \"retentionPolicies\": [\"until-revoked\", \"delivered-history\"],\n \"valueModelVersion\": \"i53-codepoint-bytes-v2\"\n}\n", "// @ref LLP 1011#b1-opaque-cursors \u2014 The evaluator and engine share this\n// canonical tagged position format, including nominal Id/String values.\nimport { EvalError } from \"./errors\";\nimport type { Value } from \"./types\";\n\nconst VERSION = 1;\nconst MAX_BYTES = 4_096;\nconst ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n\nexport interface CursorColumn { name: string; kind: any }\nexport interface CursorPosition {\n table: string;\n index: string;\n order: \"Asc\" | \"Desc\";\n suffix: CursorColumn[];\n values: Value[];\n}\n\nexport function encodeCursor(position: CursorPosition): string {\n validateValues(position.suffix, position.values);\n const bytes = utf8(JSON.stringify([\n VERSION, position.table, position.index, position.order,\n position.suffix.map((column) => ({ name: column.name, kind: normalizeDescriptor(column.kind) })),\n position.values.map(normalizeValue),\n ]));\n if (bytes.length > MAX_BYTES) fail(\"cursor token exceeds 4096 bytes\");\n let result = \"\";\n for (let offset = 0; offset < bytes.length; offset += 3) {\n const a = bytes[offset]!;\n const b = bytes[offset + 1];\n const c = bytes[offset + 2];\n result += ALPHABET[a >> 2]!;\n result += ALPHABET[((a & 3) << 4) | ((b ?? 0) >> 4)]!;\n if (b !== undefined) result += ALPHABET[((b & 15) << 2) | ((c ?? 0) >> 6)]!;\n if (c !== undefined) result += ALPHABET[c & 63]!;\n }\n return result;\n}\n\nexport function decodeCursor(token: string): CursorPosition {\n if (token.length > Math.ceil(MAX_BYTES * 4 / 3)) fail(\"cursor token exceeds 4096 bytes\");\n if (!/^[A-Za-z0-9_-]*$/.test(token) || token.length % 4 === 1) fail(\"cursor token is not canonical base64url\");\n const bytes: number[] = [];\n for (let offset = 0; offset < token.length; offset += 4) {\n const chunk = token.slice(offset, offset + 4);\n const values = Array.from(chunk, (character) => ALPHABET.indexOf(character));\n const bits = (values[0]! << 18) | ((values[1] ?? 0) << 12) | ((values[2] ?? 0) << 6) | (values[3] ?? 0);\n bytes.push((bits >> 16) & 255);\n if (chunk.length >= 3) bytes.push((bits >> 8) & 255);\n if (chunk.length === 4) bytes.push(bits & 255);\n }\n if (bytes.length > MAX_BYTES) fail(\"cursor token exceeds 4096 bytes\");\n let tagged: any;\n try { tagged = JSON.parse(decodeUtf8(bytes)); }\n catch { fail(\"cursor token is not the canonical tagged encoding\"); }\n if (!Array.isArray(tagged) || tagged.length !== 6) fail(\"cursor token is not the canonical tagged encoding\");\n const [version, table, index, order, rawSuffix, rawValues] = tagged;\n if (version !== VERSION) fail(`cursor token version ${String(version)} is unsupported`);\n if (typeof table !== \"string\" || typeof index !== \"string\" || ![\"Asc\", \"Desc\"].includes(order)\n || !Array.isArray(rawSuffix) || !Array.isArray(rawValues)) fail(\"cursor token is not the canonical tagged encoding\");\n const suffix = rawSuffix.map((column: any): CursorColumn => {\n if (!plainObject(column) || Object.keys(column).length !== 2 || typeof column.name !== \"string\" || !(\"kind\" in column))\n fail(\"cursor token is not the canonical tagged encoding\");\n return { name: column.name, kind: normalizeDescriptor(column.kind) };\n });\n const values = rawValues.map(normalizeValue);\n const position: CursorPosition = { table, index, order, suffix, values };\n validateValues(suffix, values);\n if (encodeCursor(position) !== token) fail(\"cursor token is not canonical\");\n return position;\n}\n\nexport function decodeCursorFor(token: string, expected: Omit<CursorPosition, \"values\">): Value {\n const position = decodeCursor(token);\n if (position.table !== expected.table || position.index !== expected.index || position.order !== expected.order\n || JSON.stringify(position.suffix) !== JSON.stringify(expected.suffix)) {\n fail(\"cursor token describes a different table, index, order, or suffix\");\n }\n return { Array: position.values };\n}\n\nexport function cursorSuffix(schema: any, scan: any): CursorColumn[] {\n const table = schema.tables?.[scan.table];\n const index = table?.indexes?.[scan.index];\n if (!table || !index) fail(`cursor names missing index ${scan.table}.${scan.index}`);\n return index.columns.slice(scan.prefix.length).map((name: string) => ({ name, kind: table.columns[name] }));\n}\n\nfunction validateValues(suffix: CursorColumn[], values: Value[]): void {\n if (suffix.length !== values.length) fail(\"cursor token values do not match its typed suffix\");\n suffix.forEach((column, offset) => {\n const value = values[offset]!;\n const kind = column.kind;\n if (kind?.Optional !== undefined) {\n if (value === \"Null\") return;\n validateValues([{ name: column.name, kind: kind.Optional }], [value]);\n return;\n }\n const valid = kind === \"Id\" || kind === \"Principal\" || kind?.Ref !== undefined\n ? variant(value, \"Id\")\n : kind?.Text !== undefined || kind?.Enum !== undefined\n ? variant(value, \"String\")\n : kind === \"Int\" || kind === \"Time\" || kind?.Decimal !== undefined || kind?.Money !== undefined\n ? variant(value, \"Int\")\n : kind === \"Bool\" ? variant(value, \"Bool\")\n : kind?.Bytes !== undefined ? variant(value, \"Bytes\")\n : kind?.Json !== undefined ? [\"Bool\", \"Int\", \"String\", \"Id\", \"Bytes\"].some((name) => variant(value, name)) : false;\n if (!valid) fail(\"cursor token values do not match its typed suffix\");\n });\n}\n\nfunction normalizeDescriptor(value: any): any {\n if ([\"Id\", \"Principal\", \"Int\", \"Bool\", \"Time\"].includes(value)) return value;\n if (!plainObject(value) || Object.keys(value).length !== 1) fail(\"cursor token is not the canonical tagged encoding\");\n const name = Object.keys(value)[0]!;\n const data = value[name];\n if (name === \"Text\" || name === \"Bytes\" || name === \"Json\") {\n const key = name === \"Json\" ? \"max_bytes\" : \"max\";\n if (!plainObject(data) || Object.keys(data).length !== 1 || !nonnegativeInteger(data[key])) fail(\"cursor token is not the canonical tagged encoding\");\n return { [name]: { [key]: data[key] } };\n }\n if (name === \"Ref\") {\n if (!plainObject(data) || Object.keys(data).length !== 1 || typeof data.table !== \"string\") fail(\"cursor token is not the canonical tagged encoding\");\n return { Ref: { table: data.table } };\n }\n if (name === \"Decimal\") {\n if (!plainObject(data) || Object.keys(data).length !== 1 || !nonnegativeInteger(data.scale)) fail(\"cursor token is not the canonical tagged encoding\");\n return { Decimal: { scale: data.scale } };\n }\n if (name === \"Money\") {\n if (!plainObject(data) || Object.keys(data).length !== 2 || typeof data.currency !== \"string\" || !nonnegativeInteger(data.scale)) fail(\"cursor token is not the canonical tagged encoding\");\n return { Money: { currency: data.currency, scale: data.scale } };\n }\n if (name === \"Enum\") {\n if (!plainObject(data) || Object.keys(data).length !== 1 || !Array.isArray(data.variants) || !data.variants.every((item: any) => typeof item === \"string\")) fail(\"cursor token is not the canonical tagged encoding\");\n return { Enum: { variants: data.variants.slice() } };\n }\n if (name === \"Optional\") return { Optional: normalizeDescriptor(data) };\n if (name === \"List\") {\n if (!plainObject(data) || Object.keys(data).length !== 2 || !(\"of\" in data) || !nonnegativeInteger(data.max)) fail(\"cursor token is not the canonical tagged encoding\");\n return { List: { of: normalizeDescriptor(data.of), max: data.max } };\n }\n fail(\"cursor token is not the canonical tagged encoding\");\n}\n\nfunction normalizeValue(value: any): Value {\n if (value === \"Null\") return value;\n if (!plainObject(value) || Object.keys(value).length !== 1) fail(\"cursor token is not the canonical tagged encoding\");\n const name = Object.keys(value)[0]!;\n const data = value[name];\n if (name === \"Bool\" && typeof data === \"boolean\") return { Bool: data };\n if (name === \"Int\" && Number.isSafeInteger(data)) return { Int: data };\n if ((name === \"String\" || name === \"Id\" || name === \"Bytes\") && typeof data === \"string\") return { [name]: data } as Value;\n if (name === \"Array\" && Array.isArray(data)) return { Array: data.map(normalizeValue) };\n if ((name === \"Row\" || name === \"Map\") && plainObject(data)) {\n const normalized: Record<string, Value> = {};\n for (const key of Object.keys(data)) normalized[key] = normalizeValue(data[key]);\n return { [name]: normalized } as Value;\n }\n fail(\"cursor token is not the canonical tagged encoding\");\n}\n\nfunction utf8(text: string): number[] {\n const result: number[] = [];\n for (const character of text) {\n const code = character.codePointAt(0)!;\n if (code <= 0x7f) result.push(code);\n else if (code <= 0x7ff) result.push(0xc0 | code >> 6, 0x80 | code & 63);\n else if (code <= 0xffff) result.push(0xe0 | code >> 12, 0x80 | code >> 6 & 63, 0x80 | code & 63);\n else result.push(0xf0 | code >> 18, 0x80 | code >> 12 & 63, 0x80 | code >> 6 & 63, 0x80 | code & 63);\n }\n return result;\n}\n\nfunction decodeUtf8(bytes: number[]): string {\n let result = \"\";\n for (let offset = 0; offset < bytes.length;) {\n const a = bytes[offset++]!;\n let code: number;\n if (a < 0x80) code = a;\n else if ((a & 0xe0) === 0xc0 && offset < bytes.length) code = (a & 31) << 6 | bytes[offset++]! & 63;\n else if ((a & 0xf0) === 0xe0 && offset + 1 < bytes.length) code = (a & 15) << 12 | (bytes[offset++]! & 63) << 6 | bytes[offset++]! & 63;\n else if ((a & 0xf8) === 0xf0 && offset + 2 < bytes.length) code = (a & 7) << 18 | (bytes[offset++]! & 63) << 12 | (bytes[offset++]! & 63) << 6 | bytes[offset++]! & 63;\n else fail(\"cursor token is not canonical UTF-8\");\n if (code >= 0xd800 && code <= 0xdfff || code > 0x10ffff) fail(\"cursor token is not canonical UTF-8\");\n result += String.fromCodePoint(code);\n }\n if (JSON.stringify(result).includes(\"\uFFFD\")) fail(\"cursor token is not canonical UTF-8\");\n return result;\n}\n\nfunction variant(value: Value, name: string): boolean { return value !== \"Null\" && name in value; }\nfunction plainObject(value: any): value is Record<string, any> { return value !== null && typeof value === \"object\" && !Array.isArray(value); }\nfunction nonnegativeInteger(value: any): boolean { return Number.isInteger(value) && value >= 0; }\nfunction fail(message: string): never { throw new EvalError(\"E_INPUT\", message); }\n", "import coreIrContract from \"../../../crates/snapback2-core/ir-contract.json\" with { type: \"json\" };\nimport { canonicalRuleJson, canonicalSchemaJson } from \"./certificate-identity\";\nimport { EvalError } from \"./errors\";\nimport { sha256, utf8Length } from \"./hash\";\nimport { cursorSuffix, decodeCursor, decodeCursorFor } from \"./cursor\";\nimport type { TraceRange, Value } from \"./types\";\n\nconst I53_MAX = 9_007_199_254_740_991;\nconst I53_MIN = -I53_MAX;\n\nexport function canonicalValue(value: Value): string {\n if (value === \"Null\") return '\"Null\"';\n const kind = kindOf(value);\n const data = (value as any)[kind];\n if (kind === \"Bool\" || kind === \"Int\") return `{\"${kind}\":${JSON.stringify(data)}}`;\n if (kind === \"String\" || kind === \"Id\") return `{\"${kind}\":${JSON.stringify(data)}}`;\n if (kind === \"Bytes\") {\n if (!canonicalBytes(data)) throw new EvalError(\"E_INPUT\", \"Bytes is not canonical lowercase base16\");\n return `{\"Bytes\":${JSON.stringify(data)}}`;\n }\n if (kind === \"Array\") return `{\"Array\":${canonicalValues(data)}}`;\n const entries = Object.keys(data)\n .sort(compareCodepoints)\n .map((key) => `${JSON.stringify(key)}:${canonicalValue(data[key])}`)\n .join(\",\");\n return `{\"${kind}\":{${entries}}}`;\n}\n\nexport function canonicalValues(values: Value[]): string {\n return `[${values.map(canonicalValue).join(\",\")}]`;\n}\n\nexport function rangeStops(ranges: TraceRange[]): Record<string, string[]> {\n const result: Record<string, string[]> = Object.create(null);\n for (const range of ranges) (result[range.site] ??= []).push(range.stop);\n return sortObject(result);\n}\n\n// @ref LLP 1001#2-what-a-commit-records \u2014 omitted Optional fields are Null before rules and maintains.\nexport function materializeOptionalFields(schema: any, tableName: string, value: Value): Value {\n if (!isVariant(value, \"Row\")) return clone(value);\n const entries: Record<string, Value> = Object.assign(Object.create(null), value.Row);\n for (const [name, descriptor] of Object.entries<any>(\n schema.tables?.[tableName]?.columns ?? {},\n )) {\n if (descriptor?.Optional !== undefined && !hasOwn(entries, name)) {\n entries[name] = \"Null\";\n }\n }\n return rowValue(entries);\n}\n\nexport function rowValue(entries: Record<string, Value>): Value {\n const sorted: Record<string, Value> = Object.create(null);\n for (const key of Object.keys(entries).sort(compareCodepoints)) sorted[key] = clone(entries[key]);\n return { Row: sorted };\n}\n\nexport function field(value: Value, name: string): Value {\n const object = asObject(value);\n if (!hasOwn(object, name)) throw new EvalError(\"E_FIELD\", `missing field ${name}`);\n return object[name];\n}\n\nexport function fieldOrNull(value: Value, name: string): Value {\n const object = asObject(value);\n return hasOwn(object, name) ? object[name] : \"Null\";\n}\n\nexport function asObject(value: Value): Record<string, Value> {\n if (isVariant(value, \"Row\")) return value.Row;\n if (isVariant(value, \"Map\")) return value.Map;\n throw new EvalError(\"E_TYPE\", \"expected row or map\");\n}\n\nexport function asArray(value: Value): Value[] {\n if (!isVariant(value, \"Array\")) throw new EvalError(\"E_TYPE\", \"expected array\");\n return value.Array;\n}\n\nexport function asString(value: Value): string {\n if (isVariant(value, \"String\")) return value.String;\n if (isVariant(value, \"Id\")) return value.Id;\n throw new EvalError(\"E_TYPE\", \"expected string or id\");\n}\n\nexport function asInt(value: Value): number {\n if (!isVariant(value, \"Int\")) throw new EvalError(\"E_TYPE\", \"expected int\");\n return value.Int;\n}\n\nexport function asBool(value: Value): boolean {\n if (!isVariant(value, \"Bool\")) throw new EvalError(\"E_TYPE\", \"expected bool\");\n return value.Bool;\n}\n\nexport function int(value: number): Value {\n return { Int: safeNumber(value) };\n}\n\nexport function safeNumber(value: number): number {\n if (!Number.isSafeInteger(value) || value < I53_MIN || value > I53_MAX)\n throw new EvalError(\"E_OVERFLOW\", `${value} is outside the i53 value model`);\n return value;\n}\n\nexport function totalCompare(left: Value, right: Value): number {\n const order = [\"Null\", \"Bool\", \"Int\", \"String\", \"Id\", \"Bytes\", \"Row\", \"Array\", \"Map\"];\n const leftKind = kindOf(left);\n const rightKind = kindOf(right);\n const tag = order.indexOf(leftKind) - order.indexOf(rightKind);\n if (tag !== 0) return Math.sign(tag);\n if (leftKind === \"Null\") return 0;\n const leftData = (left as any)[leftKind];\n const rightData = (right as any)[rightKind];\n if (leftKind === \"Bool\" || leftKind === \"Int\") return comparePrimitive(leftData, rightData);\n if (leftKind === \"String\" || leftKind === \"Id\") return compareCodepoints(leftData, rightData);\n if (leftKind === \"Bytes\") {\n if (!canonicalBytes(leftData) || !canonicalBytes(rightData))\n throw new EvalError(\"E_INPUT\", \"Bytes is not canonical lowercase base16\");\n return compareCodepoints(leftData, rightData);\n }\n if (leftKind === \"Array\") return compareArrays(leftData, rightData);\n const leftEntries = Object.keys(leftData).sort(compareCodepoints);\n const rightEntries = Object.keys(rightData).sort(compareCodepoints);\n const length = comparePrimitive(leftEntries.length, rightEntries.length);\n if (length !== 0) return length;\n for (let index = 0; index < leftEntries.length; index += 1) {\n const key = compareCodepoints(leftEntries[index], rightEntries[index]);\n if (key !== 0) return key;\n const value = totalCompare(leftData[leftEntries[index]], rightData[rightEntries[index]]);\n if (value !== 0) return value;\n }\n return 0;\n}\n\nexport function compareArrays(left: Value[], right: Value[]): number {\n const length = Math.min(left.length, right.length);\n for (let index = 0; index < length; index += 1) {\n const compared = totalCompare(left[index], right[index]);\n if (compared !== 0) return compared;\n }\n return comparePrimitive(left.length, right.length);\n}\n\nexport function compareCodepoints(left: string, right: string): number {\n const leftPoints = Array.from(left, (character) => character.codePointAt(0)!);\n const rightPoints = Array.from(right, (character) => character.codePointAt(0)!);\n const length = Math.min(leftPoints.length, rightPoints.length);\n for (let index = 0; index < length; index += 1) {\n const compared = comparePrimitive(leftPoints[index], rightPoints[index]);\n if (compared !== 0) return compared;\n }\n return comparePrimitive(leftPoints.length, rightPoints.length);\n}\n\nexport function comparePrimitive(left: number | boolean, right: number | boolean): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nexport function stableSort<T>(values: T[], compare: (left: T, right: T) => number): T[] {\n if (values.length <= 1) return values;\n const middle = Math.floor(values.length / 2);\n const left = stableSort(values.slice(0, middle), compare);\n const right = stableSort(values.slice(middle), compare);\n const result: T[] = [];\n while (left.length > 0 && right.length > 0) {\n result.push(compare(left[0], right[0]) <= 0 ? left.shift()! : right.shift()!);\n }\n return result.concat(left, right);\n}\n\nexport function variant(value: any): [string, any] {\n if (typeof value === \"string\") return [value, null];\n const keys = Object.keys(value);\n if (keys.length !== 1) throw new EvalError(\"E_CORPUS\", \"invalid externally tagged variant\");\n return [keys[0], value[keys[0]]];\n}\n\n/** The wire encoding of an IR value \u2014 ids and text as strings, integers as\n * numbers, null as null, bytes as `{ Bytes: hex }`, rows and maps as objects,\n * arrays as arrays \u2014 the form the delivery envelope carries\n * (`offline.rs` `value_to_wire_json`). Verdict inputs are digested in it. */\nexport function wireJson(value: Value): unknown {\n const [kind, data] = variant(value);\n switch (kind) {\n case \"Null\": return null;\n case \"Bool\": case \"Int\": case \"String\": case \"Id\": return data;\n case \"Bytes\": return { Bytes: data };\n case \"Row\": case \"Map\":\n return Object.fromEntries(Object.keys(data).sort(compareCodepoints).map((key) => [key, wireJson(data[key])]));\n case \"Array\": return data.map(wireJson);\n default: throw new EvalError(\"E_INPUT\", `unsupported value kind ${kind}`);\n }\n}\n\n/** The digest a replay trace carries for a point read: SHA-256 over the canonical\n * wire row, exactly `snapback2-core`'s `row_digest` (`offline.rs`). */\nexport function rowDigest(row: Value): string {\n return sha256(JSON.stringify(wireJson(row)));\n}\n\n/** `Schema::rule_hash`: the schema hash beside the rule in serde's field order. */\nexport function scopedRuleHash(schema: any, rule: any): string {\n return sha256(`[${JSON.stringify(sha256(canonicalSchemaJson(schema)))},${canonicalRuleJson(rule)}]`);\n}\n\nexport function kindOf(value: Value): string {\n if (value === \"Null\") return \"Null\";\n const keys = Object.keys(value);\n if (keys.length !== 1) throw new EvalError(\"E_INPUT\", \"invalid externally tagged value\");\n return keys[0];\n}\n\nexport function isVariant<K extends Exclude<ReturnType<typeof kindOf>, \"Null\">>(\n value: Value,\n kind: K,\n): value is Extract<Value, Record<K, unknown>> {\n return value !== \"Null\" && kindOf(value) === kind;\n}\n\nexport function valuesEqual(left: Value[], right: Value[]): boolean {\n return canonicalValues(left) === canonicalValues(right);\n}\n\nexport function sameValueZero(left: Value, right: Value): boolean {\n // @ref LLP 1002#2-the-authored-surface-the-snapback2-module \u2014 Keep the client twin on the compiler's primitive collection identity contract.\n const leftKind = kindOf(left);\n const rightKind = kindOf(right);\n if ([\"Bytes\", \"Row\", \"Array\", \"Map\"].includes(leftKind)) {\n throw new EvalError(\"E_TYPE\", `SameValueZero expects primitive operands, got ${leftKind}`);\n }\n if ([\"Bytes\", \"Row\", \"Array\", \"Map\"].includes(rightKind)) {\n throw new EvalError(\"E_TYPE\", `SameValueZero expects primitive operands, got ${rightKind}`);\n }\n if ((leftKind === \"String\" || leftKind === \"Id\") && (rightKind === \"String\" || rightKind === \"Id\")) {\n const leftText = isVariant(left, \"String\") ? left.String : (left as { Id: string }).Id;\n const rightText = isVariant(right, \"String\") ? right.String : (right as { Id: string }).Id;\n return leftText === rightText;\n }\n return canonicalValue(left) === canonicalValue(right);\n}\n\nexport function startsWith<T>(values: T[], prefix: T[]): boolean {\n return prefix.every((value, index) => values[index] === value);\n}\n\nexport function validHttpUrl(value: string): boolean {\n const rest = value.startsWith(\"https://\")\n ? value.slice(\"https://\".length)\n : value.startsWith(\"http://\")\n ? value.slice(\"http://\".length)\n : \"\";\n return rest.length > 0 && !/[\\p{White_Space}\\p{Cc}]/u.test(rest);\n}\n\nexport function canonicalJson(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(canonicalJson).join(\",\")}]`;\n if (value !== null && typeof value === \"object\") {\n return `{${Object.keys(value)\n .sort(compareCodepoints)\n .map((key) => `${JSON.stringify(key)}:${canonicalJson((value as any)[key])}`)\n .join(\",\")}}`;\n }\n return JSON.stringify(value);\n}\n\nexport function validateWriteRow(schema: any, tableName: string, row: Value): void {\n const columns = schema.tables?.[tableName]?.columns;\n if (columns === undefined) throw new EvalError(\"E_SCHEMA\", `missing table ${tableName}`);\n const object = asObject(row);\n if (!hasOwn(object, \"id\")) throw new EvalError(\"E_SCHEMA\", `${tableName} row lacks id`);\n const unknown = Object.keys(object).find((name) => !hasOwn(columns, name));\n if (unknown !== undefined)\n throw new EvalError(\"E_INPUT\", `${tableName} row contains undeclared field ${unknown}`);\n for (const [name, descriptor] of Object.entries<any>(columns)) {\n const value = hasOwn(object, name) ? object[name] : undefined;\n if (value === undefined && descriptor?.Optional === undefined)\n throw new EvalError(\"E_INPUT\", `${tableName}.${name} is required`);\n if (value !== undefined) validateTypedValue(descriptor, value, `${tableName}.${name}`, false);\n }\n}\n\nexport function validateInputs(schema: any, program: any, inputs: Record<string, Value>): void {\n for (const [name, descriptor] of Object.entries<any>(program.args ?? {})) {\n const value = inputs[name];\n if (value === undefined) throw new EvalError(\"E_INPUT\", `missing arg ${name}`);\n validateTypedValue(descriptor, value, `arg ${name}`, true);\n }\n validateOpaqueCursors(schema, program.body, inputs);\n}\n\nfunction validateOpaqueCursors(schema: any, value: any, inputs: Record<string, Value>): void {\n const visitValue = (candidate: any, values: Record<string, Value>): void => {\n if (Array.isArray(candidate)) {\n for (const item of candidate) visitValue(item, values);\n return;\n }\n if (candidate === null || typeof candidate !== \"object\") return;\n const scan = candidate.Scan;\n if (scan?.opaque_cursor) {\n if (scan.before !== null) throw new EvalError(\"E_INPUT\", \"opaque cursors only support after\");\n const cursor = scan.after === null ? \"Null\" : inputExpression(scan.after, values);\n if (cursor !== \"Null\") {\n if (!isVariant(cursor, \"String\")) throw new EvalError(\"E_INPUT\", \"opaque cursor must be a string\");\n decodeCursorFor(cursor.String, {\n table: scan.table,\n index: scan.index,\n order: scan.order,\n suffix: cursorSuffix(schema, scan),\n });\n }\n }\n for (const child of Object.values(candidate)) visitValue(child, values);\n };\n const visitBody = (statements: any[], values: Record<string, Value>): void => {\n for (const statement of statements) {\n if (statement === null || typeof statement !== \"object\") continue;\n const binding = statement.Const ?? statement.Let ?? statement.Assign;\n if (binding) {\n visitValue(binding.value, values);\n const resolved = staticInputExpression(binding.value, values);\n if (resolved === undefined) delete values[binding.name];\n else values[binding.name] = resolved;\n continue;\n }\n if (statement.If) {\n visitValue(statement.If.condition, values);\n const thenValues = { ...values };\n const elseValues = { ...values };\n visitBody(statement.If.then_body, thenValues);\n visitBody(statement.If.else_body, elseValues);\n for (const name of Object.keys(values)) {\n if (!(name in thenValues) || !(name in elseValues)\n || canonicalValue(thenValues[name]) !== canonicalValue(elseValues[name])) delete values[name];\n }\n continue;\n }\n if (statement.For) {\n visitValue(statement.For.domain, values);\n visitBody(statement.For.body, { ...values });\n continue;\n }\n visitValue(statement, values);\n }\n };\n visitBody(value, { ...inputs });\n}\n\nfunction inputExpression(expression: any, inputs: Record<string, Value>): Value {\n const value = staticInputExpression(expression, inputs);\n if (value !== undefined) return value;\n throw new EvalError(\"E_INPUT\", \"opaque cursor expression must derive from an operation argument\");\n}\n\nfunction staticInputExpression(expression: any, inputs: Record<string, Value>): Value | undefined {\n if (expression?.Variable !== undefined) return inputs[expression.Variable];\n if (expression?.Literal !== undefined) return expression.Literal;\n return undefined;\n}\n\nexport function validateTypedValue(\n descriptor: any,\n value: Value,\n label: string,\n fanoutForLongList: boolean,\n): void {\n assertValue(value, label);\n if (valueContainsReservedPrincipal(value))\n throw new EvalError(\"E_INPUT\", `${label} cannot carry the reserved system principal`);\n if (descriptorContainsAsset(descriptor)) {\n validateAssetTypedValue(descriptor, value, label);\n return;\n }\n if (descriptor?.Optional !== undefined) {\n if (value !== \"Null\") validateTypedValue(descriptor.Optional, value, label, fanoutForLongList);\n return;\n }\n if (descriptor?.List !== undefined) {\n if (!isVariant(value, \"Array\")) throw new EvalError(\"E_INPUT\", `${label} must be a list`);\n if (value.Array.length > descriptor.List.max)\n throw new EvalError(fanoutForLongList ? \"E_FANOUT\" : \"E_INPUT\", `${label} exceeds list max ${descriptor.List.max}`);\n if (descriptor.List.of !== null && descriptor.List.of !== undefined) {\n for (const item of value.Array)\n validateTypedValue(descriptor.List.of, item, label, fanoutForLongList);\n }\n return;\n }\n if (descriptor === \"Cursor\") {\n if (!isVariant(value, \"String\")) throw new EvalError(\"E_INPUT\", `${label} must be a cursor string`);\n decodeCursor(value.String);\n return;\n }\n if (descriptor === \"Scalar\") return;\n if (descriptor === \"Id\" || descriptor === \"Principal\" || descriptor?.Ref !== undefined) {\n if (!isVariant(value, \"Id\")) throw new EvalError(\"E_INPUT\", `${label} must be an id`);\n return;\n }\n if (descriptor?.Text !== undefined) {\n if (!isVariant(value, \"String\")) throw new EvalError(\"E_INPUT\", `${label} must be text`);\n const codePoint = disallowedTextControlCodePoint(value.String);\n if (codePoint !== undefined)\n throw new EvalError(\"E_INPUT\", `${label} contains disallowed control character U+${codePoint.toString(16).toUpperCase().padStart(4, \"0\")}`);\n if (Array.from(value.String).length > descriptor.Text.max)\n throw new EvalError(\"E_INPUT\", `${label} exceeds text max ${descriptor.Text.max}`);\n return;\n }\n if (descriptor?.Bytes !== undefined) {\n if (!isVariant(value, \"Bytes\") || !canonicalBytes(value.Bytes))\n throw new EvalError(\"E_INPUT\", `${label} must be bytes`);\n if (value.Bytes.length / 2 > descriptor.Bytes.max)\n throw new EvalError(\"E_INPUT\", `${label} exceeds bytes max ${descriptor.Bytes.max}`);\n return;\n }\n if ([\"Int\", \"Time\"].includes(descriptor) || descriptor?.Decimal !== undefined || descriptor?.Money !== undefined) {\n if (!isVariant(value, \"Int\") || !Number.isSafeInteger(value.Int))\n throw new EvalError(\"E_INPUT\", `${label} must be an i53 integer`);\n return;\n }\n if (descriptor === \"Bool\") {\n if (!isVariant(value, \"Bool\")) throw new EvalError(\"E_INPUT\", `${label} must be a boolean`);\n return;\n }\n if (descriptor?.Json !== undefined) {\n if (utf8Length(canonicalValue(value)) > descriptor.Json.max_bytes)\n throw new EvalError(\"E_INPUT\", `${label} exceeds JSON max ${descriptor.Json.max_bytes} bytes`);\n return;\n }\n if (descriptor?.Enum !== undefined) {\n if (!isVariant(value, \"String\") || !descriptor.Enum.variants.includes(value.String))\n throw new EvalError(\"E_INPUT\", `${label} is not a declared enum value`);\n return;\n }\n throw new EvalError(\"E_SCHEMA\", `unsupported type for ${label}`);\n}\n\nfunction disallowedTextControlCodePoint(text: string): number | undefined {\n for (const character of text) {\n const codePoint = character.codePointAt(0)!;\n if (codePoint < 0x20 && ![0x09, 0x0a, 0x0d].includes(codePoint)) return codePoint;\n }\n return undefined;\n}\n\nfunction descriptorContainsAsset(descriptor: any): boolean {\n if (descriptor?.Image !== undefined || descriptor?.Video !== undefined) return true;\n if (descriptor?.Optional !== undefined) return descriptorContainsAsset(descriptor.Optional);\n if (descriptor?.List?.of !== null && descriptor?.List?.of !== undefined)\n return descriptorContainsAsset(descriptor.List.of);\n return false;\n}\n\n// @ref LLP 1006#6-the-write-validated-not-stamped \u2014 the twin enforces the closed asset record and list uniqueness but owns no ledger authority.\nfunction validateAssetTypedValue(descriptor: any, value: Value, label: string): string[] {\n if (descriptor?.Optional !== undefined) {\n return value === \"Null\" ? [] : validateAssetTypedValue(descriptor.Optional, value, label);\n }\n if (descriptor?.List !== undefined) {\n if (!isVariant(value, \"Array\")) throw assetType(`${label} must be a list`);\n if (value.Array.length > descriptor.List.max)\n throw assetType(`${label} exceeds list max ${descriptor.List.max}`);\n const ids = value.Array.flatMap((item, index) =>\n validateAssetTypedValue(descriptor.List.of, item, `${label}[${index}]`),\n );\n const seen = new Set<string>();\n const duplicate = ids.find((id) => seen.has(id) || !seen.add(id));\n if (duplicate !== undefined)\n throw assetType(`${label} repeats asset id ${duplicate}; asset ids in a list must be unique`);\n return ids;\n }\n const kind = descriptor?.Image !== undefined ? \"image\" : descriptor?.Video !== undefined ? \"video\" : null;\n if (kind === null) throw new EvalError(\"E_SCHEMA\", `unsupported asset type for ${label}`);\n if (!isVariant(value, \"Map\")) throw assetType(`${label} must be a closed ${kind} asset map`);\n const expected = kind === \"image\" ? [\"height\", \"id\", \"width\"] : [\"duration\", \"height\", \"id\", \"width\"];\n const actual = Object.keys(value.Map).sort(compareCodepoints);\n if (actual.length !== expected.length || actual.some((name, index) => name !== expected[index]))\n throw assetType(`${label} must contain exactly ${expected.join(\", \")}`);\n const idValue = value.Map.id;\n const id = isVariant(idValue, \"String\") ? idValue.String : \"\";\n if (!validEngineId(id)) throw assetType(`${label}.id must be a minted s2id`);\n for (const field of kind === \"image\" ? [\"width\", \"height\"] : [\"width\", \"height\", \"duration\"]) {\n const member = value.Map[field];\n if (!isVariant(member, \"Int\") || !Number.isSafeInteger(member.Int) || member.Int <= 0)\n throw assetType(`${label}.${field} must be a positive i53 integer`);\n }\n return [id];\n}\n\nfunction validEngineId(id: string): boolean {\n return /^s2id-[0-9a-f]{32}-[0-9a-f]{16}$/.test(id) && !id.endsWith(\"-0000000000000000\");\n}\n\nfunction assetType(message: string): EvalError {\n return new EvalError(\"E_ASSET_TYPE\", message);\n}\n\nexport function assertValue(value: Value, label: string): void {\n if (value === \"Null\") return;\n const kind = kindOf(value);\n const data = (value as any)[kind];\n if (kind === \"Bool\" && typeof data === \"boolean\") return;\n if (kind === \"Int\" && Number.isSafeInteger(data)) return;\n if ((kind === \"String\" || kind === \"Id\") && typeof data === \"string\") return;\n if (kind === \"Bytes\" && canonicalBytes(data)) return;\n if (kind === \"Array\" && Array.isArray(data)) {\n for (const item of data) assertValue(item, label);\n return;\n }\n if ((kind === \"Row\" || kind === \"Map\") && data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n for (const item of Object.values(data)) assertValue(item as Value, label);\n return;\n }\n throw new EvalError(\"E_INPUT\", `${label} is not a valid value`);\n}\n\nexport function valueContainsReservedPrincipal(value: Value): boolean {\n if (isVariant(value, \"Id\")) return value.Id === coreIrContract.systemPrincipalId;\n if (isVariant(value, \"Array\")) return value.Array.some(valueContainsReservedPrincipal);\n if (isVariant(value, \"Row\")) return Object.values(value.Row).some(valueContainsReservedPrincipal);\n if (isVariant(value, \"Map\")) return Object.values(value.Map).some(valueContainsReservedPrincipal);\n return false;\n}\n\nexport function canonicalBytes(value: unknown): value is string {\n return typeof value === \"string\" && /^(?:[0-9a-f]{2})*$/.test(value);\n}\n\nexport function hasOwn(value: object, key: PropertyKey): boolean {\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nexport function clone<T>(value: T): T {\n if (value === null || value === undefined) return value;\n return JSON.parse(JSON.stringify(value));\n}\n\nexport function sortObject<T>(value: Record<string, T>): Record<string, T> {\n const sorted: Record<string, T> = Object.create(null);\n for (const key of Object.keys(value).sort(compareCodepoints)) sorted[key] = value[key];\n return sorted;\n}\n\nexport function builtinArity(kind: string): number {\n switch (kind) {\n case \"Len\": case \"Sort\": case \"DedupeById\": case \"MentionTokens\": case \"Count\": case \"CountCapped\": case \"Sum\": return 1;\n case \"Concat\": case \"Min\": case \"Max\": case \"Divmod\": return 2;\n case \"Slice\": case \"DeterministicShare\": return 3;\n default: throw new EvalError(\"E_OPAQUE\", `unsupported builtin ${kind}`);\n }\n}\n\nexport function valueText(value: Value): string {\n if (value === \"Null\") return \"null\";\n if (isVariant(value, \"Bool\")) return String(value.Bool);\n if (isVariant(value, \"Int\")) return String(value.Int);\n if (isVariant(value, \"String\")) return value.String;\n if (isVariant(value, \"Id\")) return value.Id;\n if (isVariant(value, \"Bytes\")) return value.Bytes;\n if (isVariant(value, \"Array\")) return value.Array.map(valueText).join(\",\");\n return \"[object Object]\";\n}\n\nexport function isWordCharacter(character: string): boolean {\n return character === \"_\" || /[\\p{L}\\p{N}]/u.test(character);\n}\n", "export function splitMentionTokens(text: string): string[] {\n const tokens: string[] = [];\n let token = \"\";\n for (const character of text) {\n if (isMentionWhitespace(character.codePointAt(0)!)) {\n if (token.length > 0) tokens.push(token);\n token = \"\";\n } else {\n token += character;\n }\n }\n if (token.length > 0) tokens.push(token);\n return tokens;\n}\n\nfunction isMentionWhitespace(point: number): boolean {\n return (\n (point >= 0x0009 && point <= 0x000d) ||\n point === 0x0020 ||\n point === 0x0085 ||\n point === 0x00a0 ||\n point === 0x1680 ||\n (point >= 0x2000 && point <= 0x200a) ||\n point === 0x2028 ||\n point === 0x2029 ||\n point === 0x202f ||\n point === 0x205f ||\n point === 0x3000\n );\n}\n", "import coreIrContract from \"../../../crates/snapback2-core/ir-contract.json\" with { type: \"json\" };\nimport { EvalError, requireRowIdentity } from \"./errors\";\nimport { cursorSuffix, decodeCursorFor, encodeCursor } from \"./cursor\";\nimport { sha256 } from \"./hash\";\nimport { splitMentionTokens } from \"./text\";\nimport type { ClientStore } from \"./store\";\nimport {\n asArray,\n asBool,\n asInt,\n asObject,\n asString,\n builtinArity,\n canonicalJson,\n canonicalValue,\n canonicalValues,\n clone,\n compareCodepoints,\n field,\n fieldOrNull,\n int,\n isVariant,\n isWordCharacter,\n materializeOptionalFields,\n rowDigest,\n rowValue,\n safeNumber,\n sameValueZero,\n scopedRuleHash,\n stableSort,\n startsWith,\n totalCompare,\n validHttpUrl,\n validateWriteRow,\n valueText,\n variant, wireJson,\n} from \"./value-runtime\";\nimport type { Context, Execution, Trace, TraceVerdict, TraceWrite, Value } from \"./types\";\n\nexport const CURRENT_VALUE_MODEL_VERSION = coreIrContract.valueModelVersion;\n\ntype Flow =\n | { kind: \"next\" }\n | { kind: \"break\" }\n | { kind: \"continue\" }\n | { kind: \"return\"; value: Value };\n\nconst NEXT: Flow = { kind: \"next\" };\n\nexport class Runner {\n private readonly env = new Map<string, Value>();\n private readonly consts = new Set<string>();\n private readonly context: Context;\n readonly trace: Trace = { ranges: [], absences: [], points: [], merges: [], verdicts: [] };\n private readonly ruleMemo = new Map<string, boolean>();\n /** Verdicts the rule check in progress derived; committed to the trace only when the check discloses the row. */\n private pendingVerdicts: TraceVerdict[] = [];\n private readonly tracedVerdicts = new Set<string>();\n private readonly writes = new Map<string, TraceWrite>();\n private readonly partial = new Set<string>();\n private authorityMissSerial = 0;\n /** Engine-owned aggregate targets this run could not update because they are not held. */\n private readonly unheldMaintainTargets: string[] = [];\n private readonly createdRows = new Set<string>();\n private readonly insertedRows: Array<{ table: string; row: Value }> = [];\n private createdPoints: Array<{\n table: string;\n index: string;\n key: string;\n rowId: string;\n }> = [];\n\n constructor(\n private readonly store: ClientStore,\n private readonly schema: any,\n context: Context,\n private readonly certificate: any,\n ) {\n this.context = clone(context);\n for (const [name, value] of Object.entries(context.args)) {\n this.env.set(name, clone(value));\n }\n }\n\n execute(program: any): Execution {\n const flow = this.statements(program.body);\n this.checkFinalConstraints();\n return {\n result: this.partial.size === 0 && flow.kind === \"return\" ? flow.value : \"Null\",\n trace: this.trace,\n next: mintNext(this.schema, this.certificate, this.trace),\n writes: [...this.writes.values()],\n };\n }\n\n coverageMisses(): string[] {\n return Array.from(this.partial).sort(compareCodepoints);\n }\n\n /** Where `missing-authority` came from: unheld maintained targets versus rule inputs and write rows. */\n authorityMisses(): { maintainTargets: string[]; other: number } {\n return { maintainTargets: [...this.unheldMaintainTargets], other: this.authorityMissSerial - this.unheldMaintainTargets.length };\n }\n\n private statements(statements: any[]): Flow {\n for (const statement of statements) {\n const [kind, data] = variant(statement);\n let flow: Flow = NEXT;\n switch (kind) {\n case \"Const\":\n this.env.set(data.name, this.expr(data.value));\n this.consts.add(data.name);\n break;\n case \"Let\":\n this.env.set(data.name, this.expr(data.value));\n break;\n case \"Assign\":\n if (this.consts.has(data.name))\n throw new EvalError(\"E_INPUT\", `cannot assign to const binding ${data.name}`);\n this.env.set(data.name, this.expr(data.value));\n break;\n case \"Push\": {\n const target = this.env.get(data.target);\n if (target === undefined || !isVariant(target, \"Array\"))\n throw new EvalError(\"E_TYPE\", \"push target is not an array\");\n target.Array.push(this.expr(data.value));\n break;\n }\n case \"If\":\n flow = this.statements(\n asBool(this.expr(data.condition)) ? data.then_body : data.else_body,\n );\n break;\n case \"For\": {\n for (const value of this.domain(data.domain)) {\n this.env.set(data.binding, value);\n const bodyFlow = this.statements(data.body);\n if (bodyFlow.kind === \"continue\" || bodyFlow.kind === \"next\") continue;\n if (bodyFlow.kind === \"break\") break;\n flow = bodyFlow;\n break;\n }\n break;\n }\n case \"Require\":\n if (!asBool(this.expr(data.condition)))\n throw new EvalError(\"E_REQUIRE\", \"program requirement failed\", data.code);\n break;\n case \"Insert\":\n this.insert(data.table, this.expr(data.row));\n break;\n case \"Update\":\n this.update(data.table, this.expr(data.key), this.expr(data.patch));\n break;\n case \"Upsert\": {\n const key = this.expr(data.key);\n const row = this.expr(data.row);\n this.validateAddressedRowId(data.table, key, row);\n if (this.store.byId(data.table, asString(key)) === null) this.insert(data.table, row);\n else this.replace(data.table, key, row);\n break;\n }\n case \"Delete\":\n this.delete(data.table, asString(this.expr(data.key)));\n break;\n // @ref LLP 1001#8-emit-and-the-outbox \u2014 the twin does not run effects, but it must consume the authoritative outbox id.\n case \"Emit\":\n this.expr(data.payload);\n if (this.context.new_ids.shift() === undefined)\n throw new EvalError(\"E_INPUT\", \"newId envelope exhausted\");\n break;\n case \"Return\":\n flow = { kind: \"return\", value: this.expr(data) };\n break;\n case \"Break\":\n flow = { kind: \"break\" };\n break;\n case \"Continue\":\n flow = { kind: \"continue\" };\n break;\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported statement ${kind}`);\n }\n if (flow.kind !== \"next\") return flow;\n }\n return NEXT;\n }\n\n private domain(domain: any): Value[] {\n const [kind, data] = variant(domain);\n switch (kind) {\n case \"Page\":\n return asArray(this.scan(data));\n case \"LiteralRange\": {\n const values: Value[] = [];\n for (let value = data.start; value < data.end_exclusive; value += 1) {\n values.push(int(value));\n }\n return values;\n }\n case \"ArgList\": {\n const values = asArray(this.requiredEnv(data.name));\n if (values.length > data.max) throw new EvalError(\"E_FANOUT\", \"argument list bound\");\n return values;\n }\n case \"DerivedArray\": {\n const values = asArray(this.expr(data.value));\n if (values.length > data.max) throw new EvalError(\"E_FANOUT\", \"derived array bound\");\n return values;\n }\n case \"Recurse\":\n return this.recurse(data);\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported loop domain ${kind}`);\n }\n }\n\n private recurse(recurse: any): Value[] {\n const queue: [Value, number][] = [[this.expr(recurse.seed), 0]];\n const visited = new Set<string>();\n const rows: Value[] = [];\n while (queue.length > 0) {\n const [key, depth] = queue.shift()!;\n const canonical = canonicalValue(key);\n if (depth > recurse.depth || visited.has(canonical)) continue;\n visited.add(canonical);\n const row = this.get({\n site: recurse.site,\n table: recurse.table,\n index: recurse.index,\n key: [{ Literal: key }],\n provenance: recurse.provenance,\n });\n if (row === \"Null\") continue;\n const next = field(row, recurse.next_field);\n rows.push(row);\n if (next === \"Null\") continue;\n const successors = isVariant(next, \"Array\") ? next.Array : [next];\n if (successors.length > recurse.fanout)\n throw new EvalError(\"E_FANOUT\", \"recursive fanout exceeded\");\n for (const successor of successors) queue.push([successor, depth + 1]);\n }\n return rows;\n }\n\n private expr(expression: any): Value {\n const [kind, data] = variant(expression);\n switch (kind) {\n case \"Literal\":\n return clone(data);\n case \"Variable\":\n return clone(this.requiredEnv(data));\n case \"Input\":\n return this.input(data);\n case \"Field\":\n return clone(field(this.expr(data.base), data.name));\n case \"Array\":\n return { Array: data.map((value: any) => this.expr(value)) };\n case \"Object\": {\n const row: Record<string, Value> = Object.create(null);\n for (const key of Object.keys(data).sort(compareCodepoints)) row[key] = this.expr(data[key]);\n return { Row: row };\n }\n case \"Binary\":\n return this.binary(data);\n case \"Unary\": {\n const value = this.expr(data.value);\n if (data.op === \"Not\") return { Bool: !asBool(value) };\n if (data.op === \"Neg\") return int(-asInt(value));\n throw new EvalError(\"E_OPAQUE\", `unsupported unary ${data.op}`);\n }\n case \"Builtin\": {\n const builtinKind = variant(data.builtin)[0];\n const expected = builtinArity(builtinKind);\n if (data.args.length !== expected) {\n throw new EvalError(\"E_INPUT\", `${builtinKind} requires ${expected} arguments, received ${data.args.length}`);\n }\n return this.builtin(data.builtin, data.args.map((value: any) => this.expr(value)));\n }\n case \"Get\":\n return this.get(data);\n case \"Exists\":\n return { Bool: this.get(data) !== \"Null\" };\n case \"Scan\":\n return this.scan(data);\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported expression ${kind}`);\n }\n }\n\n private input(input: string): Value {\n switch (input) {\n case \"Viewer\":\n return { Id: this.context.viewer };\n case \"Now\":\n if (this.context.now === null) throw new EvalError(\"E_INPUT\", \"now was not pinned\");\n return int(this.context.now);\n case \"NewId\": {\n const next = this.context.new_ids.shift();\n if (next === undefined) throw new EvalError(\"E_INPUT\", \"newId envelope exhausted\");\n return { Id: next };\n }\n case \"ReadTime\":\n if (this.context.read_time === null)\n throw new EvalError(\"E_INPUT\", \"readTime was not pinned\");\n return int(this.context.read_time);\n default:\n throw new EvalError(\"E_INPUT\", `unknown modeled input ${input}`);\n }\n }\n\n private binary(data: any): Value {\n const left = this.expr(data.left);\n if (data.op === \"And\" && !asBool(left)) return { Bool: false };\n if (data.op === \"Or\" && asBool(left)) return { Bool: true };\n const right = this.expr(data.right);\n switch (data.op) {\n case \"Eq\":\n return { Bool: canonicalValue(left) === canonicalValue(right) };\n case \"Ne\":\n return { Bool: canonicalValue(left) !== canonicalValue(right) };\n case \"SameValueZero\":\n return { Bool: sameValueZero(left, right) };\n case \"Lt\":\n return { Bool: totalCompare(left, right) < 0 };\n case \"Lte\":\n return { Bool: totalCompare(left, right) <= 0 };\n case \"Gt\":\n return { Bool: totalCompare(left, right) > 0 };\n case \"Gte\":\n return { Bool: totalCompare(left, right) >= 0 };\n case \"Add\":\n return int(asInt(left) + asInt(right));\n case \"Sub\":\n return int(asInt(left) - asInt(right));\n case \"Mul\":\n return int(asInt(left) * asInt(right));\n case \"And\":\n return { Bool: asBool(left) && asBool(right) };\n case \"Or\":\n return { Bool: asBool(left) || asBool(right) };\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported binary ${data.op}`);\n }\n }\n\n private builtin(builtin: any, args: Value[]): Value {\n const [kind, data] = variant(builtin);\n switch (kind) {\n case \"Len\": {\n const value = args[0];\n if (isVariant(value, \"String\")) return int(Array.from(value.String).length);\n if (isVariant(value, \"Id\")) return int(Array.from(value.Id).length);\n if (isVariant(value, \"Array\")) return int(value.Array.length);\n if (isVariant(value, \"Row\")) return int(Object.keys(value.Row).length);\n if (isVariant(value, \"Map\")) return int(Object.keys(value.Map).length);\n throw new EvalError(\"E_TYPE\", \"len expects string, array, or map\");\n }\n case \"Slice\": {\n const start = Math.max(0, asInt(args[1]));\n const end = Math.max(0, asInt(args[2]));\n if (isVariant(args[0], \"Array\")) return { Array: args[0].Array.slice(start, end) };\n if (isVariant(args[0], \"String\"))\n return { String: Array.from(args[0].String).slice(start, end).join(\"\") };\n throw new EvalError(\"E_TYPE\", \"slice expects array or string\");\n }\n case \"Concat\": {\n const [left, right] = args;\n if (isVariant(left, \"String\") || isVariant(right, \"String\"))\n return { String: valueText(left) + valueText(right) };\n if (isVariant(left, \"Id\") && isVariant(right, \"Id\"))\n return { Id: canonicalValues([left, right]) };\n if (isVariant(left, \"Array\") && isVariant(right, \"Array\"))\n return { Array: left.Array.concat(right.Array) };\n throw new EvalError(\"E_TYPE\", \"concat operands differ\");\n }\n case \"Min\":\n return totalCompare(args[0], args[1]) <= 0 ? args[0] : args[1];\n case \"Max\":\n return totalCompare(args[0], args[1]) >= 0 ? args[0] : args[1];\n case \"Divmod\": {\n const numerator = asInt(args[0]);\n const denominator = asInt(args[1]);\n if (denominator === 0) throw new EvalError(\"E_DIV_ZERO\", \"division by zero\");\n let quotient = Math.trunc(numerator / denominator);\n let remainder = numerator - quotient * denominator;\n if (remainder < 0) {\n if (denominator > 0) {\n quotient -= 1;\n remainder += denominator;\n } else {\n quotient += 1;\n remainder -= denominator;\n }\n }\n return rowValue({\n quotient: int(quotient),\n remainder: int(remainder),\n sink: { String: data.remainder_sink },\n });\n }\n case \"Sort\": {\n const values = asArray(args[0]).slice();\n for (const value of values) {\n for (const key of data.keys) field(value, key.field);\n }\n return {\n Array: stableSort(values, (left, right) => {\n for (const key of data.keys) {\n let compared = totalCompare(field(left, key.field), field(right, key.field));\n if (key.order === \"Desc\") compared = -compared;\n if (compared !== 0) return compared;\n }\n return 0;\n }),\n };\n }\n case \"DedupeById\": {\n const seen = new Set<string>();\n const values: Value[] = [];\n for (const value of asArray(args[0])) {\n const id = asString(field(value, \"id\"));\n if (!seen.has(id)) {\n seen.add(id);\n values.push(value);\n }\n }\n const page = this.certificate?.result_page_site;\n const take = this.certificate?.merge_sites?.find((entry: any) => entry.site === data.site)?.take;\n const row = page?.merge && page.site === data.site && Number.isInteger(take)\n ? values.slice(0, take).at(-1) : undefined;\n this.trace.merges.push({\n site: data.site,\n deduplicated_union_len: values.length,\n last_returned_suffix: row === undefined ? null : page.suffix.map((column: any) => clone(field(row, column.name))),\n });\n return { Array: values };\n }\n case \"MentionTokens\": {\n const seen = new Set<string>();\n const mentions: Value[] = [];\n for (const token of splitMentionTokens(asString(args[0]))) {\n if (!token.startsWith(\"@\")) continue;\n const characters = Array.from(token.slice(1));\n while (characters.length > 0 && !isWordCharacter(characters[0])) characters.shift();\n while (\n characters.length > 0 &&\n !isWordCharacter(characters[characters.length - 1])\n )\n characters.pop();\n const mention = characters.join(\"\");\n if (mention.length > 0 && !seen.has(mention)) {\n seen.add(mention);\n mentions.push({ String: mention });\n }\n }\n return { Array: mentions };\n }\n case \"DeterministicShare\": {\n const amount = asInt(args[0]);\n const recipients = stableSort(asArray(args[1]).slice(), totalCompare);\n if (recipients.length === 0) throw new EvalError(\"E_DIV_ZERO\", \"no recipients\");\n if (new Set(recipients.map(canonicalValue)).size !== recipients.length)\n throw new EvalError(\"E_INPUT\", \"share recipients must be unique\");\n const recipient = args[2];\n const position = recipients.findIndex(\n (candidate) => canonicalValue(candidate) === canonicalValue(recipient),\n );\n if (position < 0) throw new EvalError(\"E_INPUT\", \"recipient missing from shares\");\n const base = Math.floor(amount / recipients.length);\n const remainder = amount - base * recipients.length;\n return int(base + (position < remainder ? 1 : 0));\n }\n case \"Count\":\n case \"CountCapped\":\n return int(asArray(args[0]).length);\n case \"Sum\": {\n let sum = 0;\n for (const value of asArray(args[0])) sum = safeNumber(sum + asInt(value));\n return int(sum);\n }\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported builtin ${kind}`);\n }\n }\n\n private get(read: any): Value {\n const key = read.key.map((value: any) => this.expr(value));\n const found = this.store.lookup(read.table, read.index, key);\n const disclosed = found !== null && this.checkRule(read.table, \"read\", null, found);\n // @ref LLP 1012#7-writes-offline \u2014 the point digest is what the program\n // observed: the wire row when disclosed, an absence when missing or hidden.\n this.trace.points.push({\n site: read.site,\n table: read.table,\n index: read.index,\n key: key.map(clone),\n digest: disclosed ? rowDigest(found) : null,\n ...(typeof read.provenance === \"string\" ? { provenance: read.provenance } : {}),\n });\n if (found === null) {\n this.trace.absences.push({\n site: read.site,\n table: read.table,\n index: read.index,\n key,\n ...(typeof read.provenance === \"string\" ? { provenance: read.provenance } : {}),\n });\n return \"Null\";\n }\n return disclosed ? clone(found) : \"Null\";\n }\n\n private scan(scan: any): Value {\n const prefix = scan.prefix.map((value: any) => this.expr(value));\n let after = scan.after === null ? null : this.expr(scan.after);\n const before = scan.before === null ? null : this.expr(scan.before);\n if (scan.opaque_cursor && after === \"Null\") after = null;\n else if (scan.opaque_cursor && after !== null) {\n if (!isVariant(after, \"String\")) throw new EvalError(\"E_INPUT\", \"opaque cursor must be a string\");\n after = decodeCursorFor(after.String, {\n table: scan.table, index: scan.index, order: scan.order, suffix: cursorSuffix(this.schema, scan),\n });\n }\n const evaluatedRange = scan.range === null ? null : this.evaluateRange(scan.range);\n const [boundKind, boundData] = variant(scan.take);\n const take =\n boundKind === \"Literal\"\n ? boundData\n : asInt(this.context.args[boundData.name] ?? this.requiredEnv(boundData.name));\n if (!Number.isInteger(take) || take < 0 || (boundKind === \"Arg\" && take > boundData.max))\n throw new EvalError(\"E_FANOUT\", \"scan take exceeded\");\n const examined = this.store.scan(\n scan.table,\n scan.index,\n prefix,\n after,\n before,\n evaluatedRange,\n scan.order,\n take + 2,\n );\n const stop = examined.length > take ? \"limit\" : \"exhausted\";\n const visible = examined.filter((row) =>\n this.checkRule(scan.table, \"read\", null, row)\n );\n const returned = visible.slice(0, take);\n const suffix = cursorSuffix(this.schema, scan);\n this.trace.ranges.push({\n site: scan.site,\n table: scan.table,\n index: scan.index,\n ...(typeof scan.provenance === \"string\" ? { provenance: scan.provenance } : {}),\n prefix,\n order: scan.order,\n take,\n after,\n before,\n gt: evaluatedRange?.gt ?? null,\n gte: evaluatedRange?.gte ?? null,\n lt: evaluatedRange?.lt ?? null,\n lte: evaluatedRange?.lte ?? null,\n rule_hash: scopedRuleHash(this.schema, this.schema.tables[scan.table].rules.read),\n stop,\n lastReturnedSuffix: returned.length === 0 ? null\n : suffix.map((column) => clone(field(returned[returned.length - 1]!, column.name))),\n });\n return { Array: returned.map(clone) };\n }\n\n private evaluateRange(range: any): any {\n return {\n gt: range.gt === null ? null : this.expr(range.gt),\n gte: range.gte === null ? null : this.expr(range.gte),\n lt: range.lt === null ? null : this.expr(range.lt),\n lte: range.lte === null ? null : this.expr(range.lte),\n };\n }\n\n private insert(table: string, row: Value): void {\n row = materializeOptionalFields(this.schema, table, row);\n validateWriteRow(this.schema, table, row);\n if (!this.checkRule(table, \"insert\", null, row))\n throw new EvalError(\"E_RULE\", `${table} insert`);\n this.checkConstraints(table, null, row, \"insert\");\n if (this.store.byId(table, asString(field(row, \"id\"))) !== null)\n throw new EvalError(\"E_CONSTRAINT\", `duplicate id on ${table}`);\n this.store.put(table, row);\n this.recordWrite(table, row);\n this.rememberCreatedRow(table, row);\n this.insertedRows.push({ table, row: clone(row) });\n this.ruleMemo.clear();\n this.maintain(table, null, row);\n }\n\n private update(table: string, key: Value, patch: Value): void {\n const old = this.store.byId(table, asString(key));\n if (old === null) {\n this.missingWriteRow(table, asString(key));\n return;\n }\n const object = { ...asObject(old), ...asObject(patch) };\n this.replace(table, key, rowValue(object));\n }\n\n private replace(table: string, key: Value, row: Value): void {\n const old = this.store.byId(table, asString(key));\n if (old === null) throw new EvalError(\"E_INPUT\", `missing ${table} row`);\n row = materializeOptionalFields(this.schema, table, row);\n validateWriteRow(this.schema, table, row);\n this.validateAddressedRowId(table, key, row);\n // @ref LLP 1001#9-schema-additions \u2014 update authority is one relation\n // evaluated once over the old and next row images.\n if (!this.checkRule(table, \"update\", old, row))\n throw new EvalError(\"E_RULE\", `${table} update`);\n this.checkConstraints(table, old, row, \"update\");\n this.store.put(table, row);\n this.recordWrite(table, row);\n this.refreshCreatedPoints(table, row);\n this.ruleMemo.clear();\n this.maintain(table, old, row);\n }\n\n private delete(table: string, id: string): void {\n const old = this.store.byId(table, id);\n if (old === null) {\n this.missingWriteRow(table, id);\n return;\n }\n if (!this.checkRule(table, \"delete\", null, old))\n throw new EvalError(\"E_RULE\", `${table} delete`);\n this.checkConstraints(table, old, old, \"delete\");\n this.store.remove(table, id);\n this.writes.set(`${table}\\0${id}`, { table, id, row: null });\n this.forgetCreatedPoints(table, id);\n this.ruleMemo.clear();\n this.maintain(table, old, null);\n }\n\n // @ref LLP 1011#b3-one-missing-row-rule-no-id-in-an-upsert-row \u2014 preserve\n // the engine's held/absent/unheld distinction in the receipt-only twin.\n private missingWriteRow(table: string, id: string): void {\n if (!this.store.authorityAbsence(table, id)) {\n this.partial.add(\"missing-authority\");\n this.authorityMissSerial += 1;\n return;\n }\n throw new EvalError(\"E_REQUIRE\", \"program requirement failed\", \"NOT_FOUND\");\n }\n\n private maintain(source: string, old: Value | null, next: Value | null): void {\n for (const maintain of this.schema.maintains ?? []) {\n if (maintain.source !== source) continue;\n if (old !== null) this.applyAggregate(maintain, old, -1);\n if (next !== null) this.applyAggregate(maintain, next, 1);\n }\n }\n\n private applyAggregate(maintain: any, source: Value, direction: number): void {\n // @ref LLP 1001#4-generation-and-runtime-registryrs-successorrs \u2014 maintained targets are engine-owned but still validated.\n source = materializeOptionalFields(this.schema, maintain.source, source);\n const group = maintain.by.map((name: string) => clone(field(source, name)));\n const idValue = canonicalValues(group);\n const [kind, data] = variant(maintain.kind);\n const delta =\n kind === \"Count\" ? direction : safeNumber(direction * asInt(field(source, data.of)));\n const existing = this.store.byId(maintain.target, idValue);\n if (existing === null && !this.store.authorityAbsence(maintain.target, idValue)) {\n this.partial.add(\"missing-authority\");\n this.authorityMissSerial += 1;\n this.unheldMaintainTargets.push(maintain.target);\n return;\n }\n const oldValue = existing === null ? 0 : asInt(field(existing, \"value\"));\n const object: Record<string, Value> = Object.assign(Object.create(null), {\n id: { Id: idValue },\n value: int(oldValue + delta),\n });\n maintain.by.forEach((name: string, index: number) => {\n object[name] = group[index];\n });\n const row = materializeOptionalFields(this.schema, maintain.target, rowValue(object));\n const effect = existing === null ? \"insert\" : \"update\";\n // Maintained targets are engine-owned. They bypass authored write rules\n // while retaining the same constraints and created-row provenance as Rust.\n validateWriteRow(this.schema, maintain.target, row);\n this.checkConstraints(maintain.target, existing, row, effect);\n this.store.put(maintain.target, row);\n this.recordWrite(maintain.target, row);\n if (existing === null) {\n this.rememberCreatedRow(maintain.target, row);\n this.insertedRows.push({ table: maintain.target, row: clone(row) });\n } else this.refreshCreatedPoints(maintain.target, row);\n this.ruleMemo.clear();\n }\n\n private recordWrite(table: string, row: Value): void {\n const id = asString(field(row, \"id\"));\n this.writes.set(`${table}\\0${id}`, { table, id, row: clone(row) });\n }\n\n private validateAddressedRowId(table: string, key: Value, row: Value): void {\n requireRowIdentity(table, \"addressed write\", asString(key), asString(field(row, \"id\")));\n }\n\n private rememberCreatedRow(table: string, row: Value): void {\n const id = asString(field(row, \"id\"));\n this.createdRows.add(`${table}\\0${id}`);\n this.refreshCreatedPoints(table, row);\n }\n\n private refreshCreatedPoints(table: string, row: Value): void {\n const rowId = asString(field(row, \"id\"));\n if (!this.createdRows.has(`${table}\\0${rowId}`)) return;\n this.forgetCreatedPoints(table, rowId);\n for (const [index, definition] of Object.entries<any>(\n this.schema.tables[table]?.indexes ?? {},\n )) {\n this.createdPoints.push({\n table,\n index,\n key: canonicalValues(\n definition.columns.map((column: string) => fieldOrNull(row, column)),\n ),\n rowId,\n });\n }\n }\n\n private forgetCreatedPoints(table: string, rowId: string): void {\n this.createdPoints = this.createdPoints.filter(\n (point) => point.table !== table || point.rowId !== rowId,\n );\n }\n\n private checkConstraints(\n tableName: string,\n old: Value | null,\n row: Value,\n effect: \"insert\" | \"update\" | \"delete\",\n ): void {\n const table = this.schema.tables[tableName];\n for (const constraint of table.constraints ?? []) {\n const [kind, data] = variant(constraint);\n if (kind === \"AppendOnly\" && effect !== \"insert\")\n throw new EvalError(\"E_CONSTRAINT\", `${tableName} is appendOnly`);\n if (\n kind === \"Immutable\" &&\n effect === \"update\" &&\n data.fields.some(\n (name: string) => canonicalValue(field(old!, name)) !== canonicalValue(field(row, name)),\n )\n )\n throw new EvalError(\"E_CONSTRAINT\", `${tableName} immutable fields changed`);\n if (kind === \"Unique\") this.checkUnique(tableName, data.index, old, row);\n if (kind === \"Cap\") {\n const entersGroup =\n effect === \"insert\" ||\n (effect === \"update\" && data.by.some((name: string) =>\n canonicalValue(field(old!, name)) !== canonicalValue(field(row, name))));\n if (!entersGroup) continue;\n const entry = Object.entries<any>(table.indexes).find(([, index]) =>\n startsWith(index.columns, data.by),\n );\n if (entry === undefined) throw new EvalError(\"E_SCHEMA\", \"cap index missing\");\n const prefix = data.by.map((name: string) => field(row, name));\n const existing = this.store.scan(\n tableName,\n entry[0],\n prefix,\n null,\n null,\n null,\n \"Asc\",\n data.max,\n );\n if (existing.length >= data.max)\n throw new EvalError(\"E_CONSTRAINT\", `${tableName} cap reached`);\n if (!this.store.hasCompleteRange(tableName, entry[0], prefix)) {\n this.partial.add(`${tableName}.${entry[0]}`);\n }\n }\n if (kind === \"Text\" && (effect === \"insert\" || effect === \"update\")) {\n const value = asObject(row)[data.field];\n if (value !== undefined && value !== \"Null\") {\n const text = asString(value);\n if (Array.from(text).length < (data.min ?? 0))\n throw new EvalError(\n \"E_CONSTRAINT\",\n `${tableName}.${data.field} must contain at least ${data.min ?? 0} characters`,\n );\n const valid =\n data.format === undefined ||\n data.format === null ||\n (data.format === \"handle\" && /^[a-z0-9_]*$/.test(text)) ||\n (data.format === \"url\" && validHttpUrl(text));\n if (!valid)\n throw new EvalError(\n \"E_CONSTRAINT\",\n `${tableName}.${data.field} has invalid ${String(data.format)} format`,\n );\n }\n }\n }\n for (const [indexName, index] of Object.entries<any>(table.indexes)) {\n if (index.unique) this.checkUnique(tableName, indexName, old, row);\n }\n }\n\n private checkFinalConstraints(): void {\n for (const { table: sourceTable, row } of this.insertedRows) {\n for (const constraint of this.schema.tables[sourceTable]?.constraints ?? []) {\n const [kind, data] = variant(constraint);\n if (kind !== \"FinalExistsOnInsert\") continue;\n const key = data.key.map((term: any) => this.ruleTerm(term, null, row));\n if (this.store.lookup(data.table, data.index, key) === null)\n throw new EvalError(\n \"E_CONSTRAINT\",\n `${sourceTable} insert requires final row at ${data.table}.${data.index}`,\n );\n }\n }\n }\n\n private checkUnique(table: string, indexName: string, old: Value | null, row: Value): void {\n const index = this.schema.tables[table].indexes[indexName];\n const key = index.columns.map((name: string) => fieldOrNull(row, name));\n const found = this.store.lookup(table, indexName, key);\n if (\n found !== null &&\n (old === null || asString(field(found, \"id\")) !== asString(field(old, \"id\")))\n )\n throw new EvalError(\"E_CONSTRAINT\", `sealed unique conflict on ${table}.${indexName}`);\n if (\n indexName !== \"byId\" &&\n found === null &&\n !this.store.hasAbsence(table, indexName, key) &&\n !this.store.hasCompleteRange(table, indexName, key)\n ) {\n this.partial.add(`${table}.${indexName}`);\n }\n }\n\n private checkRule(\n table: string,\n effect: \"read\" | \"insert\" | \"update\" | \"delete\",\n old: Value | null,\n next: Value,\n ): boolean {\n // @ref LLP 1012#5-retention-revocation-and-the-fence \u2014 under `retain\n // delivered-history` a held row is readable to the twin: delivery was the\n // authorization, so the kept row renders under local evaluation too.\n if (effect === \"read\" && this.store.readable(table)) return true;\n const rule = this.schema.tables[table].rules[effect];\n const authorityMissSerial = this.authorityMissSerial;\n const outer = this.pendingVerdicts;\n this.pendingVerdicts = [];\n const allowed = this.evaluateRule(\n rule,\n scopedRuleHash(this.schema, rule),\n old,\n next,\n effect === \"insert\",\n ) && this.authorityMissSerial === authorityMissSerial;\n // Only a check that disclosed its row leaves verdicts on the trace: the\n // server discards the rule inputs a hidden candidate minted, so a traced\n // verdict from a failed check would be one nothing at commit derived.\n if (allowed) {\n for (const verdict of this.pendingVerdicts) {\n const key = `${verdict.rule_hash}\\0${verdict.inputs_digest}\\0${verdict.result}`;\n if (this.tracedVerdicts.has(key)) continue;\n this.tracedVerdicts.add(key);\n this.trace.verdicts.push(verdict);\n }\n }\n this.pendingVerdicts = outer;\n return allowed;\n }\n\n private evaluateRule(\n rule: any,\n ruleHash: string,\n old: Value | null,\n next: Value,\n createdAllowed: boolean,\n ): boolean {\n const [kind, data] = variant(rule);\n switch (kind) {\n case \"Public\":\n case \"Allow\":\n return true;\n case \"Deny\":\n return false;\n case \"Eq\":\n return canonicalValue(this.ruleTerm(data[0], old, next)) === canonicalValue(this.ruleTerm(data[1], old, next));\n case \"Ne\":\n return canonicalValue(this.ruleTerm(data[0], old, next)) !== canonicalValue(this.ruleTerm(data[1], old, next));\n case \"And\":\n return data.every((child: any) =>\n this.evaluateRule(child, ruleHash, old, next, createdAllowed)\n );\n case \"Or\":\n return data.some((child: any) =>\n this.evaluateRule(child, ruleHash, old, next, createdAllowed)\n );\n case \"Not\":\n return !this.evaluateRule(data, ruleHash, old, next, createdAllowed);\n case \"Exists\": {\n // @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 absence and authorization are authority-only.\n const key = data.key.map((term: any) => this.ruleTerm(term, old, next));\n // The verdict's inputs digest as the wire defines it: `sha256(canonical([table, index, key]))` (LLP 1012 \u00A77).\n const pinnedDigest = sha256(canonicalJson([data.table, data.index, key.map(wireJson)]));\n const memoKey = `${ruleHash}:${pinnedDigest}`;\n const memoized = this.ruleMemo.get(memoKey);\n if (memoized !== undefined) {\n this.pendingVerdicts.push({ rule_hash: ruleHash, inputs_digest: pinnedDigest, result: memoized });\n return memoized;\n }\n if (!this.ruleInputIsReadable(data)) {\n // @ref LLP 1001#2-what-a-commit-records \u2014 held rows cannot replace authority-only verdicts.\n const verdict = this.store.verdict(ruleHash, pinnedDigest, this.context);\n if (verdict !== null) {\n this.ruleMemo.set(memoKey, verdict);\n this.pendingVerdicts.push({ rule_hash: ruleHash, inputs_digest: pinnedDigest, result: verdict });\n return verdict;\n }\n this.partial.add(\"missing-authority\");\n this.authorityMissSerial += 1;\n return false;\n }\n const found = this.store.lookup(data.table, data.index, key);\n if (found === null && !this.store.hasAbsence(data.table, data.index, key)) {\n this.partial.add(`${data.table}.${data.index}`);\n this.ruleMemo.set(memoKey, false);\n return false;\n }\n const result = found !== null;\n this.ruleMemo.set(memoKey, result);\n this.pendingVerdicts.push({ rule_hash: ruleHash, inputs_digest: pinnedDigest, result });\n return result;\n }\n case \"Created\": {\n if (!createdAllowed)\n throw new EvalError(\n \"E_SCHEMA\",\n \"created-row probe evaluated outside a table insert rule\",\n );\n const key = data.key.map((term: any) => this.ruleTerm(term, old, next));\n const encoded = canonicalValues(key);\n return this.createdPoints.some(\n (point) =>\n point.table === data.table &&\n point.index === data.index &&\n point.key === encoded,\n );\n }\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported rule ${kind}`);\n }\n }\n\n private ruleInputIsReadable(probe: any): boolean {\n const table = this.schema.tables[probe.table];\n const index = table?.indexes?.[probe.index];\n if (!table || !index) return false;\n const prove = (rule: any): boolean => {\n const [kind, data] = variant(rule);\n if (kind === \"Public\" || kind === \"Allow\") return true;\n if (kind === \"Eq\") {\n const left = substituteRuleTerm(data[0], index.columns, probe.key);\n const right = substituteRuleTerm(data[1], index.columns, probe.key);\n return left !== null && right !== null && canonicalJson(left) === canonicalJson(right);\n }\n if (kind === \"And\") return data.length > 0 && data.every(prove);\n if (kind === \"Or\") return data.some(prove);\n if (kind === \"Exists\" && data.table === probe.table && data.index === probe.index) {\n const key = data.key.map((term: any) => substituteRuleTerm(term, index.columns, probe.key));\n return key.every((term: any) => term !== null) && canonicalJson(key) === canonicalJson(probe.key);\n }\n return false;\n };\n return prove(table.rules.read);\n }\n\n private ruleTerm(term: any, old: Value | null, next: Value): Value {\n const [kind, data] = variant(term);\n if (kind === \"Field\") return clone(field(next, data));\n if (kind === \"NextField\") {\n if (old === null)\n throw new EvalError(\"E_SCHEMA\", \"next-row rule term evaluated outside an update rule\");\n return clone(field(next, data));\n }\n if (kind === \"OldField\") {\n if (old === null)\n throw new EvalError(\"E_SCHEMA\", \"old-row rule term evaluated outside an update rule\");\n return clone(field(old, data));\n }\n if (kind === \"Viewer\") return { Id: this.context.viewer };\n if (kind === \"Literal\") return clone(data);\n throw new EvalError(\"E_OPAQUE\", `unsupported rule term ${kind}`);\n }\n\n private requiredEnv(name: string): Value {\n const value = this.env.get(name);\n if (value === undefined) throw new EvalError(\"E_INPUT\", `unknown variable ${name}`);\n return value;\n }\n}\n\n\nfunction substituteRuleTerm(term: any, columns: string[], probeKey: any[]): any | null {\n const [kind, data] = variant(term);\n if (kind === \"OldField\" || kind === \"NextField\") return null;\n if (kind !== \"Field\") return clone(term);\n const position = columns.indexOf(data);\n return position < 0 || position >= probeKey.length ? null : clone(probeKey[position]);\n}\n\nfunction mintNext(schema: any, certificate: any, trace: Trace): string | null {\n const page = certificate?.result_page_site;\n if (!page || !queryCapped(certificate, trace)) return null;\n const values = page.merge\n ? trace.merges.slice().reverse().find((entry) => entry.site === page.site)?.last_returned_suffix\n : trace.ranges.slice().reverse().find((entry) => entry.site === page.site)?.lastReturnedSuffix;\n if (values === null || values === undefined) return null;\n return encodeCursor({\n table: page.table,\n index: page.index,\n order: page.order,\n suffix: page.suffix,\n values,\n });\n}\n\n/** The wire state a query run reports: `capped` exactly when the engine's `query_state` says so. */\nexport function queryState(certificate: any, trace: Trace): \"complete\" | \"capped\" {\n return queryCapped(certificate, trace) ? \"capped\" : \"complete\";\n}\n\nfunction queryCapped(certificate: any, trace: Trace): boolean {\n if (certificate.completeness === \"Capped\") return true;\n if (trace.ranges.some((range) => range.stop === \"limit\"\n || !certificate.read_sites?.find((site: any) => site.site === range.site)?.hoist)) return true;\n return (certificate.merge_sites ?? []).some((site: any) => {\n const merge = trace.merges.find((entry) => entry.site === site.site);\n const unionTooLarge = merge === undefined || merge.deduplicated_union_len > site.take;\n const laneLimited = trace.ranges.some((range) => site.lane_sites.includes(range.site) && range.stop !== \"exhausted\");\n return unionTooLarge || laneLimited;\n });\n}\n", "export function exactVerdict(\n verdicts: readonly any[],\n ruleHash: string,\n pinnedDigest: string,\n viewer: string,\n authEpoch: number,\n): boolean | null {\n const verdict = verdicts.find((candidate) =>\n candidate.rule_hash === ruleHash &&\n candidate.pinned_inputs_digest === pinnedDigest &&\n candidate.principal === viewer &&\n candidate.auth_epoch === authEpoch\n );\n return verdict?.result ?? null;\n}\n\nexport function exactByIdAbsence(\n absences: readonly any[],\n table: string,\n id: string,\n valuesEqual: (left: any[], right: any[]) => boolean,\n): boolean {\n return absences.some(([candidateTable, index, key]) =>\n candidateTable === table && index === \"byId\" && valuesEqual(key, [{ Id: id }])\n );\n}\n", "import { exactByIdAbsence, exactVerdict } from \"./authority\";\nimport { canonicalSchemaJson } from \"./certificate-identity\";\nimport { EvalError } from \"./errors\";\nimport { sha256 } from \"./hash\";\nimport { Runner } from \"./runner\";\nimport {\n asString,\n canonicalValue,\n canonicalValues,\n clone,\n compareArrays,\n compareCodepoints,\n field,\n fieldOrNull,\n isVariant,\n kindOf,\n materializeOptionalFields,\n scopedRuleHash,\n totalCompare,\n validateInputs,\n validateWriteRow,\n valuesEqual,\n} from \"./value-runtime\";\nimport type {\n ClosureReceipt,\n Context,\n Execution,\n LocalExecution,\n ReceiptRange,\n Trace,\n TraceRange,\n Value,\n} from \"./types\";\n\nexport interface ClientStoreOptions {\n /** Tables whose held rows the twin may read regardless of their read rule (`retain delivered-history`). */\n readable?: Iterable<string>;\n}\n\n/** A drained uniform prefix: every row with these column equalities is held (LLP 1012 \u00A76). */\ninterface DrainedPrefix {\n table: string;\n ruleHash: string;\n columns: string[];\n prefix: Value[];\n}\n\nexport class ClientStore {\n private tables = new Map<string, Map<string, Value>>();\n private coverage: ClosureReceipt;\n private rangeDeletions = new Map<string, number>();\n private readonly readableTables: Set<string>;\n private drained?: DrainedPrefix[];\n\n constructor(\n private readonly schema: any,\n receipt: ClosureReceipt,\n private readonly options: ClientStoreOptions = {},\n ) {\n this.readableTables = new Set(options.readable ?? []);\n this.coverage = this.receiptForSchema(receipt);\n this.seedReceipt(receipt);\n }\n\n readable(table: string): boolean {\n return this.readableTables.has(table);\n }\n\n applyMutation(program: any, context: Context): LocalExecution {\n validateInputs(this.schema, program, context.args);\n // @ref LLP 1001#3-read-and-write-states-no-silent-states \u2014 local prediction adopts the write set only as one atomic mutation.\n const staged = this.fork();\n const before = staged.coveredIndexKeys();\n const runner = new Runner(staged, this.schema, context, null);\n let execution: Execution;\n try {\n execution = runner.execute(program);\n } catch (error) {\n if (runner.coverageMisses().includes(\"missing-authority\")) {\n return { state: \"partial\", partialSites: [\"missing-authority\"], execution: { result: \"Null\", trace: runner.trace, next: null, writes: [] } };\n }\n if (error instanceof EvalError) {\n error.trace = runner.trace;\n error.partialSites = this.uncoveredSites(runner.trace, runner.coverageMisses());\n }\n throw error;\n }\n const partialSites = runner.coverageMisses();\n // Coverage is judged on the state the run read, before its writes land.\n const uncoveredSites = this.uncoveredSites(execution.trace);\n if (partialSites.length > 0) {\n return { state: \"partial\", partialSites, execution, uncoveredSites, authorityMisses: runner.authorityMisses() };\n }\n const after = staged.coveredIndexKeys();\n for (let offset = 0; offset < before.length; offset += 1) {\n for (const [id, key] of before[offset]) {\n const next = after[offset].get(id);\n if (next === undefined || !valuesEqual(key, next)) {\n const site = staged.coverage.ranges[offset].site;\n staged.rangeDeletions.set(site, (staged.rangeDeletions.get(site) ?? 0) + 1);\n }\n }\n }\n this.tables = staged.tables;\n this.coverage = staged.coverage;\n this.rangeDeletions = staged.rangeDeletions;\n this.drained = undefined;\n return { state: \"predicted\", partialSites: [], execution, uncoveredSites };\n }\n\n reexecute(program: any, context: Context, certificate: any = null): LocalExecution {\n validateInputs(this.schema, program, context.args);\n const runner = new Runner(this, this.schema, context, certificate);\n let execution: Execution;\n try {\n execution = runner.execute(program);\n } catch (error) {\n // A refusal after an uncovered read is not the server's answer: the\n // caller reads `partialSites` off the error before believing the code.\n if (error instanceof EvalError) {\n error.trace = runner.trace;\n error.partialSites = this.uncoveredSites(runner.trace, runner.coverageMisses());\n }\n throw error;\n }\n const partialSites = this.uncoveredSites(execution.trace, runner.coverageMisses());\n if (partialSites.length > 0) execution.next = null;\n return {\n state: partialSites.length === 0 ? \"fresh\" : \"partial\",\n partialSites,\n execution,\n };\n }\n\n /** The sites a run read outside coverage: uncovered ranges, unheld absences, and the runner's own misses. */\n uncoveredSites(trace: Trace, misses: string[] = []): string[] {\n const partial = new Set(misses);\n for (const range of trace.ranges) {\n const covered = this.coverage.ranges.some(\n (coverage) => whole(coverage) && rangeCovered(coverage, range),\n ) || this.drainedPrefixCovers(range.table, range.index, range.prefix, range.rule_hash);\n if (!covered || (this.rangeDeletions.get(range.site) ?? 0) > 1)\n partial.add(range.site);\n }\n for (const absence of trace.absences) {\n const held =\n this.coverage.absences.some(\n ([table, index, key]) =>\n table === absence.table &&\n index === absence.index &&\n valuesEqual(key, absence.key),\n ) || this.lookup(absence.table, absence.index, absence.key) !== null;\n if (!held) partial.add(absence.site);\n }\n return Array.from(partial).sort(compareCodepoints);\n }\n\n rehydrate(receipt: ClosureReceipt): number {\n const before = this.allIds();\n this.tables = new Map();\n this.coverage = this.receiptForSchema(receipt);\n this.rangeDeletions = new Map();\n this.drained = undefined;\n this.seedReceipt(receipt);\n const after = this.allIds();\n let evicted = 0;\n for (const id of before) if (!after.has(id)) evicted += 1;\n return evicted;\n }\n\n rows(table: string): Value[] {\n return Array.from(this.tables.get(table)?.values() ?? []);\n }\n\n lookup(table: string, indexName: string, key: Value[]): Value | null {\n const index = this.index(table, indexName);\n if (key.length !== index.columns.length) {\n throw new EvalError(\n \"E_TYPE\",\n `point read ${table}.${indexName} supplied ${key.length} of ${index.columns.length} key columns`,\n );\n }\n key.forEach((value, offset) => {\n assertIndexableScalar(value, `point read ${table}.${indexName} key component ${offset + 1}`);\n });\n for (const row of this.rows(table)) {\n const values = index.columns.map((column: string) => fieldOrNull(row, column));\n if (valuesEqual(values, key)) return row;\n }\n return null;\n }\n\n scan(\n table: string,\n indexName: string,\n prefix: Value[],\n after: Value | null,\n before: Value | null,\n range: any | null,\n order: \"Asc\" | \"Desc\",\n limit: number,\n ): Value[] {\n const index = this.index(table, indexName);\n if (prefix.length > index.columns.length) {\n throw new EvalError(\"E_TYPE\", `scan ${table}.${indexName} prefix has too many columns`);\n }\n prefix.forEach((value, offset) => {\n assertIndexableScalar(value, `scan ${table}.${indexName} prefix component ${offset + 1}`);\n });\n for (const [name, value] of Object.entries<Value | null | undefined>(range ?? {})) {\n if (value !== null && value !== undefined) {\n assertIndexableScalar(value, `scan ${table}.${indexName} range.${name}`);\n }\n }\n const rangeColumn = prefix.length;\n const remaining = index.columns.length - rangeColumn;\n // @ref LLP 1001#3-read-and-write-states-no-silent-states \u2014 a cursor must\n // move a scan; a fully named index has no post-prefix position to compare.\n if (remaining === 0 && (after !== null || before !== null)) {\n throw new EvalError(\n \"E_TYPE\",\n `scan ${table}.${indexName} prefix names every index column, so a cursor has no position to compare; remove after/before or shorten the prefix`,\n );\n }\n const cursorTuple = (cursor: Value): Value[] => {\n let values: Value[];\n if (isVariant(cursor, \"Array\")) {\n if (cursor.Array.length !== remaining) {\n throw new EvalError(\"E_TYPE\", `cursor supplied ${cursor.Array.length} of ${remaining} remaining index columns`);\n }\n values = cursor.Array;\n } else if (remaining === 1) {\n values = [cursor];\n } else {\n throw new EvalError(\"E_TYPE\", `cursor for ${remaining} remaining index columns must be an array`);\n }\n values.forEach((value, offset) => {\n const column = index.columns[rangeColumn + offset]!;\n validateCursorComponent(this.schema, table, indexName, column, value);\n });\n return values;\n };\n const afterTuple = after === null ? null : cursorTuple(after);\n const beforeTuple = before === null ? null : cursorTuple(before);\n const selected = this.rows(table).filter((row) => {\n const values = index.columns.map((column: string) => fieldOrNull(row, column));\n if (!valuesEqual(values.slice(0, prefix.length), prefix)) return false;\n if (rangeColumn >= values.length) return true;\n const value = values[rangeColumn];\n const position = values.slice(rangeColumn);\n if (afterTuple !== null && compareArrays(position, afterTuple) * (order === \"Asc\" ? 1 : -1) <= 0) return false;\n if (beforeTuple !== null && compareArrays(position, beforeTuple) * (order === \"Asc\" ? 1 : -1) >= 0) return false;\n if (range?.gt !== null && range?.gt !== undefined && totalCompare(value, range.gt) <= 0)\n return false;\n if (range?.gte !== null && range?.gte !== undefined && totalCompare(value, range.gte) < 0)\n return false;\n if (range?.lt !== null && range?.lt !== undefined && totalCompare(value, range.lt) >= 0)\n return false;\n if (range?.lte !== null && range?.lte !== undefined && totalCompare(value, range.lte) > 0)\n return false;\n return true;\n });\n const direction = order === \"Asc\" ? 1 : -1;\n selected.sort((left, right) => {\n for (const column of index.columns) {\n const compared = totalCompare(fieldOrNull(left, column), fieldOrNull(right, column));\n if (compared !== 0) return compared * direction;\n }\n return (\n compareCodepoints(asString(field(left, \"id\")), asString(field(right, \"id\"))) *\n direction\n );\n });\n return selected.slice(0, limit);\n }\n\n put(table: string, row: Value): void {\n const normalized = materializeOptionalFields(this.schema, table, row);\n validateWriteRow(this.schema, table, normalized);\n for (const [indexName, index] of Object.entries<any>(\n this.schema.tables?.[table]?.indexes ?? {},\n )) {\n for (const column of index.columns) {\n assertIndexableScalar(\n fieldOrNull(normalized, column),\n `indexed column ${table}.${indexName}.${column}`,\n );\n }\n }\n const id = asString(field(normalized, \"id\"));\n let rows = this.tables.get(table);\n if (rows === undefined) {\n rows = new Map();\n this.tables.set(table, rows);\n }\n rows.set(id, normalized);\n }\n\n remove(table: string, id: string): Value | null {\n const rows = this.tables.get(table);\n const old = rows?.get(id) ?? null;\n rows?.delete(id);\n return old;\n }\n\n byId(table: string, id: string): Value | null {\n return this.tables.get(table)?.get(id) ?? null;\n }\n\n verdict(ruleHash: string, pinnedDigest: string, context: Context): boolean | null {\n return exactVerdict(this.coverage.verdicts, ruleHash, pinnedDigest, context.viewer, context.auth_epoch);\n }\n\n authorityAbsence(table: string, id: string): boolean { return exactByIdAbsence(this.coverage.absences, table, id, valuesEqual); }\n\n hasAbsence(table: string, index: string, key: Value[]): boolean {\n return this.coverage.absences.some(\n ([heldTable, heldIndex, heldKey]) =>\n heldTable === table && heldIndex === index && valuesEqual(heldKey, key),\n );\n }\n\n hasCompleteRange(table: string, index: string, prefix: Value[]): boolean {\n const readRule = this.schema.tables?.[table]?.rules?.read;\n if (readRule !== undefined\n && this.drainedPrefixCovers(table, index, prefix, scopedRuleHash(this.schema, readRule))) return true;\n return this.coverage.ranges.some(\n (range) =>\n whole(range) &&\n range.table === table &&\n range.index === index &&\n valuesEqual(range.prefix, prefix) &&\n range.order === \"Asc\" &&\n range.after === null &&\n range.before === null &&\n range.gt === null &&\n range.gte === null &&\n range.lt === null &&\n range.lte === null &&\n range.stop === \"Exhausted\",\n );\n }\n\n // @ref LLP 1012#6-reads-offline \u2014 a certified-uniform prefix drained to\n // `next: null` is the viewer's whole partition for that prefix, so it covers\n // every named query over that prefix on any index of the same table: the\n // thread reads the log on another index than the drain and still replays.\n private drainedPrefixCovers(table: string, indexName: string, prefix: Value[], ruleHash: string): boolean {\n const columns: string[] | undefined = this.schema.tables?.[table]?.indexes?.[indexName]?.columns;\n if (!columns) return false;\n return this.drainedPrefixes().some((drained) =>\n drained.table === table\n && drained.ruleHash === ruleHash\n && drained.columns.every((column, at) => {\n const position = columns.indexOf(column);\n return position >= 0 && position < prefix.length && valuesEqual([prefix[position]!], [drained.prefix[at]!]);\n }));\n }\n\n /**\n * The drained prefixes: for each (table, index, order, rule, prefix) group a\n * chain of held pages from `after: null` to `Exhausted`, each page's `after`\n * the previous page's last recorded row \u2014 by that row's index suffix when it\n * is held, by its id alone when it is not (a viewed view-once row is absent\n * to the twin but the server's cursor still names it), which needs the index\n * to end in `id`. A page with a hole (`evicted_ids`) is no link: the store\n * already calls its answer `partial/evicted`. And once the chain is complete,\n * every other page of the group must add no row the chain does not hold \u2014 a\n * page past a re-marked `Exhausted` that still holds rows would let a scan\n * over-claim. Every `after: null` page is tried as a chain start.\n */\n private drainedPrefixes(): DrainedPrefix[] {\n if (this.drained) return this.drained;\n const groups = new Map<string, ReceiptRange[]>();\n for (const range of this.coverage.ranges) {\n if (range.before !== null || range.gt !== null || range.gte !== null || range.lt !== null || range.lte !== null) continue;\n const key = [range.table, range.index, range.order, range.rule_hash, canonicalValues(range.prefix)].join(\"\\0\");\n let pages = groups.get(key);\n if (!pages) groups.set(key, pages = []);\n pages.push(range);\n }\n const drained: DrainedPrefix[] = [];\n for (const pages of groups.values()) {\n const starts = pages.filter((page) => page.after === null);\n if (starts.length === 0) continue;\n const index = this.schema.tables?.[starts[0]!.table]?.indexes?.[starts[0]!.index];\n if (!index) continue;\n const suffixColumns: string[] = index.columns.slice(starts[0]!.prefix.length);\n const endsInId = suffixColumns[suffixColumns.length - 1] === \"id\";\n const later = pages.filter((page) => page.after !== null);\n const afterComponents = (page: ReceiptRange): Value[] =>\n isVariant(page.after!, \"Array\") ? page.after!.Array : [page.after!];\n const linked = (page: ReceiptRange): ReceiptRange | undefined => {\n const lastId = page.row_ids[page.row_ids.length - 1];\n if (lastId === undefined) return undefined;\n const row = this.byId(page.table, lastId);\n if (row !== null) {\n const suffix = suffixColumns.map((column) => fieldOrNull(row, column));\n return later.find((candidate) => valuesEqual(afterComponents(candidate), suffix));\n }\n if (!endsInId) return undefined;\n return later.find((candidate) => {\n const components = afterComponents(candidate);\n return components.length === suffixColumns.length && valuesEqual([components[components.length - 1]!], [{ Id: lastId }]);\n });\n };\n const complete = starts.some((first) => {\n const seen = new Set<ReceiptRange>();\n let page: ReceiptRange | undefined = first;\n while (page !== undefined && !seen.has(page)) {\n if (!whole(page)) return false;\n seen.add(page);\n if (page.stop === \"Exhausted\") break;\n page = linked(page);\n }\n if (page === undefined || page.stop !== \"Exhausted\") return false;\n const held = new Set<string>();\n for (const link of seen) for (const id of link.row_ids) held.add(id);\n return pages.every((other) => seen.has(other) || other.row_ids.every((id) => held.has(id)));\n });\n if (!complete) continue;\n drained.push({\n table: starts[0]!.table,\n ruleHash: starts[0]!.rule_hash,\n columns: index.columns.slice(0, starts[0]!.prefix.length),\n prefix: starts[0]!.prefix,\n });\n }\n this.drained = drained;\n return drained;\n }\n\n private seedReceipt(receipt: ClosureReceipt): void {\n for (const row of receipt.rows) this.put(row.table, row.row);\n }\n\n private receiptForSchema(receipt: ClosureReceipt): ClosureReceipt {\n const coverage = clone(receipt);\n if (coverage.schema_hash !== sha256(canonicalSchemaJson(this.schema))) {\n // @ref LLP 1001#2-what-a-commit-records \u2014 authority-only absence\n // facts cannot cross a predecessor/successor schema boundary.\n coverage.absences = [];\n }\n return coverage;\n }\n\n private fork(): ClientStore {\n const fork = new ClientStore(this.schema, { rows: [], ranges: [], absences: [], verdicts: [] }, this.options);\n fork.tables = new Map(\n Array.from(this.tables, ([table, rows]) => [\n table,\n new Map(Array.from(rows, ([id, row]) => [id, clone(row)])),\n ]),\n );\n fork.coverage = clone(this.coverage);\n fork.rangeDeletions = new Map(this.rangeDeletions);\n return fork;\n }\n\n private coveredIndexKeys(): Array<Map<string, Value[]>> {\n return this.coverage.ranges.map((range) => {\n const retained = new Set(range.row_ids);\n if (range.halo !== null) retained.add(range.halo.id);\n const index = this.index(range.table, range.index);\n const keys = new Map<string, Value[]>();\n for (const row of this.rows(range.table)) {\n const id = asString(field(row, \"id\"));\n if (retained.has(id)) {\n keys.set(id, index.columns.map((column: string) => clone(fieldOrNull(row, column))));\n }\n }\n return keys;\n });\n }\n\n private allIds(): Set<string> {\n const ids = new Set<string>();\n for (const [table, rows] of this.tables) {\n for (const id of rows.keys()) ids.add(`${table}:${id}`);\n }\n return ids;\n }\n\n private index(table: string, indexName: string): any {\n const index = this.schema.tables?.[table]?.indexes?.[indexName];\n if (index === undefined) throw new EvalError(\"E_SCHEMA\", `missing index ${table}.${indexName}`);\n return index;\n }\n}\n\n\n/** A page that lost no member since it was recorded: only such a page covers what it says (LLP 1012 \u00A75, \u00A76). */\nfunction whole(range: ReceiptRange): boolean {\n return range.evicted_ids === undefined || range.evicted_ids.length === 0;\n}\n\nfunction nullableValueEqual(left: Value | null, right: Value | null): boolean {\n return left === null ? right === null : right !== null && valuesEqual([left], [right]);\n}\n\nfunction rangeCovered(coverage: ReceiptRange, range: TraceRange): boolean {\n return coverage.site === range.site\n && coverage.table === range.table\n && coverage.index === range.index\n && valuesEqual(coverage.prefix, range.prefix)\n && coverage.order === range.order\n && coverage.take === range.take\n && nullableValueEqual(coverage.after, range.after)\n && nullableValueEqual(coverage.before, range.before)\n && nullableValueEqual(coverage.gt, range.gt)\n && nullableValueEqual(coverage.gte, range.gte)\n && nullableValueEqual(coverage.lt, range.lt)\n && nullableValueEqual(coverage.lte, range.lte)\n && coverage.rule_hash === range.rule_hash;\n}\n\nfunction validateCursorComponent(\n schema: any,\n table: string,\n index: string,\n column: string,\n value: Value,\n): void {\n assertIndexableScalar(value, `cursor component for ${table}.${index} column ${column}`);\n const actual = kindOf(value);\n // @ref LLP 1001#3-read-and-write-states-no-silent-states \u2014 Null is the\n // universal pre-first cursor sentinel, independent of stored nullability.\n if (actual === \"Null\") return;\n const descriptor = schema.tables?.[table]?.columns?.[column];\n const expected = cursorColumnKind(descriptor);\n const matches = expected === \"scalar\" || expected === actual;\n if (!matches) {\n throw new EvalError(\n \"E_TYPE\",\n `cursor component for ${table}.${index} column ${column} must be ${expected}, got ${actual.toLowerCase()}`,\n );\n }\n}\n\nfunction assertIndexableScalar(value: Value, what: string): void {\n const actual = kindOf(value);\n if (![\"Null\", \"Bool\", \"Int\", \"String\", \"Id\", \"Bytes\"].includes(actual)) {\n throw new EvalError(\"E_TYPE\", `${actual.toLowerCase()} is not an indexable scalar (${what})`);\n }\n}\n\nfunction cursorColumnKind(descriptor: any): \"Id\" | \"String\" | \"Int\" | \"Bool\" | \"Bytes\" | \"scalar\" {\n if (descriptor?.Optional !== undefined) return cursorColumnKind(descriptor.Optional);\n if (descriptor === \"Id\" || descriptor === \"Principal\" || descriptor?.Ref !== undefined) return \"Id\";\n if (descriptor?.Text !== undefined || descriptor?.Enum !== undefined) return \"String\";\n if ([\"Int\", \"Time\"].includes(descriptor) || descriptor?.Decimal !== undefined || descriptor?.Money !== undefined) return \"Int\";\n if (descriptor === \"Bool\") return \"Bool\";\n if (descriptor?.Bytes !== undefined) return \"Bytes\";\n return \"scalar\";\n}\n", "// @ref LLP 1012#6-reads-offline \u2014 the twin hydrates from `coverage()`: rows,\n// ranges, absences, and verdicts re-tagged through the held schema into the\n// evaluator's private receipt, exactly as the Rust `ClientStore` sees them.\nimport {\n DeliveryEnvelopeDecodeError,\n tagWireBoundary,\n tagWireIndexValues,\n tagWireRow,\n tagWireValue,\n type EvaluatorClosureReceipt,\n type TaggedValue,\n type WireValue,\n} from \"./offline-protocol.js\";\nimport { schemaDigest } from \"./offline-schema.js\";\nimport type { Coverage, ReceiptRange, RowRef } from \"./store/range-store.js\";\n\ntype TaggedRow = EvaluatorClosureReceipt[\"rows\"][number];\n\nfunction rowKey(ref: RowRef): string {\n return `${ref.table} ${ref.id}`;\n}\n\nconst digests = new WeakMap<object, string>();\n\n/** The one schema hasher, computed here and never taken from the caller (memoized per schema object). */\nfunction digestOf(schema: any): string {\n const held = typeof schema === \"object\" && schema !== null ? digests.get(schema) : undefined;\n if (held !== undefined) return held;\n const digest = schemaDigest(schema);\n if (typeof schema === \"object\" && schema !== null) digests.set(schema, digest);\n return digest;\n}\n\n/**\n * The evaluator's `ClosureReceipt` for a partition's coverage. Rows keep the\n * pool's order; a range's halo is the pooled row its `haloId` names; `n2Key`\n * never leaves the server, so it is `null` here as it is on the wire. The\n * schema hash is recomputed from the schema, never taken from the caller, so\n * every rebuild proves the hasher against the server's; an expected hash that\n * disagrees refuses the rebuild \u2014 coverage delivered under another schema, or\n * a hasher drifted from Rust, is `hydrating`, never evaluated (LLP 1012 \u00A78).\n */\nexport function closureFromCoverage(coverage: Coverage, schema: any, expectedSchemaHash?: string): EvaluatorClosureReceipt {\n const schemaHash = digestOf(schema);\n if (expectedSchemaHash !== undefined && expectedSchemaHash !== schemaHash) {\n throw new DeliveryEnvelopeDecodeError(\"schema\", `hash ${schemaHash} does not match the held program's ${expectedSchemaHash}`);\n }\n const rows = new Map<string, TaggedRow>();\n for (const row of coverage.rows) {\n rows.set(rowKey(row), { table: row.table, id: row.id, row: tagWireRow(schema, row.table, row.row as Record<string, WireValue>) });\n }\n return {\n schema_hash: schemaHash,\n rows: [...rows.values()],\n ranges: coverage.ranges.map((range) => tagRange(schema, range, rows)),\n absences: coverage.absences.map(([table, index, key]) => [\n table,\n index,\n tagWireIndexValues(schema, table, index, key as WireValue[], 0),\n ]),\n verdicts: coverage.verdicts.map((verdict) => {\n const record = verdict as Record<string, unknown>;\n return {\n rule_hash: String(record.ruleHash),\n pinned_inputs_digest: String(record.pinnedInputsDigest),\n principal: String(record.principal),\n auth_epoch: Number(record.authEpoch),\n result: record.result === true,\n };\n }),\n };\n}\n\nfunction tagRange(schema: any, range: ReceiptRange, rows: Map<string, TaggedRow>): EvaluatorClosureReceipt[\"ranges\"][number] {\n const boundary = (value: unknown): TaggedValue | null =>\n value === null || value === undefined ? null : tagWireBoundary(schema, range as never, value as WireValue);\n const halo = range.haloId === undefined ? undefined : rows.get(rowKey({ table: range.table, id: range.haloId }));\n return {\n site: range.site,\n table: range.table,\n index: range.index,\n prefix: tagWireIndexValues(schema, range.table, range.index, range.prefix as WireValue[], 0),\n order: range.order,\n take: range.take,\n after: boundary(range.after),\n before: boundary(range.before),\n gt: boundary(range.gt),\n gte: boundary(range.gte),\n lt: boundary(range.lt),\n lte: boundary(range.lte),\n rule_hash: range.ruleHash,\n row_ids: [...range.rowIds],\n stop: range.stop,\n absence: range.absence,\n halo: halo === undefined ? null : structuredClone(halo),\n n2_key: null,\n ...(range.evictedIds === undefined || range.evictedIds.length === 0 ? {} : { evicted_ids: [...range.evictedIds] }),\n };\n}\n\n/** Tag one operation argument by the IR's descriptor (`Cursor`, `Optional`, or a column type). */\nexport function tagArgument(descriptor: unknown, value: unknown, path: string): TaggedValue {\n if (descriptor !== null && typeof descriptor === \"object\" && !Array.isArray(descriptor) && \"Optional\" in descriptor) {\n return value === null || value === undefined ? \"Null\" : tagArgument((descriptor as { Optional: unknown }).Optional, value, path);\n }\n if (descriptor === \"Cursor\") {\n if (value === null || value === undefined) return \"Null\";\n if (typeof value !== \"string\") throw new TypeError(`${path} must be an opaque cursor string`);\n return { String: value };\n }\n if (value === undefined) throw new TypeError(`${path} is required`);\n return tagWireValue(descriptor, value as WireValue, path);\n}\n\nexport function tagArguments(descriptors: unknown, args: unknown): Record<string, TaggedValue> {\n const tagged: Record<string, TaggedValue> = Object.create(null);\n if (descriptors === null || typeof descriptors !== \"object\") return tagged;\n const record = args !== null && typeof args === \"object\" && !Array.isArray(args) ? args as Record<string, unknown> : {};\n for (const [name, descriptor] of Object.entries(descriptors as Record<string, unknown>)) {\n tagged[name] = tagArgument(descriptor, record[name], `args.${name}`);\n }\n return tagged;\n}\n\nexport type PartialReason = \"never-held\" | \"evicted\" | \"computed-key\";\n\nexport interface PartialSite {\n site: string;\n reason: PartialReason;\n}\n\ninterface TraceLike {\n ranges: Array<{ site: string; table: string; provenance?: string }>;\n absences: Array<{ site: string; table: string; index: string; key: unknown[]; provenance?: string }>;\n}\n\n/**\n * Why a site fell outside coverage: a row a swap evicted (`evicted`: a\n * primary-key read of an evicted row, or a range over a table one of whose\n * held pages lost a member), a key the program computed from another row so\n * no page could have named it (`computed-key`), or a read the store simply\n * never held (`never-held`).\n */\nexport function partialReasons(sites: string[], trace: TraceLike, coverage: Coverage): PartialSite[] {\n const evicted = new Set((coverage.evicted ?? []).map(rowKey));\n const holed = new Set(coverage.ranges.filter((range) => (range.evictedIds?.length ?? 0) > 0).map((range) => range.table));\n return sites.map((site) => {\n const absence = trace.absences.find((item) => item.site === site);\n const range = trace.ranges.find((item) => item.site === site);\n const provenance = absence?.provenance ?? range?.provenance;\n if (absence && absence.index === \"byId\") {\n const id = absence.key[0];\n const text = id !== null && typeof id === \"object\" && \"Id\" in id ? String((id as { Id: unknown }).Id) : undefined;\n if (text !== undefined && evicted.has(rowKey({ table: absence.table, id: text }))) return { site, reason: \"evicted\" };\n }\n if (range && holed.has(range.table)) return { site, reason: \"evicted\" };\n if (provenance === \"Shape\") return { site, reason: \"computed-key\" };\n return { site, reason: \"never-held\" };\n });\n}\n", "// @ref LLP 1012#6-reads-offline \u2014 the twin is the client: with the backend\n// unreachable the certified program runs here over `coverage()`; a read inside\n// coverage is exact, a read outside is `partial` at that site with its reason.\n// @ref LLP 1012#7-writes-offline \u2014 on enqueue the twin runs the mutation over\n// held rows, writes the prediction overlay, and records the trace the server\n// validates at commit: every point read with its digest, every rule verdict.\nimport { wireJson } from \"../../evaluator/src/value-runtime.js\";\nimport { tagWireRow, type WireValue } from \"./offline-protocol.js\";\nimport { EvalError } from \"../../evaluator/src/errors.js\";\nimport { queryState } from \"../../evaluator/src/runner.js\";\nimport { ClientStore } from \"../../evaluator/src/store.js\";\nimport { emptyTrace } from \"./store/outbox.js\";\nimport { closureFromCoverage, partialReasons, tagArguments, type PartialSite } from \"./twin-hydrate.js\";\nimport type { Context, Trace } from \"../../evaluator/src/types.js\";\nimport type { Coverage, HeldProgram, OutboxEntry, OutboxTrace, OverlayRow } from \"./store/range-store.js\";\n\nexport interface TwinSources {\n /** The certified program held for this partition, if any. */\n program(): HeldProgram | undefined;\n coverage(): Promise<Coverage | undefined>;\n overlay(): Promise<Record<string, OverlayRow[]>>;\n /** Every durable intent, FIFO; overlays are layered in this order. */\n entries(): Promise<OutboxEntry[]>;\n principal(): string | undefined;\n now(): number;\n seq(): number;\n}\n\n/** A query the twin answered locally, in the wire's shape plus its offline facts. */\nexport interface LocalAnswer {\n state: \"complete\" | \"capped\" | \"partial\" | \"denied\";\n data?: unknown;\n next?: string | null;\n seq: number;\n reason?: string;\n rule?: string;\n /** The first uncovered site (`partial`). */\n site?: string;\n /** Every uncovered site with its reason (`partial`). */\n sites?: PartialSite[];\n /** Queued intents whose predicted rows are visible in `data`, in order. */\n predicted?: string[];\n /** The newest delivery the answer was computed from. */\n since?: number;\n}\n\nexport interface Prediction {\n predicted: boolean;\n overlay: OverlayRow[];\n trace: OutboxTrace;\n /** Range reads evaluated over held rows only; ranges re-execute fresh at commit and are never validated. */\n partialRanges: string[];\n /** The point reads or rule inputs outside coverage that stopped the prediction. */\n uncovered: PartialSite[];\n /**\n * Engine-owned aggregate targets (`maintain \u2026 count`) this write updates on the\n * server but the overlay omits, because the store does not hold them: named so\n * a reader can tell an intentionally omitted aggregate from a lost write.\n */\n omitted: string[];\n}\n\ninterface Hydrated {\n program: HeldProgram;\n coverage: Coverage;\n store: ClientStore;\n predicted: string[];\n}\n\nfunction tagged<T>(call: (...args: any[]) => T, ...args: any[]): T | undefined {\n try { return call(...args); }\n catch (error) {\n // DeliveryEnvelopeDecodeError is a TypeError; these are exactly the three\n // closed tagging/hashing failures the offline contract admits.\n if (!(error instanceof TypeError || error instanceof EvalError)) throw error;\n (globalThis as { __snapbackTwinLast?: string }).__snapbackTwinLast = `tagged:${String(error)}`;\n }\n}\n\n/** Debug seam for the witness: why the twin last declined to evaluate (never part of a result). */\nexport function twinLastDecline(): string | undefined { return (globalThis as { __snapbackTwinLast?: string }).__snapbackTwinLast; }\nfunction decline(reason: string): undefined { (globalThis as { __snapbackTwinLast?: string }).__snapbackTwinLast = reason; return undefined; }\n\nexport class Twin {\n constructor(private readonly sources: TwinSources) {}\n\n /**\n * The certified program run over coverage. `undefined` when no program is\n * held, when the coverage was delivered under another generation or schema\n * (the successor fence: a predecessor's program never evaluates into current\n * state), or when the operation is not a query the program knows.\n */\n async evaluate(op: string, args: unknown): Promise<LocalAnswer | undefined> {\n const hydrated = await this.hydrate();\n if (!hydrated) return decline(\"hydrate\");\n const operation = hydrated.program.programs[op];\n if (!operation || operation.kind !== \"query\") return decline(\"unknown-op\");\n const ir = operation.ir as { args?: unknown };\n const context = this.context(hydrated, ir, args, []);\n if (!context) return decline(\"context\");\n const since = hydrated.coverage.deliveredAt;\n const base = {\n seq: this.sources.seq(),\n ...(since === undefined ? {} : { since }),\n ...(hydrated.predicted.length ? { predicted: hydrated.predicted } : {}),\n };\n const partial = (sites: string[], trace: Trace, data?: unknown): LocalAnswer => {\n const reasons = partialReasons(sites, trace, hydrated.coverage);\n return {\n state: \"partial\",\n ...(data === undefined ? {} : { data }),\n reason: reasons[0]?.reason ?? \"never-held\",\n ...(reasons[0] === undefined ? {} : { site: reasons[0].site }),\n sites: reasons,\n ...base,\n };\n };\n try {\n const local = hydrated.store.reexecute(ir, context, operation.certificate);\n const result = local.execution.result;\n const data = result === \"Null\" && local.state !== \"fresh\" ? undefined : wireJson(result);\n if (local.state === \"fresh\") {\n return { state: queryState(operation.certificate, local.execution.trace), data, next: local.execution.next, ...base };\n }\n return partial(local.partialSites, local.execution.trace, data);\n } catch (error) {\n if (!(error instanceof EvalError)) throw error;\n if (error.trace && error.partialSites?.length) return partial(error.partialSites, error.trace);\n if (error.code === \"E_REQUIRE\") return { state: \"denied\", rule: error.authoredCode ?? error.code, ...base };\n // A covered execution failure is not missing coverage.\n throw error;\n }\n }\n\n /**\n * The mutation run over held rows with the intent's pinned ids as its `new`\n * envelope, so the prediction and the commit mint the same ids. Predicted\n * when every point read and rule input was covered; a range the store does\n * not hold whole is evaluated over the rows it has and named in\n * `partialRanges` \u2014 ranges re-execute at commit and are never validated. An\n * uncovered point or rule input, or a local refusal, leaves the intent\n * queued without a prediction and with an empty trace: the server judges.\n */\n async predict(op: string, args: unknown, ids: string[]): Promise<Prediction> {\n const none: Prediction = { predicted: false, overlay: [], trace: emptyTrace(), partialRanges: [], uncovered: [], omitted: [] };\n const hydrated = await this.hydrate();\n if (!hydrated) return none;\n const operation = hydrated.program.programs[op];\n if (!operation || operation.kind !== \"mutation\") return none;\n const ir = operation.ir as { args?: unknown };\n const context = this.context(hydrated, ir, args, ids);\n if (!context) return none;\n let local: ReturnType<ClientStore[\"applyMutation\"]>;\n try {\n local = hydrated.store.applyMutation(ir, context);\n } catch (error) {\n // A typed local mutation refusal (including an unsupported local IR or\n // schema) does not reject the intent: the server still judges it (\u00A77).\n // Unexpected JS errors propagate; they cannot enqueue an empty trace.\n if (!(error instanceof EvalError)) throw error;\n return {\n ...none,\n uncovered: error.trace && error.partialSites ? partialReasons(error.partialSites, error.trace, hydrated.coverage) : [],\n };\n }\n const trace = local.execution.trace;\n // An engine-owned aggregate target the store does not hold (`maintain \u2026\n // count`) is the server's to update: it is no read of the program's and\n // nothing the viewer renders from this write, so it does not block the\n // prediction; the overlay simply carries no count row, and names the\n // target under `omitted`. Every other `missing-authority` (a rule input,\n // a write row) does block.\n const misses = local.authorityMisses;\n const onlyMaintainTargets = local.state === \"partial\"\n && local.partialSites.every((site) => site === \"missing-authority\")\n && misses?.other === 0 && misses.maintainTargets.length;\n if (local.state !== \"predicted\" && !onlyMaintainTargets) return { ...none, uncovered: partialReasons(local.partialSites, trace, hydrated.coverage) };\n const rangeSites = new Set(trace.ranges.map((range) => range.site));\n const uncovered = local.uncoveredSites ?? [];\n const blocking = uncovered.filter((site) => !rangeSites.has(site) || trace.absences.some((absence) => absence.site === site));\n if (blocking.length) return { ...none, uncovered: partialReasons(blocking, trace, hydrated.coverage) };\n return {\n predicted: true,\n overlay: local.execution.writes.map((write) => write.row === null\n ? { table: write.table, id: write.id, row: {}, removed: true as const }\n : { table: write.table, id: write.id, row: wireJson(write.row) as Record<string, unknown> }),\n trace: {\n points: trace.points.map((point) => ({\n table: point.table,\n index: point.index,\n key: point.key.map(wireJson),\n digest: point.digest,\n })),\n verdicts: trace.verdicts.map((verdict) => ({\n ruleHash: verdict.rule_hash,\n inputsDigest: verdict.inputs_digest,\n result: verdict.result,\n })),\n },\n partialRanges: uncovered,\n uncovered: [],\n omitted: [...new Set(misses?.maintainTargets ?? [])],\n };\n }\n\n private context(hydrated: Hydrated, ir: { args?: unknown }, args: unknown, ids: string[]): Context | undefined {\n const principal = this.sources.principal();\n if (principal === undefined) throw new TypeError(\"no partition is open\");\n const localArgs = tagged(tagArguments, ir.args, args);\n return localArgs && {\n viewer: principal,\n principal_kind: \"user\",\n // @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 the auth-epoch fence:\n // a verdict minted under another epoch never matches, so it cannot vouch here.\n auth_epoch: hydrated.coverage.facts?.authEpoch ?? 0,\n args: localArgs,\n now: this.sources.now(),\n new_ids: [...ids],\n read_time: null,\n };\n }\n\n private async hydrate(): Promise<Hydrated | undefined> {\n const program = this.sources.program();\n if (!program) return decline(\"no-program\");\n const coverage = await this.sources.coverage();\n if (!coverage) return decline(\"no-coverage\");\n // Coverage a rotation superseded is never evaluated, exact or partial: the\n // reset path rebuilds it under the live generation (LLP 1012 \u00A78).\n if (coverage.superseded) return decline(\"superseded\");\n if (coverage.facts\n && (coverage.facts.generation !== program.generation || coverage.facts.schemaHash !== program.schemaHash)) {\n return decline(`facts:${coverage.facts.generation}/${program.generation}`);\n }\n // @ref LLP 1012#5-retention-revocation-and-the-fence \u2014 rule 4's twin-side\n // meaning: a held row of a `retain delivered-history` table is readable.\n const readable = Object.keys(program.schema.tables ?? {})\n .filter((name) => program.schema.tables![name]?.retain === \"delivered-history\");\n const overlay = await this.sources.overlay();\n const entries = await this.sources.entries();\n const predicted: string[] = [];\n // Only the tagger/hasher's closed failure set means this coverage was not\n // delivered under the held program. Store construction and overlay\n // mutation sit outside this catch: their bugs must never look hydrating.\n const closure = tagged(closureFromCoverage, coverage, program.schema, program.schemaHash);\n if (!closure) return decline(\"closure\");\n const store = new ClientStore(program.schema, closure, { readable });\n for (const entry of entries) {\n const rows = overlay[entry.intent];\n if (!rows) continue;\n for (const row of rows) {\n if (row.removed) store.remove(row.table, row.id);\n else {\n const value = tagged(tagWireRow, program.schema, row.table, row.row as Record<string, WireValue>);\n if (!value) return decline(`overlay-row:${row.table}`);\n store.put(row.table, value);\n }\n }\n predicted.push(entry.intent);\n }\n return { program, coverage, store, predicted };\n }\n}\n", "import { throwIfAborted } from \"./client-wire.js\";\nimport {\n DeliveryEnvelopeDecodeError,\n decodeDeliveryEnvelope,\n expandRows,\n type DeliveryEnvelopeV1,\n} from \"./offline-protocol.js\";\nimport { OutboxLedger, decodeGrant } from \"./store/outbox.js\";\nimport {\n canonicalAnswerKey,\n type Coverage,\n type CoverageFacts,\n type HeldAnswer,\n type HeldOperation,\n type HeldProgram,\n type OfflineSchema,\n type OutboxEntry,\n type OutboxGrant,\n type RangeStore,\n type RetentionPolicy,\n type RowRef,\n type StoreDelivery,\n type StoreRefresh,\n type StoreTombstone,\n type WatermarkRecord,\n tailWatermark,\n} from \"./store/range-store.js\";\nimport { ByteCache } from \"./store/byte-cache.js\";\nimport { Twin, type LocalAnswer, type Prediction } from \"./twin.js\";\nimport type { Manifest, OfflineClientOptions, OutboxSettlement } from \"./types.js\";\n\n/**\n * Ids a certified mutation can mint: the certificate's insert/upsert bounds, which\n * already price every row the program creates. A program without a certificate\n * has no bound, and an offline write against it refuses rather than guessing.\n */\nexport function certificateMaxNewIds(program: unknown): number | undefined {\n if (!object(program)) return undefined;\n const certificate = program.certificate;\n if (!object(certificate) || !Array.isArray(certificate.write_sites)) return undefined;\n let total = 0;\n for (const site of certificate.write_sites) {\n if (!object(site)) continue;\n if ((site.kind === \"Insert\" || site.kind === \"Upsert\") && Number.isSafeInteger(site.max_rows)) {\n total += Number(site.max_rows);\n }\n }\n return total;\n}\n\n// The tail chooser lives with the store, which keys the overlay drop by it; the\n// settlement tail and the resume's `log` import it from here as before.\nexport { tailWatermark };\n\nexport interface MountedQuery {\n op: string;\n args: unknown;\n drain: boolean;\n}\n\nexport interface ResumeRequestV1 {\n protocol: 1;\n generation: string;\n schemaHash: string;\n authEpoch: number;\n log?: { op: string; args: unknown; watermark: string | null; validator?: string };\n mounted: Array<{ op: string; args: unknown; validator: string }>;\n}\n\nexport interface ResumeAdjustment {\n which?: string;\n cap?: number;\n}\n\nexport interface AcceptedDelivery<Result> {\n result: {\n state: \"complete\" | \"capped\" | \"partial\" | \"denied\";\n data?: Result;\n next?: string | null;\n seq: number;\n reason?: string;\n rule?: string;\n };\n envelope?: DeliveryEnvelopeV1;\n refresh?: StoreRefresh;\n}\n\ntype ResumeFacts = CoverageFacts;\n\n/**\n * `GET /api/program` as custody: the shape the twin holds per generation.\n * Anything malformed is refused here rather than evaluated later.\n */\nexport function decodeHeldProgram(value: unknown): HeldProgram | undefined {\n if (!object(value)) return undefined;\n const { generation, schemaHash, schema, programs } = value;\n if (typeof generation !== \"string\" || typeof schemaHash !== \"string\" || !object(schema) || !object(schema.tables) || !object(programs)) {\n return undefined;\n }\n const held: Record<string, HeldOperation> = {};\n for (const [name, entry] of Object.entries(programs)) {\n if (!object(entry) || (entry.kind !== \"query\" && entry.kind !== \"mutation\")) continue;\n if (typeof entry.planHash !== \"string\" || !object(entry.ir) || !object(entry.certificate)) continue;\n // The payload binds each op to one certificate: the plan hashes must agree.\n if (entry.certificate.plan_hash !== entry.planHash) continue;\n held[name] = { kind: entry.kind, planHash: entry.planHash, ir: entry.ir, certificate: entry.certificate };\n }\n return { generation, schemaHash, schema: schema as HeldProgram[\"schema\"], programs: held };\n}\n\n// @ref LLP 1012#15-diagnostics \u2014 a local authority violation (a delivery for\n// another principal or auth epoch; a commit with no partition open) has its\n// own code: it is never `E_OFFLINE_RESET`, which drops held coverage, so a\n// healthy store is refused a delivery and keeps everything. A delivery under\n// another generation or schema is not a violation but a rotation: it is not\n// held, and the coverage is superseded until the reset path (`commitMany`).\nexport class OfflineAuthorityError extends Error {\n readonly code = \"E_OFFLINE_AUTHORITY\";\n constructor(message: string) {\n super(message);\n this.name = \"OfflineAuthorityError\";\n }\n}\n\nfunction object(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** The argument the manifest types `Cursor` (or `Optional(Cursor)`), by name order as the server picks it. */\nfunction cursorArgument(args: unknown): string | undefined {\n if (!object(args)) return undefined;\n for (const name of Object.keys(args).sort()) {\n const kind = args[name];\n if (kind === \"Cursor\" || (object(kind) && kind.Optional === \"Cursor\")) return name;\n }\n return undefined;\n}\n\nfunction rowKey(ref: RowRef): string {\n return `${ref.table}\\u0000${ref.id}`;\n}\n\n/**\n * Walks the envelope's reference form beside its expansion and nulls every `$row`\n * that names a viewed view-once row, so a live frame or a fresh query never\n * re-renders what `answer()` already hides (LLP 1012 \u00A79).\n */\nfunction nullViewed(reference: unknown, expanded: unknown, viewed: Set<string>): unknown {\n if (!object(reference)) {\n return Array.isArray(reference) && Array.isArray(expanded)\n ? expanded.map((item, index) => nullViewed(reference[index], item, viewed))\n : expanded;\n }\n const marker = reference.$row;\n if (object(marker) && Object.keys(reference).length === 1) {\n if (typeof marker.table === \"string\" && typeof marker.id === \"string\" && Object.keys(marker).length === 2) {\n return viewed.has(rowKey({ table: marker.table, id: marker.id })) ? null : expanded;\n }\n if (object(marker.$value) && object(expanded)) return nullViewed(marker.$value, expanded, viewed);\n }\n if (!object(expanded)) return expanded;\n return Object.fromEntries(Object.entries(expanded)\n .map(([key, item]) => [key, nullViewed(reference[key], item, viewed)]));\n}\n\nfunction resumeWhichMatches(which: string | undefined, op: string, args: unknown): boolean {\n if (!which) return false;\n return which === op || which === canonicalAnswerKey(op, args);\n}\n\nexport class OfflineRuntime {\n readonly store: RangeStore;\n readonly fenceDays: number;\n readonly maxAssetBytes: number;\n /** Asset bytes beside the rows, under their lease (LLP 1012 \u00A79); lane O4. */\n readonly bytes: ByteCache;\n readonly outbox: OutboxLedger;\n /** The replay currently in flight; the next drain queues behind it. Never rejects. */\n drainTail: Promise<void> = Promise.resolve();\n /**\n * The last drain's outcome, rejection kept: `settled()` awaits this so a\n * non-retryable refusal that stopped the replay reaches the caller instead of\n * resolving with intents still queued (LLP 1012 \u00A77).\n */\n drainOutcome: Promise<OutboxSettlement> = Promise.resolve();\n /** The twin: the certified program over this partition's coverage (LLP 1012 \u00A76, \u00A77). */\n readonly twin: Twin;\n private partition?: string;\n private retention: Record<string, RetentionPolicy> = {};\n private cursors: Record<string, string> = {};\n private schema?: OfflineSchema;\n private facts?: ResumeFacts;\n /** Set by a delivery under another generation or schema: held coverage is stale-exact until the reset path (LLP 1012 \u00A78). */\n private superseded?: CoverageFacts;\n private latestSeq = 0;\n private sessionEpoch?: number;\n private pendingGrant?: OutboxGrant;\n private pendingBounds?: Record<string, number>;\n private pendingProgram?: HeldProgram;\n private held?: HeldProgram;\n private standIn?: string;\n private resumeQueries: MountedQuery[] = [];\n private tail: Promise<void> = Promise.resolve();\n /** Fences deliveries already in flight when coverage or principal is replaced. */\n coverageRevision = 0;\n\n constructor(private readonly options: OfflineClientOptions) {\n this.store = options.store();\n this.fenceDays = options.fenceDays ?? 7;\n this.maxAssetBytes = options.maxAssetBytes ?? 256 * 1024 * 1024;\n this.bytes = new ByteCache(this.store, { maxAssetBytes: this.maxAssetBytes, viewOnce: options.viewOnce });\n this.outbox = new OutboxLedger(this.store, {\n now: () => Date.now(),\n fenceMs: this.fenceDays * 24 * 60 * 60 * 1_000,\n });\n this.twin = new Twin({\n program: () => this.held,\n coverage: () => this.coverage(),\n overlay: () => this.store.outbox.overlay(),\n entries: () => this.outbox.entries(),\n principal: () => this.partition,\n now: () => Date.now(),\n seq: () => this.latestSeq,\n });\n }\n\n get principal(): string | undefined { return this.partition; }\n\n /** The generation of the certified program this partition holds, if any. */\n get programGeneration(): string | undefined { return this.held?.generation; }\n\n /** A live delivery rotated past the held coverage; only the reset resume may clear it. */\n get resetNeeded(): boolean { return this.superseded !== undefined; }\n\n /** The twin's answer for a query, or `undefined` when it cannot run (no program, another generation). */\n async evaluate(op: string, args: unknown): Promise<LocalAnswer | undefined> {\n if (this.partition === undefined) return undefined;\n return this.twin.evaluate(op, args);\n }\n\n /** The twin's run of a mutation over held rows with the intent's pinned ids. */\n async predict(op: string, args: unknown, ids: string[]): Promise<Prediction> {\n return this.twin.predict(op, args, ids);\n }\n\n /** The highest server seq this runtime has committed; what a queued intent was issued against. */\n get seq(): number { return this.latestSeq; }\n\n async open(principal: string, authenticated = false): Promise<void> {\n if (this.partition !== principal) this.outbox.resetTrust();\n // The session allowance is dropped before the first await of a partition change:\n // a byte read that lands between the carrier's open and bind() must never hand\n // the previous principal's blob to the incoming partition (grok, O4-web round 2).\n if (this.partition !== undefined && this.partition !== principal) this.bytes.forget();\n await this.serial(async () => {\n if (this.partition !== principal) {\n this.outbox.resetTrust();\n this.facts = undefined;\n this.superseded = undefined;\n this.held = undefined;\n this.standIn = undefined;\n this.drainOutcome = Promise.resolve();\n }\n if (this.partition !== undefined && this.partition !== principal) await this.store.wipe(this.partition);\n if (this.partition !== principal) {\n this.coverageRevision += 1;\n this.facts = this.superseded = this.held = undefined;\n this.latestSeq = 0;\n this.sessionEpoch = undefined;\n }\n await this.store.open(principal);\n if (authenticated) await this.store.unseal();\n this.partition = principal;\n this.bytes.bind(principal);\n await this.loadFacts();\n await this.loadProgram();\n await this.flushGrant();\n await this.flushBounds();\n this.outbox.notify();\n });\n }\n\n /** Called only after the owner authenticated this exact principal. */\n async reauthenticate(principal: string): Promise<void> {\n await this.serial(async () => {\n if (this.partition !== principal) {\n throw new OfflineAuthorityError(`authenticated principal ${principal} does not match the open offline partition`);\n }\n await this.store.unseal();\n await this.loadFacts();\n await this.loadProgram();\n await this.flushGrant();\n await this.flushBounds();\n this.outbox.notify();\n });\n }\n\n /**\n * Records the `grant` a login, guest, or resume response carries. The\n * partition may not be open yet (login opens it next), so the grant waits\n * until the store for this principal is writable. Returns its input.\n */\n noteGrant<T>(value: T): T {\n const grant = decodeGrant(value);\n if (grant) this.pendingGrant = grant;\n return value;\n }\n\n async adoptPendingGrant(): Promise<void> {\n await this.serial(() => this.flushGrant());\n }\n\n /** True when a resume request's `log` is an ordinary answer standing in for a drained log. */\n standInLog(log: { op: string; args: unknown }): boolean {\n return this.standIn !== undefined && this.standIn === canonicalAnswerKey(log.op, log.args);\n }\n\n async queuedIntents(): Promise<OutboxEntry[]> {\n if (this.partition === undefined) return [];\n return this.outbox.queued();\n }\n\n async seal(): Promise<void> {\n this.outbox.resetTrust();\n if (this.partition === undefined) return;\n await this.serial(async () => {\n this.bytes.forget();\n await this.store.seal();\n this.outbox.notify();\n });\n }\n\n async wipe(): Promise<void> {\n this.outbox.resetTrust();\n await this.serial(async () => {\n if (this.partition === undefined) return;\n const partition = this.partition;\n this.coverageRevision += 1;\n this.partition = undefined;\n this.facts = undefined;\n this.superseded = undefined;\n this.held = undefined;\n this.sessionEpoch = undefined;\n this.bytes.bind(undefined);\n await this.store.wipe(partition);\n this.outbox.notify();\n });\n }\n\n async close(): Promise<void> {\n this.outbox.resetTrust();\n await this.tail;\n this.outbox.close();\n this.bytes.forget();\n await this.store.close?.();\n }\n\n manifest(value: Manifest): void {\n const tables = value.tables ?? value.schema?.tables ?? {};\n const retention: Record<string, RetentionPolicy> = {};\n for (const [name, table] of Object.entries(tables)) {\n if (!table || typeof table !== \"object\") continue;\n const word = (table as { retain?: unknown }).retain;\n if (word === \"until-revoked\" || word === \"delivered-history\") retention[name] = word;\n }\n this.retention = retention;\n const cursors: Record<string, string> = {};\n for (const [name, operation] of Object.entries(value.ops ?? {})) {\n const cursor = cursorArgument((operation as { args?: unknown } | undefined)?.args);\n if (cursor !== undefined) cursors[name] = cursor;\n }\n this.cursors = cursors;\n // A fresh login has no receipt/auth epoch. A parameter-free query (including\n // optional cursor arguments) can earn those facts before a logless resume.\n this.resumeQueries = Object.entries(value.ops ?? {}).flatMap(([op, operation]) => {\n if (operation.kind !== \"query\" || !object(operation.args)) return [];\n if (!Object.values(operation.args).every((arg) => object(arg) && \"Optional\" in arg)) return [];\n return [{ op, args: Object.fromEntries(Object.keys(operation.args).map((key) => [key, null])), drain: false }];\n });\n if (value.schema?.tables) this.schema = value.schema as OfflineSchema;\n }\n\n /**\n * The op's cursor argument as the manifest names it (the server keys the resume tail\n * by that argument's type, never its name); `c`, the recipe's spelling, until the\n * manifest is loaded.\n */\n cursorArg(op: string): string {\n return this.cursors[op] ?? \"c\";\n }\n\n /**\n * Records `/api/program`: the schema, the certified program held for the twin\n * keyed by its generation, and each op's write bound \u2014 persisted together\n * with the outbox so a cold start with the owner cut evaluates and prices its\n * slices from the certificate, never from a guess (LLP 1012 \u00A77, \u00A78).\n */\n async program(value: unknown, signal?: AbortSignal): Promise<void> {\n throwIfAborted(signal);\n if (!object(value) || !object(value.programs)) return;\n const bounds: Record<string, number> = {};\n for (const [name, program] of Object.entries(value.programs)) {\n const bound = certificateMaxNewIds(program);\n if (bound !== undefined) bounds[name] = bound;\n }\n const held = decodeHeldProgram(value);\n // Always acquire the runtime queue before the ledger, as open() does when\n // adopting a login grant. Cancellation is checked at each queue boundary.\n await this.serial(() => {\n throwIfAborted(signal);\n return this.outbox.write(async () => {\n throwIfAborted(signal);\n // Custody must succeed before a reset can erase the predecessor coverage.\n if (this.partition !== undefined) {\n await this.store.commit({ bounds, ...(held ? { programs: { [held.generation]: held } } : {}) });\n throwIfAborted(signal);\n } else {\n this.pendingBounds = bounds;\n this.pendingProgram = held;\n }\n if (held) { this.held = held; this.schema = held.schema; }\n this.outbox.notify();\n });\n });\n }\n\n async accept<Result>(op: string, args: unknown, raw: unknown): Promise<AcceptedDelivery<Result>> {\n if (object(raw) && raw.state === \"unchanged\") {\n if (Object.keys(raw).sort().join(\",\") !== \"seq,state,validator\"\n || !Number.isSafeInteger(raw.seq) || Number(raw.seq) < 0\n || typeof raw.validator !== \"string\" || !/^[0-9a-f]{64}$/.test(raw.validator)) {\n throw new DeliveryEnvelopeDecodeError(\"$\", \"conditional delivery must be { state, seq, validator }\");\n }\n const held = await this.answer<Result>(op, args);\n if (!held || held.validator !== raw.validator) {\n throw new DeliveryEnvelopeDecodeError(\"$.validator\", \"does not match the held answer\");\n }\n const result = {\n state: held.state,\n ...(held.data === undefined ? {} : { data: held.data }),\n ...(held.next === undefined ? {} : { next: held.next }),\n seq: raw.seq as number,\n ...(held.reason === undefined ? {} : { reason: held.reason }),\n ...(held.rule === undefined ? {} : { rule: held.rule }),\n } as AcceptedDelivery<Result>[\"result\"];\n return {\n result,\n refresh: { op, args, seq: raw.seq as number, validator: raw.validator, deliveredAt: Date.now() },\n };\n }\n if (!object(raw) || raw.protocol === undefined) {\n return { result: raw as AcceptedDelivery<Result>[\"result\"] };\n }\n const envelope = decodeDeliveryEnvelope(raw);\n const result: AcceptedDelivery<Result>[\"result\"] = {\n state: envelope.state,\n ...(envelope.state === \"denied\" ? {} : { data: await this.expandUnviewed(envelope) as Result }),\n ...(envelope.state === \"complete\" || envelope.state === \"capped\" ? { next: envelope.next } : {}),\n seq: envelope.seq,\n ...(envelope.reason === undefined ? {} : { reason: envelope.reason }),\n ...(envelope.rule === undefined ? {} : { rule: envelope.rule }),\n };\n return { result, envelope };\n }\n\n async commit(op: string, args: unknown, accepted: AcceptedDelivery<unknown>, revision = this.coverageRevision, current?: () => boolean): Promise<boolean> {\n return this.commitMany([{ op, args, accepted }], undefined, undefined, revision, current);\n }\n\n async commitMany(\n items: Array<{ op: string; args: unknown; accepted: AcceptedDelivery<unknown> }>,\n watermark?: Omit<WatermarkRecord, \"generation\" | \"schemaHash\" | \"authEpoch\" | \"updatedAt\">,\n outbox?: { put?: OutboxEntry[]; remove?: string[] },\n revision?: number,\n current?: () => boolean,\n resumeSeq?: number,\n ): Promise<boolean> {\n if (items.length === 0 && !watermark && !outbox && resumeSeq === undefined) return false;\n // An outbox write shares the ledger's tail (one critical section for every\n // enqueue, adoption, bound, settlement, and prediction drop), acquired\n // inside the runtime queue just like program and grant adoption.\n const run = async () => {\n if ((current && !current()) || (revision !== undefined && revision !== this.coverageRevision)) return false;\n if (this.partition === undefined) {\n throw new OfflineAuthorityError(\"an offline partition must be opened before committing a delivery\");\n }\n const deliveries: StoreDelivery[] = [];\n const refreshes: StoreRefresh[] = [];\n const tombstones: StoreTombstone[] = [];\n let nextFacts = this.facts;\n let superseded = this.superseded;\n let sawSupersession = false;\n for (const { op, args, accepted } of items) {\n const envelope = accepted.envelope;\n if (envelope && envelope.authority.principal !== this.partition) {\n throw new OfflineAuthorityError(\n `delivery principal ${envelope.authority.principal} does not match open partition ${this.partition}`,\n );\n }\n if (accepted.refresh) {\n refreshes.push(accepted.refresh);\n continue;\n }\n if (envelope) {\n // The first authenticated delivery establishes session authority. A\n // program reset keeps that epoch: the owner's 409 checked it before\n // checking generation. A successor envelope cannot choose a new epoch.\n if (this.sessionEpoch !== undefined && envelope.authority.authEpoch !== this.sessionEpoch) {\n throw new OfflineAuthorityError(\"delivery auth epoch does not match the authenticated session\");\n }\n if (!nextFacts && this.held) nextFacts = {\n generation: this.held.generation, schemaHash: this.held.schemaHash,\n authEpoch: this.sessionEpoch ?? envelope.authority.authEpoch,\n };\n // @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 a\n // rotation: the server now runs another generation or schema. The\n // delivery is not held (one generation per partition), the caller\n // still gets the live answer, and the held coverage is marked\n // superseded so the twin serves nothing stale-exact from it; the next\n // resume carries the old facts, is refused `E_OFFLINE_RESET`, and the\n // reset path drops the coverage and re-fetches the program.\n if (nextFacts && (envelope.generation !== nextFacts.generation || envelope.schemaHash !== nextFacts.schemaHash)) {\n superseded = { generation: envelope.generation, schemaHash: envelope.schemaHash, authEpoch: envelope.authority.authEpoch };\n sawSupersession = true;\n continue;\n }\n // Another auth epoch under the same program is a local authority\n // violation: refused, and the coverage kept (LLP 1012 \u00A715).\n if (nextFacts && envelope.authority.authEpoch !== nextFacts.authEpoch) {\n throw new OfflineAuthorityError(\"delivery auth epoch does not match the open coverage\");\n }\n nextFacts = {\n generation: envelope.generation,\n schemaHash: envelope.schemaHash,\n authEpoch: envelope.authority.authEpoch,\n };\n }\n const source = envelope ?? accepted.result;\n deliveries.push({\n cursorArg: this.cursorArg(op),\n op,\n args,\n state: source.state,\n ...(source.data === undefined ? {} : { data: source.data }),\n ...(source.next === undefined ? {} : { next: source.next }),\n seq: source.seq,\n ...(envelope?.validator === undefined ? {} : { validator: envelope.validator }),\n ...(envelope?.receipt === undefined ? {} : { receipt: envelope.receipt }),\n ...(envelope?.rows === undefined ? {} : { rows: envelope.rows }),\n ...(\"reason\" in source && typeof source.reason === \"string\" ? { reason: source.reason } : {}),\n ...(\"rule\" in source && typeof source.rule === \"string\" ? { rule: source.rule } : {}),\n deliveredAt: Date.now(),\n });\n for (const row of envelope?.rows ?? []) {\n for (const ref of this.options.onTombstone?.(row) ?? []) tombstones.push({ ...ref, seq: envelope!.seq });\n }\n }\n // A settlement may only persist beside a tail actually admitted under\n // this coverage. A successor tail leaves the intent queued for replay.\n const settlement = sawSupersession ? undefined : outbox;\n const watermarkRecord = !sawSupersession && watermark ? {\n ...watermark,\n cursorArg: this.cursorArg(watermark.op),\n ...(nextFacts?.generation === undefined ? {} : { generation: nextFacts.generation }),\n ...(nextFacts?.schemaHash === undefined ? {} : { schemaHash: nextFacts.schemaHash }),\n ...(nextFacts?.authEpoch === undefined ? {} : { authEpoch: nextFacts.authEpoch }),\n updatedAt: Date.now(),\n } : undefined;\n await this.store.commit({\n deliveries,\n refreshes,\n tombstones,\n retention: this.retention,\n schema: this.schema,\n ...(watermarkRecord ? { watermark: watermarkRecord } : {}),\n ...(settlement ? { outbox: settlement } : {}),\n // A resume counts toward overlay retirement only under the coverage it\n // resumed; a successor tail persists nothing but its pending marker.\n ...(resumeSeq === undefined || sawSupersession ? {} : { resumeSeq }),\n ...(nextFacts && nextFacts !== this.facts ? { facts: nextFacts } : {}),\n ...(superseded && superseded !== this.superseded ? { superseded } : {}),\n });\n this.facts = nextFacts;\n this.sessionEpoch ??= nextFacts?.authEpoch;\n this.superseded = superseded;\n for (const item of [...deliveries, ...refreshes]) this.latestSeq = Math.max(this.latestSeq, item.seq);\n // A delivery or unchanged resume can clear a committed entry's predicted flag.\n this.outbox.notify();\n return sawSupersession;\n };\n return this.serial(() => outbox ? this.outbox.write(run) : run());\n }\n\n async answer<Result>(op: string, args: unknown): Promise<HeldAnswer<Result> | undefined> {\n // Superseded coverage answers nothing: not served offline, and its validators\n // are never sent, so a conditional `unchanged` cannot carry a stale answer forward.\n if (!this.coverageCurrent()) return undefined;\n const revision = this.coverageRevision;\n const answer = await this.store.answer<Result>(op, args);\n return revision === this.coverageRevision && this.coverageCurrent() ? answer : undefined;\n }\n\n private coverageCurrent(): boolean {\n return this.partition !== undefined && this.superseded === undefined\n && (!this.facts || !this.held || (this.facts.generation === this.held.generation\n && this.facts.schemaHash === this.held.schemaHash));\n }\n\n /** The envelope's data with every viewed view-once row read as `null`, on the wire as in the store. */\n private async expandUnviewed(envelope: DeliveryEnvelopeV1): Promise<unknown> {\n const expanded = expandRows(envelope);\n const store = this.store as Partial<{ viewedRows(): Promise<RowRef[]> }>;\n if (this.partition === undefined || typeof store.viewedRows !== \"function\") return expanded;\n const viewed = new Set((await store.viewedRows()).map(rowKey));\n return viewed.size === 0 ? expanded : nullViewed(envelope.data, expanded, viewed);\n }\n\n async markWatermark(op: string, args: unknown, watermark: string | null, validator?: string, revision = this.coverageRevision): Promise<void> {\n if (this.partition === undefined) return;\n await this.commitMany([], { op, args, watermark, ...(validator === undefined ? {} : { validator }) }, undefined, revision);\n }\n\n async resumeRequest(\n mounted: MountedQuery[],\n adjustment: ResumeAdjustment = {},\n ): Promise<ResumeRequestV1 | undefined> {\n if (this.partition === undefined || !this.facts) return undefined;\n // The owner checks authority and generation before processing queries. A\n // reset probe needs only old facts, never old validators or a drained log.\n if (!this.coverageCurrent()) return { protocol: 1, ...this.facts, mounted: [] };\n const coverage = await this.store.coverage();\n // The same chooser as the settlement tail (`tailWatermark`), so the log a\n // resume asks for is the log a committed intent's rows are filed under.\n const watermark = tailWatermark(coverage.watermarks);\n const cap = Math.max(0, Math.min(32, Number.isSafeInteger(adjustment.cap) ? adjustment.cap! : 32));\n const candidates = mounted.filter((query) => !query.drain\n && query.op !== watermark?.op\n && !resumeWhichMatches(adjustment.which, query.op, query.args));\n const indexedWhich = adjustment.which?.match(/^mounted\\[(\\d+)\\]$/)?.[1];\n if (indexedWhich !== undefined) candidates.splice(Number(indexedWhich), 1);\n const mountedAnswers = (await Promise.all(candidates.slice(0, cap).map(async (query) => ({\n query,\n answer: await this.answer(query.op, query.args),\n })))).filter((item): item is { query: MountedQuery; answer: HeldAnswer & { validator: string } } =>\n typeof item.answer?.validator === \"string\");\n // A delivery can supersede coverage while the carrier reads are in flight.\n if (!this.facts) return undefined;\n if (!this.coverageCurrent()) return { protocol: 1, ...this.facts, mounted: [] };\n const omitLog = adjustment.which === \"log\"\n || (watermark !== undefined && resumeWhichMatches(adjustment.which, watermark.op, watermark.args));\n // Without a drained log the owner still needs one member to answer, and the\n // device still needs the grant a resume returns: the first held mounted\n // answer stands in, with a null watermark, and leaves no watermark behind.\n const standIn = !watermark && !omitLog ? mountedAnswers.shift() : undefined;\n this.standIn = standIn ? canonicalAnswerKey(standIn.query.op, standIn.query.args) : undefined;\n if (!watermark && !standIn && (await this.queuedIntents()).length === 0) return undefined;\n return {\n protocol: 1,\n ...this.facts,\n ...(standIn ? {\n log: { op: standIn.query.op, args: standIn.query.args, watermark: null, validator: standIn.answer.validator },\n } : !watermark || omitLog ? {} : {\n log: {\n op: watermark.op,\n args: watermark.args,\n watermark: watermark.watermark,\n ...(watermark.validator === undefined ? {} : { validator: watermark.validator }),\n },\n }),\n mounted: mountedAnswers.map(({ query, answer }) => ({\n op: query.op,\n args: query.args,\n validator: answer.validator,\n })),\n };\n }\n\n async resetCoverage(authEpoch?: number, signal?: AbortSignal): Promise<void> {\n // The fence's trust anchor belongs to the coverage being replaced.\n this.outbox.resetTrust();\n if (this.partition !== undefined) await this.serial(async () => {\n throwIfAborted(signal);\n const epoch = authEpoch ?? this.sessionEpoch ?? this.facts?.authEpoch;\n const facts = this.held && epoch !== undefined ? {\n generation: this.held.generation, schemaHash: this.held.schemaHash, authEpoch: epoch,\n } : undefined;\n // Keep a durable pending marker through the entire rebuild, including a\n // crash after program adoption. Facts let a cold restart authenticate its\n // resume even before any fresh query has committed.\n const superseded = facts ?? this.superseded ?? this.facts;\n await this.store.commit({ resetCoverage: true, facts, superseded });\n this.coverageRevision += 1;\n this.facts = facts;\n this.sessionEpoch = epoch;\n this.superseded = superseded;\n });\n }\n\n /** Clear only the rebuild we completed, never a successor discovered during it. */\n async completeReset(revision: number, signal?: AbortSignal): Promise<boolean> {\n return this.serial(async () => {\n throwIfAborted(signal);\n if (revision !== this.coverageRevision) return false;\n if (!this.superseded) return true;\n if (!this.facts || !this.held || this.facts.generation !== this.held.generation\n || this.facts.schemaHash !== this.held.schemaHash\n || this.superseded.generation !== this.held.generation\n || this.superseded.schemaHash !== this.held.schemaHash) return false;\n await this.store.commit({ superseded: null });\n this.superseded = undefined;\n return true;\n });\n }\n\n async coverage(): Promise<Coverage | undefined> {\n return this.partition === undefined ? undefined : this.store.coverage();\n }\n\n /** A real query earns the authority facts; metadata alone never renews trust. */\n async resumeSeed(mounted: MountedQuery[]): Promise<MountedQuery | undefined> {\n if (this.partition === undefined) return undefined;\n const coverage = await this.store.coverage();\n const held = tailWatermark(coverage.watermarks);\n // Prefer the mounted drain, then the recorded log, then the first manifest\n // query with a Cursor and known arguments, then the first all-optional query.\n // An ordinary mounted query must not displace the app's chosen delivery log.\n const log = mounted.find((query) => query.drain);\n if (log) return log;\n if (held) return { op: held.op, args: held.args, drain: true };\n for (const op of Object.keys(this.cursors)) {\n const query = mounted.find((query) => query.op === op) ?? this.resumeQueries.find((query) => query.op === op);\n if (query) return query;\n }\n return this.resumeQueries[0] ?? mounted[0];\n }\n\n private async flushGrant(): Promise<void> {\n const grant = this.pendingGrant;\n if (!grant || this.partition === undefined) return;\n this.pendingGrant = undefined;\n try {\n await this.outbox.adopt(grant);\n } catch (error) {\n this.pendingGrant = grant;\n throw error;\n }\n }\n\n private async flushBounds(): Promise<void> {\n const bounds = this.pendingBounds;\n if (!bounds || this.partition === undefined) return;\n const program = this.pendingProgram;\n this.pendingBounds = undefined;\n this.pendingProgram = undefined;\n try {\n // One generation is held at a time: the program replaces its predecessor whole.\n await this.outbox.recordBounds(bounds, program === undefined ? undefined : { [program.generation]: program });\n } catch (error) {\n this.pendingBounds = bounds;\n this.pendingProgram = program;\n throw error;\n }\n }\n\n private async loadProgram(): Promise<void> {\n let programs: Record<string, HeldProgram>;\n // Custody like the outbox: sealed with it, read again on unseal.\n try { programs = await this.store.outbox.programs(); } catch { return; }\n const held = Object.values(programs)[0];\n if (held) this.held = held;\n if (held && this.schema === undefined) this.schema = held.schema;\n }\n\n private async loadFacts(): Promise<void> {\n const coverage = await this.store.coverage();\n this.superseded = coverage.superseded;\n if (coverage.facts) {\n this.facts = coverage.facts;\n this.sessionEpoch ??= coverage.facts.authEpoch;\n return;\n }\n const watermark = tailWatermark(coverage.watermarks);\n if (watermark?.generation && watermark.schemaHash && watermark.authEpoch !== undefined) {\n this.facts = {\n generation: watermark.generation,\n schemaHash: watermark.schemaHash,\n authEpoch: watermark.authEpoch,\n };\n }\n }\n\n private serial<T>(action: () => Promise<T>): Promise<T> {\n const run = this.tail.then(action);\n this.tail = run.then(() => undefined, () => undefined);\n return run;\n }\n}\n\n/**\n * The offline view of a query: the twin's local answer when it ran and is at\n * least as exact as the held one, else the held answer, else `hydrating`. A\n * held answer's facts (`seq`, `since`, the drain's watermark, `retained`) stay\n * with the twin's data: the stored answer is the covered case, not a second\n * mechanism (LLP 1012 \u00A76).\n */\nexport function offlineView<Result>(held: HeldAnswer<Result> | undefined, local?: LocalAnswer): any {\n const exactHeld = held !== undefined && (held.state === \"complete\" || held.state === \"capped\");\n const useLocal = local !== undefined && !(local.state === \"partial\" && exactHeld) && !held?.retained;\n if (!useLocal) {\n if (!held) return { state: \"hydrating\", live: false, connection: \"offline\" };\n const {\n op: _op,\n args: _args,\n receipt: _receipt,\n validator: _validator,\n deliveredAt,\n ...answer\n } = held;\n return {\n ...answer,\n live: false,\n connection: \"offline\",\n stale: { since: deliveredAt },\n };\n }\n const { since, ...answer } = local;\n const facts = held === undefined ? {} : {\n seq: held.seq,\n ...(held.caughtUp === undefined ? {} : { caughtUp: held.caughtUp }),\n ...(held.watermark === undefined ? {} : { watermark: held.watermark }),\n };\n return {\n ...answer,\n ...facts,\n live: false,\n connection: \"offline\",\n stale: { since: held?.deliveredAt ?? since ?? Date.now() },\n };\n}\n", "// @ref LLP 1012#7-writes-offline \u2014 writes that cannot reach the owner become\n// durable intents; replay is FIFO, one envelope per request, and a settlement\n// lands in the same swap as the rows the commit produced.\nimport { throwIfAborted } from \"./client-wire.js\";\nimport {\n SnapbackRefusal,\n isSnapbackRefusal,\n wireMutation,\n wireObject,\n wireQuery,\n wireRefusalEnvelope,\n wireShape,\n} from \"./client-wire.js\";\nimport { DeliveryEnvelopeDecodeError } from \"./offline-protocol.js\";\nimport { tailWatermark, type AcceptedDelivery, type OfflineRuntime } from \"./offline.js\";\nimport { replayEnvelope, type OutboxEntry } from \"./store/outbox.js\";\nimport { referenceName } from \"./api.js\";\nimport type { MutationResult, OutboxApi } from \"./types.js\";\n\n/** Records the grant a login/guest response carries; the value passes through untouched. */\nexport function captureGrant<T>(runtime: OfflineRuntime | undefined, value: T): T {\n return runtime ? runtime.noteGrant(value) : value;\n}\n\n/**\n * The replayed mutation's terminal object: today's committed/rejected shapes\n * plus the trace conflict, which carries no diagnostic code of its own on the\n * wire and is given the client-side `E_OFFLINE_CONFLICT` envelope here.\n */\nexport function wireReplayResponse<Result>(value: unknown): MutationResult<Result> & { intent?: string } {\n const surface = \"replayed mutation response\";\n const record = wireObject(value, surface);\n const intent = typeof record.intent === \"string\" ? { intent: record.intent } : {};\n if (record.state === \"rejected\" && record.reason === \"conflict\") {\n if (record.site !== undefined && typeof record.site !== \"string\") throw wireShape(`${surface}.site must be a string`);\n const site = record.site as string | undefined;\n return {\n state: \"rejected\",\n reason: \"conflict\",\n code: \"E_OFFLINE_CONFLICT\",\n family: \"offline\",\n message: `the rows this write read have changed${site ? ` at ${site}` : \"\"}`,\n ...(site === undefined ? {} : { site }),\n rewrite: \"read the current row, then send the write again as a new intent\",\n guide: \"offline\",\n ...intent,\n };\n }\n const result = wireMutation<Result>(value);\n if (result.state === \"rejected\" && typeof record.reason === \"string\") return { ...result, reason: record.reason, ...intent };\n return { ...result, ...intent };\n}\n\ntype Transport = (path: string, init: RequestInit) => Promise<unknown>;\ntype DrainResult = { stopped: boolean; reason?: \"fence\" };\n\nexport interface SubmitMutationOptions {\n runtime: OfflineRuntime | undefined;\n /** The client's transport is cut (`client.offline()`); the owner is never tried. */\n offline: boolean;\n op: string;\n args: unknown;\n json: Transport;\n failure(error: unknown): Error;\n drain(): Promise<{ stopped: boolean }>;\n}\n\n/**\n * A client with no store (no partition open) sends today's bytes. With a\n * partition open every write carries the replay envelope, online or not: the\n * twin runs it locally for its ids and trace, the intent is durable before the\n * request, and the server's ledger makes the online path exactly-once too \u2014 a\n * 503 after a commit can no longer double-send (LLP 1002 \u00A79, LLP 1012 \u00A77). A\n * partition with no custody yet (no grant, or an unknown write bound) refuses\n * `E_OFFLINE_ID_BLOCK` with no request rather than fall back to plain bytes:\n * that window is exactly where a 503 after a commit would double-send.\n * Offline, behind queued intents a drain could not clear, or after a transport\n * failure, the write resolves `queued`.\n */\nexport async function submitMutation<Result>(options: SubmitMutationOptions): Promise<MutationResult<Result>> {\n const { runtime } = options;\n const plain = async () => wireMutation<Result>(await options.json(\"/api/mutation\", {\n method: \"POST\",\n body: JSON.stringify({ op: options.op, args: options.args }),\n }));\n if (!runtime || runtime.principal === undefined) return plain();\n const enqueue = async (): Promise<OutboxEntry> => {\n try {\n return await runtime.outbox.enqueue(\n { op: options.op, args: options.args, issuedSeq: runtime.seq },\n (ids) => runtime.predict(options.op, options.args, ids),\n );\n } catch (error) {\n throw options.failure(error);\n }\n };\n const queued = (entry: OutboxEntry): MutationResult<Result> => ({ state: \"queued\", intent: entry.intent, ids: entry.ids });\n if (options.offline) return queued(await enqueue());\n if ((await runtime.queuedIntents()).length > 0) {\n // FIFO: an intent issued behind queued ones must not overtake them. An\n // older intent's refusal is its own: it reaches `settled()` and\n // `useOutbox()`, never this call, which queues behind it.\n let stopped = true;\n try {\n ({ stopped } = await options.drain());\n } catch {\n stopped = true;\n }\n if (stopped) return queued(await enqueue());\n }\n const entry = await enqueue();\n let stopped: boolean;\n try {\n ({ stopped } = await options.drain());\n } catch (error) {\n // A refusal that stopped the replay belongs to the intent that drew it;\n // this one is durable and reports through its entry.\n const own = await runtime.store.outbox.get(entry.intent);\n if (own && own.state !== \"queued\") return settledResult<Result>(own, runtime);\n throw error;\n }\n const settled = await runtime.store.outbox.get(entry.intent);\n // A transport failure mid-drain leaves the intent queued: the retry is the same envelope.\n if (!settled || settled.state === \"queued\") return queued(entry);\n void stopped;\n return settledResult<Result>(settled, runtime);\n}\n\n/** An online write that settled in its own call: the terminal answer, with the entry retired from the queue. */\nasync function settledResult<Result>(entry: OutboxEntry, runtime: OfflineRuntime): Promise<MutationResult<Result>> {\n await runtime.outbox.dismiss(entry.intent);\n if (entry.state === \"expired\") {\n throw new SnapbackRefusal({\n code: \"E_OFFLINE_INTENT_EXPIRED\",\n family: \"offline\",\n message: \"the owner refused this intent because its replay grant is unknown, foreign, or older than thirty days\",\n site: \"client.outbox.replay\",\n rewrite: \"dismiss this intent, resume online for a fresh grant, then send again\",\n guide: \"offline\",\n });\n }\n return entry.response as MutationResult<Result>;\n}\n\nexport interface DrainOptions {\n signal?: AbortSignal;\n runtime: OfflineRuntime;\n json: Transport;\n shape(message: string): Error;\n failure(error: unknown): Error;\n}\n\n/**\n * Replays queued intents in order. A transport failure leaves the intent\n * queued and stops; a rejection, conflict, or refusal settles only that intent\n * and the drain continues. Past the fence, replay waits for a successful\n * resume; only the owner's `E_OFFLINE_INTENT_EXPIRED` refusal settles expired.\n */\nexport function drainOutbox(options: DrainOptions): Promise<DrainResult> {\n const { runtime } = options;\n const run = runtime.drainTail.then(() => drainQueued(options));\n runtime.drainTail = run.then(() => undefined, () => undefined);\n // The outcome keeps the rejection for `settled()`; the handler here only\n // stops an unobserved refusal from surfacing as an unhandled rejection.\n const outcome = run.then((result) => result.reason === \"fence\" ? { stopped: \"fence\" as const } : undefined);\n void outcome.catch(() => undefined);\n runtime.drainOutcome = outcome;\n return run;\n}\n\nasync function drainQueued(options: DrainOptions): Promise<DrainResult> {\n const { runtime } = options;\n throwIfAborted(options.signal);\n if (runtime.principal === undefined) return { stopped: false };\n for (const queued of await runtime.outbox.queued()) {\n throwIfAborted(options.signal);\n const entry = await runtime.store.outbox.get(queued.intent);\n throwIfAborted(options.signal);\n if (!entry || entry.state !== \"queued\") continue;\n // @ref LLP 1012#7-writes-offline \u2014 the fence never discards a queued\n // write: an intent neither its grant nor a later resume can vouch for\n // stops the drain, and only the owner's refusal can expire it.\n if (!(await runtime.outbox.canReplay(entry))) return { stopped: true, reason: \"fence\" };\n throwIfAborted(options.signal);\n let raw: unknown;\n try {\n raw = await options.json(\"/api/mutation\", { method: \"POST\", body: JSON.stringify(replayEnvelope(entry)) });\n } catch (error) {\n if (isSnapbackRefusal(error) && error.retryable) return { stopped: true };\n if (isSnapbackRefusal(error) && error.envelope.family === \"offline\") {\n await settle(\n options,\n entry,\n error.code === \"E_OFFLINE_INTENT_EXPIRED\" ? \"expired\" : \"rejected\",\n { state: \"rejected\", ...wireRefusalEnvelope(error.envelope, \"offline refusal\"), intent: entry.intent },\n );\n continue;\n }\n throw error;\n }\n throwIfAborted(options.signal);\n const result = wireReplayResponse(raw);\n if (result.state === \"committed\") {\n // @ref LLP 1012#7-writes-offline \u2014 a committed settlement lands with the\n // rows the commit produced or not at all: when the tail cannot be fetched\n // the intent stays queued and the drain stops; the retry is the same\n // envelope, which the owner's ledger answers unexecuted, and the tail\n // then joins the settlement swap.\n const revision = runtime.coverageRevision;\n let tail: Awaited<ReturnType<typeof logTail>>;\n try {\n tail = await logTail(options, revision);\n } catch (error) {\n if (isSnapbackRefusal(error) && error.retryable) return { stopped: true };\n throw error;\n }\n throwIfAborted(options.signal);\n if (revision !== runtime.coverageRevision) return { stopped: true };\n if (!(await settle(options, entry, \"committed\", result, tail, revision))) return { stopped: true };\n } else {\n await settle(options, entry, \"rejected\", result);\n }\n }\n return { stopped: false };\n}\n\nasync function settle(\n options: DrainOptions,\n entry: OutboxEntry,\n state: \"committed\" | \"rejected\" | \"expired\",\n response?: unknown,\n tail?: { op: string; args: unknown; accepted: AcceptedDelivery<unknown> },\n revision = options.runtime.coverageRevision,\n): Promise<boolean> {\n const settled = options.runtime.outbox.settle(entry, state, response);\n try {\n throwIfAborted(options.signal);\n const superseded = await options.runtime.commitMany(tail ? [tail] : [], undefined, { put: [settled] }, revision,\n () => !options.signal?.aborted);\n throwIfAborted(options.signal);\n return !superseded && revision === options.runtime.coverageRevision;\n } catch (error) {\n throw options.failure(error);\n }\n}\n\n/**\n * The delivery log after the watermark, fetched right after a commit so the\n * committed intent and the rows it produced enter the store in one swap.\n * The chooser is the rule, not the newest page: the tail is the drained query\n * (`drain: true`) mounted first in this partition \u2014 the one whose watermark the\n * store recorded first \u2014 and the resume request's `log` uses the same chooser\n * (`tailWatermark`), so a second drained query never feeds the wrong page into\n * the settlement swap (LLP 1012 \u00A77).\n */\nasync function logTail(options: DrainOptions, revision: number) {\n const { runtime } = options;\n const coverage = await runtime.coverage();\n throwIfAborted(options.signal);\n if (revision !== runtime.coverageRevision) return undefined;\n const watermark = coverage ? tailWatermark(coverage.watermarks) : undefined;\n // No drained query, no tail: the intent settles `committed` with no rows in\n // its swap. That is the only way a queue held under a login grant with\n // nothing delivered can progress (LLP 1012 \u00A77); the prediction overlay\n // stays until the server's rows arrive, so it is not a stranded queue and\n // must not be \"fixed\" into one.\n if (!watermark) return undefined;\n const cursor = watermark.cursorArg ?? runtime.cursorArg(watermark.op);\n const args = watermark.watermark === null\n ? watermark.args\n : { ...(watermark.args as Record<string, unknown>), [cursor]: watermark.watermark };\n const held = await runtime.answer(watermark.op, args);\n throwIfAborted(options.signal);\n if (revision !== runtime.coverageRevision) return undefined;\n const raw = await options.json(\"/api/query?receipt=1\", {\n method: \"POST\",\n body: JSON.stringify(held?.validator ? { op: watermark.op, args, validator: held.validator } : { op: watermark.op, args }),\n });\n throwIfAborted(options.signal);\n if (revision !== runtime.coverageRevision) return undefined;\n let accepted: AcceptedDelivery<unknown>;\n try {\n accepted = await runtime.accept(watermark.op, args, raw);\n } catch (error) {\n throw error instanceof DeliveryEnvelopeDecodeError ? options.shape(error.message) : error;\n }\n wireQuery(accepted.result);\n return { op: watermark.op, args, accepted };\n}\n\nexport function createOutboxApi(\n runtime: OfflineRuntime | undefined,\n drain: () => Promise<DrainResult>,\n ready: () => Promise<void> = async () => undefined,\n): OutboxApi {\n const entries = async (): Promise<OutboxEntry[]> => {\n if (!runtime || runtime.principal === undefined) return [];\n try {\n return await runtime.outbox.entries();\n } catch (error) {\n // A sealed partition keeps its outbox closed until the principal re-authenticates.\n if (error instanceof Error && /sealed/.test(error.message)) return [];\n throw error;\n }\n };\n return {\n entries,\n dismiss: async (intent) => {\n if (runtime && runtime.principal !== undefined) await runtime.outbox.dismiss(intent);\n },\n subscribe: (listener) => {\n let active = true;\n let version = 0;\n const push = () => {\n const current = ++version;\n const principal = runtime?.principal;\n void entries().then((value) => {\n if (active && current === version && principal === runtime?.principal) listener(value);\n }, () => undefined);\n };\n push();\n const unsubscribe = runtime?.outbox.subscribe(push);\n return () => { active = false; unsubscribe?.(); };\n },\n // @ref LLP 1012#7-writes-offline \u2014 with a partition open every write needs a\n // grant before any request leaves; the fence disables prediction and replay,\n // not enqueue, so an app may keep accepting writes while trust is stale. The\n // op form also checks its certified bound and remaining capacity. Answered\n // after the client's own startup, so a partition about to open never reads\n // as \"no partition, plain bytes\".\n ready: async (op) => {\n await ready().catch(() => undefined);\n if (!runtime || runtime.principal === undefined) return true;\n try {\n return await runtime.outbox.ready(op === undefined ? undefined : referenceName(op));\n } catch (error) {\n if (error instanceof Error && /sealed/.test(error.message)) return false;\n throw error;\n }\n },\n fence: async () => {\n await ready().catch(() => undefined);\n if (!runtime || runtime.principal === undefined) return \"inside\";\n try { return await runtime.outbox.fence(); }\n catch (error) {\n if (error instanceof Error && /sealed/.test(error.message)) return \"past\";\n throw error;\n }\n },\n drain: async () => {\n const result = await drain();\n return result.reason === \"fence\" ? { stopped: \"fence\" } : undefined;\n },\n // A fence stop is explicit even though custody remains queued. Other\n // non-retryable refusals still reject; transport stops retain their behavior.\n settled: async () => runtime?.drainOutcome,\n };\n}\n", "import type { Cursor, QueryResult, Subscription, SubscriptionDelivery } from \"./types.js\";\n\ninterface Waiter<Event> {\n predicate: (event: Event) => boolean;\n resolve: (event: Event) => void;\n reject: (error: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n}\n\nexport interface DrainOptions<Args, Result> {\n args: Args;\n query(args: Args): Promise<QueryResult<Result>>;\n subscribe(args: Args, callback: (event: SubscriptionDelivery<Result>) => void): Subscription<SubscriptionDelivery<Result>>;\n /** `offline`: every page came from the store; the watermark is the persisted one and nothing is recorded. */\n mark(watermark: Cursor | null, current: () => boolean, offline: boolean): Promise<void>;\n onEvent(event: SubscriptionDelivery<Result>): void;\n /** The cursor argument's name, resolved when a page is built (the manifest may still be loading); `c` by default. */\n cursor?(): Promise<string> | string;\n}\n\n/** Follows a cursor to exhaustion, records its watermark, then watches the tail. */\nexport class DrainSubscription<Args, Result> implements Subscription<SubscriptionDelivery<Result>> {\n private readonly waiters = new Set<Waiter<SubscriptionDelivery<Result>>>();\n private tail?: Subscription<SubscriptionDelivery<Result>>;\n private last?: SubscriptionDelivery<Result>;\n private watermark: Cursor | null = null;\n private cursorName = \"c\";\n private closed = false;\n private generation = 0;\n\n constructor(private readonly options: DrainOptions<Args, Result>) {\n this.start(null);\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.tail?.close();\n const error = new Error(\"subscription closed\");\n error.name = \"AbortError\";\n this.fail(error);\n }\n\n /** Discard a stale cursor after E_OFFLINE_RESET and cold-drain from the prefix root. */\n reset(): void {\n if (this.closed) return;\n this.tail?.close();\n this.tail = undefined;\n this.watermark = null;\n this.last = undefined;\n this.start(null);\n }\n\n until(\n predicate: (event: SubscriptionDelivery<Result>) => boolean,\n timeoutMs = 30_000,\n ): Promise<SubscriptionDelivery<Result>> {\n if (this.last && predicate(this.last)) return Promise.resolve(this.last);\n if (this.closed) return Promise.reject(new Error(\"subscription closed\"));\n return new Promise((resolve, reject) => {\n const waiter: Waiter<SubscriptionDelivery<Result>> = {\n predicate,\n resolve,\n reject,\n timer: setTimeout(() => {\n this.waiters.delete(waiter);\n reject(new Error(`subscription condition timed out after ${timeoutMs} ms`));\n }, timeoutMs),\n };\n this.waiters.add(waiter);\n });\n }\n\n private start(cursor: Cursor | null): void {\n const generation = ++this.generation;\n void this.drain(cursor, generation).catch((error) => {\n if (this.current(generation)) this.fail(error);\n });\n }\n\n private current(generation: number): boolean { return !this.closed && generation === this.generation; }\n\n private async drain(start: Cursor | null, generation: number): Promise<void> {\n let cursor = start;\n // @ref LLP 1012#6-reads-offline \u2014 a drain answered from the store keeps the\n // watermark the last online drain or resume persisted: the twin mints its\n // own page cursors, so a chain followed offline says nothing about the\n // server's log, and re-marking it would move the resume position backward.\n let offline = false;\n let held: Cursor | null | undefined;\n while (this.current(generation)) {\n this.cursorName = (await this.options.cursor?.()) ?? \"c\";\n if (!this.current(generation)) return;\n const args = { ...(this.options.args as Record<string, unknown>), [this.cursorName]: cursor } as Args;\n const page = await this.options.query(args);\n if (!this.current(generation)) return;\n if (page.state === \"hydrating\") {\n this.deliver(page);\n return;\n }\n if (page.state !== \"complete\" && page.state !== \"capped\") {\n this.deliver(page as SubscriptionDelivery<Result>);\n return;\n }\n const facts = page as { connection?: string; watermark?: Cursor | null };\n if (facts.connection === \"offline\") {\n offline = true;\n if (held === undefined && typeof facts.watermark === \"string\") held = facts.watermark;\n }\n if (page.next !== null) {\n this.watermark = page.next;\n this.deliver({ ...page, live: false, caughtUp: false, watermark: this.watermark });\n cursor = page.next;\n continue;\n }\n if (offline && held !== undefined) this.watermark = held;\n await this.options.mark(this.watermark, () => this.current(generation), offline);\n if (!this.current(generation)) return;\n this.deliver({ ...page, live: false, caughtUp: true, watermark: this.watermark });\n this.watchTail(generation);\n return;\n }\n }\n\n private watchTail(generation: number): void {\n if (!this.current(generation)) return;\n this.tail?.close();\n const args = { ...(this.options.args as Record<string, unknown>), [this.cursorName]: this.watermark } as Args;\n this.tail = this.options.subscribe(args, (event) => {\n if (!this.current(generation)) return;\n if ((event.state === \"complete\" || event.state === \"capped\") && event.next !== null) {\n this.watermark = event.next;\n this.deliver({ ...event, caughtUp: false, watermark: this.watermark });\n this.tail?.close();\n this.tail = undefined;\n this.start(this.watermark);\n return;\n }\n if (event.state === \"complete\" || event.state === \"capped\") {\n this.deliver({ ...event, caughtUp: true, watermark: this.watermark });\n } else this.deliver(event);\n });\n }\n\n private deliver(event: SubscriptionDelivery<Result>): void {\n this.last = event;\n try { this.options.onEvent(event); } catch { /* application callbacks cannot stop the drain */ }\n for (const waiter of [...this.waiters]) {\n let matches = false;\n try { matches = waiter.predicate(event); }\n catch (error) {\n clearTimeout(waiter.timer);\n this.waiters.delete(waiter);\n waiter.reject(error instanceof Error ? error : new Error(String(error)));\n }\n if (!matches) continue;\n clearTimeout(waiter.timer);\n this.waiters.delete(waiter);\n waiter.resolve(event);\n }\n }\n\n private fail(value: unknown): void {\n const error = value instanceof Error ? value : new Error(String(value));\n for (const waiter of this.waiters) {\n clearTimeout(waiter.timer);\n waiter.reject(error);\n }\n this.waiters.clear();\n }\n}\n", "import type { AssetFetchOptions } from \"./store/byte-cache.js\";\nimport type { Channel as ChannelRef, Op } from \"./api.js\";\nimport type { AssetCache, ByteCacheEntry, ByteCacheStatus, ViewOncePredicate } from \"./store/byte-cache.js\";\nimport type { OutboxEntry, RangeStoreFactory, RowRef, StoredRow } from \"./store/range-store.js\";\n\nexport type { OutboxEntry, OutboxGrant, OutboxState, OutboxTrace } from \"./store/range-store.js\";\n\nexport type { AssetCache, ByteCacheEntry, ByteCacheStatus, ViewOncePredicate };\n\n// @ref LLP 1006#1-the-move \u2014 the phantom kind keeps the two closed asset records\n// nominal; these must stay identical to the package-root declarations the\n// generated `snapback2` API imports, or a client-minted record cannot flow into\n// a generated argument.\nexport type ImageAsset = { readonly __asset: \"image\"; readonly id: string; readonly width: number; readonly height: number };\nexport type VideoAsset = { readonly __asset: \"video\"; readonly id: string; readonly width: number; readonly height: number; readonly duration: number };\n\n/** Server-minted authority subject; structurally compatible with `snapback2.Principal`. */\nexport type Principal = string & { readonly __snapbackPrincipal: \"Principal\" };\nexport type Cursor = string & { readonly __snapbackCursor: \"Cursor\" };\n\nexport interface RefusalEnvelope {\n code: string;\n family: string;\n message: string;\n site?: string;\n rule?: string;\n rewrite?: string;\n guide: string;\n /** Offline resume detail identifying the request member that exceeded a cap. */\n which?: string;\n /** Offline resume detail limiting the next bounded request. */\n cap?: number;\n}\n\n/** Opt-in body fields for a query request that asks for local-first custody. */\nexport interface QueryReceiptRequest {\n readonly receipt: true;\n readonly validator?: string;\n}\n\n/** Opt-in query fields for a subscription request that asks for local-first custody. */\nexport interface SubscribeReceiptRequest {\n readonly receipt: true;\n readonly validator?: string;\n}\n\nexport type QueryComplete<Result> = { state: \"complete\"; data: Result; seq: number; next: Cursor | null };\nexport type QueryCapped<Result> = {\n state: \"capped\";\n data: Result;\n seq: number;\n next: Cursor | null;\n};\nexport type QueryPartial<Result> = {\n state: \"partial\";\n data?: Result;\n seq: number;\n reason: string;\n};\nexport type QueryDenied = {\n state: \"denied\";\n seq: number;\n rule: string;\n};\nexport type ServerQueryResult<Result> =\n | QueryComplete<Result>\n | QueryCapped<Result>\n | QueryPartial<Result>\n | QueryDenied;\n\nexport type OfflineFacts = {\n live: false;\n connection: \"offline\";\n stale: { since: number };\n retained?: boolean;\n caughtUp?: boolean;\n watermark?: Cursor | null;\n /** Queued intents whose predicted rows are inside `data`, in order (the twin, LLP 1012 \u00A77). */\n predicted?: string[];\n /** A local `partial`: the uncovered site and every uncovered site with its reason. */\n site?: string;\n sites?: Array<{ site: string; reason: \"never-held\" | \"evicted\" | \"computed-key\" }>;\n};\nexport type OfflineQueryResult<Result> =\n | (QueryComplete<Result> & OfflineFacts)\n | (QueryCapped<Result> & OfflineFacts)\n | (QueryPartial<Result> & OfflineFacts)\n | (QueryDenied & OfflineFacts)\n | { state: \"hydrating\"; live: false; connection: \"offline\" };\nexport type QueryResult<Result> = ServerQueryResult<Result> | OfflineQueryResult<Result>;\n\nexport type MutationCommitted<Result> = { state: \"committed\"; seq: number; data: Result; intent?: string };\nexport type MutationRejected = {\n state: \"rejected\";\n code: string;\n family: string;\n message: string;\n retryable?: boolean;\n rewrite?: string;\n site?: string;\n rule?: string;\n guide: string;\n /** `conflict` when trace validation rolled a replayed write back (LLP 1012 \u00A77). */\n reason?: string;\n intent?: string;\n};\n/** The write is durable in this device's outbox and will replay after the next resume. */\nexport type MutationQueued = { state: \"queued\"; intent: string; ids: string[] };\nexport type MutationResult<Result> = MutationCommitted<Result> | MutationRejected | MutationQueued;\n\nexport type LiveQueryDelivery<Result> = ServerQueryResult<Result> & { live: true; caughtUp?: boolean; watermark?: Cursor | null };\nexport type StaleDelivery<Result> = {\n state: \"stale\";\n live: false;\n since: number;\n data?: Result;\n seq?: number;\n};\nexport type RefusedDelivery = {\n state: \"refused\";\n code: string;\n family: string;\n message: string;\n site?: string;\n rule?: string;\n rewrite?: string;\n guide: string;\n seq?: number;\n};\nexport type QueryRefusedDelivery = RefusedDelivery & { live: false };\nexport type SubscriptionDelivery<Result> =\n | LiveQueryDelivery<Result>\n | (ServerQueryResult<Result> & { live: false; caughtUp?: boolean; watermark?: Cursor | null })\n | OfflineQueryResult<Result>\n | StaleDelivery<Result>\n | QueryRefusedDelivery;\n\nexport interface Subscription<Event> {\n close(): void;\n until(predicate: (event: Event) => boolean, timeoutMs?: number): Promise<Event>;\n}\n\nexport interface AuthSession { token: string; viewer: Principal }\nexport interface AuthMe { viewer: Principal; kind: string }\nexport interface AuthApi {\n signup(input: { email: string; password: string }): Promise<AuthSession>;\n login(input: { email: string; password: string }): Promise<AuthSession>;\n guest(): Promise<AuthSession>;\n logout(): Promise<{ ok: boolean }>;\n me(): Promise<AuthMe>;\n}\n\nexport interface ChannelEvent<Payload = unknown> { from: Principal; payload: Payload; at: number }\nexport type ChannelDelivery<Payload = unknown> = ChannelEvent<Payload> | RefusedDelivery;\nexport type ChannelPublishResult =\n | { ok: true }\n | ({ state: \"refused\" } & RefusalEnvelope);\nexport interface ChannelHandle<Payload = unknown> {\n publish(payload: Payload): Promise<ChannelPublishResult>;\n subscribe(callback: (event: ChannelDelivery<Payload>) => void): Subscription<ChannelDelivery<Payload>>;\n}\n\nexport interface ManifestOperation { kind: string; args: unknown; planHash: string }\nexport interface ManifestTable { retain?: \"until-revoked\" | \"delivered-history\"; [key: string]: unknown }\nexport interface Manifest {\n generation: string;\n programGeneration: string;\n ops: Record<string, ManifestOperation>;\n channels: Record<string, unknown>;\n auth: Record<string, unknown>;\n schemaHash?: string;\n tables?: Record<string, ManifestTable>;\n schema?: { tables?: Record<string, ManifestTable>; [key: string]: unknown };\n}\n\nexport type AssetRecord = ImageAsset | VideoAsset;\nexport interface NativeAssetSource {\n readonly uri: string;\n readonly size?: number;\n readonly fileSize?: number;\n readonly type?: string;\n readonly mimeType?: string;\n}\nexport type AssetUploadSource = File | NativeAssetSource;\nexport interface UploadProgress {\n readonly loaded: number;\n readonly total: number;\n}\nexport type AssetKind = \"image\" | \"video\";\nexport interface AssetUploadOptions {\n /**\n * The nominal record expected back. The server sniffs the bytes and decides the\n * kind; when `kind` is given the client verifies the returned record and refuses\n * `E_ASSET_TYPE` on a mismatch, so the result can flow straight into a generated\n * `image`/`video` argument (LLP 1006 \u00A710). Without it the result is the union.\n */\n readonly kind?: AssetKind;\n /**\n * Reports streamed byte progress where the runtime supports request streams.\n * Expo native File uploads use expo/fetch's direct File body and report only\n * whole-body start and successful completion (0, then total).\n */\n readonly onProgress?: (progress: UploadProgress) => void;\n}\nexport interface AssetUrlOptions {\n readonly width?: number;\n readonly carrier?: boolean;\n readonly download?: boolean;\n}\n\n/** Replaces generated asset leaves with the browser/native upload convenience accepted by the SDK. */\nexport type AssetInput<Value> =\n Value extends VideoAsset ? Value | File | NativeAssetSource\n : Value extends ImageAsset ? Value | File | NativeAssetSource\n : Value extends File ? Value\n : Value extends readonly (infer Item)[] ? AssetInput<Item>[]\n : Value extends object ? { [Key in keyof Value]: AssetInput<Value[Key]> }\n : Value;\n\nexport type ConnectionState = \"connected\" | \"reconnecting\" | \"offline\";\nexport interface ClientSnapshot {\n /** Client-local cache/transport partition; never a server bearer or epoch. */\n authGeneration: number;\n token?: string;\n persona?: string;\n connection: ConnectionState;\n generation?: string;\n lastRefusal?: RefusalEnvelope;\n}\n\nexport interface AuthTokenStore {\n /** Restores the bearer before `client.ready` settles. */\n load(): string | null | undefined | Promise<string | null | undefined>;\n /** Persists a bearer, or clears custody with `null`. */\n save(token: string | null): void | Promise<void>;\n /** Optional companion custody needed to reopen a per-principal offline partition before network I/O. */\n loadPrincipal?(): string | null | undefined | Promise<string | null | undefined>;\n savePrincipal?(principal: string | null): void | Promise<void>;\n}\n\ninterface ClientLocationOptions {\n url: string;\n fetch?: typeof globalThis.fetch;\n offline?: OfflineClientOptions;\n}\n\nexport interface OfflineClientOptions {\n store: RangeStoreFactory;\n fenceDays?: number;\n /** Ceiling on cached asset bytes per partition, LRU by each rendition's own last read; default 256 MiB. */\n maxAssetBytes?: number;\n onTombstone?: (row: StoredRow) => RowRef[];\n /**\n * Names the rows whose media renders once: a viewed row is excluded from every\n * later offline answer and its bytes are never cached (LLP 1012 \u00A79). This stands\n * in for LLP 1006's one-use delivery until that lands on the server.\n */\n viewOnce?: ViewOncePredicate;\n}\n\n/** A client has exactly one authority source: a dev persona or bearer custody. */\nexport type CreateClientOptions = ClientLocationOptions & (\n | { as: string; token?: never; tokenStore?: never }\n | { as?: never; token?: string; tokenStore?: AuthTokenStore }\n);\n\n// @ref LLP 1012#7-writes-offline \u2014 the outbox is readable before the first\n// request, so a queued message is on screen at cold start.\nexport type OutboxSettlement = void | { stopped: \"fence\" };\n\nexport interface OutboxApi {\n /** Every durable intent of the open partition, FIFO; empty without a store. */\n entries(): Promise<OutboxEntry[]>;\n /** Drops one settled entry; queued intents cannot be dismissed. */\n dismiss(intent: string): Promise<void>;\n /** Observes the outbox; called with the current entries at once and after every change. */\n subscribe(listener: (entries: OutboxEntry[]) => void): () => void;\n /**\n * Without an op, true when a write will not refuse `E_OFFLINE_ID_BLOCK` for\n * want of a replay grant: no partition is open (today's bytes), or the open\n * partition holds a current, unexpired grant \u2014 minted by a login, a guest\n * call, or the first drain reaching its watermark. The fence gates replay and\n * prediction, not this (see `fence`). With an op, also means this write would\n * not refuse `E_OFFLINE_ID_BLOCK` for want of a known bound or capacity for\n * `1 + maxNewIds`. Grant, bound, fence, and expiry changes are observable\n * through `subscribe` even when the entries are unchanged (LLP 1012 \u00A77).\n */\n ready<Args = unknown, Result = unknown>(op?: Op<Args, Result>): Promise<boolean>;\n /** Past means replay waits for this partition's successful resume; enqueue remains ready. */\n fence(): Promise<\"inside\" | \"past\">;\n /** Replays FIFO; a fence stop returns { stopped: \"fence\" } with the intents still queued. */\n drain(): Promise<OutboxSettlement>;\n /**\n * Resolves once the in-flight replay, if any, emptied the queue or a retryable\n * transport failure stopped it; returns { stopped: \"fence\" } if resume is\n * required, and rejects with a non-retryable refusal that stopped it.\n */\n settled(): Promise<OutboxSettlement>;\n}\n\nexport interface SnapbackClient {\n readonly auth: AuthApi;\n readonly outbox: OutboxApi;\n /** Settles only after explicit token restoration and any initial persistence. */\n readonly ready: Promise<void>;\n readonly snapshot: ClientSnapshot;\n query<Args, Result>(ref: Op<Args, Result>, args: NoInfer<Args>): Promise<QueryResult<Result>>;\n mutation<Args, Result>(ref: Op<Args, Result>, args: NoInfer<AssetInput<Args>>): Promise<MutationResult<Result>>;\n /** Uploads one browser File or Expo URI-backed File and returns its closed asset record. */\n upload(source: AssetUploadSource, options: AssetUploadOptions & { readonly kind: \"image\" }): Promise<ImageAsset>;\n upload(source: AssetUploadSource, options: AssetUploadOptions & { readonly kind: \"video\" }): Promise<VideoAsset>;\n upload(source: AssetUploadSource, options?: AssetUploadOptions): Promise<AssetRecord>;\n assetUrl(asset: AssetRecord | null | undefined, options?: AssetUrlOptions): Promise<string | undefined>;\n assetUrl(assets: readonly AssetRecord[], options?: AssetUrlOptions): Promise<string[]>;\n /** Authentication headers for a native image source; carriers stay reserved for players/downloads. */\n assetHeaders(): Promise<Record<string, string>>;\n /** Fetches a client-issued asset URL: the byte cache under the row's lease first, then the network with the header credential. */\n assetBlob(url: string, options?: AssetFetchOptions): Promise<Blob>;\n /** Native byte path: cache first, then an authenticated ArrayBuffer response; no Blob. */\n assetBytes(url: string, options?: AssetFetchOptions): Promise<import(\"./store/byte-cache.js\").AssetBytes>;\n /** The partition's byte cache when the client has an offline store; components read it before the network. */\n readonly assetCache: AssetCache | undefined;\n /** Delivers validated query receipt states with `live: true`; transport loss is client-made `stale`. */\n subscribe<Args, Result>(\n ref: Op<Args, Result>,\n args: NoInfer<Args>,\n callback: (delivery: SubscriptionDelivery<Result>) => void,\n options?: { drain?: boolean },\n ): Subscription<SubscriptionDelivery<Result>>;\n channel<Args, Payload = unknown>(ref: ChannelRef<Args, Payload>, args: NoInfer<Args>): ChannelHandle<Payload>;\n manifest(): Promise<Manifest>;\n subscribeStatus(callback: (snapshot: ClientSnapshot) => void): () => void;\n /** Cut only this client's transport; the owner remains running. */\n offline(): Promise<void>;\n /** Restore transport and perform resume before new subscription opens. */\n online(): Promise<void>;\n /** Close and reopen this logical device on the same durable partition. */\n restart(): Promise<SnapbackClient>;\n /** Resolves when the offline carrier is quiet; safe to remove the store after. */\n close(): Promise<void>;\n}\n\ntype ViewFacts = { live: boolean; stale?: { since: number }; retained?: boolean; caughtUp?: boolean; watermark?: Cursor | null; predicted?: string[] };\nexport type QueryView<Result> =\n | (QueryComplete<Result> & ViewFacts)\n | (QueryCapped<Result> & ViewFacts)\n | (QueryPartial<Result> & ViewFacts)\n | (QueryDenied & ViewFacts)\n | { state: \"refused\"; live: false; refusal: RefusalEnvelope }\n | { state: \"stale\"; live: false; data?: Result; seq?: number; since: number }\n | { state: \"hydrating\"; live: false };\nexport type QueryViewState = QueryView<unknown>[\"state\"];\nexport type QueryHookResult<Result> = QueryView<Result> & { connection: ConnectionState };\nexport type QueryMachineEvent<Result> = QueryResult<Result> | SubscriptionDelivery<Result>;\n\nexport function initialQueryState<Result>(): QueryView<Result> {\n return { state: \"hydrating\", live: false };\n}\n\nfunction canonical(value: unknown): string {\n if (value === undefined) return \"undefined\";\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n return `{${Object.keys(value as object)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`)\n .join(\",\")}}`;\n}\n\nexport function stableSerialize(value: unknown): string {\n return canonical(value);\n}\n\n// @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 React preserves data identity while exposing every receipt-backed state.\nexport function reduceQueryState<Result>(\n current: QueryView<Result>,\n event: QueryMachineEvent<Result>,\n): QueryView<Result> {\n const eventData = \"data\" in event ? event.data : undefined;\n const currentData = \"data\" in current ? current.data : undefined;\n const data = canonical(eventData) === canonical(currentData) ? currentData : eventData;\n const live = \"live\" in event ? event.live : false;\n const facts = {\n ...(\"stale\" in event && event.stale !== undefined ? { stale: event.stale } : {}),\n ...(\"retained\" in event && event.retained !== undefined ? { retained: event.retained } : {}),\n ...(\"caughtUp\" in event && event.caughtUp !== undefined ? { caughtUp: event.caughtUp } : {}),\n ...(\"watermark\" in event && event.watermark !== undefined ? { watermark: event.watermark } : {}),\n ...(\"predicted\" in event && event.predicted !== undefined ? { predicted: event.predicted } : {}),\n };\n let next: QueryView<Result>;\n switch (event.state) {\n case \"complete\":\n next = { state: \"complete\", live, data: data as Result, seq: event.seq, next: event.next, ...facts };\n break;\n case \"capped\":\n next = { state: \"capped\", live, data: data as Result, seq: event.seq, next: event.next, ...facts };\n break;\n case \"partial\":\n next = data === undefined\n ? { state: \"partial\", live, seq: event.seq, reason: event.reason, ...facts }\n : { state: \"partial\", live, data: data as Result, seq: event.seq, reason: event.reason, ...facts };\n break;\n case \"denied\":\n next = { state: \"denied\", live, rule: event.rule, seq: event.seq, ...facts };\n break;\n case \"hydrating\":\n next = { state: \"hydrating\", live: false };\n break;\n case \"refused\": {\n const refusal: RefusalEnvelope = {\n code: event.code,\n family: event.family,\n message: event.message,\n guide: event.guide,\n };\n if (event.site !== undefined) refusal.site = event.site;\n if (event.rule !== undefined) refusal.rule = event.rule;\n if (event.rewrite !== undefined) refusal.rewrite = event.rewrite;\n next = { state: \"refused\", live: false, refusal };\n break;\n }\n case \"stale\":\n next = data === undefined\n ? { state: \"stale\", live: false, ...(event.seq === undefined ? {} : { seq: event.seq }), since: event.since }\n : {\n state: \"stale\",\n live: false,\n data: data as Result,\n ...(event.seq === undefined ? {} : { seq: event.seq }),\n since: event.since,\n };\n break;\n }\n return canonical(current) === canonical(next) ? current : next;\n}\n", "// @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 offline transport coordination is isolated from auth custody and asset methods.\nimport { throwIfAborted } from \"./client-wire.js\";\nimport { drainOutbox } from \"./client-outbox.js\";\nimport { DrainSubscription } from \"./drain.js\";\nimport { DeliveryEnvelopeDecodeError } from \"./offline-protocol.js\";\nimport {\n SnapbackRefusal,\n copyRefusal,\n isSnapbackRefusal,\n isTerminalSession,\n sseObject,\n wireQuery,\n wireSubscription,\n} from \"./client-wire.js\";\nimport {\n OfflineRuntime,\n offlineView,\n type AcceptedDelivery,\n type MountedQuery,\n type ResumeAdjustment,\n} from \"./offline.js\";\nimport {\n stableSerialize,\n type OfflineClientOptions,\n type LiveQueryDelivery,\n type QueryResult,\n type QueryRefusedDelivery,\n type RefusalEnvelope,\n type SnapbackClient,\n type Subscription,\n type SubscriptionDelivery,\n} from \"./types.js\";\nimport type { Op } from \"./api.js\";\n\nexport function validateOfflineOptions(options: OfflineClientOptions | undefined): void {\n if (options === undefined) return;\n if (!options || typeof options !== \"object\" || typeof options.store !== \"function\") {\n throw new TypeError(\"createClient offline.store must be a carrier factory\");\n }\n if (options.fenceDays !== undefined\n && (!Number.isInteger(options.fenceDays) || options.fenceDays < 1 || options.fenceDays > 30)) {\n throw new TypeError(\"createClient offline.fenceDays must be an integer from 1 through 30\");\n }\n if (options.maxAssetBytes !== undefined\n && (!Number.isSafeInteger(options.maxAssetBytes) || options.maxAssetBytes < 1)) {\n throw new TypeError(\"createClient offline.maxAssetBytes must be a positive safe integer\");\n }\n if (options.viewOnce !== undefined && typeof options.viewOnce !== \"function\") {\n throw new TypeError(\"createClient offline.viewOnce must be a (table, row) => boolean predicate\");\n }\n}\n\nexport function createOfflineRuntime(options: OfflineClientOptions | undefined): OfflineRuntime | undefined {\n validateOfflineOptions(options);\n return options ? new OfflineRuntime(options) : undefined;\n}\n\nexport function offlineRefusal(error: unknown, carrier: string): SnapbackRefusal {\n if (isSnapbackRefusal(error)) return error;\n const candidate = error && typeof error === \"object\" ? (error as { code?: unknown }).code : undefined;\n if (candidate === \"E_OFFLINE_ID_BLOCK\") {\n const local = error as { message: string; site?: string; rewrite?: string };\n return new SnapbackRefusal({\n code: candidate,\n family: \"offline\",\n message: local.message,\n site: local.site ?? \"client.outbox.enqueue\",\n rewrite: local.rewrite ?? \"resume online for a fresh grant, then enqueue a new intent\",\n guide: \"offline\",\n });\n }\n if (candidate === \"E_OFFLINE_AUTHORITY\") {\n return new SnapbackRefusal({\n code: candidate,\n family: \"offline\",\n message: error instanceof Error ? error.message : String(error),\n site: \"RangeStore.commit\",\n rewrite: \"keep the held coverage; a delivery for another principal or auth epoch is refused, not committed \u2014 open the partition it belongs to (another generation is not refused: it supersedes the held coverage until the next resume resets it)\",\n guide: \"offline\",\n });\n }\n const code = candidate === \"E_OFFLINE_LOCK\" || candidate === \"E_OFFLINE_CARRIER\" ? candidate : \"E_OFFLINE_CARRIER\";\n const carrierRewrite = (error as { rewrite?: unknown } | undefined)?.rewrite;\n const rewrite = typeof carrierRewrite === \"string\" ? carrierRewrite : code === \"E_OFFLINE_LOCK\"\n ? (carrier === \"SQLite\" ? \"this account is open in another client; close it and try again\" : \"this account is open in another tab\")\n : `install or configure the ${carrier} carrier`;\n return new SnapbackRefusal({\n code,\n family: \"offline\",\n message: error instanceof Error ? error.message : String(error),\n site: \"RangeStore.open\",\n rewrite,\n guide: \"offline\",\n });\n}\n\nexport function offlineNetworkRefusal(): SnapbackRefusal {\n return new SnapbackRefusal({\n code: \"E_NETWORK\",\n family: \"owner\",\n message: \"client transport is offline\",\n rewrite: \"call client.online() to restore this device transport\",\n guide: \"offline\",\n }, true);\n}\n\nexport async function acceptOffline<Result>(\n runtime: OfflineRuntime | undefined,\n op: string,\n args: unknown,\n raw: unknown,\n shape: (message: string) => Error,\n): Promise<AcceptedDelivery<Result>> {\n if (!runtime) return { result: raw as AcceptedDelivery<Result>[\"result\"] };\n try {\n return await runtime.accept<Result>(op, args, raw);\n } catch (error) {\n if (error instanceof DeliveryEnvelopeDecodeError) throw shape(error.message);\n throw error;\n }\n}\n\nexport async function commitOffline(\n runtime: OfflineRuntime | undefined,\n op: string,\n args: unknown,\n accepted: AcceptedDelivery<unknown>,\n failure: (error: unknown) => Error,\n revision?: number,\n current?: () => boolean,\n): Promise<boolean> {\n if (!runtime) return false;\n try { return await runtime.commit(op, args, accepted, revision, current); }\n catch (error) { throw failure(error); }\n}\n\nexport async function decodeOfflineSubscription<Result>(options: {\n runtime: OfflineRuntime;\n op: string;\n args: unknown;\n data: string;\n shape(message: string): Error;\n failure(error: unknown): Error;\n observe?(): Promise<void>;\n revision?: number;\n current?: () => boolean;\n superseded?(): void;\n}): Promise<LiveQueryDelivery<Result> | QueryRefusedDelivery> {\n const raw = sseObject(options.data, \"subscription delivery\");\n const accepted = await acceptOffline<Result>(options.runtime, options.op, options.args, raw, options.shape);\n const value = accepted.envelope || accepted.refresh\n ? { ...wireQuery<Result>(accepted.result, \"subscription delivery\"), live: true as const }\n : wireSubscription<Result>(options.data);\n if (value.state !== \"refused\") {\n const superseded = await commitOffline(options.runtime, options.op, options.args, accepted, options.failure, options.revision, options.current);\n if (superseded) options.superseded?.();\n if (!options.current || options.current()) await options.observe?.();\n }\n return value;\n}\n\nexport function settleSubscription<Result>(\n value: LiveQueryDelivery<Result> | QueryRefusedDelivery,\n ensureAuthority: () => void,\n patch: (value: { connection: \"connected\"; lastRefusal: RefusalEnvelope | undefined }) => void,\n): { seq: number; data?: Result } | undefined {\n if (value.state === \"refused\" && isTerminalSession(value)) {\n throw new SnapbackRefusal(copyRefusal(value));\n }\n ensureAuthority();\n patch({\n connection: \"connected\",\n lastRefusal: value.state === \"refused\" ? copyRefusal(value) : undefined,\n });\n return value.state === \"refused\"\n ? undefined\n : \"data\" in value ? { seq: value.seq, data: value.data } : { seq: value.seq };\n}\n\n// @ref LLP 1012#6-reads-offline \u2014 the twin is the client: a read with the\n// backend unreachable runs the certified program over coverage; a retained\n// answer (\u00A75 rule 4) is served as held, since its rows are what the swap kept.\nexport async function answerOffline<Result>(\n runtime: OfflineRuntime | undefined,\n op: string,\n args: unknown,\n failure: (error: unknown) => Error,\n): Promise<QueryResult<Result>> {\n try {\n const held = await runtime?.answer<Result>(op, args);\n const local = held?.retained ? undefined : await runtime?.evaluate(op, args);\n return offlineView(held, local) as QueryResult<Result>;\n } catch (error) {\n throw failure(error);\n }\n}\n\nexport function createOfflineDrain<Args, Result>(options: {\n ref: Op<Args, Result>;\n op: string;\n args: Args;\n callback: (delivery: SubscriptionDelivery<Result>) => void;\n runtime: OfflineRuntime | undefined;\n /** Settles once the manifest was loaded or could not be: the cursor argument's name is known after it. */\n ready?: Promise<void>;\n mounted: Map<string, MountedQuery>;\n query(pageArgs: Args): Promise<QueryResult<Result>>;\n subscribe(tailArgs: Args, callback: (delivery: SubscriptionDelivery<Result>) => void): Subscription<SubscriptionDelivery<Result>>;\n track(subscription: Subscription<SubscriptionDelivery<Result>>): Subscription<SubscriptionDelivery<Result>>;\n observe?(): Promise<void>;\n /** Performs a resume; a drained log that holds no replay grant asks for one here. */\n resume?(): Promise<void>;\n}): Subscription<SubscriptionDelivery<Result>> {\n const key = `${options.op}\\u0000${stableSerialize(options.args)}`;\n options.mounted.set(key, { op: options.op, args: options.args, drain: true });\n const draining = new DrainSubscription<Args, Result>({\n args: options.args,\n query: options.query,\n subscribe: options.subscribe,\n // The cursor argument is named by the manifest's op descriptor (`c` until it is loaded).\n cursor: async () => {\n await options.ready?.catch(() => undefined);\n return options.runtime?.cursorArg(options.op) ?? \"c\";\n },\n mark: async (watermark, current, offline) => {\n if (!options.runtime || offline) return;\n const revision = options.runtime.coverageRevision;\n const tailArgs = { ...(options.args as Record<string, unknown>), [options.runtime.cursorArg(options.op)]: watermark };\n const held = await options.runtime.answer(options.op, tailArgs);\n if (!current()) return;\n await options.runtime.markWatermark(options.op, options.args, watermark, held?.validator, revision);\n if (!current()) return;\n await options.observe?.();\n // @ref LLP 1012#7-writes-offline \u2014 the recipe's drain is where a device\n // earns its first grant, so a send after going offline has ids to pin.\n if (options.resume && !(await options.runtime.outbox.grant())) {\n await options.resume().catch(() => undefined);\n }\n },\n onEvent: options.callback,\n });\n const tracked = options.track(draining);\n const close = tracked.close.bind(tracked);\n tracked.close = () => {\n options.mounted.delete(key);\n close();\n };\n return tracked;\n}\n\nexport async function goOffline(options: {\n ready: Promise<void>;\n ensureOpen(): void;\n force(value: boolean): void;\n connection(value: \"offline\" | \"reconnecting\"): void;\n reconnect(): void;\n}): Promise<void> {\n await options.ready;\n options.ensureOpen();\n options.force(true);\n options.connection(\"offline\");\n options.reconnect();\n}\n\nexport async function goOnline<Authority>(options: {\n ready: Promise<void>;\n ensureOpen(): void;\n force(value: boolean): void;\n connection(value: \"offline\" | \"reconnecting\"): void;\n authority(): Promise<Authority>;\n resume(authority: Authority): Promise<void>;\n setResume(run: Promise<void>): void;\n reconnect(): void;\n}): Promise<void> {\n await options.ready;\n options.ensureOpen();\n options.force(false);\n options.connection(\"reconnecting\");\n const authority = await options.authority();\n const run = options.resume(authority);\n options.setResume(run.then(() => undefined, () => undefined));\n try {\n await run;\n } finally {\n // A rejected resume or drain must not leave the transport closed.\n options.reconnect();\n }\n}\n\nexport async function restartOffline(options: {\n ready: Promise<void>;\n ensureOpen(): void;\n forced(): boolean;\n shutdown(): Promise<void>;\n create(): SnapbackClient;\n}): Promise<SnapbackClient> {\n await options.ready;\n options.ensureOpen();\n const stayedOffline = options.forced();\n await options.shutdown();\n const restarted = options.create();\n await restarted.ready;\n if (stayedOffline) await restarted.offline();\n return restarted;\n}\n\nexport async function initializeOfflineClient<Principal, Authority>(options: {\n principal?: Principal;\n bearer: boolean;\n authority: Authority;\n open(principal: Principal, authenticated?: boolean): Promise<void>;\n confirm(authority: Authority): Promise<Principal>;\n metadata(authority: Authority): Promise<void>;\n resume(authority: Authority): Promise<void>;\n ignore(error: unknown): boolean;\n}): Promise<void> {\n let principal = options.principal;\n if (principal) await options.open(principal);\n try {\n if (options.bearer) {\n principal = await options.confirm(options.authority);\n await options.open(principal, true);\n }\n if (!principal) return;\n await options.metadata(options.authority);\n await options.resume(options.authority);\n } catch (error) {\n if (!options.ignore(error)) throw error;\n }\n}\n\ntype RefusalLike = Error & {\n code?: string;\n status?: number;\n envelope?: { which?: unknown; cap?: unknown };\n};\n\nfunction refusal(error: unknown): RefusalLike | undefined {\n return error instanceof Error && typeof (error as RefusalLike).code === \"string\"\n ? error as RefusalLike : undefined;\n}\n\nfunction record(value: unknown, surface: string, shape: (message: string) => Error): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw shape(`${surface} must be an object`);\n return value as Record<string, unknown>;\n}\n\nfunction resumeAdjustment(error: RefusalLike): ResumeAdjustment {\n const which = typeof error.envelope?.which === \"string\" ? error.envelope.which : undefined;\n const cap = Number.isSafeInteger(error.envelope?.cap) && Number(error.envelope?.cap) >= 0\n ? Number(error.envelope?.cap) : undefined;\n return { ...(which === undefined ? {} : { which }), ...(cap === undefined ? {} : { cap }) };\n}\n\nexport async function performOfflineResume<Authority>(options: {\n signal?: AbortSignal;\n runtime: OfflineRuntime | undefined;\n mounted: Map<string, MountedQuery>;\n authority: Authority;\n bearerConfirmed: boolean;\n json(path: string, init: RequestInit, authority: Authority): Promise<unknown>;\n validated(authority: Authority): void;\n shape(message: string): Error;\n failure?(error: unknown): Error;\n subscriptions: Iterable<Subscription<unknown>>;\n /** Re-fetches `/api/program` for the live generation after `E_OFFLINE_RESET`. */\n reload?(authority: Authority): Promise<void>;\n}, adjustment: ResumeAdjustment = {}, retry = true): Promise<boolean> {\n const check = () => throwIfAborted(options.signal);\n check();\n if (!options.runtime) return false;\n const revision = options.runtime.coverageRevision;\n const generation = options.runtime.outbox.generation;\n let request = await options.runtime.resumeRequest([...options.mounted.values()], adjustment);\n check();\n if (!request) {\n // @ref LLP 1012#7-writes-offline \u2014 no resume can be built without facts (a\n // login grant with nothing delivered yet), but the queue must never sit:\n // inside the fence the held grant replays it directly. Past the fence a\n // login grant may precede every delivery: earn real authority facts\n // through a named query, then use the owner's supported logless resume;\n // metadata or a fresh consumption grant alone never opens the fence.\n if ((await options.runtime.queuedIntents()).length === 0) return false;\n check();\n if (await options.runtime.outbox.fence() === \"inside\") {\n check();\n await drainOutbox(drainOptions(options));\n check();\n return false;\n }\n check();\n const seed = await options.runtime.resumeSeed([...options.mounted.values()]);\n check();\n if (!seed) throw resumeUnavailable(\"no query with known arguments can establish resume facts\");\n const raw = await options.json(\"/api/query?receipt=1\", {\n method: \"POST\", body: JSON.stringify({ op: seed.op, args: seed.args }), signal: options.signal,\n }, options.authority);\n check();\n const accepted = await acceptOffline(options.runtime, seed.op, seed.args, raw, options.shape);\n check();\n wireQuery(accepted.result);\n await commitOffline(options.runtime, seed.op, seed.args, accepted, options.failure ?? ((error) => error as Error),\n revision, () => !options.signal?.aborted);\n check();\n request = await options.runtime.resumeRequest([...options.mounted.values()], adjustment);\n check();\n if (!request) throw resumeUnavailable(\"the owner query did not deliver the facts required for resume\");\n }\n const standIn = request.log !== undefined && options.runtime.standInLog(request.log);\n const rebuild = async () => {\n check();\n await options.reload?.(options.authority);\n check();\n // A 409 authenticated request.authEpoch before checking the program; a\n // successful probe below verifies the same epoch explicitly.\n await options.runtime!.resetCoverage(request.authEpoch, options.signal);\n check();\n for (const subscription of [...options.subscriptions]) {\n (subscription as Subscription<unknown> & { reset?: () => void }).reset?.();\n }\n return true;\n };\n let value: unknown;\n try {\n value = await options.json(\"/api/resume\", { method: \"POST\", body: JSON.stringify(request), signal: options.signal }, options.authority);\n check();\n } catch (error) {\n check();\n const candidate = refusal(error);\n if (candidate?.code === \"E_OFFLINE_RESET\") return rebuild();\n if (candidate?.status === 404) {\n if ((await options.runtime.queuedIntents()).length > 0) throw error;\n return false;\n }\n if (candidate?.code === \"E_OFFLINE_RESUME\" && retry) {\n return performOfflineResume(options, resumeAdjustment(candidate), false);\n }\n throw error;\n }\n const response = record(value, \"resume response\", options.shape);\n if (response.generation !== request.generation || response.schemaHash !== request.schemaHash) {\n throw options.shape(\"resume response generation does not match the request\");\n }\n const authority = record(response.authority, \"resume response.authority\", options.shape);\n if (authority.principal !== options.runtime.principal || authority.authEpoch !== request.authEpoch) {\n throw options.shape(\"resume response authority does not match the open partition\");\n }\n // A cold reopen mid-rebuild can already name the current program. A 200\n // authenticates it, but the durable marker still requires the cold rebuild.\n if (options.runtime.resetNeeded) return rebuild();\n if (options.bearerConfirmed) await options.runtime.reauthenticate(authority.principal as string);\n check();\n if (!Array.isArray(response.mounted)) throw options.shape(\"resume response.mounted must be an array\");\n const swaps: Array<{ op: string; args: unknown; accepted: AcceptedDelivery<unknown> }> = [];\n let watermark: { op: string; args: unknown; watermark: string | null; validator?: string } | undefined;\n if (response.log && typeof response.log === \"object\" && !Array.isArray(response.log)\n && (response.log as Record<string, unknown>).unchanged !== true && request.log) {\n const { watermark: returned, ...delivery } = response.log as Record<string, unknown>;\n if (returned !== null && typeof returned !== \"string\") throw options.shape(\"resume response.log.watermark must be a string or null\");\n // The server answers the log as the page after `watermark` (writer_resume log_args), so\n // it is held under that cursor's args; filing it under the base args would replace the\n // drained first page with the tail \u2014 an empty one after a restart (LLP 1012 \u00A78). The\n // cursor argument is the one the manifest types `Cursor`, whatever its name.\n const tailArgs = request.log.watermark === null\n ? request.log.args\n : { ...(request.log.args as Record<string, unknown>), [options.runtime.cursorArg(request.log.op)]: request.log.watermark };\n const accepted = await acceptOffline(options.runtime, request.log.op, tailArgs, delivery, options.shape);\n check();\n swaps.push({ op: request.log.op, args: tailArgs, accepted });\n // A stand-in log (no drained query held) borrows an ordinary answer; it\n // must not leave a watermark behind and turn that answer into a drain.\n if (!standIn) watermark = {\n op: request.log.op,\n args: request.log.args,\n watermark: returned as string | null,\n ...(accepted.envelope?.validator === undefined ? {} : { validator: accepted.envelope.validator }),\n };\n }\n for (const [index, item] of response.mounted.entries()) {\n if (item && typeof item === \"object\" && !Array.isArray(item)\n && (item as Record<string, unknown>).unchanged === true) continue;\n const requested = request.mounted[index];\n if (!requested) throw options.shape(\"resume response returned an unrequested mounted query\");\n swaps.push({\n op: requested.op,\n args: requested.args,\n accepted: await acceptOffline(options.runtime, requested.op, requested.args, item, options.shape),\n });\n check();\n }\n if (!Number.isSafeInteger(response.seq) || Number(response.seq) < 0) {\n throw options.shape(\"resume response.seq must be a non-negative safe integer\");\n }\n await options.runtime.commitMany(swaps, watermark, undefined, revision, () => !options.signal?.aborted, Number(response.seq));\n check();\n options.validated(options.authority);\n // @ref LLP 1012#7-writes-offline \u2014 a resume may omit a replacement grant;\n // successful re-authorization itself renews trust, then replay is FIFO.\n options.runtime.noteGrant(response);\n try {\n await options.runtime.adoptPendingGrant();\n check();\n } catch (error) {\n throw options.failure ? options.failure(error) : error;\n }\n if (!options.runtime.outbox.resumeSucceeded(generation)) return false;\n await drainOutbox(drainOptions(options));\n check();\n return false;\n}\n\nfunction resumeUnavailable(message: string): SnapbackRefusal {\n return new SnapbackRefusal({\n code: \"E_OFFLINE_RESUME\", family: \"offline\", message,\n site: \"client.online.resume\", guide: \"offline\",\n rewrite: \"query an authorized operation online with receipt support, then call online() again; queued writes are kept\",\n });\n}\n\nfunction drainOptions<Authority>(options: {\n signal?: AbortSignal;\n runtime: OfflineRuntime | undefined;\n authority: Authority;\n json(path: string, init: RequestInit, authority: Authority): Promise<unknown>;\n shape(message: string): Error;\n failure?(error: unknown): Error;\n}): Parameters<typeof drainOutbox>[0] {\n return {\n runtime: options.runtime!,\n signal: options.signal,\n json: (path, init) => options.json(path, init, options.authority),\n shape: options.shape,\n failure: options.failure ?? ((error) => (error instanceof Error ? error : new Error(String(error)))),\n };\n}\n", "// @ref LLP 1012#9-asset-bytes-on-the-device \u2014 the byte cache is read before the\n// network and filled after it; a viewed view-once row is refused before any byte moves.\nimport { AssetInputError } from \"./assets.js\";\nimport { SnapbackRefusal } from \"./client-wire.js\";\nimport { ASSET_ID, type AssetCache, type AssetBytes, type ByteCache } from \"./store/byte-cache.js\";\nimport type { RefusalEnvelope } from \"./types.js\";\n\nexport interface AssetBlobTarget { url: string; assetId: string; width: number | null }\n\n/** The tokenless asset URL this client issued, split into the cache key it names. */\nexport function assetBlobTarget(baseUrl: string, url: string): AssetBlobTarget {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new AssetInputError(\"E_ASSET_TYPE\", \"asset blob URL must be absolute\");\n }\n const base = new URL(baseUrl);\n if (parsed.origin !== base.origin || !parsed.pathname.startsWith(\"/api/asset/\") || parsed.searchParams.has(\"s\")) {\n throw new AssetInputError(\"E_ASSET_TYPE\", \"asset blob fetch requires a tokenless URL issued by this client\");\n }\n const assetId = decodeURIComponent(parsed.pathname.slice(\"/api/asset/\".length));\n const raw = parsed.searchParams.get(\"w\");\n let width: number | null = null;\n if (raw !== null) {\n width = Number(raw);\n if (!Number.isSafeInteger(width) || width <= 0) throw new AssetInputError(\"E_ASSET_TYPE\", \"asset width must be a positive integer\");\n }\n return { url, assetId: ASSET_ID.test(assetId) ? assetId : \"\", width };\n}\n\nexport function viewedRefusal(assetId: string): SnapbackRefusal {\n return new SnapbackRefusal({\n code: \"E_ASSET_VIEWED\",\n family: \"offline\",\n message: `asset ${assetId} belongs to a view-once row that was already viewed on this device`,\n site: \"assetBlob\",\n rewrite: \"render a view-once row once; do not fetch its bytes again\",\n guide: \"offline\",\n });\n}\n\n/**\n * The one viewed guard every byte path consults after the cache missed and before\n * a URL is minted or a byte moves: the ids whose view-once row was already viewed\n * on this partition. `assetBlob` refuses them; `useAssetUrl` mints no URL for them.\n */\nexport async function viewedAssetIds(cache: AssetCache | undefined, ids: readonly string[]): Promise<Set<string>> {\n const viewed = new Set<string>();\n if (!cache) return viewed;\n await Promise.all(ids.map(async (id) => {\n if (ASSET_ID.test(id) && await cache.viewed(id)) viewed.add(id);\n }));\n return viewed;\n}\n\n/**\n * Cache-first bytes for one asset rendition. Without a byte cache this is the\n * network fetch; with one, a held rendition (or what this instance showed for a\n * view-once row) is answered without the network, a viewed view-once row is refused\n * before any byte moves, and a fetched rendition is kept under its row's lease.\n */\nexport async function cachedAssetBlob(\n cache: ByteCache | undefined,\n target: AssetBlobTarget,\n network: () => Promise<Blob>,\n record: (refusal: RefusalEnvelope) => void, current: () => void, viewing?: object,\n): Promise<Blob> {\n const value = await cachedAssetBytes(cache, target, async () => {\n const blob = await network();\n return { bytes: new Uint8Array(await blob.arrayBuffer()), type: blob.type };\n }, record, current, viewing);\n return new Blob([value.bytes as BlobPart], { type: value.type });\n}\n\n/** Native byte ingress; the caller fences custody after each awaited read. */\nexport async function cachedAssetBytes(\n cache: ByteCache | undefined, target: AssetBlobTarget, network: () => Promise<AssetBytes>,\n record: (refusal: RefusalEnvelope) => void, current: () => void, viewing?: object,\n): Promise<AssetBytes> {\n if (!cache || target.assetId === \"\") return network();\n const held = await cache.getBytes(target.assetId, target.width, viewing);\n current();\n if (held) return held;\n const viewed = await cache.viewed(target.assetId);\n current();\n if (viewed) {\n const refusal = viewedRefusal(target.assetId);\n record(refusal.envelope);\n throw refusal;\n }\n const initiallyOnce = await cache.viewOnce(target.assetId);\n if (initiallyOnce && !viewing) {\n const refusal = new SnapbackRefusal({ code: \"E_ASSET_TYPE\", family: \"input\", site: \"assetBlob\",\n message: \"view-once bytes require a mounted viewing instance\",\n rewrite: \"pass the same viewing token for the lifetime of the mounted consumer\", guide: \"assets/client\" });\n record(refusal.envelope);\n throw refusal;\n }\n // Revocation during the fetch must also suppress an initially view-once row.\n const leased = initiallyOnce || await cache.canServe(target.assetId);\n current();\n const value = await network();\n current();\n const admitted = await cache.putBytes(target.assetId, target.width, value, viewing);\n current();\n const once = await cache.viewOnce(target.assetId);\n const viewedNow = await cache.viewed(target.assetId);\n const allowed = await cache.canServe(target.assetId, viewing);\n current();\n if ((once && admitted !== \"viewed\" && admitted !== \"cached\") || ((leased || once || viewedNow || admitted === \"viewed\") && !allowed)) {\n if (viewedNow && !allowed) {\n const refusal = viewedRefusal(target.assetId);\n record(refusal.envelope);\n throw refusal;\n }\n const refusal = new SnapbackRefusal({ code: \"E_OFFLINE_CARRIER\", family: \"offline\",\n site: \"assetBytes\", message: \"asset viewing allowance was not durably admitted or its row lease changed\",\n rewrite: \"restore the carrier and fetch a currently held, unviewed row\", guide: \"offline\" });\n record(refusal.envelope);\n throw refusal;\n }\n return value;\n}\n", "// The asset arm of the client \u2014 uploads, delivery URLs, header credentials,\n// and the byte fetch \u2014 as functions over the small host surface the client\n// exposes, so `client.ts` stays under the file cap without changing behavior.\nimport {\n AssetInputError,\n assetPath,\n assetRecord,\n expoUploadFetch,\n isBlobLike,\n isBrowserFile,\n isNativeAssetSource,\n prepareAssetSource,\n preparedBody,\n withProgress,\n type PreparedAssetSource,\n} from \"./assets.js\";\nimport { assetBlobTarget, cachedAssetBlob, cachedAssetBytes, viewedAssetIds, type AssetBlobTarget } from \"./client-assets.js\";\nimport { offlineNetworkRefusal } from \"./client-offline.js\";\nimport { SnapbackRefusal, isSnapbackRefusal, responseRefusal, wireAssetSession } from \"./client-wire.js\";\nimport type { AssetBytes, AssetFetchOptions, ByteCache } from \"./store/byte-cache.js\";\nimport type {\n AssetRecord,\n AssetUploadOptions,\n AssetUploadSource,\n AssetUrlOptions,\n RefusalEnvelope,\n} from \"./types.js\";\n\n/** The authority snapshot every request is fenced by (LLP 1002 \u00A79). */\nexport interface Authority {\n authGeneration: number;\n custodyGeneration: number;\n fence: number;\n token?: string;\n}\n\nexport interface CarrierSession {\n token: string;\n expiresAt: number;\n authGeneration: number;\n custodyGeneration: number;\n fence: number;\n}\n\n/** What the client lends the asset arm; the class satisfies it structurally. */\nexport interface UploadHost {\n readonly url: string;\n readonly persona?: string;\n readonly assetCache?: ByteCache;\n readonly fetchImpl: typeof globalThis.fetch;\n readonly customFetch: boolean;\n carrier?: CarrierSession;\n headers(authority: Authority, stream?: boolean, hasBody?: boolean): Headers;\n json(path: string, init: RequestInit, authority: Authority): Promise<unknown>;\n ensureAuthority(authority: Authority | undefined): asserts authority is Authority;\n recordRefusal(envelope: RefusalEnvelope): void;\n validated(authority: Authority | undefined): void;\n networkRefusal(message: string): SnapbackRefusal;\n transportRefusal(message: string): SnapbackRefusal;\n}\n\nexport async function uploadAsset(\n host: UploadHost,\n source: AssetUploadSource,\n options: AssetUploadOptions,\n authority: Authority,\n): Promise<AssetRecord> {\n const prepared = await prepareAssetSource(source)\n .catch((error) => { throw assetInput(host, error); });\n return uploadPrepared(host, prepared, options, authority);\n}\n\nexport async function assetUrlFor(\n host: UploadHost,\n assetOrList: AssetRecord | readonly AssetRecord[] | null | undefined,\n options: AssetUrlOptions,\n authority: Authority,\n): Promise<string | string[] | undefined> {\n const records = Array.isArray(assetOrList)\n ? assetOrList\n : assetOrList == null ? [] : [assetOrList as AssetRecord];\n const viewed = await viewedAssetIds(host.assetCache, records.map((asset) => asset.id));\n host.ensureAuthority(authority);\n const mintable = records.filter((asset) => !viewed.has(asset.id));\n const wantsCarrier = options.carrier === true || options.download === true;\n if (wantsCarrier && mintable.some((asset) => !(\"duration\" in asset))) {\n throw assetInput(host, new AssetInputError(\n \"E_ASSET_CARRIER_IMAGE\",\n \"image asset URLs never carry a session token; fetch the URL with assetHeaders or assetBlob\",\n ));\n }\n let carrier: string | undefined;\n if (wantsCarrier && mintable.length > 0 && (authority.token !== undefined || host.persona !== undefined)) {\n carrier = await assetCarrier(host, authority);\n }\n try {\n if (Array.isArray(assetOrList)) {\n return mintable.map((asset) => assetPath(host.url, asset, options.width, carrier));\n }\n return assetOrList == null || viewed.has((assetOrList as AssetRecord).id)\n ? undefined\n : assetPath(host.url, assetOrList as AssetRecord, options.width, carrier);\n } catch (error) {\n throw assetInput(host, error);\n }\n}\n\nexport function assetHeadersFor(host: UploadHost, authority: Authority): Record<string, string> {\n const headers: Record<string, string> = {};\n if (authority.token) headers.Authorization = `Bearer ${authority.token}`;\n if (host.persona) headers[\"X-Snapback-As\"] = host.persona;\n return headers;\n}\n\nexport async function assetBlobFor(\n host: UploadHost,\n bytes: ByteCache | undefined,\n offline: () => boolean,\n url: string,\n options: AssetFetchOptions,\n authority: Authority,\n): Promise<Blob> {\n let target: AssetBlobTarget;\n try { target = assetBlobTarget(host.url, url); } catch (error) { throw assetInput(host, error); }\n return cachedAssetBlob(bytes, target, async () => {\n if (offline()) throw offlineNetworkRefusal();\n const headers = host.headers(authority);\n headers.set(\"Accept\", \"*/*\");\n // Expo SDK 54 ignores RequestInit.cache but forwards these headers.\n // Private owner responses also forbid storage (LLP 1012 \u00A79).\n headers.set(\"Cache-Control\", \"no-store\");\n const response = await fetchResponse(host, url, { headers, signal: options.signal, cache: \"no-store\" }, authority);\n host.validated(authority);\n return response.blob();\n }, (refusal) => host.recordRefusal(refusal), () => host.ensureAuthority(authority), options.viewing);\n}\n\nexport async function assetBytesFor(\n host: UploadHost, cache: ByteCache | undefined, offline: () => boolean, url: string,\n options: AssetFetchOptions, authority: Authority,\n): Promise<AssetBytes> {\n let target: AssetBlobTarget;\n try { target = assetBlobTarget(host.url, url); } catch (error) { throw assetInput(host, error); }\n return cachedAssetBytes(cache, target, async () => {\n if (offline()) throw offlineNetworkRefusal();\n const headers = host.headers(authority);\n headers.set(\"Accept\", \"*/*\");\n // Expo SDK 54 ignores RequestInit.cache but forwards these headers.\n // Private owner responses also forbid storage (LLP 1012 \u00A79).\n headers.set(\"Cache-Control\", \"no-store\");\n const response = await fetchResponse(host, url, { headers, signal: options.signal, cache: \"no-store\" }, authority);\n const bytes = new Uint8Array(await response.arrayBuffer());\n host.ensureAuthority(authority);\n host.validated(authority);\n return { bytes, type: response.headers.get(\"Content-Type\") ?? \"application/octet-stream\" };\n }, (refusal) => host.recordRefusal(refusal), () => host.ensureAuthority(authority), options.viewing);\n}\n\nexport async function uploadPrepared(\n host: UploadHost,\n prepared: PreparedAssetSource,\n options: AssetUploadOptions,\n authority: Authority,\n): Promise<AssetRecord> {\n host.ensureAuthority(authority);\n let response: Response;\n if (options.onProgress && isBrowserFile(prepared.source) && !host.customFetch\n && typeof XMLHttpRequest === \"function\") {\n response = await xhrUpload(host, prepared.source, prepared.bytes, options, authority);\n } else {\n let body;\n try {\n body = await preparedBody(prepared);\n } catch (error) {\n throw assetInput(host, error);\n }\n const headers = host.headers(authority);\n headers.set(\"Content-Length\", String(prepared.bytes));\n const nativeExpoFile = isNativeAssetSource(prepared.source)\n && !/^(?:data|https?):/i.test(prepared.source.uri)\n && isBlobLike(body);\n if (nativeExpoFile) {\n let nativeFetch: typeof globalThis.fetch;\n try {\n nativeFetch = await expoUploadFetch();\n } catch (error) {\n throw assetInput(host, error);\n }\n options.onProgress?.({ loaded: 0, total: prepared.bytes });\n response = await fetchResponse(host, `${host.url}/api/upload`, {\n method: \"POST\",\n headers,\n body: body as unknown as BodyInit,\n }, authority, nativeFetch);\n options.onProgress?.({ loaded: prepared.bytes, total: prepared.bytes });\n } else {\n body = withProgress(body, prepared.bytes, options);\n const stream = !isBlobLike(body);\n response = await fetchResponse(host, `${host.url}/api/upload`, {\n method: \"POST\",\n headers,\n body: body as unknown as BodyInit,\n ...(stream ? { duplex: \"half\" } as RequestInit : {}),\n }, authority);\n }\n }\n let value: unknown;\n try {\n value = await response.json();\n } catch {\n throw assetInput(host, new AssetInputError(\"E_ASSET_TYPE\", \"upload response must contain valid JSON\"));\n }\n try {\n const record = assetRecord(value);\n const produced = Object.hasOwn(record, \"duration\") ? \"video\" : \"image\";\n if (options.kind && options.kind !== produced) {\n throw new AssetInputError(\"E_ASSET_TYPE\", `upload produced ${produced === \"image\" ? \"an image\" : \"a video\"} asset but kind ${options.kind} was requested`);\n }\n host.validated(authority);\n return record;\n } catch (error) {\n throw assetInput(host, error);\n }\n}\n\nfunction xhrUpload(\n host: UploadHost,\n file: File | Blob,\n bytes: number,\n options: AssetUploadOptions,\n authority: Authority,\n): Promise<Response> {\n return new Promise<Response>((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", `${host.url}/api/upload`);\n for (const [name, value] of host.headers(authority)) xhr.setRequestHeader(name, value);\n options.onProgress?.({ loaded: 0, total: bytes });\n xhr.upload.onprogress = (event) => options.onProgress?.({\n loaded: Math.min(bytes, event.loaded),\n total: bytes,\n });\n xhr.onerror = () => reject(host.networkRefusal(\"asset upload failed\"));\n xhr.onabort = () => reject(host.networkRefusal(\"asset upload was aborted\"));\n xhr.onload = () => {\n try {\n host.ensureAuthority(authority);\n options.onProgress?.({ loaded: bytes, total: bytes });\n resolve(new Response(xhr.responseText, {\n status: xhr.status,\n headers: { \"Content-Type\": xhr.getResponseHeader(\"Content-Type\") ?? \"application/json\" },\n }));\n } catch (error) {\n reject(error);\n }\n };\n xhr.send(file);\n }).then(async (response) => {\n if (response.ok) return response;\n if (response.status >= 400 && response.status < 500) {\n const refusal = await responseRefusal(response);\n host.recordRefusal(refusal.envelope);\n throw refusal;\n }\n throw host.transportRefusal(`/api/upload returned HTTP ${response.status}`);\n });\n}\n\nasync function fetchResponse(\n host: UploadHost,\n url: string,\n init: RequestInit,\n authority: Authority,\n fetchImpl: typeof globalThis.fetch = host.fetchImpl,\n): Promise<Response> {\n let response: Response;\n try {\n response = await fetchImpl(url, init);\n } catch (error) {\n host.ensureAuthority(authority);\n throw host.networkRefusal(error instanceof Error ? error.message : String(error));\n }\n host.ensureAuthority(authority);\n if (response.ok) return response;\n if (response.status >= 400 && response.status < 500) {\n const refusal = await responseRefusal(response);\n host.recordRefusal(refusal.envelope);\n throw refusal;\n }\n throw host.transportRefusal(`${new URL(url).pathname} returned HTTP ${response.status}`);\n}\n\nasync function assetCarrier(host: UploadHost, authority: Authority): Promise<string> {\n const refreshBefore = Date.now() + 60_000;\n if (host.carrier\n && host.carrier.authGeneration === authority.authGeneration\n && host.carrier.custodyGeneration === authority.custodyGeneration\n && host.carrier.fence === authority.fence\n && host.carrier.expiresAt > refreshBefore) return host.carrier.token;\n const carrier = wireAssetSession(await host.json(\n \"/api/auth/asset-session\",\n { method: \"POST\", body: JSON.stringify({}) },\n authority,\n ));\n host.ensureAuthority(authority);\n host.carrier = {\n token: carrier.token,\n expiresAt: carrier.expiresAt,\n authGeneration: authority.authGeneration,\n custodyGeneration: authority.custodyGeneration,\n fence: authority.fence,\n };\n return carrier.token;\n}\n\nexport function assetInput(host: UploadHost, error: unknown): SnapbackRefusal {\n if (isSnapbackRefusal(error)) return error;\n const input = error instanceof AssetInputError\n ? error\n : new AssetInputError(\"E_ASSET_TYPE\", error instanceof Error ? error.message : String(error));\n const refusal = new SnapbackRefusal({\n code: input.code,\n family: \"input\",\n message: input.message,\n rewrite: \"pass a File or { uri, size?/fileSize?, type?/mimeType? } only to a matching manifest asset argument\",\n guide: \"assets/client\",\n });\n host.recordRefusal(refusal.envelope);\n return refusal;\n}\n", "import type { Subscription } from \"./types.js\";\n\ninterface ParsedEvent { id?: string; data: string }\ninterface ErrorDecision<Event> { event?: Event; failure?: Error; retry: boolean }\nexport interface ReconnectingSseOptions<Event> {\n open(lastEventId: string | undefined, signal: AbortSignal): Promise<Response>;\n decode(event: ParsedEvent, current: () => boolean): Event | Promise<Event>;\n bufferedTerminal?(event: ParsedEvent): Error | undefined;\n onError(error: unknown, hadDelivery: boolean): Promise<ErrorDecision<Event>> | ErrorDecision<Event>;\n onLoss(last: Event | undefined): Event | undefined;\n terminal?(event: Event): Error | undefined;\n onEvent?: (event: Event) => void;\n}\ninterface Waiter<Event> {\n predicate: (event: Event) => boolean;\n resolve: (event: Event) => void;\n reject: (error: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n}\n\nfunction abortError(): Error {\n const error = new Error(\"subscription closed\");\n error.name = \"AbortError\";\n return error;\n}\n\nasync function delay(ms: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) throw abortError();\n await new Promise<void>((resolve, reject) => {\n const onAbort = () => {\n clearTimeout(timer);\n reject(abortError());\n };\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nasync function* parseSse(\n response: Response,\n signal: AbortSignal,\n onActivity: () => void,\n): AsyncGenerator<ParsedEvent> {\n if (!response.body) throw new Error(\"SSE response has no body\");\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let data: string[] = [];\n let id: string | undefined;\n let finished = false;\n const line = (raw: string): ParsedEvent | undefined => {\n const value = raw.endsWith(\"\\r\") ? raw.slice(0, -1) : raw;\n if (value === \"\") {\n if (data.length === 0) return undefined;\n const event = { id, data: data.join(\"\\n\") };\n data = [];\n id = undefined;\n onActivity();\n return event;\n }\n if (value.startsWith(\":\")) {\n onActivity();\n return undefined;\n }\n const colon = value.indexOf(\":\");\n const field = colon < 0 ? value : value.slice(0, colon);\n let fieldValue = colon < 0 ? \"\" : value.slice(colon + 1);\n if (fieldValue.startsWith(\" \")) fieldValue = fieldValue.slice(1);\n if (field === \"data\") data.push(fieldValue);\n if (field === \"id\" && !fieldValue.includes(\"\\0\")) id = fieldValue;\n return undefined;\n };\n const cancel = () => { void reader.cancel().catch(() => undefined); };\n signal.addEventListener(\"abort\", cancel, { once: true });\n try {\n while (true) {\n const chunk = await reader.read();\n buffer += decoder.decode(chunk.value, { stream: !chunk.done });\n let newline = buffer.indexOf(\"\\n\");\n while (newline >= 0) {\n const event = line(buffer.slice(0, newline));\n buffer = buffer.slice(newline + 1);\n if (event) yield event;\n newline = buffer.indexOf(\"\\n\");\n }\n // A fence may race with a read that already returned bytes. Let the\n // transport inspect complete buffered frames for terminal authority\n // evidence, but never finalize an incomplete frame after abort.\n if (signal.aborted) throw abortError();\n if (chunk.done) {\n finished = true;\n break;\n }\n }\n if (buffer.length > 0) {\n const event = line(buffer);\n if (event) yield event;\n }\n const final = line(\"\");\n if (final) yield final;\n } finally {\n signal.removeEventListener(\"abort\", cancel);\n if (!finished) await reader.cancel().catch(() => undefined);\n reader.releaseLock();\n }\n}\n\n// @ref LLP 1002#4-the-wire \u2014 streaming fetch consumes SSE id/data frames and ignores heartbeat comments in browsers and Node.\nexport class ReconnectingSse<Event> implements Subscription<Event> {\n private readonly controller = new AbortController();\n private readonly waiters = new Set<Waiter<Event>>();\n private last: Event | undefined;\n private lastEventId: string | undefined;\n private terminalFailure: Error | undefined;\n private closed = false;\n private activeAttempt?: AbortController;\n private retryNow?: () => void;\n private resets = 0;\n private running?: Promise<void>;\n\n constructor(private readonly options: ReconnectingSseOptions<Event>) {\n this.start();\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.controller.abort();\n for (const waiter of this.waiters) {\n clearTimeout(waiter.timer);\n waiter.reject(abortError());\n }\n this.waiters.clear();\n }\n\n /** Interrupt only the current attempt; the reconnecting subscription stays mounted. */\n reconnect(): void {\n if (this.closed) return;\n this.activeAttempt?.abort();\n this.retryNow?.();\n }\n\n /** A successor starts a new stream, with no predecessor event id or answer. */\n reset(): void {\n if (this.closed) return;\n this.terminalFailure = undefined;\n this.resets += 1;\n this.lastEventId = undefined;\n this.last = undefined;\n this.reconnect();\n this.start();\n }\n\n until(predicate: (event: Event) => boolean, timeoutMs = 30_000): Promise<Event> {\n if (this.terminalFailure) return Promise.reject(this.terminalFailure);\n if (this.last !== undefined && predicate(this.last)) return Promise.resolve(this.last);\n if (this.closed) return Promise.reject(abortError());\n return new Promise<Event>((resolve, reject) => {\n const waiter: Waiter<Event> = {\n predicate,\n resolve,\n reject,\n timer: setTimeout(() => {\n this.waiters.delete(waiter);\n reject(new Error(`subscription condition timed out after ${timeoutMs} ms`));\n }, timeoutMs),\n };\n this.waiters.add(waiter);\n });\n }\n\n private deliver(event: Event, settleWaiters = true): void {\n this.last = event;\n try {\n this.options.onEvent?.(event);\n } catch {\n // A consumer callback must not tear down the transport.\n }\n if (!settleWaiters) return;\n for (const waiter of [...this.waiters]) {\n let matches = false;\n try {\n matches = waiter.predicate(event);\n } catch (error) {\n clearTimeout(waiter.timer);\n this.waiters.delete(waiter);\n waiter.reject(error instanceof Error ? error : new Error(String(error)));\n continue;\n }\n if (!matches) continue;\n clearTimeout(waiter.timer);\n this.waiters.delete(waiter);\n waiter.resolve(event);\n }\n }\n\n private fail(error: Error): void {\n this.terminalFailure = error;\n for (const waiter of this.waiters) {\n clearTimeout(waiter.timer);\n waiter.reject(error);\n }\n this.waiters.clear();\n }\n\n private start(): void {\n if (this.closed || this.running) return;\n const reset = this.resets;\n const run = this.run();\n this.running = run;\n void run.finally(() => {\n this.running = undefined;\n // reset() can clear a terminal latch while the old run is unwinding.\n if (!this.closed && !this.terminalFailure && reset !== this.resets) this.start();\n }).catch(() => undefined);\n }\n\n private async run(): Promise<void> {\n let backoff = 250;\n let hadDelivery = false;\n let lossReported = false;\n while (!this.closed) {\n const reset = this.resets;\n const attempt = new AbortController();\n this.activeAttempt = attempt;\n const closeAttempt = () => attempt.abort();\n this.controller.signal.addEventListener(\"abort\", closeAttempt, { once: true });\n let idleTimer: ReturnType<typeof setTimeout> | undefined;\n let idle = false;\n let decodingTerminal: Error | undefined;\n const current = () => !this.closed && reset === this.resets && !attempt.signal.aborted;\n const armIdle = () => {\n if (idleTimer !== undefined) clearTimeout(idleTimer);\n idleTimer = setTimeout(() => {\n idle = true;\n attempt.abort();\n }, 30_000);\n };\n try {\n armIdle();\n const response = await this.options.open(this.lastEventId, attempt.signal);\n if (!response.ok) throw response;\n for await (const parsed of parseSse(response, attempt.signal, armIdle)) {\n if (this.closed || attempt.signal.aborted) {\n let terminal: Error | undefined;\n try {\n terminal = this.options.bufferedTerminal?.(parsed);\n } catch {\n // Malformed or stale nonterminal buffered frames stay suppressed.\n }\n if (terminal !== undefined) {\n try {\n await this.options.onError(terminal, hadDelivery);\n } catch {\n // A closed transport has no remaining observer to fail.\n }\n return;\n }\n continue;\n }\n try { decodingTerminal = this.options.bufferedTerminal?.(parsed); } catch { decodingTerminal = undefined; }\n const event = await this.options.decode(parsed, current);\n decodingTerminal = undefined;\n if (!current()) continue;\n if (parsed.id !== undefined) this.lastEventId = parsed.id;\n this.deliver(event);\n hadDelivery = true;\n lossReported = false;\n backoff = 250;\n const terminal = this.options.terminal?.(event);\n if (terminal !== undefined) {\n this.fail(terminal);\n return;\n }\n }\n if (this.closed) return;\n if (reset === this.resets && !lossReported) {\n const loss = this.options.onLoss(this.last);\n if (loss !== undefined) this.deliver(loss);\n lossReported = true;\n }\n } catch (error) {\n // Session evidence survives a decode crossing reset/close; onError\n // still fences it by the exact bearer before retiring any custody.\n if (decodingTerminal && !current()) {\n const decision = await this.options.onError(decodingTerminal, hadDelivery);\n if (!this.closed) {\n if (decision.event !== undefined) this.deliver(decision.event, decision.failure === undefined);\n if (decision.failure !== undefined) this.fail(decision.failure);\n }\n return;\n }\n if (this.closed || this.controller.signal.aborted) return;\n if (reset !== this.resets) continue;\n const failure = idle\n ? new Error(\"SSE stream idle for 30000 ms\")\n : error;\n const decision = await this.options.onError(failure, hadDelivery);\n if (this.closed || this.controller.signal.aborted) return;\n if (decision.event !== undefined) this.deliver(decision.event, decision.failure === undefined);\n if (decision.failure !== undefined) this.fail(decision.failure);\n if (!decision.retry) return;\n if (!lossReported) {\n const loss = this.options.onLoss(this.last);\n if (loss !== undefined) this.deliver(loss);\n lossReported = true;\n }\n } finally {\n if (idleTimer !== undefined) clearTimeout(idleTimer);\n this.controller.signal.removeEventListener(\"abort\", closeAttempt);\n if (this.activeAttempt === attempt) this.activeAttempt = undefined;\n }\n if (reset !== this.resets) continue;\n try {\n await Promise.race([\n delay(backoff, this.controller.signal),\n new Promise<void>((resolve) => { this.retryNow = resolve; }),\n ]);\n } catch {\n return;\n } finally {\n this.retryNow = undefined;\n }\n backoff = Math.min(backoff * 2, 5_000);\n }\n }\n}\n", "import type { AssetFetchOptions } from \"./store/byte-cache.js\";\nimport { throwIfAborted } from \"./client-wire.js\";\nimport { api, referenceName, type Api, type ApiProxy, type Channel as ChannelRef, type Op } from \"./api.js\";\nimport { AssetInputError, mayNeedAssetPlanning, planAssetArguments, substituteAssetRecords } from \"./assets.js\";\nimport { captureGrant, createOutboxApi, drainOutbox, submitMutation } from \"./client-outbox.js\";\nimport {\n acceptOffline,\n answerOffline,\n commitOffline,\n createOfflineDrain,\n createOfflineRuntime,\n decodeOfflineSubscription,\n goOffline,\n goOnline,\n initializeOfflineClient,\n offlineNetworkRefusal,\n offlineRefusal as makeOfflineRefusal,\n performOfflineResume,\n restartOffline,\n settleSubscription,\n validateOfflineOptions,\n} from \"./client-offline.js\";\nimport {\n assetBlobFor, assetBytesFor,\n assetHeadersFor,\n assetInput,\n assetUrlFor,\n uploadAsset,\n uploadPrepared,\n type Authority,\n} from \"./client-upload.js\";\nimport {\n SnapbackRefusal,\n copyRefusal,\n fallbackRefusal,\n isSnapbackRefusal,\n isTerminalSession,\n responseRefusal,\n sseObject,\n terminalSessionEnvelope,\n wireAuthMe,\n wireAuthSession,\n wireChannelDelivery,\n wireChannelPublish,\n wireLogout,\n wireManifest,\n wireQuery,\n wireShape,\n wireSubscription,\n} from \"./client-wire.js\";\nimport { type OfflineRuntime, type MountedQuery } from \"./offline.js\";\nimport { ReconnectingSse } from \"./sse.js\";\nimport { stableSerialize } from \"./types.js\";\nimport type {\n AssetInput,\n AssetRecord,\n AssetUploadOptions,\n AssetUploadSource,\n AssetUrlOptions,\n AuthMe,\n AuthSession,\n AuthTokenStore,\n ChannelDelivery,\n ChannelHandle,\n ChannelPublishResult,\n ClientSnapshot,\n CreateClientOptions,\n ImageAsset,\n LiveQueryDelivery,\n Manifest,\n MutationResult,\n OutboxApi,\n Principal,\n QueryResult,\n QueryRefusedDelivery,\n RefusalEnvelope,\n RefusedDelivery,\n SnapbackClient,\n Subscription,\n SubscriptionDelivery,\n VideoAsset,\n} from \"./types.js\";\n\nexport { api };\nexport { SnapbackRefusal, isSnapbackRefusal };\nexport { browserTokenStore } from \"./token-store.js\";\nexport type { Api, ApiProxy, ChannelRef as Channel, Op };\nexport * from \"./types.js\";\nexport type {\n Coverage,\n CoverageFacts,\n HeldAnswer,\n HeldOperation,\n HeldProgram,\n OutboxEntry,\n OutboxStore,\n OverlayRow,\n RangeStore,\n RangeStoreFactory,\n Receipt,\n ReceiptRange,\n StoreSwap,\n} from \"./store/range-store.js\";\nexport type { LocalAnswer, Prediction } from \"./twin.js\";\nexport type { PartialReason, PartialSite } from \"./twin-hydrate.js\";\n\ntype SessionExpiration =\n | { cleared: false }\n | { cleared: true; authGeneration: number; fence: number };\n\ntype InternalClientOptions = CreateClientOptions & {\n offlinePrincipal?: Principal;\n offlineReadObserver?: (ref: unknown, args: unknown, result: unknown) => void;\n /** A restart of a device whose transport was cut boots cut, before any request. */\n startOffline?: boolean;\n};\n\n// @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 auth custody is restored explicitly and every principal transition fences old in-memory work.\nclass Client implements SnapbackClient {\n readonly auth;\n readonly outbox: OutboxApi;\n readonly ready: Promise<void>;\n readonly url: string;\n readonly fetchImpl: typeof globalThis.fetch;\n readonly customFetch: boolean;\n private readonly tokenStore?: AuthTokenStore;\n readonly persona?: string;\n private readonly createOptions: InternalClientOptions;\n private readonly offlineRuntime?: OfflineRuntime;\n private readonly mounted = new Map<string, MountedQuery>();\n private offlineMetadataLoaded = false;\n private resumeTail: Promise<void> = Promise.resolve();\n private resumeFlight?: Promise<void>;\n private resumeController?: AbortController;\n private resetRefusal?: RefusalEnvelope;\n // Pending reads, never buffered authority-bearing responses. Custody is per principal.\n private readonly supersessionQueries = new Map<string, { principal: string; op: string; args: unknown }>();\n private forcedOffline = false;\n private currentToken?: string;\n private currentPrincipal?: Principal;\n private authGeneration = 0;\n private custodyGeneration = 0;\n private operationFence = 0;\n private transitionTail: Promise<void> = Promise.resolve();\n private custodyTail: Promise<void> = Promise.resolve();\n private currentSnapshot: ClientSnapshot;\n private readonly statusListeners = new Set<(snapshot: ClientSnapshot) => void>();\n private readonly subscriptions = new Set<Subscription<unknown>>();\n private readonly writes = new Set<Promise<unknown>>();\n carrier?: {\n token: string;\n expiresAt: number;\n authGeneration: number;\n custodyGeneration: number;\n fence: number;\n };\n private closed = false;\n private closing: Promise<void> = Promise.resolve();\n\n constructor(options: InternalClientOptions) {\n if (!options?.url) throw new TypeError(\"createClient requires url\");\n if (options.as !== undefined && (options.token !== undefined || options.tokenStore !== undefined)) {\n throw new TypeError(\"createClient cannot combine dev persona `as` with bearer token custody\");\n }\n this.createOptions = options;\n this.url = options.url.replace(/\\/+$/, \"\");\n this.fetchImpl = options.fetch ?? globalThis.fetch;\n this.customFetch = options.fetch !== undefined;\n if (typeof this.fetchImpl !== \"function\") throw new TypeError(\"createClient requires a fetch implementation\");\n this.tokenStore = options.tokenStore;\n this.persona = options.as;\n this.forcedOffline = options.startOffline === true;\n this.currentSnapshot = { authGeneration: 0, persona: options.as, connection: this.forcedOffline ? \"offline\" : \"reconnecting\" };\n validateOfflineOptions(options.offline);\n try {\n this.offlineRuntime = createOfflineRuntime(options.offline);\n } catch (error) {\n throw this.offlineRefusal(error);\n }\n this.outbox = createOutboxApi(this.offlineRuntime, () => this.drainNow(), () => this.ready);\n this.auth = {\n signup: (input: { email: string; password: string }) => this.session(\"/api/auth/signup\", input),\n login: (input: { email: string; password: string }) => this.session(\"/api/auth/login\", input),\n guest: () => this.session(\"/api/auth/guest\", {}),\n logout: () => this.logout(),\n me: () => this.me(),\n };\n this.ready = this.hydrate(options.token).then(() => this.initializeOffline());\n }\n\n get snapshot(): ClientSnapshot {\n return this.currentSnapshot;\n }\n\n async query<Args, Result>(ref: Op<Args, Result>, args: Args): Promise<QueryResult<Result>> {\n const authority = await this.operationAuthority(false);\n const op = referenceName(ref);\n if (this.forcedOffline) {\n this.patchSnapshot({ connection: \"offline\" });\n return answerOffline(this.offlineRuntime, op, args, (error) => this.offlineRefusal(error));\n }\n await this.ensureOfflineMetadata(authority);\n this.scheduleSupersessionReset(authority);\n let backoff = 50;\n for (let attempt = 1; ; attempt += 1) {\n try {\n const held = await this.offlineRuntime?.answer(op, args);\n const revision = this.offlineRuntime?.coverageRevision;\n const raw = await this.json(this.offlineRuntime ? \"/api/query?receipt=1\" : \"/api/query\", {\n method: \"POST\",\n body: JSON.stringify(this.offlineRuntime && held?.validator ? { op, args, validator: held.validator } : { op, args }),\n }, authority);\n const accepted = await acceptOffline<Result>(this.offlineRuntime, op, args, raw, wireShape);\n const result = wireQuery<Result>(accepted.result);\n const superseded = await commitOffline(this.offlineRuntime, op, args, accepted, (error) => this.offlineRefusal(error), revision);\n this.validated(authority);\n if (superseded || revision !== this.offlineRuntime?.coverageRevision) this.scheduleSupersessionReset(authority, { op, args });\n if (this.offlineRuntime && this.createOptions.offlineReadObserver) {\n const held = await answerOffline<Result>(\n this.offlineRuntime,\n op,\n args,\n (error) => this.offlineRefusal(error),\n );\n this.createOptions.offlineReadObserver(ref, args, held);\n }\n // Every typed receipt terminates this request. In particular, an\n // empty Capped array is the terminal drain state, never a retry cue.\n return result;\n } catch (error) {\n if (isSnapbackRefusal(error) && error.retryable && this.offlineRuntime && attempt >= 3) {\n this.patchSnapshot({ connection: \"offline\" });\n return answerOffline(this.offlineRuntime, op, args, (failure) => this.offlineRefusal(failure));\n }\n if (!isSnapbackRefusal(error)\n || (error.code !== \"E_TRANSPORT\" && error.code !== \"E_NETWORK\")\n || !error.retryable\n || attempt >= 3) throw error;\n await new Promise<void>((resolve) => setTimeout(resolve, backoff));\n this.ensureAuthority(authority);\n backoff *= 2;\n }\n }\n }\n\n async mutation<Args, Result>(ref: Op<Args, Result>, args: AssetInput<Args>): Promise<MutationResult<Result>> {\n const authority = await this.operationAuthority();\n return this.trackWrite(async () => {\n try {\n let mutationArgs: unknown = args;\n if (mayNeedAssetPlanning(args)) {\n // @ref LLP 1006#10-clients \u2014 the descriptor fence binds substitution\n // to the manifest read here. The owner independently validates the\n // resulting records against its live generation on every request.\n const operation = referenceName(ref);\n const descriptorManifest = await this.manifestFor(authority);\n const descriptor = descriptorManifest.ops[operation]?.args;\n if (descriptor === undefined) {\n throw assetInput(this, new AssetInputError(\n \"E_ASSET_TYPE\",\n `manifest generation ${descriptorManifest.generation} has no argument descriptor for ${operation}`,\n ));\n }\n const placements = await planAssetArguments(args, descriptor)\n .catch((error) => { throw assetInput(this, error); });\n if (placements.length > 0) {\n const records: AssetRecord[] = [];\n for (const placement of placements) {\n records.push(await uploadPrepared(this, placement.prepared, {}, authority));\n }\n const current = await this.manifestFor(authority);\n if (current.generation !== descriptorManifest.generation) {\n throw assetInput(this, new AssetInputError(\n \"E_ASSET_NOT_READY\",\n `descriptor generation changed from ${descriptorManifest.generation} to ${current.generation} during asset upload`,\n ));\n }\n mutationArgs = substituteAssetRecords(args, placements, records);\n }\n }\n const result = await submitMutation<Result>({\n runtime: this.offlineRuntime, offline: this.forcedOffline, op: referenceName(ref), args: mutationArgs,\n json: (path, init) => this.json(path, init, authority), failure: (error) => this.offlineRefusal(error),\n drain: () => this.drainNow(),\n });\n if (result.state === \"rejected\" && isTerminalSession(result)) {\n const wasCurrent = this.authorityCurrent(authority);\n const expiration = await this.expireSession(authority);\n if (!wasCurrent || !this.expirationCurrent(expiration)) throw this.supersededRefusal();\n this.recordRefusal(result);\n return result;\n }\n this.validated(authority);\n return result;\n } catch (error) {\n if (isSnapbackRefusal(error) && error.code === \"E_WIRE_SHAPE\") {\n const ambiguous = new SnapbackRefusal(copyRefusal(error.envelope), true);\n this.patchSnapshot({\n connection: this.transportFailureState(),\n lastRefusal: ambiguous.envelope,\n });\n throw ambiguous;\n }\n throw error;\n }\n });\n }\n\n upload(source: AssetUploadSource, options: AssetUploadOptions & { readonly kind: \"image\" }): Promise<ImageAsset>;\n upload(source: AssetUploadSource, options: AssetUploadOptions & { readonly kind: \"video\" }): Promise<VideoAsset>;\n upload(source: AssetUploadSource, options?: AssetUploadOptions): Promise<AssetRecord>;\n async upload(source: AssetUploadSource, options: AssetUploadOptions = {}): Promise<AssetRecord> {\n const authority = await this.operationAuthority();\n return this.trackWrite(() => uploadAsset(this, source, options, authority));\n }\n\n async assetUrl(asset: AssetRecord | null | undefined, options?: AssetUrlOptions): Promise<string | undefined>;\n async assetUrl(assets: readonly AssetRecord[], options?: AssetUrlOptions): Promise<string[]>;\n async assetUrl(assetOrList: AssetRecord | readonly AssetRecord[] | null | undefined, options: AssetUrlOptions = {}): Promise<string | string[] | undefined> {\n return assetUrlFor(this, assetOrList, options, await this.operationAuthority());\n }\n async assetHeaders(): Promise<Record<string, string>> {\n return assetHeadersFor(this, await this.operationAuthority());\n }\n async assetBlob(url: string, options: AssetFetchOptions = {}): Promise<Blob> {\n const authority = await this.operationAuthority();\n return assetBlobFor(this, this.offlineRuntime?.bytes, () => this.forcedOffline, url, options, authority);\n }\n async assetBytes(url: string, options: AssetFetchOptions = {}) {\n const authority = await this.operationAuthority();\n return assetBytesFor(this, this.offlineRuntime?.bytes, () => this.forcedOffline, url, options, authority);\n }\n get assetCache(): OfflineRuntime[\"bytes\"] | undefined {\n return this.offlineRuntime?.bytes;\n }\n subscribe<Args, Result>(\n ref: Op<Args, Result>,\n args: Args,\n callback: (delivery: SubscriptionDelivery<Result>) => void,\n options: { drain?: boolean } = {},\n ): Subscription<SubscriptionDelivery<Result>> {\n if (options.drain) return this.drain(ref, args, callback);\n return this.subscribeRegular(ref, args, callback);\n }\n\n private subscribeRegular<Args, Result>(\n ref: Op<Args, Result>,\n args: Args,\n callback: (delivery: SubscriptionDelivery<Result>) => void,\n ): Subscription<SubscriptionDelivery<Result>> {\n const op = referenceName(ref);\n const mountedKey = `${op}\\u0000${stableSerialize(args)}`;\n this.mounted.set(mountedKey, { op, args, drain: false });\n let lastPair: { seq: number; data?: Result } | undefined;\n let revision: number | undefined;\n let authority: Authority | undefined;\n let subscription: Subscription<SubscriptionDelivery<Result>>;\n const finish = (value: LiveQueryDelivery<Result> | QueryRefusedDelivery) => {\n lastPair = settleSubscription(value, () => this.ensureAuthority(authority), (patch) =>\n this.patchSnapshot({ ...patch, lastRefusal: patch.lastRefusal ?? this.resetRefusal }));\n return value;\n };\n subscription = new ReconnectingSse<SubscriptionDelivery<Result>>({\n open: async (lastEventId, signal) => {\n authority ??= await this.operationAuthority();\n if (this.forcedOffline) throw offlineNetworkRefusal();\n await this.ensureOfflineMetadata(authority);\n this.scheduleSupersessionReset(authority);\n revision = this.offlineRuntime?.coverageRevision;\n const held = await this.offlineRuntime?.answer(op, args);\n let path = `/api/subscribe?op=${encodeURIComponent(op)}&args=${encodeURIComponent(JSON.stringify(args))}`;\n if (this.offlineRuntime) path += \"&receipt=1\";\n if (held?.validator) path += `&validator=${encodeURIComponent(held.validator)}`;\n return this.stream(path, lastEventId, signal, authority);\n },\n decode: ({ data }, current) => {\n const frameRevision = revision;\n if (!this.offlineRuntime) return finish(wireSubscription<Result>(data));\n return decodeOfflineSubscription<Result>({\n runtime: this.offlineRuntime, op, args, data, shape: wireShape,\n failure: (error) => this.offlineRefusal(error),\n revision: frameRevision, current,\n superseded: () => this.scheduleSupersessionReset(authority!, { op, args }),\n observe: this.createOptions.offlineReadObserver\n ? async () => this.createOptions.offlineReadObserver!(\n ref,\n args,\n await answerOffline(this.offlineRuntime, op, args, (error) => this.offlineRefusal(error)),\n )\n : undefined,\n }).then(value => current() || (value.state === \"refused\" && isTerminalSession(value)) ? finish(value) : value);\n },\n bufferedTerminal: ({ data }) => {\n const value = wireSubscription<Result>(data);\n return value.state === \"refused\" && isTerminalSession(value)\n ? new SnapbackRefusal(copyRefusal(value))\n : undefined;\n },\n onError: async (error) => {\n const { retry, event, refusal } = await this.subscriptionError(error, authority, subscription);\n if (retry && this.offlineRuntime) {\n this.patchSnapshot({ connection: \"offline\" });\n const event = await answerOffline<Result>(\n this.offlineRuntime,\n op,\n args,\n (failure) => this.offlineRefusal(failure),\n );\n return { retry, event: event as SubscriptionDelivery<Result>, failure: refusal };\n }\n return {\n retry,\n event: event === undefined ? undefined : { ...event, live: false as const },\n failure: refusal,\n };\n },\n onLoss: () => {\n if (!this.authorityCurrent(authority)) return undefined;\n this.patchSnapshot({ connection: this.transportFailureState() });\n if (this.offlineRuntime) return undefined;\n if (!lastPair) return undefined;\n return \"data\" in lastPair\n ? { state: \"stale\", live: false, since: Date.now(), seq: lastPair.seq, data: lastPair.data }\n : { state: \"stale\", live: false, since: Date.now(), seq: lastPair.seq };\n },\n terminal: (event) => event.state === \"refused\"\n ? new SnapbackRefusal(copyRefusal(event))\n : undefined,\n onEvent: callback,\n });\n const tracked = this.track(subscription);\n const close = tracked.close.bind(tracked);\n tracked.close = () => {\n this.mounted.delete(mountedKey);\n close();\n };\n return tracked;\n }\n\n private drain<Args, Result>(\n ref: Op<Args, Result>,\n args: Args,\n callback: (delivery: SubscriptionDelivery<Result>) => void,\n ): Subscription<SubscriptionDelivery<Result>> {\n const op = referenceName(ref);\n return createOfflineDrain({\n ref,\n op,\n args,\n callback,\n runtime: this.offlineRuntime,\n ready: this.ready,\n mounted: this.mounted,\n query: (pageArgs: Args) => this.query(ref, pageArgs),\n subscribe: (tailArgs, onEvent) => this.subscribeRegular(ref, tailArgs, onEvent),\n track: (subscription) => this.track(subscription),\n resume: async () => this.performResume(await this.operationAuthority()),\n observe: this.offlineRuntime && this.createOptions.offlineReadObserver\n ? async () => this.createOptions.offlineReadObserver!(\n ref,\n args,\n await answerOffline(this.offlineRuntime, op, args, (error) => this.offlineRefusal(error)),\n )\n : undefined,\n });\n }\n\n channel<Args, Payload = unknown>(ref: ChannelRef<Args, Payload>, args: Args): ChannelHandle<Payload> {\n const path = referenceName(ref);\n const name = encodeURIComponent(path.startsWith(\"channels.\") ? path.slice(\"channels.\".length) : path);\n return {\n publish: async (payload: Payload) => {\n const authority = await this.operationAuthority();\n return this.trackWrite(async () => {\n const result = wireChannelPublish(await this.json(`/api/channel/${name}/publish`, {\n method: \"POST\",\n body: JSON.stringify({ args, payload }),\n }, authority));\n if (\"state\" in result) {\n if (isTerminalSession(result)) {\n const wasCurrent = this.authorityCurrent(authority);\n const expiration = await this.expireSession(authority);\n if (!wasCurrent || !this.expirationCurrent(expiration)) throw this.supersededRefusal();\n }\n this.recordRefusal(result);\n } else {\n this.validated(authority);\n }\n return result;\n });\n },\n subscribe: (callback: (event: ChannelDelivery<Payload>) => void) => {\n const path = `/api/channel/${name}/subscribe?args=${encodeURIComponent(JSON.stringify(args))}`;\n let authority: Authority | undefined;\n let subscription: Subscription<ChannelDelivery<Payload>>;\n subscription = new ReconnectingSse<ChannelDelivery<Payload>>({\n open: async (lastEventId, signal) => {\n authority ??= await this.operationAuthority();\n return this.stream(path, lastEventId, signal, authority);\n },\n decode: ({ data }) => {\n const value = wireChannelDelivery<Payload>(data);\n if (\"state\" in value && value.state === \"refused\" && isTerminalSession(value)) {\n throw new SnapbackRefusal(copyRefusal(value));\n }\n this.ensureAuthority(authority);\n this.patchSnapshot({\n connection: \"connected\",\n lastRefusal: \"state\" in value && value.state === \"refused\"\n ? copyRefusal(value)\n : undefined,\n });\n return value;\n },\n bufferedTerminal: ({ data }) => {\n const value = wireChannelDelivery<Payload>(data);\n return \"state\" in value && value.state === \"refused\" && isTerminalSession(value)\n ? new SnapbackRefusal(copyRefusal(value))\n : undefined;\n },\n onError: async (error) => {\n const decision = await this.subscriptionError(error, authority, subscription);\n return { retry: decision.retry, event: decision.event, failure: decision.refusal };\n },\n onLoss: () => {\n if (!this.authorityCurrent(authority)) return undefined;\n this.patchSnapshot({ connection: this.transportFailureState() });\n return undefined;\n },\n terminal: (event) => \"state\" in event && event.state === \"refused\"\n ? new SnapbackRefusal(copyRefusal(event))\n : undefined,\n onEvent: callback,\n });\n return this.track(subscription);\n },\n };\n }\n\n async manifest(): Promise<Manifest> {\n const authority = await this.operationAuthority();\n return this.manifestFor(authority);\n }\n\n async offline(): Promise<void> {\n return goOffline({\n ready: this.ready,\n ensureOpen: () => this.ensureOpen(),\n force: (value) => { this.forcedOffline = value; },\n connection: (value) => { this.patchSnapshot({ connection: value }); },\n reconnect: () => this.reconnectTransports(),\n });\n }\n\n async online(): Promise<void> {\n return goOnline({\n ready: this.ready,\n ensureOpen: () => this.ensureOpen(),\n force: (value) => { this.forcedOffline = value; },\n connection: (value) => { this.patchSnapshot({ connection: value }); },\n authority: () => this.operationAuthority(),\n resume: (authority) => this.performResume(authority),\n setResume: (run) => { this.resumeTail = run; },\n reconnect: () => this.reconnectTransports(),\n });\n }\n\n async restart(): Promise<SnapbackClient> {\n return restartOffline({\n ready: this.ready,\n ensureOpen: () => this.ensureOpen(),\n forced: () => this.forcedOffline,\n shutdown: async () => {\n this.closed = true;\n this.abortResume();\n this.operationFence += 1;\n this.closeTransports();\n this.patchSnapshot({ connection: \"offline\" });\n await this.offlineRuntime?.close();\n },\n create: () => {\n const offline = this.createOptions.offline;\n const options: InternalClientOptions = this.persona !== undefined\n ? { url: this.url, as: this.persona, fetch: this.fetchImpl, offline, startOffline: this.forcedOffline,\n offlineReadObserver: this.createOptions.offlineReadObserver }\n : { url: this.url, token: this.currentToken, tokenStore: this.tokenStore, fetch: this.fetchImpl, offline,\n offlinePrincipal: this.currentPrincipal, startOffline: this.forcedOffline,\n offlineReadObserver: this.createOptions.offlineReadObserver };\n return new Client(options);\n },\n });\n }\n\n subscribeStatus(callback: (snapshot: ClientSnapshot) => void): () => void {\n this.statusListeners.add(callback);\n try {\n callback(this.currentSnapshot);\n } catch (error) {\n this.statusListeners.delete(callback);\n throw error;\n }\n return () => this.statusListeners.delete(callback);\n }\n\n close(): Promise<void> {\n if (this.closed) return this.closing;\n this.closed = true;\n this.abortResume();\n this.operationFence += 1;\n this.closeTransports();\n this.patchSnapshot({ connection: \"offline\" });\n // Resolves once the carrier is quiet: a test or a shutdown that removes the\n // store's directory right after close() would otherwise race the last swap.\n this.closing = this.offlineRuntime?.close() ?? Promise.resolve();\n return this.closing;\n }\n\n private track<Event>(subscription: Subscription<Event>): Subscription<Event> {\n this.subscriptions.add(subscription as Subscription<unknown>);\n const close = subscription.close.bind(subscription);\n subscription.close = () => {\n this.subscriptions.delete(subscription as Subscription<unknown>);\n close();\n };\n return subscription;\n }\n\n private async session(path: string, input: unknown): Promise<AuthSession> {\n this.ensureBearerTransition(path.slice(\"/api/auth/\".length));\n return this.transition(async (authority) => {\n const session = wireAuthSession(\n captureGrant(this.offlineRuntime, await this.json(path, { method: \"POST\", body: JSON.stringify(input) }, authority, false, false)),\n `${path.slice(\"/api/\".length)} response`,\n );\n await this.openOffline(session.viewer, true);\n await this.installToken(session.token);\n this.ensureOpen();\n // The program lands with the grant, so \"log in, go offline, write\" prices and predicts from custody.\n try {\n await this.ensureOfflineMetadata({\n authGeneration: this.authGeneration,\n custodyGeneration: this.custodyGeneration,\n fence: this.operationFence,\n token: this.currentToken,\n });\n } catch (error) {\n if (!isSnapbackRefusal(error) || !error.retryable) throw error;\n }\n this.validated(undefined);\n return session;\n });\n }\n\n private async logout(): Promise<{ ok: boolean }> {\n this.ensureBearerTransition(\"logout\");\n return this.transition(async (authority) => {\n let result: { ok: boolean } | undefined;\n let requestFailure: unknown;\n try {\n result = wireLogout(await this.json(\n \"/api/auth/logout\",\n { method: \"POST\" },\n authority,\n false,\n false,\n ));\n } catch (error) {\n requestFailure = error;\n }\n let wipeFailure: unknown;\n try { await this.wipeOffline(); } catch (error) { wipeFailure = error; }\n await this.clearToken();\n this.ensureOpen();\n if (requestFailure !== undefined) throw requestFailure;\n if (wipeFailure !== undefined) throw wipeFailure;\n this.validated(undefined);\n return result as { ok: boolean };\n });\n }\n\n private async me(): Promise<AuthMe> {\n const authority = await this.operationAuthority();\n const result = wireAuthMe(await this.json(\"/api/auth/me\", {}, authority));\n await this.openOffline(result.viewer, true);\n this.validated(authority);\n return result;\n }\n\n private async hydrate(explicitToken: string | undefined): Promise<void> {\n let token = explicitToken;\n let principal: string | null | undefined;\n if (token === undefined && this.tokenStore) {\n try {\n const [storedToken, storedPrincipal] = await Promise.all([\n this.tokenStore.load(), this.tokenStore.loadPrincipal?.(),\n ]);\n token = storedToken ?? undefined;\n principal = storedPrincipal;\n } catch (error) {\n throw this.storageRefusal(\"load\", error);\n }\n }\n if (token !== undefined && (typeof token !== \"string\" || token.length === 0)) {\n throw this.storageRefusal(\"load\", new TypeError(\"stored token must be a non-empty string or null\"));\n }\n if (explicitToken !== undefined) await this.saveToken(token!);\n if (this.closed) return;\n this.currentToken = token;\n if (token !== undefined && principal) this.currentPrincipal = principal as Principal;\n this.authGeneration += 1;\n this.publishAuthSnapshot();\n }\n\n headers(authority: Authority, stream = false, hasBody = false): Headers {\n const headers = new Headers();\n headers.set(\"Accept\", stream ? \"text/event-stream\" : \"application/json\");\n if (hasBody) headers.set(\"Content-Type\", \"application/json\");\n if (authority.token) headers.set(\"Authorization\", `Bearer ${authority.token}`);\n if (this.persona) headers.set(\"X-Snapback-As\", this.persona);\n return headers;\n }\n\n private async manifestFor(authority: Authority, signal?: AbortSignal): Promise<Manifest> {\n throwIfAborted(signal);\n const value = wireManifest(await this.json(\"/api/manifest\", { signal }, authority));\n throwIfAborted(signal);\n this.validated(authority);\n this.patchSnapshot({ generation: value.generation });\n this.offlineRuntime?.manifest(value);\n // A generation change re-fetches the program on the next read (LLP 1012 \u00A78).\n if (this.offlineRuntime && this.offlineRuntime.programGeneration !== value.programGeneration) this.offlineMetadataLoaded = false;\n return value;\n }\n\n /**\n * The manifest and, when the partition holds none for the live generation,\n * `GET /api/program`: the twin's custody and the write bounds. `force`\n * reloads after `E_OFFLINE_RESET`, whose generation the held program predates.\n */\n private async ensureOfflineMetadata(authority: Authority, force = false, retry = true, signal?: AbortSignal): Promise<void> {\n throwIfAborted(signal);\n if (!this.offlineRuntime || (this.offlineMetadataLoaded && !force)) return;\n let manifest: Manifest;\n // Unreachable at cold start: held answers and the outbox still serve; the metadata loads on the next reach.\n try { manifest = await this.manifestFor(authority, signal); throwIfAborted(signal); } catch (error) {\n if (!force && isSnapbackRefusal(error) && error.retryable) return;\n throw error;\n }\n if (this.offlineRuntime.programGeneration !== manifest.programGeneration || force) {\n try {\n const program = await this.json(\n `/api/program?generation=${encodeURIComponent(manifest.programGeneration)}`,\n { signal },\n authority,\n );\n throwIfAborted(signal);\n await this.offlineRuntime.program(program, signal);\n throwIfAborted(signal);\n } catch (error) {\n if (!isSnapbackRefusal(error) || error.status !== 404) throw error;\n if (force) {\n // The owner can advance between manifest and program. Coalesce that\n // successor into this reset; repeated churn keeps the reset pending.\n if (retry) return this.ensureOfflineMetadata(authority, true, false, signal);\n throw error;\n }\n }\n }\n this.offlineMetadataLoaded = true;\n }\n\n networkRefusal(message: string): SnapbackRefusal {\n const refusal = new SnapbackRefusal(fallbackRefusal(\"E_NETWORK\", message), true);\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n return refusal;\n }\n\n transportRefusal(message: string): SnapbackRefusal {\n const refusal = new SnapbackRefusal(fallbackRefusal(\"E_TRANSPORT\", message), true);\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n return refusal;\n }\n\n async json(\n path: string,\n init: RequestInit,\n authority: Authority,\n enforceAuthority = true,\n clearTerminalSession = true,\n ): Promise<unknown> {\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n if (this.forcedOffline) throw offlineNetworkRefusal();\n let response: Response;\n try {\n response = await this.fetchImpl(`${this.url}${path}`, {\n ...init,\n headers: this.headers(authority, false, init.body !== undefined && init.body !== null),\n });\n } catch (error) {\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n const refusal = new SnapbackRefusal(\n fallbackRefusal(\"E_NETWORK\", error instanceof Error ? error.message : String(error)),\n true,\n );\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n throw refusal;\n }\n if (!response.ok) {\n if (response.status >= 400 && response.status < 500) {\n let refusal: SnapbackRefusal;\n try {\n refusal = await responseRefusal(response);\n } catch (error) {\n if (isSnapbackRefusal(error)) {\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n if (error.retryable) {\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: error.envelope });\n }\n throw error;\n }\n throw error;\n }\n const wasCurrent = !enforceAuthority || this.authorityCurrent(authority);\n let expiration: SessionExpiration | undefined;\n if (clearTerminalSession && isTerminalSession(refusal.envelope)) {\n expiration = await this.expireSession(authority);\n }\n if (enforceAuthority && (!wasCurrent\n || (expiration !== undefined && !this.expirationCurrent(expiration)))) {\n throw this.supersededRefusal();\n }\n if (enforceAuthority && !(clearTerminalSession && isTerminalSession(refusal.envelope))) {\n this.ensureAuthority(authority);\n }\n else this.ensureOpen();\n this.patchSnapshot({ connection: \"connected\" });\n this.recordRefusal(refusal.envelope);\n throw refusal;\n }\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n const refusal = new SnapbackRefusal(\n fallbackRefusal(\"E_TRANSPORT\", `${path} returned HTTP ${response.status}`),\n true,\n );\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n throw refusal;\n }\n let value: unknown;\n try {\n value = await response.json();\n } catch {\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n const refusal = wireShape(`${path} must contain valid JSON`);\n this.recordRefusal(refusal.envelope);\n throw refusal;\n }\n let terminal: RefusalEnvelope | undefined;\n try {\n terminal = clearTerminalSession ? terminalSessionEnvelope(value) : undefined;\n } catch (error) {\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n throw error;\n }\n if (terminal !== undefined && enforceAuthority && !this.authorityCurrent(authority)) {\n await this.expireSession(authority);\n throw this.supersededRefusal();\n }\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n this.patchSnapshot({ connection: \"connected\" });\n return value;\n }\n\n private async stream(\n path: string,\n lastEventId: string | undefined,\n signal: AbortSignal,\n authority: Authority,\n ): Promise<Response> {\n this.ensureAuthority(authority);\n if (this.forcedOffline) throw offlineNetworkRefusal();\n const headers = this.headers(authority, true);\n if (lastEventId !== undefined) headers.set(\"Last-Event-ID\", lastEventId);\n try {\n const response = await this.fetchImpl(`${this.url}${path}`, { headers, signal });\n if (!response.ok) {\n if (response.status >= 400 && response.status < 500) {\n let refusal: SnapbackRefusal | undefined;\n try {\n refusal = await responseRefusal(response);\n } catch (error) {\n if (isSnapbackRefusal(error) && !error.retryable) throw error;\n // A non-envelope 4xx cannot be interpreted as a terminal owner refusal.\n }\n if (refusal !== undefined) {\n if (isTerminalSession(refusal.envelope)\n && (signal.aborted || !this.authorityCurrent(authority))) {\n await this.expireSession(authority);\n throw this.supersededRefusal();\n }\n if (!isTerminalSession(refusal.envelope)) this.ensureAuthority(authority);\n throw refusal;\n }\n }\n this.ensureAuthority(authority);\n throw new SnapbackRefusal(\n fallbackRefusal(\"E_HTTP\", `${path} returned HTTP ${response.status}`),\n true,\n );\n }\n this.ensureAuthority(authority);\n throwIfAborted(signal);\n this.patchSnapshot({ connection: \"connected\" });\n return response;\n } catch (error) {\n if (isSnapbackRefusal(error) && isTerminalSession(error.envelope)) throw error;\n // An aborted transport can still settle when a custom fetch ignores its\n // signal. Fence it before interpreting or publishing the late result.\n this.ensureAuthority(authority);\n if (signal.aborted) throw error;\n if (isSnapbackRefusal(error)) {\n this.patchSnapshot({\n connection: error.retryable ? this.transportFailureState() : \"connected\",\n lastRefusal: error.envelope,\n });\n throw error;\n }\n const refusal = new SnapbackRefusal(\n fallbackRefusal(\"E_NETWORK\", error instanceof Error ? error.message : String(error)),\n true,\n );\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n throw refusal;\n }\n }\n\n private async subscriptionError(\n error: unknown,\n authority: Authority | undefined,\n origin: Subscription<unknown>,\n ): Promise<{ event?: RefusedDelivery; retry: boolean; refusal?: SnapbackRefusal }> {\n const refusal = isSnapbackRefusal(error)\n ? error\n : new SnapbackRefusal(\n fallbackRefusal(\"E_NETWORK\", error instanceof Error ? error.message : String(error)),\n true,\n );\n if (refusal.code === \"E_AUTH_SUPERSEDED\") {\n return { retry: false, refusal };\n }\n if (isTerminalSession(refusal.envelope) && authority !== undefined) {\n const wasCurrent = this.authorityCurrent(authority);\n let expiration: SessionExpiration;\n try {\n expiration = await this.expireSession(authority, origin);\n } catch (error) {\n if (this.closed) {\n return { retry: false, refusal: this.supersededRefusal() };\n }\n const terminal = isSnapbackRefusal(error)\n ? error\n : new SnapbackRefusal({\n code: \"E_AUTH_TOKEN_STORE\",\n family: \"auth\",\n message: `token store clear failed: ${error instanceof Error ? error.message : String(error)}`,\n guide: \"auth/session\",\n });\n this.patchSnapshot({ connection: \"connected\", lastRefusal: terminal.envelope });\n return {\n retry: false,\n refusal: terminal,\n event: { state: \"refused\", ...terminal.envelope },\n };\n }\n if (this.closed) {\n return { retry: false, refusal: this.supersededRefusal() };\n }\n if (!wasCurrent || !this.expirationCurrent(expiration)) {\n return { retry: false, refusal: this.supersededRefusal() };\n }\n }\n if (this.closed) {\n return { retry: false, refusal: this.supersededRefusal() };\n }\n if (refusal.retryable) {\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n return { retry: true };\n }\n this.patchSnapshot({ connection: \"connected\", lastRefusal: refusal.envelope });\n return { retry: false, refusal, event: { state: \"refused\", ...refusal.envelope } };\n }\n\n private async initializeOffline(): Promise<void> {\n if (!this.offlineRuntime) return;\n const authority = {\n authGeneration: this.authGeneration,\n custodyGeneration: this.custodyGeneration,\n fence: this.operationFence,\n token: this.currentToken,\n };\n return initializeOfflineClient({\n principal: this.persona === undefined\n ? this.createOptions.offlinePrincipal ?? this.currentPrincipal\n : `dev:${this.persona}` as Principal,\n bearer: this.persona === undefined && this.currentToken !== undefined,\n authority,\n open: (principal, authenticated) => this.openOffline(principal, authenticated),\n confirm: async (current) => wireAuthMe(await this.json(\"/api/auth/me\", {}, current)).viewer,\n metadata: (current) => this.ensureOfflineMetadata(current),\n resume: (current) => this.performResume(current),\n // A bounded rebuild refusal leaves durable work for online(); it must\n // not permanently reject the restore barrier that online() itself awaits.\n ignore: (error) => isSnapbackRefusal(error)\n && (error.retryable || error.code === \"E_OFFLINE_RESUME\" || error.code === \"E_OFFLINE_RESET\"),\n });\n }\n\n private async openOffline(principal: Principal, authenticated = false): Promise<void> {\n if (!this.offlineRuntime) return;\n try {\n const changed = this.offlineRuntime.principal !== principal;\n await this.offlineRuntime.open(principal, authenticated);\n if (authenticated) await this.offlineRuntime.reauthenticate(principal);\n this.currentPrincipal = principal;\n if (changed) {\n this.supersessionQueries.clear();\n this.offlineMetadataLoaded = false;\n }\n } catch (error) {\n throw this.offlineRefusal(error);\n }\n }\n\n private async sealOffline(): Promise<void> {\n if (!this.offlineRuntime) return;\n try { await this.offlineRuntime.seal(); }\n catch (error) { throw this.offlineRefusal(error); }\n }\n\n private async wipeOffline(): Promise<void> {\n if (!this.offlineRuntime) return;\n this.abortResume();\n this.supersessionQueries.clear();\n try { await this.offlineRuntime.wipe(); this.currentPrincipal = undefined; }\n catch (error) { throw this.offlineRefusal(error); }\n }\n\n /** A live read never waits for reset. online() joins it and reports its outcome. */\n private scheduleSupersessionReset(authority: Authority, item?: { op: string; args: unknown }): void {\n const principal = this.offlineRuntime?.principal;\n if (!this.authorityCurrent(authority) || principal === undefined) return;\n if (item) this.supersessionQueries.set(`${principal}\\u0000${item.op}\\u0000${stableSerialize(item.args)}`, { principal, ...item });\n if (this.forcedOffline || (!this.offlineRuntime?.resetNeeded && this.supersessionQueries.size === 0)) return;\n // The rejection is retained on the snapshot; the next opportunity retries.\n void this.performResume(authority).catch(() => undefined);\n }\n\n private performResume(authority: Authority): Promise<void> {\n if (!this.offlineRuntime || this.forcedOffline) return Promise.resolve();\n if (this.resumeFlight) return this.resumeFlight;\n const controller = new AbortController();\n this.resumeController = controller;\n const run = this.resumeOffline(authority, controller.signal).then(() => {\n throwIfAborted(controller.signal);\n this.ensureAuthority(authority);\n this.resetRefusal = undefined;\n this.validated(authority);\n }, (error) => {\n // Local no-facts refusals never pass through json(): offlineRefusal()\n // publishes them on cold initialization as well as online().\n if (this.authorityCurrent(authority)) {\n const refusal = this.offlineRefusal(error);\n this.resetRefusal = refusal.envelope;\n }\n throw error;\n });\n this.resumeFlight = run;\n void run.then(() => {\n if (this.resumeFlight !== run) return;\n this.resumeFlight = undefined;\n this.resumeController = undefined;\n this.scheduleSupersessionReset(authority);\n }, () => {\n if (this.resumeFlight === run) { this.resumeFlight = undefined; this.resumeController = undefined; }\n });\n return run;\n }\n\n private abortResume(): void {\n this.resumeController?.abort();\n this.resumeController = undefined;\n this.resumeFlight = undefined;\n }\n\n private async resumeOffline(authority: Authority, signal: AbortSignal): Promise<void> {\n const runtime = this.offlineRuntime!;\n const check = () => { throwIfAborted(signal); this.ensureAuthority(authority); };\n const json = async (path: string, init: RequestInit) => {\n check();\n const value = await this.json(path, { ...init, signal }, authority);\n check();\n return value;\n };\n await this.ensureOfflineMetadata(authority, false, true, signal);\n check();\n // One flight owns bounded convergence, including successors found by cold\n // subscription opens. Keep all pending keys until an entire round commits.\n for (let round = 0; round < 3; round++) {\n const reset = await performOfflineResume({\n runtime, mounted: this.mounted, authority, signal,\n bearerConfirmed: authority.token !== undefined, json,\n validated: (current) => { check(); this.validated(current); },\n shape: wireShape, failure: (error) => this.offlineRefusal(error),\n subscriptions: this.subscriptions,\n reload: (current) => this.ensureOfflineMetadata(current, true, true, signal),\n });\n check();\n if (reset) for (const item of this.mounted.values()) {\n const principal = runtime.principal!;\n const key = `${principal}\\u0000${item.op}\\u0000${stableSerialize(item.args)}`;\n if (!this.supersessionQueries.has(key)) this.supersessionQueries.set(key, { principal, op: item.op, args: item.args });\n }\n const pending = [...this.supersessionQueries];\n const revision = runtime.coverageRevision;\n let superseded = false;\n // Fresh authenticated reads, never buffered envelopes. The epoch remains\n // the session epoch authenticated by the resume, even for first facts.\n for (const [, item] of pending) {\n check();\n if (item.principal !== runtime.principal) continue;\n const raw = await json(\"/api/query?receipt=1\", {\n method: \"POST\", body: JSON.stringify({ op: item.op, args: item.args }),\n });\n check();\n const accepted = await acceptOffline(runtime, item.op, item.args, raw, wireShape);\n check();\n wireQuery(accepted.result);\n superseded = await commitOffline(runtime, item.op, item.args, accepted,\n (error) => this.offlineRefusal(error), revision, () => !signal.aborted);\n check();\n if (superseded || revision !== runtime.coverageRevision) break;\n }\n if (superseded || revision !== runtime.coverageRevision) continue;\n let fenced = false;\n if (reset) {\n // @ref LLP 1012#7-writes-offline \u2014 the rebuild cleared the fence's trust\n // anchor (resetCoverage resets trust), so this drain releases only\n // intents inside the fence; a fence stop is answered by the resume the\n // next round completes, never by the rebuild alone.\n const drained = await drainOutbox({ runtime, json, signal, shape: wireShape, failure: (error) => this.offlineRefusal(error) });\n check();\n fenced = drained.reason === \"fence\";\n }\n const complete = await runtime.completeReset(revision, signal);\n check();\n if (!complete) continue;\n for (const [key, item] of pending) if (this.supersessionQueries.get(key) === item) this.supersessionQueries.delete(key);\n if (this.supersessionQueries.size === 0 && !runtime.resetNeeded && !fenced) return;\n }\n throw new SnapbackRefusal({\n code: \"E_OFFLINE_RESET\", family: \"offline\", message: \"the program changed during three coverage rebuild attempts\",\n site: \"client.resume\", rewrite: \"retry online() after the program stops rotating\", guide: \"offline\",\n });\n }\n\n private async drainNow(): Promise<{ stopped: boolean; reason?: \"fence\" }> {\n const authority = await this.operationAuthority();\n if (!this.offlineRuntime) return { stopped: false };\n return drainOutbox({ runtime: this.offlineRuntime, json: (path, init) => this.json(path, init, authority),\n shape: wireShape, failure: (error) => this.offlineRefusal(error) });\n }\n\n private offlineRefusal(error: unknown): SnapbackRefusal {\n const carrier = this.createOptions?.offline?.store.carrier\n ?? this.createOptions?.offline?.store.name\n ?? \"configured\";\n const refusal = makeOfflineRefusal(error, carrier);\n this.recordRefusal(refusal.envelope);\n return refusal;\n }\n\n recordRefusal(envelope: RefusalEnvelope): void {\n this.patchSnapshot({ lastRefusal: envelope });\n }\n\n validated(authority: Authority | undefined): void {\n if (authority !== undefined) this.ensureAuthority(authority);\n else this.ensureOpen();\n if (!this.forcedOffline) this.patchSnapshot({ connection: \"connected\", lastRefusal: this.resetRefusal });\n }\n\n private async operationAuthority(waitForResume = true): Promise<Authority> {\n await this.ready;\n while (true) {\n const transition = this.transitionTail;\n await transition;\n if (transition === this.transitionTail) break;\n }\n if (waitForResume) await this.resumeTail;\n this.ensureOpen();\n return {\n authGeneration: this.authGeneration,\n custodyGeneration: this.custodyGeneration,\n fence: this.operationFence,\n token: this.currentToken,\n };\n }\n\n private transition<T>(\n action: (authority: Authority) => Promise<T>,\n waitForWrites = true,\n except?: Subscription<unknown>,\n ): Promise<T> {\n this.operationFence += 1;\n this.supersessionQueries.clear();\n this.abortResume();\n this.resetRefusal = undefined;\n this.closeTransports(except);\n const run = this.transitionTail.then(async () => {\n await this.ready;\n this.ensureOpen();\n if (waitForWrites) await this.settleWrites();\n const authority: Authority = {\n authGeneration: this.authGeneration,\n custodyGeneration: this.custodyGeneration,\n fence: this.operationFence,\n token: this.currentToken,\n };\n try {\n return await action(authority);\n } finally {\n this.authGeneration += 1;\n this.publishAuthSnapshot();\n }\n });\n this.transitionTail = run.then(() => undefined, () => undefined);\n return run;\n }\n\n private async expireSession(authority: Authority, origin?: Subscription<unknown>): Promise<SessionExpiration> {\n if (authority.token === undefined) return { cleared: false };\n return this.custody(async () => {\n if (this.currentToken !== authority.token\n || this.custodyGeneration !== authority.custodyGeneration) return { cleared: false };\n this.operationFence += 1;\n const fence = this.operationFence;\n const authGeneration = this.authGeneration + 1;\n this.closeTransports(origin);\n let sealFailure: unknown;\n try {\n try { await this.sealOffline(); } catch (error) { sealFailure = error; }\n await this.clearTokenNow();\n if (sealFailure !== undefined) throw sealFailure;\n } finally {\n this.authGeneration += 1;\n this.publishAuthSnapshot();\n }\n return { cleared: true, authGeneration, fence };\n });\n }\n\n private expirationCurrent(expiration: SessionExpiration): boolean {\n return expiration.cleared\n && !this.closed\n && this.currentToken === undefined\n && this.operationFence === expiration.fence\n && this.authGeneration === expiration.authGeneration;\n }\n\n private async installToken(token: string): Promise<void> {\n await this.custody(async () => {\n this.ensureOpen();\n await this.saveToken(token);\n await this.tokenStore?.savePrincipal?.(this.currentPrincipal ?? null);\n // Commit replacement custody only after durable persistence succeeds,\n // but before close can prevent its in-memory installation. Predecessor\n // evidence may clear a failed save; it cannot erase a completed one.\n this.custodyGeneration += 1;\n // Persistence may have outlived close(). Retain the durable token for a\n // future client restore, but never resurrect this closed instance.\n this.ensureOpen();\n this.currentToken = token;\n });\n }\n\n private custody<Result>(action: () => Promise<Result>): Promise<Result> {\n const run = this.custodyTail.then(action);\n this.custodyTail = run.then(() => undefined, () => undefined);\n return run;\n }\n\n private async saveToken(token: string): Promise<void> {\n if (!this.tokenStore) return;\n try {\n await this.tokenStore.save(token);\n } catch (error) {\n throw this.storageRefusal(\"save\", error);\n }\n }\n\n private async clearToken(): Promise<void> {\n await this.custody(() => this.clearTokenNow());\n }\n\n private async clearTokenNow(): Promise<void> {\n let failure: SnapbackRefusal | undefined;\n if (this.tokenStore) {\n try {\n await this.tokenStore.save(null);\n await this.tokenStore.savePrincipal?.(null);\n } catch (error) {\n failure = this.storageRefusal(\"clear\", error);\n }\n }\n this.currentToken = undefined;\n this.currentPrincipal = undefined;\n if (failure) throw failure;\n }\n\n private storageRefusal(action: string, error: unknown): SnapbackRefusal {\n const refusal = new SnapbackRefusal({\n code: \"E_AUTH_TOKEN_STORE\",\n family: \"auth\",\n message: `token store ${action} failed: ${error instanceof Error ? error.message : String(error)}`,\n guide: \"auth/session\",\n });\n this.recordRefusal(refusal.envelope);\n return refusal;\n }\n\n private ensureBearerTransition(action: string): void {\n if (this.persona === undefined) return;\n const refusal = new SnapbackRefusal({\n code: \"E_AUTH_PERSONA_TRANSITION\",\n family: \"auth\",\n message: `dev persona clients cannot ${action} a bearer session`,\n guide: \"auth/personas\",\n });\n this.recordRefusal(refusal.envelope);\n throw refusal;\n }\n\n private trackWrite<Result>(run: () => Promise<Result>): Promise<Result> {\n const request = run();\n this.writes.add(request as Promise<unknown>);\n void request.finally(() => this.writes.delete(request as Promise<unknown>)).catch(() => undefined);\n return request;\n }\n\n private async settleWrites(): Promise<void> {\n while (this.writes.size > 0) await Promise.allSettled([...this.writes]);\n }\n\n private closeTransports(except?: Subscription<unknown>): void {\n for (const subscription of [...this.subscriptions]) {\n if (subscription !== except) subscription.close();\n }\n }\n\n private reconnectTransports(): void {\n for (const subscription of this.subscriptions) {\n (subscription as Subscription<unknown> & { reconnect?: () => void }).reconnect?.();\n }\n }\n\n private authorityCurrent(authority: Authority | undefined): authority is Authority {\n return authority !== undefined\n && !this.closed\n && authority.fence === this.operationFence\n && authority.authGeneration === this.authGeneration\n && authority.custodyGeneration === this.custodyGeneration\n && authority.token === this.currentToken;\n }\n\n ensureAuthority(authority: Authority | undefined): asserts authority is Authority {\n if (!this.authorityCurrent(authority)) {\n throw this.supersededRefusal();\n }\n }\n\n private supersededRefusal(): SnapbackRefusal {\n return new SnapbackRefusal({\n code: \"E_AUTH_SUPERSEDED\",\n family: \"auth\",\n message: \"operation belonged to a previous authentication generation\",\n guide: \"auth/session\",\n });\n }\n\n private ensureOpen(): void {\n if (this.closed) {\n throw new SnapbackRefusal({\n code: \"E_CLIENT_CLOSED\",\n family: \"owner\",\n message: \"client is closed\",\n guide: \"owner/connect\",\n });\n }\n }\n\n private publishAuthSnapshot(): void {\n this.patchSnapshot({ authGeneration: this.authGeneration, token: this.currentToken });\n }\n\n private transportFailureState(): \"reconnecting\" | \"offline\" {\n return this.forcedOffline || (typeof navigator !== \"undefined\" && navigator.onLine === false)\n ? \"offline\" : \"reconnecting\";\n }\n\n private patchSnapshot(patch: Partial<ClientSnapshot>): ClientSnapshot {\n const next = { ...this.currentSnapshot, ...patch };\n if (patch.token === undefined && \"token\" in patch) delete next.token;\n if (patch.lastRefusal === undefined && \"lastRefusal\" in patch) delete next.lastRefusal;\n if (JSON.stringify(next) === JSON.stringify(this.currentSnapshot)) return this.currentSnapshot;\n this.currentSnapshot = next;\n for (const listener of this.statusListeners) {\n try {\n listener(next);\n } catch {\n // Application observers cannot turn a validated client operation into a refusal.\n }\n }\n return next;\n }\n}\n\n// @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 one small headless client speaks the owner wire directly.\nexport function createClient(options: CreateClientOptions): SnapbackClient {\n return new Client(options);\n}\n", "import { mkdir, readFile, readdir, rename, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport {\n OfflineStoreFailure,\n PersistentRangeStore,\n type PersistedRangeState,\n type PrincipalPartition,\n type RangeStoreBackend,\n type RangeStoreFactory,\n} from \"./range-store.js\";\nimport type { ByteDelta } from \"./byte-cache.js\";\nimport { projectState, unprojectState } from \"./projection.js\";\n\nexport interface FileRangeStoreOptions {\n /** Test barrier used to prove a failed pre-rename write leaves the old file. */\n beforeRename?: (temporaryPath: string, finalPath: string) => void | Promise<void>;\n}\n\nclass FileBackend implements RangeStoreBackend {\n readonly carrier = \"Node file\";\n private path?: string;\n private writeNumber = 0;\n\n constructor(private readonly root: string, private readonly options: FileRangeStoreOptions) {}\n\n async open(partition: PrincipalPartition): Promise<PersistedRangeState | undefined> {\n await mkdir(this.root, { recursive: true });\n this.path = this.partitionPath(partition);\n let state: PersistedRangeState | undefined;\n try {\n state = unprojectState(projectState(JSON.parse(await readFile(this.path, \"utf8\")) as PersistedRangeState));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw new OfflineStoreFailure(\n \"E_OFFLINE_CARRIER\",\n `Node file carrier could not open ${this.path}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n await this.sweepBytes(state);\n return state;\n }\n\n // @ref LLP 1012#9-asset-bytes-on-the-device \u2014 the index in the state file is the\n // authority over bytes. This carrier has no transaction: it is an ordered write\n // (payloads first, then the state file's rename, then the removals) plus a sweep\n // on open. A crash leaves only garbage the next open sweeps, never a served byte\n // without its row; a removed payload may outlive its row on disk until the delete\n // after the rename or the next open. IndexedDB is the carrier with one transaction.\n async replace(state: PersistedRangeState, bytes: ByteDelta): Promise<void> {\n if (!this.path) throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", \"Node file carrier is not open\");\n const temporary = `${this.path}.tmp-${process.pid}-${++this.writeNumber}`;\n await mkdir(dirname(this.path), { recursive: true });\n if (bytes.put.length > 0) {\n await mkdir(this.bytesDirectory(), { recursive: true });\n for (const item of bytes.put) {\n await writeFile(join(this.bytesDirectory(), item.key), item.bytes, { mode: 0o600 });\n }\n }\n await writeFile(temporary, `${JSON.stringify(state)}\\n`, { encoding: \"utf8\", mode: 0o600 });\n try {\n await this.options.beforeRename?.(temporary, this.path);\n await rename(temporary, this.path);\n } catch (error) {\n await rm(temporary, { force: true }).catch(() => undefined);\n throw error;\n }\n for (const key of bytes.remove) {\n await rm(join(this.bytesDirectory(), key), { force: true }).catch(() => undefined);\n }\n }\n\n async readBytes(key: string): Promise<Uint8Array | undefined> {\n if (!this.path) return undefined;\n try {\n return new Uint8Array(await readFile(join(this.bytesDirectory(), key)));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw error;\n }\n }\n\n async wipe(partition: PrincipalPartition): Promise<void> {\n const target = this.partitionPath(partition);\n await rm(target, { force: true });\n await rm(`${target.slice(0, -\".json\".length)}.bytes`, { recursive: true, force: true });\n if (this.path === target) this.path = undefined;\n }\n\n close(): void {\n this.path = undefined;\n }\n\n private async sweepBytes(state: PersistedRangeState | undefined): Promise<void> {\n const directory = this.bytesDirectory();\n let names: string[];\n try {\n names = await readdir(directory);\n } catch {\n return;\n }\n const held = state?.assets ?? {};\n for (const name of names) {\n if (held[name] === undefined) await rm(join(directory, name), { force: true }).catch(() => undefined);\n }\n }\n\n private bytesDirectory(): string {\n return `${this.path!.slice(0, -\".json\".length)}.bytes`;\n }\n\n private partitionPath(partition: PrincipalPartition): string {\n return resolve(this.root, `${encodeURIComponent(partition)}.json`);\n }\n}\n\n/** Node-only carrier used by `snapback2 test` and durability harnesses. */\nexport function fileRangeStore(root: string, options: FileRangeStoreOptions = {}): RangeStoreFactory {\n if (typeof root !== \"string\" || root.length === 0) throw new TypeError(\"fileRangeStore requires a directory\");\n const absolute = resolve(root);\n const factory = (() => new PersistentRangeStore(new FileBackend(absolute, options))) as RangeStoreFactory;\n Object.defineProperty(factory, \"carrier\", { value: \"Node file\" });\n return factory;\n}\n", "import { emptyState, jsonState, type PersistedRangeState } from \"./range-store.js\";\n\nexport type StateEntry = { key: string; value: unknown };\nexport type StateProjection = Record<\"rows\" | \"answers\" | \"outbox\" | \"meta\", StateEntry[]>;\n\n// @ref LLP 1013#3-the-sqlite-carrier \u2014 one projection for both database carriers;\n// the rest carries future metadata fields without a second list to keep in sync.\nexport function projectState(state: PersistedRangeState): StateProjection {\n // State has the JSON wire form on every carrier: omit undefined object fields,\n // preserve null, and turn undefined array slots into null. Bytes travel separately.\n const { rows = {}, answers = {}, outbox = {}, ...meta } = jsonState(state);\n const entries = (value: object) => Object.entries(value).map(([key, value]) => ({ key, value }));\n return { rows: entries(rows), answers: entries(answers), outbox: entries(outbox), meta: [{ key: \"state\", value: meta }] };\n}\n\nexport function unprojectState(projected: StateProjection): PersistedRangeState | undefined {\n const meta = projected.meta.find(({ key }) => key === \"state\");\n if (!meta && !projected.rows.length && !projected.answers.length && !projected.outbox.length) return undefined;\n const record = (entries: StateEntry[]) => Object.fromEntries(entries.map(({ key, value }) => [key, value]));\n return {\n ...emptyState(),\n ...meta?.value as Omit<PersistedRangeState, \"rows\" | \"answers\" | \"outbox\">,\n rows: record(projected.rows) as PersistedRangeState[\"rows\"],\n answers: record(projected.answers) as PersistedRangeState[\"answers\"],\n outbox: record(projected.outbox) as PersistedRangeState[\"outbox\"],\n };\n}\n\n/** Split only the first separator: a row id may itself contain NUL. */\nexport function encodeStateKey(key: string, tuple: boolean): string {\n const at = tuple ? key.indexOf(\"\\u0000\") : -1;\n return JSON.stringify(at < 0 ? [key] : [key.slice(0, at), key.slice(at + 1)]);\n}\n\nexport function decodeStateKey(key: string): string {\n const parts: unknown = JSON.parse(key);\n if (!Array.isArray(parts) || parts.length < 1 || parts.length > 2 || parts.some((part) => typeof part !== \"string\")) {\n throw new Error(\"invalid sqlite state key\");\n }\n return parts.join(\"\\u0000\");\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { rm } from \"node:fs/promises\";\nimport { basename, join, resolve } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport {\n createClient,\n stableSerialize,\n type OfflineClientOptions,\n type SnapbackClient,\n} from \"./client.js\";\nimport { fileRangeStore } from \"./store/file.js\";\n\nexport { fileRangeStore };\n\ntype TransportFault = { path: string; status: number };\ntype JourneyDevice = SnapbackClient & {\n failNextResponse(path: string, status: number): void;\n settled(): ReturnType<SnapbackClient[\"outbox\"][\"settled\"]>;\n};\ntype JourneyContext = {\n as(name: string, options?: {\n store?: \"file\";\n onTombstone?: OfflineClientOptions[\"onTombstone\"];\n viewOnce?: OfflineClientOptions[\"viewOnce\"];\n }): JourneyDevice;\n tick(ms: number): Promise<Record<string, unknown>>;\n url: string;\n};\ntype JourneyBody = (context: JourneyContext) => void | Promise<void>;\ntype RegisteredJourney = { name: string; body: JourneyBody };\n\nconst registryKey = Symbol.for(\"snapback2.journey.registry\");\nconst registered = ((globalThis as Record<PropertyKey, unknown>)[registryKey] ??= []) as RegisteredJourney[];\n\n/** Register one \u22645 s acceptance journey against the fresh owner started by `snapback2 test`. */\nexport function journey(name?: string, body?: JourneyBody): void {\n if (typeof name !== \"string\" || !name.trim() || typeof body !== \"function\") {\n throw new TypeError(\"journey(name, fn) requires a name and function\");\n }\n registered.push({ name, body });\n}\n\nfunction argument(name: string): string | undefined {\n const index = process.argv.indexOf(name);\n return index >= 0 ? process.argv[index + 1] : undefined;\n}\n\nfunction runnerFiles(): string[] {\n const separator = process.argv.indexOf(\"--\");\n return separator >= 0 ? process.argv.slice(separator + 1).map((path) => resolve(path)) : [];\n}\n\nasync function loadJourneyFile(path: string): Promise<RegisteredJourney[]> {\n registered.length = 0;\n const moduleUrl = `${pathToFileURL(path).href}?run=${Date.now()}-${Math.random()}`;\n await import(moduleUrl);\n if (registered.length === 0) throw new Error(\"journey file registered zero checks; call journey(name, fn)\");\n return [...registered];\n}\n\nasync function control(url: string, secret: string, path: string, body: unknown): Promise<Record<string, unknown>> {\n const response = await fetch(`${url}${path}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", \"x-snapback-control\": secret },\n body: JSON.stringify(body),\n });\n const value = await response.json() as Record<string, unknown>;\n if (!response.ok) throw Object.assign(new Error(String(value.message ?? `control HTTP ${response.status}`)), value);\n return value;\n}\n\nasync function within<T>(ms: number, body: () => Promise<T>): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([\n body(),\n new Promise<never>((_resolve, reject) => {\n timer = setTimeout(() => reject(new Error(`journey exceeded ${ms} ms`)), ms);\n }),\n ]);\n } finally {\n if (timer) clearTimeout(timer);\n }\n}\n\nasync function runEntry(): Promise<void> {\n const url = argument(\"--url\");\n const secret = argument(\"--secret\");\n const files = runnerFiles();\n const storeRoot = argument(\"--store-root\");\n if (!url || !secret || files.length === 0) {\n process.stdout.write(`${JSON.stringify({ name: \"journeys\", kind: \"journey\", verdict: \"fail\", ms: 0, detail: \"runner requires --url, --secret, and files\" })}\\n`);\n process.exitCode = 1;\n return;\n }\n if (process.argv.includes(\"--list\")) {\n for (const file of files) {\n try {\n const journeys = await loadJourneyFile(file);\n process.stdout.write(`${JSON.stringify({ runner: \"list\", file, journeys: journeys.map((check) => check.name) })}\\n`);\n } catch (error) {\n process.stdout.write(`${JSON.stringify({ name: file, kind: \"journey\", verdict: \"fail\", ms: 0, detail: String(error) })}\\n`);\n process.exitCode = 1;\n }\n }\n return;\n }\n const selected = argument(\"--journey-index\");\n if (selected !== undefined) {\n const index = Number(selected);\n if (files.length !== 1 || !Number.isSafeInteger(index) || index < 0) {\n process.stdout.write(`${JSON.stringify({ name: \"journey runner\", kind: \"journey\", verdict: \"fail\", ms: 0, detail: \"--journey-index requires one file and a non-negative integer\" })}\\n`);\n process.exitCode = 1;\n return;\n }\n try {\n const journeys = await loadJourneyFile(files[0]!);\n const check = journeys[index];\n if (!check) throw new Error(`journey index ${index} is out of range`);\n if (!await runCheck(check, files[0]!, url, secret, storeRoot)) process.exitCode = 1;\n } catch (error) {\n process.stdout.write(`${JSON.stringify({ name: files[0], kind: \"journey\", verdict: \"fail\", ms: 0, detail: String(error) })}\\n`);\n process.exitCode = 1;\n }\n return;\n }\n let failed = false;\n for (const file of files) {\n let journeys: RegisteredJourney[];\n try {\n journeys = await loadJourneyFile(file);\n } catch (error) {\n failed = true;\n process.stdout.write(`${JSON.stringify({ name: file, kind: \"journey\", verdict: \"fail\", ms: 0, detail: String(error) })}\\n`);\n continue;\n }\n for (const check of journeys) {\n if (!await runCheck(check, file, url, secret, storeRoot)) failed = true;\n }\n }\n if (failed) process.exitCode = 1;\n}\n\ntype QueryRecord = { ref: any; args: unknown; expected: unknown };\ntype Device = {\n client: SnapbackClient;\n records: Map<string, QueryRecord>;\n durable: boolean;\n faults: TransportFault[];\n};\n\nfunction queryBytes(value: unknown): string {\n return stableSerialize(value);\n}\n\n/**\n * The device's transport. A registered fault lets the request reach the owner\n * (so a commit happens), then discards the response and answers the status\n * instead: LLP 1012 \u00A710's \"503 after the commit\", injected without touching\n * the owner.\n */\nfunction faultingFetch(faults: TransportFault[]): typeof globalThis.fetch {\n return async (input, init) => {\n const response = await globalThis.fetch(input, init);\n const path = new URL(String(input)).pathname;\n const index = faults.findIndex((fault) => fault.path === path);\n if (index < 0) return response;\n const [fault] = faults.splice(index, 1);\n await response.arrayBuffer().catch(() => undefined);\n return new Response(JSON.stringify({ message: `injected HTTP ${fault!.status}` }), {\n status: fault!.status,\n headers: { \"content-type\": \"application/json\" },\n });\n };\n}\n\nfunction wrapDevice(device: Device, clients: Set<SnapbackClient>): JourneyDevice {\n return new Proxy(device.client, {\n get(target, property) {\n if (property === \"restart\") return async () => {\n const restarted = await target.restart();\n device.client = restarted;\n clients.add(restarted);\n return wrapDevice(device, clients);\n };\n if (property === \"failNextResponse\") return (path: string, status: number) => {\n device.faults.push({ path, status });\n };\n if (property === \"settled\") return () => device.client.outbox.settled();\n const value = Reflect.get(target, property, target);\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n }) as JourneyDevice;\n}\n\nasync function runOfflineDerived(devices: Set<Device>): Promise<number> {\n const started = performance.now();\n let checked = 0;\n const durable = [...devices].filter((device) => device.durable);\n if (durable.length === 0) return 0;\n for (const device of durable) {\n if (device.records.size === 0) continue;\n // @ref LLP 1012#6-reads-offline \u2014 the twin evaluates over the coverage the\n // device holds now, which the drain's tail and later pages may have grown\n // since a query was first recorded; the expectation is the last online\n // answer, so each recorded query is read online once more before the\n // transport is cut, and the offline replay must match it byte for byte.\n if (device.client.snapshot.connection !== \"offline\") {\n for (const { ref, args } of [...device.records.values()]) {\n await device.client.query(ref, args as never).catch(() => undefined);\n }\n }\n await device.client.offline();\n for (const { ref, args, expected } of device.records.values()) {\n const replayed = await device.client.query(ref, args as never);\n if (queryBytes(replayed) !== queryBytes(expected)) {\n throw new Error(`offline replay changed bytes: ${queryBytes(expected)} != ${queryBytes(replayed)}`);\n }\n checked += 1;\n }\n }\n if (checked === 0) throw new Error(\"offline derived check observed no online durable query\");\n process.stdout.write(`${JSON.stringify({ name: \"offline\", kind: \"derived\", verdict: \"pass\", ms: Math.round(performance.now() - started), detail: { queries: checked } })}\\n`);\n return checked;\n}\n\nasync function runCheck(\n check: RegisteredJourney,\n file: string,\n url: string,\n secret: string,\n storeRoot?: string,\n): Promise<boolean> {\n const started = performance.now();\n const clients = new Set<SnapbackClient>();\n const devices = new Set<Device>();\n process.stdout.write(`${JSON.stringify({ runner: \"start\", name: check.name })}\\n`);\n try {\n if (storeRoot) await rm(storeRoot, { recursive: true, force: true });\n await within(5_000, async () => check.body({\n as: (name, options = {}) => {\n if (options.store !== undefined && options.store !== \"file\") {\n throw new TypeError(\"journey as(...).store must be 'file'\");\n }\n if (options.store === \"file\" && !storeRoot) throw new Error(\"file journey store root was not supplied\");\n const records = new Map<string, QueryRecord>();\n const faults: TransportFault[] = [];\n const fetch = faultingFetch(faults);\n const client = createClient(options.store === \"file\"\n ? {\n url,\n as: name,\n fetch,\n offline: {\n store: fileRangeStore(join(storeRoot!, name)),\n onTombstone: options.onTombstone,\n viewOnce: options.viewOnce,\n },\n // Test-only custody observer: unlike the public proxy, this sees\n // drain pages issued by the client's internal query path too.\n offlineReadObserver: (ref: any, args: unknown, expected: unknown) => {\n const key = `${String(ref?.op ?? ref)}:${stableSerialize(args)}`;\n records.set(key, { ref, args, expected });\n },\n } as Parameters<typeof createClient>[0]\n : { url, as: name, fetch });\n clients.add(client);\n const device = { client, records, durable: options.store === \"file\", faults };\n devices.add(device);\n return wrapDevice(device, clients);\n },\n tick: (ms) => control(url, secret, \"/control/clock\", { advanceMs: ms }),\n url,\n }));\n await within(5_000, () => runOfflineDerived(devices));\n process.stdout.write(`${JSON.stringify({ name: check.name, kind: \"journey\", verdict: \"pass\", ms: Math.round(performance.now() - started), detail: { file } })}\\n`);\n return true;\n } catch (error) {\n process.stdout.write(`${JSON.stringify({ name: check.name, kind: \"journey\", verdict: \"fail\", ms: Math.round(performance.now() - started), detail: error instanceof Error ? error.message : String(error) })}\\n`);\n return false;\n } finally {\n for (const client of clients) client.close();\n if (storeRoot) await rm(storeRoot, { recursive: true, force: true }).catch(() => undefined);\n }\n}\n\nif (\n basename(process.argv[1] ?? \"\") === \"test-runner.mjs\"\n && resolve(fileURLToPath(import.meta.url)) === resolve(process.argv[1] ?? \"\")\n) await runEntry();\n", "// @ref LLP 1002#4-the-wire \u2014 every owner response is validated before public client code observes it.\nimport type {\n AuthMe,\n AuthSession,\n ChannelDelivery,\n ChannelPublishResult,\n Cursor,\n LiveQueryDelivery,\n Manifest,\n MutationResult,\n Principal,\n QueryRefusedDelivery,\n RefusalEnvelope,\n RefusedDelivery,\n ServerQueryResult,\n} from \"./types.js\";\n\nexport function fallbackRefusal(code: string, message: string): RefusalEnvelope {\n return { code, family: \"owner\", message, guide: \"owner/connect\" };\n}\n\nconst snapbackRefusalBrand = Symbol.for(\"snapback2.SnapbackRefusal\");\n\nexport class SnapbackRefusal extends Error {\n readonly [snapbackRefusalBrand] = true;\n readonly envelope: RefusalEnvelope;\n readonly code: string;\n\n constructor(envelope: RefusalEnvelope, readonly retryable = false, readonly status?: number) {\n super(envelope.message);\n this.name = \"SnapbackRefusal\";\n this.envelope = envelope;\n this.code = envelope.code;\n }\n}\n\nexport function isSnapbackRefusal(value: unknown): value is SnapbackRefusal {\n return typeof value === \"object\"\n && value !== null\n && (value as { name?: unknown }).name === \"SnapbackRefusal\"\n && (value as Record<symbol, unknown>)[snapbackRefusalBrand] === true;\n}\n\nexport function wireShape(message: string): SnapbackRefusal {\n return new SnapbackRefusal({ code: \"E_WIRE_SHAPE\", family: \"op\", message, guide: \"op/wire-shape\" });\n}\n\nexport function wireObject(value: unknown, surface: string): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw wireShape(`${surface} must be an object`);\n return value as Record<string, unknown>;\n}\n\nfunction has(record: Record<string, unknown>, field: string): boolean {\n return Object.prototype.hasOwnProperty.call(record, field);\n}\n\nfunction present(record: Record<string, unknown>, field: string, surface: string): unknown {\n if (!has(record, field)) throw wireShape(`${surface} is missing ${field}`);\n return record[field];\n}\n\nfunction stringField(record: Record<string, unknown>, field: string, surface: string): string {\n const value = present(record, field, surface);\n if (typeof value !== \"string\" || value.length === 0) throw wireShape(`${surface}.${field} must be a non-empty string`);\n return value;\n}\n\nfunction numberField(record: Record<string, unknown>, field: string, surface: string): number {\n const value = present(record, field, surface);\n if (typeof value !== \"number\" || !Number.isFinite(value)) throw wireShape(`${surface}.${field} must be a number`);\n return value;\n}\n\nfunction optionalString(record: Record<string, unknown>, field: string, surface: string): string | undefined {\n if (!has(record, field)) return undefined;\n const value = record[field];\n if (typeof value !== \"string\") throw wireShape(`${surface}.${field} must be a string`);\n return value;\n}\n\nfunction optionalNumber(record: Record<string, unknown>, field: string, surface: string): number | undefined {\n if (!has(record, field)) return undefined;\n const value = record[field];\n if (typeof value !== \"number\" || !Number.isFinite(value)) throw wireShape(`${surface}.${field} must be a number`);\n return value;\n}\n\nfunction nullableString(record: Record<string, unknown>, field: string, surface: string): string | null {\n const value = present(record, field, surface);\n if (value !== null && typeof value !== \"string\") throw wireShape(`${surface}.${field} must be a string or null`);\n return value;\n}\n\nexport function wireRefusalEnvelope(value: unknown, surface: string): RefusalEnvelope {\n const record = wireObject(value, surface);\n const envelope: RefusalEnvelope = {\n code: stringField(record, \"code\", surface),\n family: stringField(record, \"family\", surface),\n message: stringField(record, \"message\", surface),\n guide: stringField(record, \"guide\", surface),\n };\n for (const field of [\"site\", \"rule\", \"rewrite\"] as const) {\n const item = optionalString(record, field, surface);\n if (item !== undefined) envelope[field] = item;\n }\n const which = optionalString(record, \"which\", surface);\n if (which !== undefined) envelope.which = which;\n const cap = optionalNumber(record, \"cap\", surface);\n if (cap !== undefined) envelope.cap = cap;\n return envelope;\n}\n\nexport function copyRefusal(envelope: RefusalEnvelope): RefusalEnvelope {\n const refusal: RefusalEnvelope = {\n code: envelope.code, family: envelope.family, message: envelope.message, guide: envelope.guide,\n };\n if (envelope.site !== undefined) refusal.site = envelope.site;\n if (envelope.rule !== undefined) refusal.rule = envelope.rule;\n if (envelope.rewrite !== undefined) refusal.rewrite = envelope.rewrite;\n if (envelope.which !== undefined) refusal.which = envelope.which;\n if (envelope.cap !== undefined) refusal.cap = envelope.cap;\n return refusal;\n}\n\nexport function isTerminalSession(envelope: Pick<RefusalEnvelope, \"code\" | \"family\">): boolean {\n return envelope.code === \"E_AUTH_SESSION\" && envelope.family === \"auth\";\n}\n\nexport function wireQuery<Result>(value: unknown, surface = \"query response\"): ServerQueryResult<Result> {\n const record = wireObject(value, surface);\n switch (stringField(record, \"state\", surface)) {\n case \"complete\":\n return {\n state: \"complete\", data: present(record, \"data\", surface) as Result,\n seq: numberField(record, \"seq\", surface), next: nullableString(record, \"next\", surface) as Cursor | null,\n };\n case \"capped\":\n for (const field of [\"site\", \"take\", \"reason\"]) {\n if (has(record, field)) throw wireShape(`${surface}.capped must not carry ${field}`);\n }\n return {\n state: \"capped\", data: present(record, \"data\", surface) as Result,\n seq: numberField(record, \"seq\", surface), next: nullableString(record, \"next\", surface) as Cursor | null,\n };\n case \"partial\": {\n if (has(record, \"next\")) throw wireShape(`${surface}.partial must not carry next`);\n const partial = {\n state: \"partial\" as const,\n seq: numberField(record, \"seq\", surface),\n reason: stringField(record, \"reason\", surface),\n };\n return has(record, \"data\") ? { ...partial, data: record.data as Result } : partial;\n }\n case \"denied\":\n if (has(record, \"next\")) throw wireShape(`${surface}.denied must not carry next`);\n return { state: \"denied\", seq: numberField(record, \"seq\", surface), rule: stringField(record, \"rule\", surface) };\n default:\n throw wireShape(`${surface}.state must be complete, capped, partial, or denied`);\n }\n}\n\nexport function wireMutation<Result>(value: unknown): MutationResult<Result> {\n const surface = \"mutation response\";\n const record = wireObject(value, surface);\n if (has(record, \"next\")) throw wireShape(`${surface} must not carry next`);\n switch (stringField(record, \"state\", surface)) {\n case \"committed\":\n return { state: \"committed\", data: present(record, \"data\", surface) as Result, seq: numberField(record, \"seq\", surface) };\n case \"rejected\":\n return { state: \"rejected\", ...wireRefusalEnvelope(record, \"mutation rejected response\") };\n default:\n throw wireShape(`${surface}.state must be committed or rejected`);\n }\n}\n\nexport function wireSubscription<Result>(data: string): LiveQueryDelivery<Result> | QueryRefusedDelivery {\n const surface = \"subscription delivery\";\n const record = sseObject(data, surface);\n if (stringField(record, \"state\", surface) === \"refused\") {\n if (has(record, \"next\")) throw wireShape(`${surface}.refused must not carry next`);\n const refusal = wireRefusalEnvelope(record, `${surface} refusal`);\n const seq = optionalNumber(record, \"seq\", surface);\n return { state: \"refused\", live: false, ...refusal, ...(seq === undefined ? {} : { seq }) };\n }\n return { ...wireQuery<Result>(record, surface), live: true };\n}\n\nexport function wireChannelDelivery<Payload>(data: string): ChannelDelivery<Payload> {\n const surface = \"channel delivery\";\n const record = sseObject(data, surface);\n if (record.state === \"refused\") {\n return { state: \"refused\", ...wireRefusalEnvelope(record, `${surface} refusal`) } as RefusedDelivery;\n }\n return {\n from: stringField(record, \"from\", surface) as Principal,\n payload: present(record, \"payload\", surface) as Payload,\n at: numberField(record, \"at\", surface),\n };\n}\n\nexport function wireChannelPublish(value: unknown): ChannelPublishResult {\n const surface = \"channel publish response\";\n const record = wireObject(value, surface);\n if (record.ok === true) return { ok: true };\n if (record.state !== \"refused\") throw wireShape(`${surface} must contain ok: true or state: refused`);\n return { state: \"refused\", ...wireRefusalEnvelope(record, `${surface} refusal`) };\n}\n\nexport function terminalSessionEnvelope(value: unknown): RefusalEnvelope | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n if (record.state !== \"rejected\" && record.state !== \"refused\") return undefined;\n // A replayed write's trace conflict carries no code (LLP 1012 \u00A77); it is never a session terminal.\n if (record.state === \"rejected\" && record.reason === \"conflict\") return undefined;\n const refusal = wireRefusalEnvelope(record, \"terminal session response\");\n return isTerminalSession(refusal) ? refusal : undefined;\n}\n\nexport function wireAuthSession(value: unknown, surface: string): AuthSession {\n const record = wireObject(value, surface);\n return { token: stringField(record, \"token\", surface), viewer: stringField(record, \"viewer\", surface) as Principal };\n}\n\nexport function wireAuthMe(value: unknown): AuthMe {\n const surface = \"auth me response\";\n const record = wireObject(value, surface);\n return { viewer: stringField(record, \"viewer\", surface) as Principal, kind: stringField(record, \"kind\", surface) };\n}\n\nexport function wireLogout(value: unknown): { ok: boolean } {\n const surface = \"auth logout response\";\n const record = wireObject(value, surface);\n if (typeof present(record, \"ok\", surface) !== \"boolean\") throw wireShape(`${surface}.ok must be a boolean`);\n return { ok: record.ok as boolean };\n}\n\nexport function wireManifest(value: unknown): Manifest {\n const surface = \"manifest response\";\n const record = wireObject(value, surface);\n const ops = wireObject(present(record, \"ops\", surface), `${surface}.ops`);\n for (const [name, operation] of Object.entries(ops)) {\n const item = wireObject(operation, `${surface}.ops.${name}`);\n stringField(item, \"kind\", `${surface}.ops.${name}`);\n stringField(item, \"planHash\", `${surface}.ops.${name}`);\n present(item, \"args\", `${surface}.ops.${name}`);\n }\n const manifest: Manifest = {\n generation: stringField(record, \"generation\", surface),\n programGeneration: stringField(record, \"programGeneration\", surface),\n ops: ops as unknown as Manifest[\"ops\"],\n channels: wireObject(present(record, \"channels\", surface), `${surface}.channels`),\n auth: wireObject(present(record, \"auth\", surface), `${surface}.auth`),\n };\n if (typeof record.schemaHash === \"string\") manifest.schemaHash = record.schemaHash;\n if (record.tables && typeof record.tables === \"object\" && !Array.isArray(record.tables)) {\n manifest.tables = record.tables as Manifest[\"tables\"];\n }\n if (record.schema && typeof record.schema === \"object\" && !Array.isArray(record.schema)) {\n manifest.schema = record.schema as Manifest[\"schema\"];\n }\n return manifest;\n}\n\nexport function wireAssetSession(value: unknown): { token: string; expiresAt: number } {\n const surface = \"asset session response\";\n const record = wireObject(value, surface);\n return { token: stringField(record, \"token\", surface), expiresAt: numberField(record, \"expiresAt\", surface) };\n}\n\nexport async function responseRefusal(response: Response): Promise<SnapbackRefusal> {\n let value: unknown;\n try {\n value = await response.json();\n } catch {\n throw new SnapbackRefusal(\n fallbackRefusal(\"E_TRANSPORT\", `HTTP ${response.status} did not contain a refusal envelope`),\n true,\n response.status,\n );\n }\n if (!value || typeof value !== \"object\" || Array.isArray(value)\n || ![\"code\", \"family\", \"guide\"].some((field) => has(value as Record<string, unknown>, field))) {\n throw new SnapbackRefusal(\n fallbackRefusal(\"E_TRANSPORT\", `HTTP ${response.status} did not contain a refusal envelope`),\n true,\n response.status,\n );\n }\n return new SnapbackRefusal(wireRefusalEnvelope(value, `HTTP ${response.status} refusal`), false, response.status);\n}\n\nexport function sseObject(data: string, surface: string): Record<string, unknown> {\n try {\n return wireObject(JSON.parse(data), surface);\n } catch (error) {\n if (isSnapbackRefusal(error)) throw error;\n throw wireShape(`${surface} must contain valid JSON`);\n }\n}\n\n/**\n * `AbortSignal.prototype.throwIfAborted` does not exist on React Native's AbortSignal\n * (Hermes, RN 0.81 / Expo SDK 54), so every abort check goes through this helper.\n */\nexport function throwIfAborted(signal?: AbortSignal | null): void {\n if (!signal?.aborted) return;\n const reason: unknown = (signal as { reason?: unknown }).reason;\n if (reason instanceof Error) throw reason;\n const error = new Error(typeof reason === \"string\" ? reason : \"The operation was aborted\");\n error.name = \"AbortError\";\n throw error;\n}\n", "export const referencePath: unique symbol = Symbol.for(\"snapback.referencePath\");\n\nexport interface Op<Args, Result> {\n readonly op: string;\n readonly [referencePath]: string;\n readonly __args?: (args: Args) => void;\n readonly __result?: Result;\n}\n\nexport interface Channel<Args, Payload = unknown> {\n readonly [referencePath]: string;\n readonly __channelArgs?: (args: Args) => void;\n readonly __payload?: Payload;\n}\n\nexport interface Api {}\n\nexport type AnyOp = Op<any, any>;\n\nexport interface ApiProxy {\n readonly [referencePath]: string;\n}\n\nconst proxies = new Map<string, ApiProxy>();\n\nfunction proxy(path: string[]): ApiProxy {\n const op = path.join(\".\");\n const existing = proxies.get(op);\n if (existing) return existing;\n\n const target = Object.assign({}, { op, [referencePath]: op }) as ApiProxy;\n const value = new Proxy(target, {\n get(_current, property) {\n if (property === referencePath) return op;\n if (property === Symbol.toStringTag) return \"SnapbackOp\";\n if (property === \"then\") return undefined;\n if (property === \"op\" && path.length >= 2) return op;\n return typeof property === \"string\" ? proxy([...path, property]) : undefined;\n },\n });\n proxies.set(op, value);\n return value;\n}\n\nexport function referenceName(ref: ApiProxy): string {\n return ref[referencePath];\n}\n\n// @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 generated Api augmentation types the inert operation proxy.\nexport const api: Api = proxy([]) as Api;\n", "import type {\n AssetRecord,\n AssetUploadOptions,\n AssetUploadSource,\n ImageAsset,\n NativeAssetSource,\n VideoAsset,\n} from \"./types.js\";\n\nexport class AssetInputError extends Error {\n constructor(\n readonly code: \"E_ASSET_TYPE\" | \"E_ASSET_TOO_LARGE\" | \"E_ASSET_NOT_READY\" | \"E_ASSET_CARRIER_IMAGE\" | \"E_ASSET_NATIVE_FILE_API\",\n message: string,\n ) {\n super(message);\n this.name = \"AssetInputError\";\n }\n}\n\nexport interface BlobLike {\n readonly size: number;\n arrayBuffer(): Promise<ArrayBuffer>;\n stream(): ReadableStream<Uint8Array>;\n}\n\ntype RuntimeAssetUploadSource = AssetUploadSource | BlobLike;\n\nexport interface PreparedAssetSource {\n readonly source: RuntimeAssetUploadSource;\n readonly bytes: number;\n body?: BlobLike | ReadableStream<Uint8Array>;\n}\n\nexport interface AssetPlacement {\n readonly path: readonly (string | number)[];\n readonly max: number;\n readonly prepared: PreparedAssetSource;\n}\n\ntype AssetKind = \"image\" | \"video\";\ntype PlacementCandidate = {\n readonly path: readonly (string | number)[];\n readonly max: number;\n readonly source: RuntimeAssetUploadSource;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isBrowserFile(value: unknown): value is File | Blob {\n return isBlobLike(value)\n && ((typeof globalThis.File === \"function\" && value instanceof globalThis.File)\n || (typeof globalThis.Blob === \"function\" && value instanceof globalThis.Blob));\n}\n\nexport function isBlobLike(value: unknown): value is BlobLike {\n return isRecord(value)\n && typeof value.size === \"number\"\n && typeof value.arrayBuffer === \"function\"\n && typeof value.stream === \"function\";\n}\n\nexport function isNativeAssetSource(value: unknown): value is NativeAssetSource {\n return isRecord(value) && typeof value.uri === \"string\" && value.uri.length > 0;\n}\n\n// This is only a cheap signal that a manifest walk may be needed. It does not\n// classify a value as an upload source; only collectPlacements may do that.\nexport function mayNeedAssetPlanning(value: unknown, ancestors = new Set<object>()): boolean {\n if (isBlobLike(value) || isNativeAssetSource(value)) return true;\n if (typeof value !== \"object\" || value === null) return false;\n if (ancestors.has(value)) return false;\n ancestors.add(value);\n const found = Array.isArray(value)\n ? value.some((item) => mayNeedAssetPlanning(item, ancestors))\n : Object.values(value).some((item) => mayNeedAssetPlanning(item, ancestors));\n ancestors.delete(value);\n return found;\n}\n\nfunction descriptorAsset(value: unknown): { kind: AssetKind; max: number } | undefined {\n if (!isRecord(value)) return undefined;\n for (const [tag, kind] of [[\"Image\", \"image\"], [\"Video\", \"video\"]] as const) {\n const tagged = value[tag];\n if (!isRecord(tagged) || Object.keys(value).length !== 1) continue;\n const max = tagged.max;\n if (typeof max === \"number\" && Number.isSafeInteger(max) && max > 0) return { kind, max };\n }\n return undefined;\n}\n\n// Every non-structural ArgType tag: a {uri} object arriving where one of these\n// is declared is a misplaced upload source, never a record to traverse.\nconst scalarDescriptorTags = new Set([\n \"Ref\", \"Text\", \"Bytes\", \"Json\", \"Enum\", \"Decimal\", \"Money\",\n \"Int\", \"Bool\", \"Time\", \"Id\", \"Principal\", \"Cursor\", \"Scalar\",\n]);\n\nfunction isScalarDescriptor(value: unknown): boolean {\n if (typeof value === \"string\") return true;\n if (!isRecord(value)) return false;\n const keys = Object.keys(value);\n return keys.length === 1 && scalarDescriptorTags.has(keys[0]!);\n}\n\nfunction collectPlacements(\n value: unknown,\n descriptor: unknown,\n path: readonly (string | number)[],\n output: PlacementCandidate[],\n): void {\n const asset = descriptorAsset(descriptor);\n if (asset) {\n if (isBlobLike(value) || isNativeAssetSource(value)) {\n output.push({ path, max: asset.max, source: value });\n }\n return;\n }\n if (!isRecord(descriptor)) {\n if (isBlobLike(value) || isNativeAssetSource(value)) {\n throw new AssetInputError(\n \"E_ASSET_TYPE\",\n `asset upload source at ${path.join(\".\") || \"<root>\"} may only be used at an image or video argument`,\n );\n }\n return;\n }\n if (Object.keys(descriptor).length === 1 && \"Optional\" in descriptor) {\n if (value !== null && value !== undefined) collectPlacements(value, descriptor.Optional, path, output);\n return;\n }\n if (Object.keys(descriptor).length === 1 && isRecord(descriptor.List) && Array.isArray(value)) {\n for (let index = 0; index < value.length; index += 1) {\n collectPlacements(value[index], descriptor.List.of, [...path, index], output);\n }\n return;\n }\n if (isBlobLike(value) || (isNativeAssetSource(value) && isScalarDescriptor(descriptor))) {\n throw new AssetInputError(\n \"E_ASSET_TYPE\",\n `asset upload source at ${path.join(\".\") || \"<root>\"} may only be used at an image or video argument`,\n );\n }\n if (!isRecord(value)) return;\n for (const [name, child] of Object.entries(descriptor)) {\n collectPlacements(value[name], child, [...path, name], output);\n }\n}\n\nfunction checkedLength(value: unknown, surface: string): number {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value <= 0) {\n throw new AssetInputError(\"E_ASSET_TYPE\", `${surface} must have a positive integer byte length`);\n }\n return value;\n}\n\ntype ExpoFile = BlobLike & { readonly uri: string };\ntype ExpoFileConstructor = new (uri: string) => ExpoFile;\n\nasync function expoFile(source: NativeAssetSource): Promise<ExpoFile> {\n let module: { File?: unknown };\n try {\n // The build leaves this optional native peer external, and this branch is\n // reached only for a manifest-classified native URI source.\n module = await import(\"expo-file-system\") as { File?: unknown };\n } catch (error) {\n throw new AssetInputError(\n \"E_ASSET_NOT_READY\",\n `cannot open native asset URI ${source.uri} with expo-file-system: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n if (typeof module.File !== \"function\") {\n throw new AssetInputError(\n \"E_ASSET_NATIVE_FILE_API\",\n \"native asset URIs require expo-file-system >=19 (Expo SDK 54), whose package root exports the File constructor\",\n );\n }\n try {\n return new (module.File as ExpoFileConstructor)(source.uri);\n } catch (error) {\n throw new AssetInputError(\n \"E_ASSET_NOT_READY\",\n `cannot open native asset URI ${source.uri} with expo-file-system: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\nexport async function expoUploadFetch(): Promise<typeof globalThis.fetch> {\n try {\n const module = await import(\"expo/fetch\") as { fetch?: unknown };\n if (typeof module.fetch !== \"function\") throw new TypeError(\"expo/fetch does not export fetch\");\n return module.fetch as typeof globalThis.fetch;\n } catch (error) {\n throw new AssetInputError(\n \"E_ASSET_NOT_READY\",\n `native asset upload requires expo/fetch: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\nasync function fetchedNativeBody(source: NativeAssetSource): Promise<PreparedAssetSource> {\n let response: Response;\n try {\n response = await globalThis.fetch(source.uri);\n } catch (error) {\n throw new AssetInputError(\n \"E_ASSET_NOT_READY\",\n `cannot open native asset URI ${source.uri}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n if (!response.ok) throw new AssetInputError(\"E_ASSET_NOT_READY\", `native asset URI ${source.uri} returned HTTP ${response.status}`);\n if (!response.body) throw new AssetInputError(\"E_ASSET_TYPE\", `native asset URI ${source.uri} has no streaming body`);\n const declared = source.size ?? source.fileSize;\n const bytes = declared === undefined\n ? checkedLength(Number(response.headers.get(\"Content-Length\")), `Content-Length for ${source.uri}`)\n : checkedLength(declared, source.size === undefined ? \"native asset source.fileSize\" : \"native asset source.size\");\n return { source, bytes, body: response.body };\n}\n\nexport async function prepareAssetSource(\n source: RuntimeAssetUploadSource,\n): Promise<PreparedAssetSource> {\n if (isBlobLike(source)) {\n return { source, bytes: checkedLength(source.size, \"File/Blob size\") };\n }\n if (!isNativeAssetSource(source)) {\n throw new AssetInputError(\"E_ASSET_TYPE\", \"asset source must be a File or { uri, size?/fileSize?, type?/mimeType? }\");\n }\n if (/^(?:data|https?):/i.test(source.uri)) return fetchedNativeBody(source);\n const body = await expoFile(source);\n const declared = source.size ?? source.fileSize;\n const bytes = declared === undefined\n ? checkedLength(body.size, `expo-file-system File.size for ${source.uri}`)\n : checkedLength(declared, source.size === undefined ? \"native asset source.fileSize\" : \"native asset source.size\");\n if (body.size !== bytes) {\n throw new AssetInputError(\n \"E_ASSET_TYPE\",\n `native asset source declared ${bytes} bytes but expo-file-system reports ${body.size}`,\n );\n }\n return { source, bytes, body };\n}\n\n// @ref LLP 1006#10-clients \u2014 every File/URI occurrence is length-checked against\n// its manifest descriptor before the first server upload starts.\nexport async function planAssetArguments(\n args: unknown,\n descriptor: unknown,\n): Promise<AssetPlacement[]> {\n const candidates: PlacementCandidate[] = [];\n collectPlacements(args, descriptor, [], candidates);\n const prepared = await Promise.all(candidates.map(async (candidate) => ({\n ...candidate,\n prepared: await prepareAssetSource(candidate.source),\n })));\n for (const item of prepared) {\n if (item.prepared.bytes > item.max) {\n throw new AssetInputError(\n \"E_ASSET_TOO_LARGE\",\n `asset argument at ${item.path.join(\".\") || \"<root>\"} has ${item.prepared.bytes} bytes, over its ${item.max} byte bound`,\n );\n }\n }\n return prepared.map(({ path, max, prepared: source }) => ({ path, max, prepared: source }));\n}\n\nexport async function preparedBody(\n prepared: PreparedAssetSource,\n): Promise<BlobLike | ReadableStream<Uint8Array>> {\n if (isBlobLike(prepared.source)) return prepared.source;\n if (prepared.body) return prepared.body;\n const reopened = (await prepareAssetSource(prepared.source)).body;\n if (!reopened) throw new AssetInputError(\"E_ASSET_TYPE\", `native asset URI ${prepared.source.uri} has no body`);\n return reopened;\n}\n\nexport function withProgress(\n body: BlobLike | ReadableStream<Uint8Array>,\n bytes: number,\n options: AssetUploadOptions,\n): BlobLike | ReadableStream<Uint8Array> {\n const callback = options.onProgress;\n if (!callback) return body;\n const source = isBlobLike(body) ? body.stream() : body;\n const reader = source.getReader();\n let loaded = 0;\n callback({ loaded, total: bytes });\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n const next = await reader.read();\n if (next.done) {\n loaded = bytes;\n callback({ loaded, total: bytes });\n controller.close();\n return;\n }\n loaded = Math.min(bytes, loaded + next.value.byteLength);\n callback({ loaded, total: bytes });\n controller.enqueue(next.value);\n },\n cancel(reason) {\n return reader.cancel(reason);\n },\n });\n}\n\nfunction setAtPath(value: unknown, path: readonly (string | number)[], replacement: AssetRecord): unknown {\n if (path.length === 0) return replacement;\n const [head, ...tail] = path;\n if (Array.isArray(value) && typeof head === \"number\") {\n const copy = [...value];\n copy[head] = setAtPath(copy[head], tail, replacement);\n return copy;\n }\n if (isRecord(value) && typeof head === \"string\") {\n return { ...value, [head]: setAtPath(value[head], tail, replacement) };\n }\n throw new AssetInputError(\"E_ASSET_TYPE\", `asset argument path ${path.join(\".\")} no longer matches its manifest descriptor`);\n}\n\nexport function substituteAssetRecords(\n args: unknown,\n placements: readonly AssetPlacement[],\n records: readonly AssetRecord[],\n): unknown {\n if (placements.length !== records.length) throw new AssetInputError(\"E_ASSET_NOT_READY\", \"an asset upload did not produce a record\");\n return placements.reduce((value, placement, index) => setAtPath(value, placement.path, records[index]!), args);\n}\n\nfunction positiveInteger(record: Record<string, unknown>, field: string, surface: string): number {\n const value = record[field];\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value <= 0) {\n throw new AssetInputError(\"E_ASSET_TYPE\", `${surface}.${field} must be a positive integer`);\n }\n return value;\n}\n\nfunction checkedAssetRecord(value: unknown, surface: string): ImageAsset | VideoAsset {\n if (!isRecord(value)) throw new AssetInputError(\"E_ASSET_TYPE\", `${surface} must be an asset record`);\n const keys = Object.keys(value).sort();\n const video = Object.hasOwn(value, \"duration\");\n const expected = (video ? [\"duration\", \"height\", \"id\", \"width\"] : [\"height\", \"id\", \"width\"]);\n if (keys.length !== expected.length || keys.some((key, index) => key !== expected[index])) {\n throw new AssetInputError(\"E_ASSET_TYPE\", `${surface} must contain exactly ${expected.join(\", \")}`);\n }\n if (typeof value.id !== \"string\"\n || !/^s2id-[0-9a-f]{32}-[0-9a-f]{16}$/.test(value.id)\n || /-0{16}$/.test(value.id)) {\n throw new AssetInputError(\"E_ASSET_TYPE\", `${surface}.id must be an engine-minted id`);\n }\n const record = {\n id: value.id,\n width: positiveInteger(value, \"width\", surface),\n height: positiveInteger(value, \"height\", surface),\n };\n // The brand is type-level only; the wire record carries exactly the checked fields.\n return (video ? { ...record, duration: positiveInteger(value, \"duration\", surface) } : record) as ImageAsset | VideoAsset;\n}\n\nexport function assetRecord(value: unknown): ImageAsset | VideoAsset {\n return checkedAssetRecord(value, \"upload response\");\n}\n\nexport function assetPath(baseUrl: string, asset: AssetRecord, width?: number, carrier?: string): string {\n const record = checkedAssetRecord(asset, \"asset URL record\");\n if (width !== undefined && (!Number.isSafeInteger(width) || width <= 0)) {\n throw new AssetInputError(\"E_ASSET_TYPE\", \"asset width must be a positive integer\");\n }\n const query = new URLSearchParams();\n if (width !== undefined) query.set(\"w\", String(width));\n if (carrier !== undefined) {\n if (!(\"duration\" in record)) {\n throw new AssetInputError(\"E_ASSET_CARRIER_IMAGE\", \"image asset URLs never carry a session token; fetch the URL with assetHeaders or assetBlob\");\n }\n query.set(\"s\", carrier);\n }\n const suffix = query.size === 0 ? \"\" : `?${query}`;\n return `${baseUrl}/api/asset/${encodeURIComponent(record.id)}${suffix}`;\n}\n", "import type { Trace } from \"./types\";\n\nexport class EvalError extends Error {\n /** The run's trace up to the failure, attached by the store so a caller can tell an uncovered read from a genuine refusal. */\n trace?: Trace;\n /** The sites the failed run read outside coverage; empty when every read before the failure was covered. */\n partialSites?: string[];\n\n constructor(readonly code: string, message: string, readonly authoredCode: string | null = null) {\n super(`${code}: ${message}`);\n }\n}\n\nexport function requireRowIdentity(\n table: string,\n operation: string,\n keyId: string,\n rowId: string,\n): void {\n if (keyId !== rowId) {\n throw new EvalError(\"E_INPUT\", `${table} ${operation} key ${keyId} does not match row id ${rowId}`);\n }\n}\n", "// @ref LLP 1001#10-what-binds-and-how-it-is-checked \u2014 certificate identity uses\n// Rust serde's BTreeMap order even when a direct TypeScript caller constructed\n// the equivalent object with a different property insertion order.\n\nimport { EvalError } from \"./errors\";\n\nexport function canonicalProgramJson(program: any): string {\n return JSON.stringify({\n ...program,\n args: sortedMap(program.args ?? {}, normalizeArgType),\n body: (program.body ?? []).map(normalizeStatement),\n });\n}\n\n// @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 schema and\n// rule identity mirror serde's struct-field order and skip rules exactly, so\n// the hash is the same whether the schema arrived in struct order (the\n// corpus) or through a sorted `serde_json::Value` (`GET /api/program`).\n//\n// An unseen shape never hashes equal to a known one: a payload with a field\n// serde's struct does not carry is refused (`E_SCHEMA`) rather than dropped,\n// since dropping would let two different schemas hash the same; an unknown\n// variant is kept whole with its payload deep-sorted, so it hashes\n// deterministically and unlike anything this normalizer knows. The twin\n// treats a refusal as `hydrating` and never predicts under it.\nexport function canonicalSchemaJson(schema: any): string {\n known(schema, [\"tables\", \"maintains\", \"channels\", \"auth\", \"effects\"], \"schema\");\n const canonical: Record<string, any> = {\n tables: sortedMap(schema.tables ?? {}, normalizeTable),\n maintains: (schema.maintains ?? []).map(normalizeMaintain),\n };\n if (schema.channels !== undefined && Object.keys(schema.channels).length > 0) {\n canonical.channels = sortedMap(schema.channels, normalizeChannel);\n }\n if (schema.auth !== undefined && schema.auth !== null) known(schema.auth, [\"password\", \"guests\"], \"auth\");\n if (schema.auth !== undefined && (schema.auth.password || schema.auth.guests)) {\n canonical.auth = { password: schema.auth.password, guests: schema.auth.guests };\n }\n if (schema.effects !== undefined && schema.effects.length > 0) canonical.effects = schema.effects;\n return JSON.stringify(canonical);\n}\n\n/** Refuses a payload carrying a field the serde struct does not: a shape this hasher has never seen. */\nfunction known(record: any, fields: readonly string[], what: string): void {\n if (typeof record !== \"object\" || record === null || Array.isArray(record)) {\n throw new EvalError(\"E_SCHEMA\", `${what} must be an object`);\n }\n const unknown = Object.keys(record).filter((key) => !fields.includes(key));\n if (unknown.length > 0) {\n throw new EvalError(\"E_SCHEMA\", `unknown ${what} field ${unknown.join(\", \")}: a schema shape newer than this evaluator`);\n }\n}\n\n/** The struct's fields in serde order, and nothing else: `known` plus the reconstruction in one step. */\nfunction pick(record: any, fields: readonly string[], what: string): Record<string, any> {\n known(record, fields, what);\n const out: Record<string, any> = {};\n for (const field of fields) if (record[field] !== undefined) out[field] = record[field];\n return out;\n}\n\n/** An unknown variant's payload with every object's keys sorted: deterministic, and never a known shape's bytes. */\nfunction deepSorted(value: any): any {\n if (Array.isArray(value)) return value.map(deepSorted);\n if (typeof value !== \"object\" || value === null) return value;\n return sortedMap(value, deepSorted);\n}\n\n/** A rule in serde's field order: what `Schema::rule_hash` serializes beside the schema hash. */\nexport function canonicalRuleJson(rule: any): string {\n return JSON.stringify(normalizeRule(rule));\n}\n\nfunction normalizeMaintain(maintain: any): any {\n known(maintain, [\"kind\", \"source\", \"by\", \"target\", \"readable\"], \"maintain\");\n return {\n kind: normalizeMaintainKind(maintain.kind),\n source: maintain.source,\n by: maintain.by,\n target: maintain.target,\n readable: maintain.readable === null || maintain.readable === undefined ? null : normalizeRule(maintain.readable),\n };\n}\n\nfunction normalizeMaintainKind(kind: any): any {\n if (typeof kind !== \"object\" || kind === null) return kind;\n const [tag, data] = tagged(kind);\n return { [tag]: tag === \"Sum\" ? pick(data, [\"of\"], \"maintain.kind.Sum\") : deepSorted(data) };\n}\n\nfunction normalizeTable(table: any): any {\n known(table, [\"columns\", \"indexes\", \"rules\", \"constraints\", \"retain\"], \"table\");\n return {\n columns: sortedMap(table.columns ?? {}, normalizeColumnType),\n indexes: sortedMap(table.indexes ?? {}, normalizeIndex),\n rules: normalizeRules(table.rules),\n constraints: (table.constraints ?? []).map(normalizeConstraint),\n retain: table.retain ?? \"until-revoked\",\n };\n}\n\nfunction normalizeIndex(index: any): any {\n return pick(index, [\"columns\", \"unique\"], \"index\");\n}\n\nfunction normalizeChannel(channel: any): any {\n known(channel, [\"args\", \"publish\", \"subscribe\", \"ttl_ms\"], \"channel\");\n return {\n args: sortedMap(channel.args ?? {}, normalizeArgType),\n publish: normalizeRule(channel.publish),\n subscribe: normalizeRule(channel.subscribe),\n ttl_ms: channel.ttl_ms,\n };\n}\n\nfunction normalizeRules(rules: any): any {\n if (rules === undefined || rules === null) return rules;\n known(rules, [\"read\", \"insert\", \"update\", \"delete\"], \"rules\");\n return {\n read: normalizeRule(rules.read),\n insert: normalizeRule(rules.insert),\n update: normalizeRule(rules.update),\n delete: normalizeRule(rules.delete),\n };\n}\n\nexport function normalizeRule(rule: any): any {\n if (typeof rule !== \"object\" || rule === null) return rule;\n const [kind, data] = tagged(rule);\n switch (kind) {\n case \"Eq\":\n case \"Ne\":\n return { [kind]: data.map(normalizeRuleTerm) };\n case \"And\":\n case \"Or\":\n return { [kind]: data.map(normalizeRule) };\n case \"Not\":\n return { [kind]: normalizeRule(data) };\n case \"Exists\":\n case \"Created\":\n return { [kind]: { ...pick(data, [\"table\", \"index\", \"key\", \"provenance\"], `rule.${kind}`), key: data.key.map(normalizeRuleTerm) } };\n case \"Public\":\n return { Public: pick(data, [\"reason\"], \"rule.Public\") };\n default:\n return { [kind]: deepSorted(data) };\n }\n}\n\nfunction normalizeRuleTerm(term: any): any {\n if (typeof term !== \"object\" || term === null) return term;\n const [kind, data] = tagged(term);\n if (kind === \"Literal\") return { Literal: normalizeValue(data) };\n if (kind === \"Field\" || kind === \"OldField\" || kind === \"NextField\") return term;\n return { [kind]: deepSorted(data) };\n}\n\nfunction normalizeConstraint(constraint: any): any {\n if (typeof constraint !== \"object\" || constraint === null) return constraint;\n const [kind, data] = tagged(constraint);\n const what = `constraint.${kind}`;\n switch (kind) {\n case \"Unique\": return { Unique: pick(data, [\"index\"], what) };\n case \"Cap\": return { Cap: pick(data, [\"by\", \"max\"], what) };\n case \"Immutable\": return { Immutable: pick(data, [\"fields\"], what) };\n case \"Text\":\n known(data, [\"field\", \"min\", \"format\"], what);\n return { Text: {\n field: data.field,\n min: data.min ?? 0,\n ...(data.format === undefined || data.format === null ? {} : { format: data.format }),\n } };\n case \"FinalExistsOnInsert\":\n return { FinalExistsOnInsert: { ...pick(data, [\"table\", \"index\", \"key\"], what), key: data.key.map(normalizeRuleTerm) } };\n default: return { [kind]: deepSorted(data) };\n }\n}\n\nfunction normalizeColumnType(column: any): any {\n if (typeof column !== \"object\" || column === null) return column;\n const [kind, data] = tagged(column);\n if (kind === \"Optional\") return { Optional: normalizeColumnType(data) };\n const what = `column.${kind}`;\n if (kind === \"List\") return { List: { ...pick(data, [\"of\", \"max\"], what), of: normalizeColumnType(data.of) } };\n const fields = COLUMN_FIELDS[kind];\n return { [kind]: fields === undefined ? deepSorted(data) : pick(data, fields, what) };\n}\n\n/** The payload fields of each struct-variant column kind, in serde order. */\nconst COLUMN_FIELDS: Record<string, readonly string[]> = {\n Text: [\"max\"], Bytes: [\"max\"], Image: [\"max\"], Video: [\"max\"], Enum: [\"variants\"], Decimal: [\"scale\"],\n Money: [\"currency\", \"scale\"], Ref: [\"table\"], Json: [\"max_bytes\"],\n};\n\nfunction normalizeArgType(arg: any): any {\n if (typeof arg !== \"object\" || arg === null) return arg;\n const [kind, data] = tagged(arg);\n if (kind === \"Optional\") return { Optional: normalizeArgType(data) };\n if (kind === \"List\") {\n // `ArgType::List { of: Option<Box<ArgType>>, max }`: `of` is skipped when\n // absent, and a payload carrying any other field is refused like every\n // struct variant, never rebuilt without it.\n known(data, [\"of\", \"max\"], \"arg.List\");\n return { List: {\n ...(data.of === null || data.of === undefined ? {} : { of: normalizeArgType(data.of) }),\n max: data.max,\n } };\n }\n return normalizeColumnType(arg);\n}\n\nfunction normalizeStatement(statement: any): any {\n if (typeof statement === \"string\") return statement;\n const [kind, data] = tagged(statement);\n switch (kind) {\n case \"Const\":\n case \"Let\":\n case \"Assign\":\n case \"Push\":\n return { [kind]: { ...data, value: normalizeExpression(data.value) } };\n case \"If\":\n return { If: {\n ...data,\n condition: normalizeExpression(data.condition),\n then_body: data.then_body.map(normalizeStatement),\n else_body: data.else_body.map(normalizeStatement),\n } };\n case \"For\":\n return { For: {\n ...data,\n domain: normalizeDomain(data.domain),\n body: data.body.map(normalizeStatement),\n } };\n case \"Require\":\n return { Require: { ...data, condition: normalizeExpression(data.condition) } };\n case \"Insert\":\n return { Insert: { ...data, row: normalizeExpression(data.row) } };\n case \"Update\":\n return { Update: {\n ...data,\n key: normalizeExpression(data.key),\n patch: normalizeExpression(data.patch),\n } };\n case \"Upsert\":\n return { Upsert: {\n ...data,\n key: normalizeExpression(data.key),\n row: normalizeExpression(data.row),\n } };\n case \"Delete\":\n return { Delete: { ...data, key: normalizeExpression(data.key) } };\n case \"Emit\":\n return { Emit: { ...data, payload: normalizeExpression(data.payload) } };\n case \"Return\":\n return { Return: normalizeExpression(data) };\n default:\n return statement;\n }\n}\n\nfunction normalizeDomain(domain: any): any {\n const [kind, data] = tagged(domain);\n switch (kind) {\n case \"Page\":\n return { Page: normalizeScan(data) };\n case \"DerivedArray\":\n return { DerivedArray: { ...data, value: normalizeExpression(data.value) } };\n case \"Recurse\":\n return { Recurse: { ...data, seed: normalizeExpression(data.seed) } };\n default:\n return domain;\n }\n}\n\nfunction normalizeExpression(expression: any): any {\n const [kind, data] = tagged(expression);\n switch (kind) {\n case \"Literal\":\n return { Literal: normalizeValue(data) };\n case \"Field\":\n return { Field: { ...data, base: normalizeExpression(data.base) } };\n case \"Array\":\n return { Array: data.map(normalizeExpression) };\n case \"Object\":\n return { Object: sortedMap(data, normalizeExpression) };\n case \"Binary\":\n return { Binary: {\n ...data,\n left: normalizeExpression(data.left),\n right: normalizeExpression(data.right),\n } };\n case \"Unary\":\n return { Unary: { ...data, value: normalizeExpression(data.value) } };\n case \"Builtin\":\n return { Builtin: { ...data, args: data.args.map(normalizeExpression) } };\n case \"Get\":\n case \"Exists\":\n return { [kind]: normalizeRead(data) };\n case \"Scan\":\n return { Scan: normalizeScan(data) };\n default:\n return expression;\n }\n}\n\nfunction normalizeRead(read: any): any {\n return { ...read, key: read.key.map(normalizeExpression) };\n}\n\nfunction normalizeScan(scan: any): any {\n return {\n ...scan,\n prefix: scan.prefix.map(normalizeExpression),\n after: nullableExpression(scan.after),\n before: nullableExpression(scan.before),\n range: scan.range === null ? null : {\n ...scan.range,\n gt: nullableExpression(scan.range.gt),\n gte: nullableExpression(scan.range.gte),\n lt: nullableExpression(scan.range.lt),\n lte: nullableExpression(scan.range.lte),\n },\n };\n}\n\nfunction nullableExpression(expression: any): any {\n return expression === null ? null : normalizeExpression(expression);\n}\n\nfunction normalizeValue(value: any): any {\n if (typeof value === \"string\") return value;\n const [kind, data] = tagged(value);\n if (kind === \"Array\") return { Array: data.map(normalizeValue) };\n if (kind === \"Row\" || kind === \"Map\") return { [kind]: sortedMap(data, normalizeValue) };\n return value;\n}\n\nfunction sortedMap(value: Record<string, any>, normalize: (item: any) => any): Record<string, any> {\n const result: Record<string, any> = Object.create(null);\n for (const key of Object.keys(value).sort(compareCodepoints)) result[key] = normalize(value[key]);\n return result;\n}\n\nfunction tagged(value: any): [string, any] {\n const keys = Object.keys(value);\n if (keys.length !== 1) throw new Error(\"E_TRACE_SUBSET: malformed externally tagged IR\");\n return [keys[0]!, value[keys[0]!]];\n}\n\nfunction compareCodepoints(left: string, right: string): number {\n const leftPoints = Array.from(left, (value) => value.codePointAt(0)!);\n const rightPoints = Array.from(right, (value) => value.codePointAt(0)!);\n for (let index = 0; index < Math.min(leftPoints.length, rightPoints.length); index += 1) {\n if (leftPoints[index] !== rightPoints[index]) return leftPoints[index]! - rightPoints[index]!;\n }\n return leftPoints.length - rightPoints.length;\n}\n", "export function sha256(text: string): string {\n const bytes = utf8(text);\n const bitLength = bytes.length * 8;\n bytes.push(0x80);\n while (bytes.length % 64 !== 56) bytes.push(0);\n const high = Math.floor(bitLength / 0x1_0000_0000);\n const low = bitLength >>> 0;\n for (let shift = 24; shift >= 0; shift -= 8) bytes.push((high >>> shift) & 0xff);\n for (let shift = 24; shift >= 0; shift -= 8) bytes.push((low >>> shift) & 0xff);\n\n const state = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c,\n 0x1f83d9ab, 0x5be0cd19,\n ];\n const words = new Array<number>(64);\n for (let offset = 0; offset < bytes.length; offset += 64) {\n for (let index = 0; index < 16; index += 1) {\n const start = offset + index * 4;\n words[index] =\n ((bytes[start] << 24) |\n (bytes[start + 1] << 16) |\n (bytes[start + 2] << 8) |\n bytes[start + 3]) >>>\n 0;\n }\n for (let index = 16; index < 64; index += 1) {\n const a = words[index - 15];\n const b = words[index - 2];\n const s0 = rotate(a, 7) ^ rotate(a, 18) ^ (a >>> 3);\n const s1 = rotate(b, 17) ^ rotate(b, 19) ^ (b >>> 10);\n words[index] = (words[index - 16] + s0 + words[index - 7] + s1) >>> 0;\n }\n let [a, b, c, d, e, f, g, h] = state;\n for (let index = 0; index < 64; index += 1) {\n const s1 = rotate(e, 6) ^ rotate(e, 11) ^ rotate(e, 25);\n const choice = (e & f) ^ (~e & g);\n const temp1 = (h + s1 + choice + SHA256_K[index] + words[index]) >>> 0;\n const s0 = rotate(a, 2) ^ rotate(a, 13) ^ rotate(a, 22);\n const majority = (a & b) ^ (a & c) ^ (b & c);\n const temp2 = (s0 + majority) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d + temp1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temp1 + temp2) >>> 0;\n }\n state[0] = (state[0] + a) >>> 0;\n state[1] = (state[1] + b) >>> 0;\n state[2] = (state[2] + c) >>> 0;\n state[3] = (state[3] + d) >>> 0;\n state[4] = (state[4] + e) >>> 0;\n state[5] = (state[5] + f) >>> 0;\n state[6] = (state[6] + g) >>> 0;\n state[7] = (state[7] + h) >>> 0;\n }\n return state.map((value) => value.toString(16).padStart(8, \"0\")).join(\"\");\n}\n\nexport function utf8Length(text: string): number {\n return utf8(text).length;\n}\n\nfunction rotate(value: number, bits: number): number {\n return (value >>> bits) | (value << (32 - bits));\n}\n\nfunction utf8(text: string): number[] {\n const bytes: number[] = [];\n for (const character of text) {\n const point = character.codePointAt(0)!;\n if (point <= 0x7f) bytes.push(point);\n else if (point <= 0x7ff) bytes.push(0xc0 | (point >> 6), 0x80 | (point & 0x3f));\n else if (point <= 0xffff)\n bytes.push(0xe0 | (point >> 12), 0x80 | ((point >> 6) & 0x3f), 0x80 | (point & 0x3f));\n else\n bytes.push(\n 0xf0 | (point >> 18),\n 0x80 | ((point >> 12) & 0x3f),\n 0x80 | ((point >> 6) & 0x3f),\n 0x80 | (point & 0x3f),\n );\n }\n return bytes;\n}\n\nconst SHA256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,\n 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,\n 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n];\n", "// One hasher of the schema: the evaluator's struct-order canonical form, the\n// same code the twin runs, proven against Rust's `Schema::hash()` on every golden.\n// @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 closure reconstruction is admitted only under the envelope's exact generation schema.\nimport { canonicalSchemaJson } from \"../../evaluator/src/certificate-identity.js\";\nimport { sha256 } from \"../../evaluator/src/hash.js\";\n\nexport function schemaDigest(schema: any): string {\n return sha256(canonicalSchemaJson(schema));\n}\n", "// @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 this is the strict public mirror of the frozen server envelope.\n\nimport { schemaDigest } from \"./offline-schema.js\";\n\n/** Exact pooled-row reference spelling. Application objects with `$row` are escaped on the wire. */\nexport type WireRowReference = { $row: { table: string; id: string } };\nexport type WireEscapedObject = { $row: { $value: Record<string, WireValue> } };\nexport type WireValue =\n | null\n | boolean\n | number\n | string\n | WireValue[]\n | { [key: string]: WireValue }\n | WireRowReference\n | WireEscapedObject;\n\nexport interface DeliveryRow {\n table: string;\n id: string;\n row: Record<string, WireValue>;\n}\n\nexport interface DeliveryRange {\n site: string;\n table: string;\n index: string;\n prefix: WireValue[];\n order: \"Asc\" | \"Desc\";\n take: number;\n after: WireValue | null;\n before: WireValue | null;\n gt: WireValue | null;\n gte: WireValue | null;\n lt: WireValue | null;\n lte: WireValue | null;\n ruleHash: string;\n rowIds: string[];\n stop: \"Limit\" | \"Exhausted\";\n absence: boolean;\n haloId?: string;\n}\n\nexport interface DeliveryVerdict {\n ruleHash: string;\n /**\n * The verdict's pinned inputs, digested as a wire fact:\n * `sha256(canonical([table, index, key]))` \u2014 the JSON array of the rule\n * input's table name, index name, and key values in wire encoding (ids and\n * text as strings, integers as numbers, null as null, bytes as\n * `{ \"Bytes\": hex }`), serialized with sorted object keys and no whitespace.\n * A twin evaluating a rule computes it from the schema and the wire values it\n * holds and looks the verdict up by `ruleHash` plus this digest; a replay\n * trace's `inputsDigest` is the same value. A transaction-local created-row\n * probe prefixes the array with `\"created\"`. Defined once in\n * `snapback2-core/src/offline.rs` (`rule_inputs_digest`).\n */\n pinnedInputsDigest: string;\n principal: string;\n authEpoch: number;\n result: boolean;\n}\n\nexport interface DeliveryReceipt {\n ranges: DeliveryRange[];\n absences: Array<[table: string, index: string, key: WireValue[]]>;\n verdicts: DeliveryVerdict[];\n}\n\nexport interface DeliveryAuthority {\n principal: string;\n authEpoch: number;\n}\n\nexport interface DeliveryEnvelopeV1 {\n protocol: 1;\n generation: string;\n schemaHash: string;\n planHash: string;\n authority: DeliveryAuthority;\n state: \"complete\" | \"capped\" | \"partial\" | \"denied\";\n reason?: string;\n rule?: string;\n data: WireValue;\n next: string | null;\n seq: number;\n rows: DeliveryRow[];\n receipt: DeliveryReceipt;\n validator: string;\n}\n\nexport interface DeliveryUnchanged {\n state: \"unchanged\";\n seq: number;\n validator: string;\n}\n\nexport type DeliveryMessage = DeliveryEnvelopeV1 | DeliveryUnchanged;\n\nexport type TaggedValue =\n | \"Null\"\n | { Bool: boolean }\n | { Int: number }\n | { String: string }\n | { Id: string }\n | { Bytes: string }\n | { Row: Record<string, TaggedValue> }\n | { Array: TaggedValue[] }\n | { Map: Record<string, TaggedValue> };\n\nexport interface EvaluatorClosureReceipt {\n schema_hash: string;\n rows: Array<{ table: string; id: string; row: TaggedValue }>;\n ranges: Array<{\n site: string;\n table: string;\n index: string;\n prefix: TaggedValue[];\n order: \"Asc\" | \"Desc\";\n take: number;\n after: TaggedValue | null;\n before: TaggedValue | null;\n gt: TaggedValue | null;\n gte: TaggedValue | null;\n lt: TaggedValue | null;\n lte: TaggedValue | null;\n rule_hash: string;\n row_ids: string[];\n stop: \"Limit\" | \"Exhausted\";\n absence: boolean;\n halo: { table: string; id: string; row: TaggedValue } | null;\n n2_key: null;\n /** Members a later swap evicted from this page; absent when none (the goldens' bytes carry none). */\n evicted_ids?: string[];\n }>;\n absences: Array<[string, string, TaggedValue[]]>;\n verdicts: Array<{\n rule_hash: string;\n pinned_inputs_digest: string;\n principal: string;\n auth_epoch: number;\n result: boolean;\n }>;\n}\n\nexport class DeliveryEnvelopeDecodeError extends TypeError {\n constructor(readonly path: string, detail: string) {\n super(`${path}: ${detail}`);\n this.name = \"DeliveryEnvelopeDecodeError\";\n }\n}\n\nexport function decodeDeliveryEnvelope(json: unknown): DeliveryEnvelopeV1 {\n object(json, \"$\", [\n \"protocol\", \"generation\", \"schemaHash\", \"planHash\", \"authority\", \"state\",\n \"data\", \"next\", \"seq\", \"rows\", \"receipt\", \"validator\",\n ], [\"reason\", \"rule\"]);\n if (json.protocol !== 1) fail(\"$.protocol\", \"unsupported delivery protocol\");\n digest(json.generation, \"$.generation\");\n digest(json.schemaHash, \"$.schemaHash\");\n digest(json.planHash, \"$.planHash\");\n object(json.authority, \"$.authority\", [\"principal\", \"authEpoch\"]);\n string(json.authority.principal, \"$.authority.principal\");\n uint(json.authority.authEpoch, \"$.authority.authEpoch\");\n if (![\"complete\", \"capped\", \"partial\", \"denied\"].includes(String(json.state)))\n fail(\"$.state\", \"expected complete, capped, partial, or denied\");\n if (json.state === \"partial\") string(json.reason, \"$.reason\");\n else if (json.reason !== undefined) fail(\"$.reason\", \"is only valid for partial state\");\n if (json.state === \"denied\") string(json.rule, \"$.rule\");\n else if (json.rule !== undefined) fail(\"$.rule\", \"is only valid for denied state\");\n wire(json.data, \"$.data\");\n if (json.next !== null) string(json.next, \"$.next\");\n uint(json.seq, \"$.seq\");\n array(json.rows, \"$.rows\");\n const pool = new Set<string>();\n json.rows.forEach((row: unknown, index: number) => {\n object(row, `$.rows[${index}]`, [\"table\", \"id\", \"row\"]);\n string(row.table, `$.rows[${index}].table`);\n string(row.id, `$.rows[${index}].id`);\n object(row.row, `$.rows[${index}].row`, [], [], true);\n wire(row.row, `$.rows[${index}].row`);\n const key = poolKey(row.table, row.id);\n if (pool.has(key)) fail(`$.rows[${index}]`, \"duplicates a pooled row\");\n pool.add(key);\n });\n receipt(json.receipt, pool, json.authority as DeliveryAuthority);\n validateReferences(json.data, pool, \"$.data\");\n digest(json.validator, \"$.validator\");\n return json as DeliveryEnvelopeV1;\n}\n\n/** Decode either a full authority envelope or a conditional `unchanged` marker. */\nexport function decodeDeliveryMessage(json: unknown): DeliveryMessage {\n if (plain(json) && json.state === \"unchanged\") {\n object(json, \"$\", [\"state\", \"seq\", \"validator\"]);\n uint(json.seq, \"$.seq\");\n digest(json.validator, \"$.validator\");\n return json as unknown as DeliveryUnchanged;\n }\n return decodeDeliveryEnvelope(json);\n}\n\nexport function encodeDeliveryEnvelope(envelope: DeliveryEnvelopeV1): string {\n const decoded = decodeDeliveryEnvelope(envelope);\n const ordered: Record<string, unknown> = {\n protocol: decoded.protocol,\n generation: decoded.generation,\n schemaHash: decoded.schemaHash,\n planHash: decoded.planHash,\n authority: {\n principal: decoded.authority.principal,\n authEpoch: decoded.authority.authEpoch,\n },\n state: decoded.state,\n };\n if (decoded.reason !== undefined) ordered.reason = decoded.reason;\n if (decoded.rule !== undefined) ordered.rule = decoded.rule;\n ordered.data = canonicalWire(decoded.data);\n ordered.next = decoded.next;\n ordered.seq = decoded.seq;\n ordered.rows = [...decoded.rows]\n .sort((left, right) => compareText(left.table, right.table) || compareText(left.id, right.id))\n .map((row) => ({ table: row.table, id: row.id, row: canonicalWire(row.row) }));\n ordered.receipt = {\n ranges: decoded.receipt.ranges.map((range) => {\n const item: Record<string, unknown> = {\n site: range.site,\n table: range.table,\n index: range.index,\n prefix: range.prefix.map(canonicalWire),\n order: range.order,\n take: range.take,\n after: range.after === null ? null : canonicalWire(range.after),\n before: range.before === null ? null : canonicalWire(range.before),\n gt: range.gt === null ? null : canonicalWire(range.gt),\n gte: range.gte === null ? null : canonicalWire(range.gte),\n lt: range.lt === null ? null : canonicalWire(range.lt),\n lte: range.lte === null ? null : canonicalWire(range.lte),\n ruleHash: range.ruleHash,\n rowIds: [...range.rowIds],\n stop: range.stop,\n absence: range.absence,\n };\n if (range.haloId !== undefined) item.haloId = range.haloId;\n return item;\n }),\n absences: decoded.receipt.absences.map(([table, index, key]) => [\n table,\n index,\n key.map(canonicalWire),\n ]),\n verdicts: decoded.receipt.verdicts.map((verdict) => ({\n ruleHash: verdict.ruleHash,\n pinnedInputsDigest: verdict.pinnedInputsDigest,\n principal: verdict.principal,\n authEpoch: verdict.authEpoch,\n result: verdict.result,\n })),\n };\n ordered.validator = decoded.validator;\n return JSON.stringify(ordered);\n}\n\nexport function expandRows(envelope: DeliveryEnvelopeV1): WireValue {\n const decoded = decodeDeliveryEnvelope(envelope);\n const rows = new Map(decoded.rows.map((row) => [poolKey(row.table, row.id), row.row]));\n const expand = (value: WireValue): WireValue => {\n if (rowReference(value)) {\n const row = rows.get(poolKey(value.$row.table, value.$row.id));\n if (row === undefined) fail(\"$.data\", `references missing row ${value.$row.table}/${value.$row.id}`);\n return clone(row);\n }\n if (escapedObject(value)) {\n return Object.fromEntries(\n Object.entries(value.$row.$value).map(([key, item]) => [key, expand(item)]),\n );\n }\n if (Array.isArray(value)) return value.map(expand);\n if (plain(value)) return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, expand(item)]));\n return value;\n };\n return expand(decoded.data);\n}\n\n/** Rebuild the evaluator's externally-tagged private receipt from the public pool. */\nexport function toClosureReceipt(envelope: DeliveryEnvelopeV1, schema: any): EvaluatorClosureReceipt {\n const decoded = decodeDeliveryEnvelope(envelope);\n let actualSchemaHash: string;\n try {\n actualSchemaHash = schemaDigest(schema);\n } catch (error) {\n fail(\"schema\", error instanceof Error ? error.message : String(error));\n }\n if (actualSchemaHash !== decoded.schemaHash) {\n fail(\"schema\", `hash ${actualSchemaHash} does not match envelope schemaHash ${decoded.schemaHash}`);\n }\n const taggedRows = new Map<string, { table: string; id: string; row: TaggedValue }>();\n for (const row of decoded.rows) {\n const tagged = { table: row.table, id: row.id, row: tagRow(schema, row.table, row.row) };\n taggedRows.set(poolKey(row.table, row.id), tagged);\n }\n const ranges = decoded.receipt.ranges.map((range) => ({\n site: range.site,\n table: range.table,\n index: range.index,\n prefix: tagIndexValues(schema, range.table, range.index, range.prefix, 0),\n order: range.order,\n take: range.take,\n after: tagBoundary(schema, range, range.after),\n before: tagBoundary(schema, range, range.before),\n gt: tagBoundary(schema, range, range.gt),\n gte: tagBoundary(schema, range, range.gte),\n lt: tagBoundary(schema, range, range.lt),\n lte: tagBoundary(schema, range, range.lte),\n rule_hash: range.ruleHash,\n row_ids: [...range.rowIds],\n stop: range.stop,\n absence: range.absence,\n halo: range.haloId === undefined\n ? null\n : clone(taggedRows.get(poolKey(range.table, range.haloId))\n ?? fail(`$.receipt.ranges[${range.site}].haloId`, \"references a missing pooled row\")),\n n2_key: null,\n }));\n return {\n schema_hash: decoded.schemaHash,\n rows: Array.from(taggedRows.values()).map(clone),\n ranges,\n absences: decoded.receipt.absences.map(([table, index, key]) => [\n table,\n index,\n tagIndexValues(schema, table, index, key, 0),\n ]),\n verdicts: decoded.receipt.verdicts.map((verdict) => ({\n rule_hash: verdict.ruleHash,\n pinned_inputs_digest: verdict.pinnedInputsDigest,\n principal: verdict.principal,\n auth_epoch: verdict.authEpoch,\n result: verdict.result,\n })),\n };\n}\n\nexport type DeliveryRangeExtent =\n | { stop: \"Limit\"; firstKey: WireValue[]; lastKey: WireValue[]; presentIds: string[] }\n | {\n stop: \"Exhausted\";\n prefix: WireValue[];\n bounds: Pick<DeliveryRange, \"after\" | \"before\" | \"gt\" | \"gte\" | \"lt\" | \"lte\">;\n presentIds: string[];\n };\n\n/** Derive the rule-2 range extent solely from a delivery and its generation schema. */\nexport function deliveryRangeExtent(\n envelope: DeliveryEnvelopeV1,\n schema: any,\n range: DeliveryRange,\n): DeliveryRangeExtent {\n const decoded = decodeDeliveryEnvelope(envelope);\n const selected = decoded.receipt.ranges.find((candidate) => candidate === range)\n ?? decoded.receipt.ranges.find((candidate) => candidate.site === range.site);\n if (!selected) fail(\"$.receipt.ranges\", `does not contain site ${range.site}`);\n const presentIds = selected.haloId === undefined\n ? [...selected.rowIds]\n : [...selected.rowIds, selected.haloId];\n if (selected.stop === \"Exhausted\") {\n return {\n stop: \"Exhausted\",\n prefix: clone(selected.prefix),\n bounds: {\n after: clone(selected.after), before: clone(selected.before),\n gt: clone(selected.gt), gte: clone(selected.gte),\n lt: clone(selected.lt), lte: clone(selected.lte),\n },\n presentIds,\n };\n }\n if (selected.rowIds.length === 0) fail(`$.receipt.ranges[${selected.site}].rowIds`, \"Limit extent needs a returned row\");\n const rows = new Map(decoded.rows.map((row) => [poolKey(row.table, row.id), row]));\n const key = (id: string): WireValue[] => {\n const row = rows.get(poolKey(selected.table, id))!;\n return indexColumns(schema, selected.table, selected.index).map((column) => {\n if (!(column in row.row)) fail(`$.rows.${selected.table}/${id}.${column}`, \"is required by the range index\");\n return clone(row.row[column]!);\n });\n };\n return {\n stop: \"Limit\",\n firstKey: key(selected.rowIds[0]!),\n lastKey: key(selected.rowIds[selected.rowIds.length - 1]!),\n presentIds,\n };\n}\n\nfunction receipt(value: unknown, pool: Set<string>, authority: DeliveryAuthority): void {\n object(value, \"$.receipt\", [\"ranges\", \"absences\", \"verdicts\"]);\n array(value.ranges, \"$.receipt.ranges\");\n value.ranges.forEach((range: unknown, index: number) => {\n const path = `$.receipt.ranges[${index}]`;\n object(range, path, [\n \"site\", \"table\", \"index\", \"prefix\", \"order\", \"take\", \"after\", \"before\",\n \"gt\", \"gte\", \"lt\", \"lte\", \"ruleHash\", \"rowIds\", \"stop\", \"absence\",\n ], [\"haloId\"]);\n for (const name of [\"site\", \"table\", \"index\", \"ruleHash\"] as const) string(range[name], `${path}.${name}`);\n digest(range.ruleHash, `${path}.ruleHash`);\n array(range.prefix, `${path}.prefix`); range.prefix.forEach((item: unknown, at: number) => wire(item, `${path}.prefix[${at}]`));\n if (![\"Asc\", \"Desc\"].includes(String(range.order))) fail(`${path}.order`, \"expected Asc or Desc\");\n uint(range.take, `${path}.take`);\n for (const name of [\"after\", \"before\", \"gt\", \"gte\", \"lt\", \"lte\"] as const)\n if (range[name] !== null) wire(range[name], `${path}.${name}`);\n array(range.rowIds, `${path}.rowIds`);\n const rowIds = new Set<string>();\n range.rowIds.forEach((id: unknown, at: number) => {\n string(id, `${path}.rowIds[${at}]`);\n if (rowIds.has(id)) fail(`${path}.rowIds[${at}]`, \"duplicates a row id\");\n rowIds.add(id);\n if (!pool.has(poolKey(range.table, id))) fail(`${path}.rowIds[${at}]`, \"references a missing same-table pooled row\");\n });\n if (![\"Limit\", \"Exhausted\"].includes(String(range.stop))) fail(`${path}.stop`, \"expected Limit or Exhausted\");\n boolean(range.absence, `${path}.absence`);\n if (range.haloId !== undefined) {\n string(range.haloId, `${path}.haloId`);\n if (!pool.has(poolKey(range.table, range.haloId))) fail(`${path}.haloId`, \"references a missing pooled row\");\n }\n });\n array(value.absences, \"$.receipt.absences\");\n value.absences.forEach((absence: unknown, index: number) => {\n const path = `$.receipt.absences[${index}]`;\n array(absence, path);\n if (absence.length !== 3) fail(path, \"expected [table, index, key]\");\n string(absence[0], `${path}[0]`);\n if (absence[1] !== \"byId\") fail(`${path}[1]`, \"only primary byId absences may be delivered\");\n array(absence[2], `${path}[2]`); absence[2].forEach((item: unknown, at: number) => wire(item, `${path}[2][${at}]`));\n });\n array(value.verdicts, \"$.receipt.verdicts\");\n value.verdicts.forEach((verdict: unknown, index: number) => {\n const path = `$.receipt.verdicts[${index}]`;\n object(verdict, path, [\"ruleHash\", \"pinnedInputsDigest\", \"principal\", \"authEpoch\", \"result\"]);\n digest(verdict.ruleHash, `${path}.ruleHash`);\n digest(verdict.pinnedInputsDigest, `${path}.pinnedInputsDigest`);\n string(verdict.principal, `${path}.principal`);\n uint(verdict.authEpoch, `${path}.authEpoch`);\n boolean(verdict.result, `${path}.result`);\n if (verdict.principal !== authority.principal) fail(`${path}.principal`, \"does not match envelope authority\");\n if (verdict.authEpoch !== authority.authEpoch) fail(`${path}.authEpoch`, \"does not match envelope authority\");\n });\n}\n\n/** Tag one pooled wire row by its table's declared column types (the evaluator's private form). */\nexport function tagWireRow(schema: any, table: string, row: Record<string, WireValue>): TaggedValue {\n return tagRow(schema, table, row);\n}\n\n/** Tag index key values (a prefix, a key, or a cursor position) by the index's column types from `offset`. */\nexport function tagWireIndexValues(schema: any, table: string, index: string, values: WireValue[], offset = 0): TaggedValue[] {\n return tagIndexValues(schema, table, index, values, offset);\n}\n\n/** Tag a range boundary (`after`, `before`, `gt`, \u2026): an array is a position after the prefix, a scalar its first column. */\nexport function tagWireBoundary(schema: any, range: Pick<DeliveryRange, \"table\" | \"index\" | \"prefix\">, value: WireValue | null): TaggedValue | null {\n return tagBoundary(schema, range as DeliveryRange, value);\n}\n\n/** Tag one wire value by a declared column or argument descriptor. */\nexport function tagWireValue(descriptor: unknown, value: WireValue, path: string): TaggedValue {\n return tagTyped(descriptor, value, path);\n}\n\nfunction tagRow(schema: any, table: string, row: Record<string, WireValue>): TaggedValue {\n const columns = schema?.tables?.[table]?.columns;\n if (!plain(columns)) fail(`schema.tables.${table}.columns`, \"is missing\");\n const tagged: Record<string, TaggedValue> = Object.create(null);\n for (const [name, value] of Object.entries(row)) {\n if (!(name in columns)) fail(`rows.${table}.${name}`, \"is not a declared column\");\n tagged[name] = tagTyped(columns[name], value, `rows.${table}.${name}`);\n }\n return { Row: tagged };\n}\n\nfunction tagIndexValues(schema: any, table: string, index: string, values: WireValue[], offset: number): TaggedValue[] {\n const columns = indexColumns(schema, table, index);\n return values.map((value, at) => {\n const name = columns[offset + at];\n if (name === undefined) fail(`schema.tables.${table}.indexes.${index}`, \"has too few columns\");\n return tagTyped(schema.tables[table].columns[name], value, `${table}.${index}[${offset + at}]`);\n });\n}\n\nfunction tagBoundary(schema: any, range: DeliveryRange, value: WireValue | null): TaggedValue | null {\n if (value === null) return null;\n if (Array.isArray(value)) return { Array: tagIndexValues(schema, range.table, range.index, value, range.prefix.length) };\n return tagIndexValues(schema, range.table, range.index, [value], range.prefix.length)[0]!;\n}\n\nfunction tagTyped(descriptor: any, value: WireValue, path: string): TaggedValue {\n if (plain(descriptor) && \"Optional\" in descriptor) return value === null ? \"Null\" : tagTyped(descriptor.Optional, value, path);\n if (value === null) return \"Null\";\n if (descriptor === \"Id\" || descriptor === \"Principal\" || plain(descriptor) && \"Ref\" in descriptor) {\n if (typeof value !== \"string\") fail(path, \"expected id string\");\n return { Id: value };\n }\n if (plain(descriptor) && (\"Text\" in descriptor || \"Enum\" in descriptor)) {\n if (typeof value !== \"string\") fail(path, \"expected text string\");\n return { String: value };\n }\n if ([\"Int\", \"Time\"].includes(String(descriptor)) || plain(descriptor) && (\"Decimal\" in descriptor || \"Money\" in descriptor)) {\n uintOrSigned(value, path); return { Int: value as number };\n }\n if (descriptor === \"Bool\") { boolean(value, path); return { Bool: value as boolean }; }\n if (plain(descriptor) && \"Bytes\" in descriptor) {\n const bytes = plain(value) && \"Bytes\" in value ? value.Bytes : undefined;\n if (!plain(value) || Object.keys(value).length !== 1 || typeof bytes !== \"string\" || !/^(?:[0-9a-f]{2})*$/.test(bytes))\n fail(path, \"expected canonical Bytes\");\n return { Bytes: bytes };\n }\n if (plain(descriptor) && \"List\" in descriptor) {\n array(value, path);\n return { Array: value.map((item: WireValue, index: number) => tagTyped(descriptor.List.of, item, `${path}[${index}]`)) };\n }\n if (plain(descriptor) && (\"Image\" in descriptor || \"Video\" in descriptor)) {\n object(value, path, [], [], true);\n const kind = \"Image\" in descriptor ? \"Image\" : \"Video\";\n const fields = ASSET_RECORD_FIELDS[kind];\n const names = Object.keys(value);\n if (names.length !== Object.keys(fields).length || names.some((name) => !(name in fields)))\n fail(path, `must contain exactly ${Object.keys(fields).sort().join(\", \")}`);\n return { Map: Object.fromEntries(Object.entries(value).map(([key, item]) => [\n key,\n tagAssetField(fields[key as keyof typeof fields], item, `${path}.${key}`),\n ])) };\n }\n // @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 tag by\n // the declared column type only: a `json` value shaped `{ \"Bytes\": \"\u2026\" }` is\n // application data, never the byte variant (O1a review).\n if (plain(descriptor) && \"Json\" in descriptor) return tagJson(value);\n fail(path, \"has an unsupported schema descriptor\");\n}\n\nfunction tagJson(value: WireValue): TaggedValue {\n if (value === null) return \"Null\";\n if (typeof value === \"boolean\") return { Bool: value };\n if (typeof value === \"number\") return { Int: value };\n if (typeof value === \"string\") return { String: value };\n if (Array.isArray(value)) return { Array: value.map(tagJson) };\n return { Map: Object.fromEntries(Object.entries(value).map(([key, item]) => [key, tagJson(item)])) };\n}\n\nconst ASSET_RECORD_FIELDS = {\n Image: { id: \"String\", width: \"Int\", height: \"Int\" },\n Video: { id: \"String\", width: \"Int\", height: \"Int\", duration: \"Int\" },\n} as const;\n\nfunction tagAssetField(descriptor: \"String\" | \"Int\", value: WireValue, path: string): TaggedValue {\n if (descriptor === \"String\") {\n if (typeof value !== \"string\") fail(path, \"expected string\");\n return { String: value };\n }\n uintOrSigned(value, path);\n return { Int: value as number };\n}\n\nfunction indexColumns(schema: any, table: string, index: string): string[] {\n const columns = schema?.tables?.[table]?.indexes?.[index]?.columns;\n if (!Array.isArray(columns) || !columns.every((item) => typeof item === \"string\"))\n fail(`schema.tables.${table}.indexes.${index}`, \"is missing columns\");\n return columns;\n}\n\nfunction validateReferences(value: unknown, pool: Set<string>, path: string): void {\n if (rowReference(value)) {\n if (!pool.has(poolKey(value.$row.table, value.$row.id))) fail(path, \"references a missing pooled row\");\n return;\n }\n if (escapedObject(value)) {\n for (const [key, item] of Object.entries(value.$row.$value)) {\n validateReferences(item, pool, `${path}.$row.$value.${key}`);\n }\n return;\n }\n if (Array.isArray(value)) value.forEach((item, index) => validateReferences(item, pool, `${path}[${index}]`));\n else if (plain(value)) {\n if (\"$row\" in value) fail(path, \"has a malformed reserved $row value\");\n for (const [key, item] of Object.entries(value)) validateReferences(item, pool, `${path}.${key}`);\n }\n}\n\nfunction canonicalWire(value: WireValue): WireValue {\n if (Array.isArray(value)) return value.map(canonicalWire);\n if (plain(value)) {\n const record = value as Record<string, WireValue>;\n return Object.fromEntries(\n Object.keys(record).sort().map((key) => [key, canonicalWire(record[key]!)]),\n );\n }\n return value;\n}\n\nfunction wire(value: unknown, path: string): void {\n if (value === null || typeof value === \"boolean\" || typeof value === \"string\") return;\n if (typeof value === \"number\") { uintOrSigned(value, path); return; }\n if (Array.isArray(value)) { value.forEach((item, index) => wire(item, `${path}[${index}]`)); return; }\n object(value, path, [], [], true);\n for (const [key, item] of Object.entries(value)) wire(item, `${path}.${key}`);\n}\n\nfunction rowReference(value: unknown): value is WireRowReference {\n return plain(value) && Object.keys(value).length === 1 && plain(value.$row)\n && Object.keys(value.$row).sort().join(\",\") === \"id,table\"\n && typeof value.$row.table === \"string\" && typeof value.$row.id === \"string\";\n}\n\nfunction escapedObject(value: unknown): value is WireEscapedObject {\n return plain(value) && Object.keys(value).length === 1 && plain(value.$row)\n && Object.keys(value.$row).length === 1 && plain(value.$row.$value);\n}\n\nfunction object(value: any, path: string, required: string[], optional: string[] = [], open = false): asserts value is Record<string, any> {\n if (!plain(value)) fail(path, \"expected object\");\n for (const name of required) if (!(name in value)) fail(`${path}.${name}`, \"is required\");\n if (!open) for (const name of Object.keys(value)) if (!required.includes(name) && !optional.includes(name)) fail(`${path}.${name}`, \"is unknown\");\n}\nfunction array(value: any, path: string): asserts value is any[] { if (!Array.isArray(value)) fail(path, \"expected array\"); }\nfunction string(value: unknown, path: string): asserts value is string { if (typeof value !== \"string\" || value.length === 0) fail(path, \"expected non-empty string\"); }\nfunction boolean(value: unknown, path: string): asserts value is boolean { if (typeof value !== \"boolean\") fail(path, \"expected boolean\"); }\nfunction uint(value: unknown, path: string): asserts value is number { if (!Number.isSafeInteger(value) || Number(value) < 0) fail(path, \"expected non-negative safe integer\"); }\nfunction uintOrSigned(value: unknown, path: string): asserts value is number { if (!Number.isSafeInteger(value)) fail(path, \"expected safe integer\"); }\nfunction digest(value: unknown, path: string): asserts value is string { if (typeof value !== \"string\" || !/^[0-9a-f]{64}$/.test(value)) fail(path, \"expected lowercase SHA-256 digest\"); }\nfunction plain(value: any): value is Record<string, any> { return value !== null && typeof value === \"object\" && !Array.isArray(value) && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null); }\nfunction poolKey(table: string, id: string): string { return `${table.length}:${table}${id}`; }\nfunction compareText(left: string, right: string): number { return left < right ? -1 : left > right ? 1 : 0; }\nfunction clone<T>(value: T): T { return structuredClone(value); }\nfunction fail(path: string, detail: string): never { throw new DeliveryEnvelopeDecodeError(path, detail); }\n", "// @ref LLP 1012#7-writes-offline \u2014 the outbox is durable custody of unsent\n// intents: each one owns a contiguous slice of a principal-bound replay grant,\n// so its ids are known before the server has seen it and a retry is the same\n// envelope. Settlement never deletes; `dismiss` is the app's choice.\nimport type {\n OutboxEntry,\n OutboxGrant,\n OutboxState,\n OutboxTrace,\n OverlayRow,\n RangeStore,\n StoreDelivery,\n} from \"./range-store.js\";\n\nexport const ENGINE_ID = /^s2id-([0-9a-f]{32})-([0-9a-f]{16})$/;\n\nexport type OutboxRefusalCode = \"E_OFFLINE_ID_BLOCK\";\n\n/** A local custody refusal at enqueue time; the client maps it onto the offline family. */\nexport class OutboxRefusal extends Error {\n constructor(readonly code: OutboxRefusalCode, message: string, readonly site: string, readonly rewrite: string) {\n super(message);\n this.name = \"OutboxRefusal\";\n }\n}\n\nexport function emptyTrace(): OutboxTrace {\n return { points: [], verdicts: [] };\n}\n\n/** Reads `grant` off a login, guest, or resume response; anything malformed is ignored. */\nexport function decodeGrant(value: unknown): OutboxGrant | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const grant = (value as { grant?: unknown }).grant;\n if (!grant || typeof grant !== \"object\" || Array.isArray(grant)) return undefined;\n const record = grant as Record<string, unknown>;\n if (typeof record.id !== \"string\" || typeof record.from !== \"string\" || !ENGINE_ID.test(record.from)\n || !Number.isSafeInteger(record.count) || Number(record.count) <= 0\n || !Number.isSafeInteger(record.mintedAt) || !Number.isSafeInteger(record.expiresAt)) return undefined;\n return {\n id: record.id,\n from: record.from,\n count: record.count as number,\n mintedAt: record.mintedAt as number,\n expiresAt: record.expiresAt as number,\n used: 0,\n };\n}\n\n/** The engine ids `from + offset \u2026`, spelled exactly as `Store::replay_slice_ids` spells them. */\nexport function sliceIds(grant: Pick<OutboxGrant, \"from\" | \"count\">, offset: number, count: number): string[] {\n const match = ENGINE_ID.exec(grant.from);\n if (!match || count <= 0 || offset < 0 || offset + count > grant.count) return [];\n const namespace = match[1]!;\n const first = BigInt(`0x${match[2]!}`) + BigInt(offset);\n const ids: string[] = [];\n for (let index = 0; index < count; index += 1) {\n ids.push(`s2id-${namespace}-${(first + BigInt(index)).toString(16).padStart(16, \"0\")}`);\n }\n return ids;\n}\n\nexport function intentName(grant: string, offset: number): string {\n return `${grant}:${offset}`;\n}\n\nexport function settledEntry(entry: OutboxEntry, state: OutboxState, response: unknown, now: number): OutboxEntry {\n const { response: _response, ...rest } = entry;\n return { ...rest, state, ...(response === undefined ? {} : { response }), updatedAt: now };\n}\n\nexport interface EnqueueInput {\n op: string;\n args: unknown;\n issuedSeq: number;\n trace?: OutboxTrace;\n}\n\n/** The twin's run over held rows for the slice it was handed: the overlay and the trace land with the entry. */\nexport interface EnqueuePrediction {\n predicted: boolean;\n overlay: OverlayRow[];\n trace: OutboxTrace;\n /** Maintained targets the overlay intentionally omits (LLP 1012 \u00A77); recorded on the entry when non-empty. */\n omitted?: string[];\n}\n\nexport interface OutboxLedgerOptions {\n now(): number;\n fenceMs: number;\n}\n\nexport class OutboxLedger {\n private readonly listeners = new Set<() => void>();\n /** A successful resume renews trust without changing the server-minted grant's age. */\n private resumedAt?: number;\n /** Runtime lifecycle, advanced synchronously on open, seal, wipe, reset, or close. */\n private trustGeneration = 0;\n /**\n * Grant custody is one critical section: a read of the grant's cursor and the\n * swap that advances it never interleave with another enqueue or adoption, so\n * two overlapping writes can never mint the same slice.\n */\n private tail: Promise<void> = Promise.resolve();\n private fenceTimer?: ReturnType<typeof setTimeout>;\n private fenceProbe = 0;\n\n constructor(private readonly store: RangeStore, private readonly options: OutboxLedgerOptions) {}\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n this.armFence();\n return () => {\n this.listeners.delete(listener);\n if (this.listeners.size === 0) this.close();\n };\n }\n\n notify(): void {\n this.armFence();\n for (const listener of [...this.listeners]) {\n try { listener(); } catch { /* observers cannot break custody */ }\n }\n }\n\n close(): void {\n this.fenceProbe += 1;\n clearTimeout(this.fenceTimer);\n }\n\n /** Readiness changes with time even when the outbox has no entries to push. */\n private armFence(): void {\n this.close();\n if (!this.listeners.size) return;\n const probe = this.fenceProbe;\n void this.grant().then((grant) => {\n if (probe !== this.fenceProbe || !grant) return;\n const remaining = Math.min(grant.expiresAt, this.trustEndsAt(grant) + 1) - this.options.now();\n if (remaining <= 0) return;\n this.fenceTimer = setTimeout(() => this.notify(), Math.min(remaining, 2_147_483_647));\n // A readiness observer must not keep a headless process alive for days.\n (this.fenceTimer as { unref?: () => void }).unref?.();\n }, () => undefined); // Sealed custody has no usable grant; ready() reports false.\n }\n\n entries(): Promise<OutboxEntry[]> {\n return this.store.outbox.all();\n }\n\n async queued(): Promise<OutboxEntry[]> {\n return (await this.entries()).filter((entry) => entry.state === \"queued\");\n }\n\n grant(): Promise<OutboxGrant | undefined> {\n return this.store.outbox.grant();\n }\n\n async grantById(id: string): Promise<OutboxGrant | undefined> {\n return (await this.store.outbox.grants()).find((grant) => grant.id === id);\n }\n\n /** A fresh grant replaces the consumption target; older grants stay for the intents that name them. */\n adopt(grant: OutboxGrant): Promise<void> {\n return this.serial(async () => {\n const held = await this.grantById(grant.id);\n if (held) {\n await this.store.commit({ grants: { current: grant.id } });\n this.notify();\n return;\n }\n const stale = (await this.store.outbox.grants())\n .filter((item) => item.id !== grant.id)\n .map((item) => item.id);\n const queued = new Set((await this.queued()).map((entry) => entry.grant));\n await this.store.commit({\n grants: { put: [grant], current: grant.id, remove: stale.filter((id) => !queued.has(id)) },\n });\n this.notify();\n });\n }\n\n /**\n * Persists the program's write bounds (each op's `maxNewIds`) beside the grants,\n * on the same tail as enqueue, so an enqueue issued after the program loaded\n * always sees the bound it certified. The certified program itself rides the\n * same swap when given, so a cold start with the network cut evaluates and\n * prices from custody, never from a fallback (LLP 1012 \u00A77, \u00A78).\n */\n recordBounds(bounds: Record<string, number>, programs?: Record<string, unknown>): Promise<void> {\n for (const [op, bound] of Object.entries(bounds)) {\n if (!Number.isSafeInteger(bound) || bound < 0) throw new TypeError(`write bound for ${op} must be a non-negative integer`);\n }\n return this.serial(async () => {\n await this.store.commit({ bounds, ...(programs === undefined ? {} : { programs: programs as never }) });\n this.notify();\n });\n }\n\n /** Grant-only without an op; with one, probes the exact slice enqueue would need. */\n async ready(op?: string): Promise<boolean> {\n const grant = await this.grant();\n // The fence disables prediction and replay, not enqueue: a grant past it\n // still answers ready (`fence()` reports the crossing); an expired one does not.\n if (!grant || this.expired(grant)) return false;\n if (op === undefined) return true;\n const maxNewIds = (await this.store.outbox.bounds())[op];\n return maxNewIds !== undefined && grant.used + 1 + maxNewIds <= grant.count;\n }\n\n /**\n * Every outbox write shares this tail: enqueue, adoption, bounds, dismiss,\n * and \u2014 through the runtime \u2014 settlements and the predictions they drop, so\n * a settlement never interleaves with the enqueue that reads the grant.\n */\n write<T>(action: () => Promise<T>): Promise<T> {\n return this.serial(action);\n }\n\n // @ref LLP 1012#7-writes-offline \u2014 the fence bounds trust, never custody: a\n // grant older than fenceMs is past it unless this partition resumed\n // successfully after the crossing. The grant's own expiry is a separate\n // readiness fact (`expired`) that no resume renews.\n pastFence(grant: Pick<OutboxGrant, \"mintedAt\">): boolean {\n const crossedAt = grant.mintedAt + this.options.fenceMs;\n return this.options.now() > crossedAt && !this.resumedSince(crossedAt);\n }\n\n /** The server-minted grant's own lifetime; a resume renews fence trust, not the grant. */\n expired(grant: Pick<OutboxGrant, \"expiresAt\">): boolean {\n return this.options.now() >= grant.expiresAt;\n }\n\n /** When time alone next changes `fence()`: the crossing, or the lapse of a resume's renewed trust. */\n private trustEndsAt(grant: Pick<OutboxGrant, \"mintedAt\">): number {\n const crossedAt = grant.mintedAt + this.options.fenceMs;\n return this.resumedAt !== undefined && this.resumedAt >= crossedAt ? this.resumedAt + this.options.fenceMs : crossedAt;\n }\n\n private resumedSince(at: number): boolean {\n return this.resumedAt !== undefined && this.resumedAt >= at\n && this.options.now() - this.resumedAt <= this.options.fenceMs;\n }\n\n /** Trust belongs to this open partition and session, never to the next one. */\n resetTrust(): void {\n this.trustGeneration += 1;\n this.resumedAt = undefined;\n this.notify();\n }\n\n /** Capture before a resume starts; this is independent of the program generation. */\n get generation(): number { return this.trustGeneration; }\n\n /** A newer consumption grant cannot authorize work queued under an older one. */\n async canReplay(entry: OutboxEntry): Promise<boolean> {\n if (entry.reason === \"fence\" && !this.resumedSince(entry.createdAt)) return false;\n const grant = await this.grantById(entry.grant);\n // Without the original grant's trust facts only a subsequent resume can\n // authorize sending; the owner still judges the grant and the intent.\n return grant ? !this.pastFence(grant) : this.resumedSince(entry.createdAt);\n }\n\n async fence(): Promise<\"inside\" | \"past\"> {\n for (const entry of await this.queued()) {\n if (!(await this.canReplay(entry))) return \"past\";\n }\n const grant = await this.grant();\n return grant && this.pastFence(grant) ? \"past\" : \"inside\";\n }\n\n /** The owner re-authorized this partition; old intents may now replay for the server to judge. */\n resumeSucceeded(generation: number): boolean {\n // Grant persistence can finish after a seal has already invalidated trust.\n if (generation !== this.trustGeneration) return false;\n this.resumedAt = this.options.now();\n this.notify();\n return true;\n }\n\n // @ref LLP 1012#7-writes-offline \u2014 the first id names the intent; the rest\n // are the program's `new` envelope in order, as many as the certificate's\n // persisted write bound allows. No bound, or no remaining ids, is a refusal,\n // never a silent reuse or a guessed reservation.\n enqueue(input: EnqueueInput, predict?: (ids: string[]) => Promise<EnqueuePrediction>): Promise<OutboxEntry> {\n return this.serial(async () => {\n const grant = await this.grant();\n if (!grant) {\n throw new OutboxRefusal(\n \"E_OFFLINE_ID_BLOCK\",\n \"this device holds no replay grant; log in, or drain a query online, before writing\",\n \"client.outbox.enqueue\",\n \"resume as this principal for a grant (a login, or a query with { drain: true } reaching its watermark), then send again\",\n );\n }\n const maxNewIds = (await this.store.outbox.bounds())[input.op];\n if (maxNewIds === undefined) {\n throw new OutboxRefusal(\n \"E_OFFLINE_ID_BLOCK\",\n `the write bound for ${input.op} is unknown on this device: its certificate was never recorded here, so the slice size cannot be priced`,\n \"client.outbox.enqueue\",\n \"reach the owner once so /api/program is recorded, then enqueue a new intent\",\n );\n }\n const count = 1 + maxNewIds;\n if (grant.used + count > grant.count) {\n throw new OutboxRefusal(\n \"E_OFFLINE_ID_BLOCK\",\n `the replay grant has ${grant.count - grant.used} ids left and this write needs ${count}`,\n \"client.outbox.enqueue\",\n \"resume online for a fresh grant, then enqueue a new intent\",\n );\n }\n const ids = sliceIds(grant, grant.used, count);\n // @ref LLP 1012#7-writes-offline \u2014 the twin runs the mutation with the\n // slice as its `new` envelope, so the prediction and the commit mint the\n // same ids; the overlay and the trace land in the entry's own swap.\n // The fence bounds local trust, not custody: keep the write, but do not\n // predict it until a successful resume has renewed trust in this runtime.\n const pastFence = this.pastFence(grant);\n const prediction = predict === undefined || pastFence ? undefined : await predict(ids);\n const now = this.options.now();\n const entry: OutboxEntry = {\n intent: intentName(grant.id, grant.used),\n grant: grant.id,\n offset: grant.used,\n count,\n ids,\n op: input.op,\n args: structuredClone(input.args),\n issuedSeq: input.issuedSeq,\n state: \"queued\",\n ...(prediction?.predicted ? { predicted: true } : {}),\n ...(pastFence ? { predicted: false, reason: \"fence\" as const } : {}),\n ...(prediction?.predicted && prediction.omitted !== undefined && prediction.omitted.length > 0 ? { omitted: [...prediction.omitted] } : {}),\n // No trusted prediction means no trace OCC: the program's own\n // requirements (for example baseBody = body) judge this write.\n trace: pastFence ? emptyTrace() : prediction?.trace ?? input.trace ?? emptyTrace(),\n createdAt: now,\n updatedAt: now,\n };\n await this.store.commit({\n grants: { put: [{ ...grant, used: grant.used + count }] },\n outbox: { put: [entry] },\n ...(prediction?.predicted ? { overlay: { put: { [entry.intent]: prediction.overlay } } } : {}),\n });\n this.notify();\n return (await this.store.outbox.get(entry.intent)) ?? entry;\n });\n }\n\n private serial<T>(action: () => Promise<T>): Promise<T> {\n const run = this.tail.then(action);\n this.tail = run.then(() => undefined, () => undefined);\n return run;\n }\n\n settle(entry: OutboxEntry, state: OutboxState, response?: unknown): OutboxEntry {\n return settledEntry(entry, state, response, this.options.now());\n }\n\n /** Removes a settled entry; a queued intent is never dismissed. */\n dismiss(intent: string): Promise<void> {\n return this.serial(async () => {\n const entry = await this.store.outbox.get(intent);\n if (!entry || entry.state === \"queued\") return;\n await this.store.commit({ outbox: { remove: [intent] } });\n this.notify();\n });\n }\n}\n\n/** The replay envelope for one queued intent, byte-stable across retries. */\nexport function replayEnvelope(entry: OutboxEntry): {\n op: string;\n args: unknown;\n replay: { grant: string; offset: number; count: number; intent: string; trace: OutboxTrace };\n} {\n return {\n op: entry.op,\n args: entry.args,\n replay: {\n grant: entry.grant,\n offset: entry.offset,\n count: entry.count,\n intent: entry.intent,\n trace: entry.trace ?? emptyTrace(),\n },\n };\n}\n\nexport type { OutboxEntry, OutboxGrant, OutboxState, OutboxTrace, StoreDelivery };\n", "// @ref LLP 1006#9b-bytes-on-the-device-author-ruling-2026-09-04 \u2014 bytes are cached under the owning row's lease, or not at all.\n// @ref LLP 1012#9-asset-bytes-on-the-device \u2014 the ByteCache sits beside the range store and joins its swap; view-once is excluded at view time.\n\nimport type { RangeStore, RowRef, StoredRow } from \"./range-store.js\";\n\n/** One cached rendition: what a component fetched at the width it asked for. */\nexport interface ByteCacheEntry {\n assetId: string;\n width: number | null;\n size: number;\n type: string;\n /** Logical last-read stamp on the range store's clock; the LRU orders by it. */\n lastRead: number;\n}\n\n/** A view-once row that was viewed, with the asset ids it carried at that moment. */\nexport interface ViewedRecord { at: number; assets: string[] }\n\nexport interface ByteCachePut { assetId: string; width: number | null; bytes: Uint8Array; type: string }\nexport interface ByteSwapRequest { put?: ByteCachePut[]; touch?: string[]; ceiling?: number }\n\n/** What a carrier persists beside the state in the same swap: payloads to write and keys to drop. */\nexport interface ByteDelta { put: Array<{ key: string; bytes: Uint8Array }>; remove: string[] }\n\nexport interface ByteCacheStatus { entries: ByteCacheEntry[]; totalBytes: number; viewed: RowRef[] }\nexport interface AssetBytes { bytes: Uint8Array; type: string }\n/** An opaque identity held by one mounted viewing instance, never shared by asset id. */\nexport interface AssetFetchOptions { signal?: AbortSignal; viewing?: object }\nexport type ByteCacheOutcome = \"cached\" | \"viewed\" | \"unleased\" | \"refused\";\nexport type ViewOncePredicate = (table: string, row: Record<string, unknown>) => boolean;\n\n/** The byte surface the swap engine exposes beside `RangeStore`; only the carriers implement it. */\nexport interface ByteCarrier {\n readBytes(assetId: string, width: number | null): Promise<{ bytes: Uint8Array; type: string } | undefined>;\n bytes(): Promise<ByteCacheStatus>;\n rowsReferencing(assetId: string): Promise<StoredRow[]>;\n viewedAsset(assetId: string): Promise<boolean>;\n viewedRows(): Promise<RowRef[]>;\n /** LRU read stamps, coalesced: stamped in memory now, persisted by the next swap. */\n touchBytes(keys: string[]): Promise<void>;\n commit(swap: { bytes?: ByteSwapRequest; viewed?: RowRef[] }): Promise<void>;\n}\n\n/** The client-facing byte cache: `client.assetCache` when the client has an offline store. */\nexport interface AssetCache {\n /** Session custody changes revoke mounted object URLs. */\n subscribeCustody?(listener: () => void): () => void;\n getCustody?(): number;\n getBytes(assetId: string, width: number | null, viewing?: object): Promise<AssetBytes | undefined>;\n putBytes(assetId: string, width: number | null, value: AssetBytes, viewing?: object): Promise<ByteCacheOutcome>;\n canServe(assetId: string, viewing?: object): Promise<boolean>;\n /** The held bytes for an asset at a width, or nothing: never fetched, evicted with its row, viewed, or sealed. */\n get(assetId: string, width: number | null, viewing?: object): Promise<Blob | undefined>;\n /** True once a view-once row carrying this asset was viewed on this partition. */\n viewed(assetId: string): Promise<boolean>;\n /** True while a held row carrying this asset is view-once (`offline.viewOnce`) and not yet viewed. */\n viewOnce(assetId: string): Promise<boolean>;\n /** Marks the held view-once rows carrying this asset viewed: what a player calls when playback starts. */\n markViewed(assetId: string): Promise<boolean>;\n status(): Promise<ByteCacheStatus>;\n}\n\nexport const ASSET_ID = /^s2id-[0-9a-f]{32}-[0-9a-f]{16}$/;\nconst SESSION_VIEW_LIMIT = 8;\n\nexport function byteKey(assetId: string, width: number | null): string {\n return width === null ? assetId : `${assetId}.w${width}`;\n}\n\nfunction rowKey(ref: RowRef): string {\n return `${ref.table}\\u0000${ref.id}`;\n}\n\nfunction positive(value: unknown): boolean {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\n\n/** The closed asset record shape (LLP 1006 \u00A71): exactly id, width, height, and duration for video. */\nexport function assetRecordId(value: unknown): string | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record).sort().join(\",\");\n if (keys !== \"height,id,width\" && keys !== \"duration,height,id,width\") return undefined;\n if (typeof record.id !== \"string\" || !ASSET_ID.test(record.id)) return undefined;\n if (!positive(record.width) || !positive(record.height)) return undefined;\n if (\"duration\" in record && !positive(record.duration)) return undefined;\n return record.id;\n}\n\nexport function assetIdsIn(value: unknown, output = new Set<string>()): Set<string> {\n const id = assetRecordId(value);\n if (id !== undefined) output.add(id);\n else if (Array.isArray(value)) for (const item of value) assetIdsIn(item, output);\n else if (value && typeof value === \"object\") {\n for (const item of Object.values(value as Record<string, unknown>)) assetIdsIn(item, output);\n }\n return output;\n}\n\n/** Assets a held delivery references: through pooled rows and through inline answer data. */\nexport function leasedAssets(rows: Iterable<StoredRow>, answers: Iterable<{ data?: unknown }>): Set<string> {\n const leased = new Set<string>();\n for (const row of rows) assetIdsIn(row.row, leased);\n for (const answer of answers) if (answer.data !== undefined) assetIdsIn(answer.data, leased);\n return leased;\n}\n\nexport interface ByteSwapState {\n clock: number;\n rows: Record<string, StoredRow>;\n assets: Record<string, ByteCacheEntry>;\n viewed: Record<string, ViewedRecord>;\n}\n\n/**\n * View-once is tracked per row, never per asset id: an asset is refused only while\n * every held row carrying it was viewed. A row that is not viewed keeps its lease,\n * so one shared id never poisons an ordinary row's bytes.\n */\nexport function viewedOnlyAssets(state: Pick<ByteSwapState, \"rows\" | \"viewed\">): Set<string> {\n const viewed = new Set<string>();\n for (const record of Object.values(state.viewed)) for (const id of record.assets) viewed.add(id);\n if (viewed.size === 0) return viewed;\n for (const [key, row] of Object.entries(state.rows)) {\n if (state.viewed[key]) continue;\n for (const id of assetIdsIn(row.row)) viewed.delete(id);\n }\n return viewed;\n}\n\nfunction checkedPut(put: ByteCachePut): void {\n if (!put || typeof put !== \"object\" || typeof put.assetId !== \"string\" || !ASSET_ID.test(put.assetId)) {\n throw new TypeError(\"byte cache put must name an engine-minted asset id\");\n }\n if (put.width !== null && !positive(put.width)) throw new TypeError(\"byte cache put width must be null or a positive integer\");\n if (!(put.bytes instanceof Uint8Array)) throw new TypeError(\"byte cache put bytes must be a Uint8Array\");\n if (typeof put.type !== \"string\") throw new TypeError(\"byte cache put type must be a string\");\n}\n\n/**\n * The byte half of one swap, run after the row rules settled `state.rows`: viewed\n * marks, the lease purge, read touches, puts, then the ceiling. Returns what the\n * carrier must write and drop in the same transaction.\n */\nexport function applyByteSwap(\n state: ByteSwapState,\n swap: { bytes?: ByteSwapRequest; viewed?: RowRef[] },\n leased: Set<string>,\n): ByteDelta {\n const delta: ByteDelta = { put: [], remove: [] };\n for (const ref of swap.viewed ?? []) {\n if (!ref || typeof ref.table !== \"string\" || typeof ref.id !== \"string\") throw new TypeError(\"viewed rows must be row references\");\n const key = rowKey(ref);\n const assets = new Set(state.viewed[key]?.assets ?? []);\n assetIdsIn(state.rows[key]?.row, assets);\n state.viewed[key] = { at: Date.now(), assets: [...assets] };\n }\n const viewedAssets = viewedOnlyAssets(state);\n for (const [key, entry] of Object.entries(state.assets)) {\n if (leased.has(entry.assetId) && !viewedAssets.has(entry.assetId)) continue;\n delete state.assets[key];\n delta.remove.push(key);\n }\n for (const key of swap.bytes?.touch ?? []) {\n const entry = state.assets[key];\n if (entry) entry.lastRead = ++state.clock;\n }\n const ceiling = swap.bytes?.ceiling ?? Number.POSITIVE_INFINITY;\n if (!(ceiling > 0)) throw new TypeError(\"byte cache ceiling must be positive\");\n for (const put of swap.bytes?.put ?? []) {\n checkedPut(put);\n if (!leased.has(put.assetId) || viewedAssets.has(put.assetId)) continue;\n const size = put.bytes.byteLength;\n if (size === 0 || size > ceiling) continue;\n const key = byteKey(put.assetId, put.width);\n state.assets[key] = { assetId: put.assetId, width: put.width, size, type: put.type, lastRead: ++state.clock };\n delta.put.push({ key, bytes: put.bytes });\n }\n let total = Object.values(state.assets).reduce((sum, entry) => sum + entry.size, 0);\n while (total > ceiling) {\n const [key, victim] = Object.entries(state.assets)\n .reduce((least, item) => item[1].lastRead < least[1].lastRead ? item : least);\n delete state.assets[key];\n delta.remove.push(key);\n total -= victim.size;\n }\n delta.put = delta.put.filter((item) => state.assets[item.key] !== undefined);\n delta.remove = [...new Set(delta.remove)].filter((key) => state.assets[key] === undefined);\n return delta;\n}\n\nfunction isByteCarrier(store: RangeStore): store is RangeStore & ByteCarrier {\n const candidate = store as Partial<ByteCarrier>;\n return typeof candidate.readBytes === \"function\"\n && typeof candidate.bytes === \"function\"\n && typeof candidate.rowsReferencing === \"function\"\n && typeof candidate.viewedAsset === \"function\"\n && typeof candidate.viewedRows === \"function\"\n && typeof candidate.touchBytes === \"function\";\n}\n\nfunction checkedAssetId(assetId: string): string {\n if (typeof assetId !== \"string\" || !ASSET_ID.test(assetId)) throw new TypeError(\"asset id must be engine-minted\");\n return assetId;\n}\n\n/**\n * Bytes a component fetched, kept under the owning row's lease in the same\n * partition as the rows. A store without a byte carrier caches nothing.\n */\nexport class ByteCache implements AssetCache {\n /**\n * View-once bytes stay renderable inside the instance that viewed them, keyed by\n * the partition that viewed them; nothing here is durable. The runtime forgets it\n * on seal, wipe, partition change, and close, and `get` serves it only under the\n * custody the carrier path applies: this partition, unsealed, the row still held.\n */\n private readonly session = new Map<string, { viewing: object; value: AssetBytes }>();\n private partition?: string;\n private custody = 0;\n private readonly custodyListeners = new Set<() => void>();\n readonly getCustody = () => this.custody;\n readonly subscribeCustody = (listener: () => void) => {\n this.custodyListeners.add(listener);\n return () => { this.custodyListeners.delete(listener); };\n };\n private admissions: Promise<unknown> = Promise.resolve();\n\n constructor(\n readonly store: RangeStore,\n private readonly options: { maxAssetBytes: number; viewOnce?: ViewOncePredicate },\n ) {}\n\n /** The partition the runtime opened; a change drops every session blob. */\n bind(partition: string | undefined): void {\n if (this.partition !== partition) this.forget();\n this.partition = partition;\n }\n\n /** Drops the session blobs: seal, close, and wipe call this. */\n forget(): void {\n this.custody++;\n this.session.clear();\n for (const listener of this.custodyListeners) listener();\n }\n\n async get(assetId: string, width: number | null, viewing?: object): Promise<Blob | undefined> {\n const held = await this.getBytes(assetId, width, viewing);\n return held ? new Blob([held.bytes as BlobPart], { type: held.type }) : undefined;\n }\n\n // @ref LLP 1013#2-decisions \u2014 native paths exchange bytes, never RN Blobs.\n async getBytes(assetId: string, width: number | null, viewing?: object): Promise<AssetBytes | undefined> {\n const custody = this.custody;\n checkedAssetId(assetId);\n const store = this.carrier();\n if (!store) return undefined;\n // `viewedAsset` is false on a sealed partition, so the session is never consulted past a seal.\n if (await store.viewedAsset(assetId)) {\n const held = await this.sessionBytes(assetId, width, viewing);\n return custody === this.custody ? held : undefined;\n }\n if (await this.viewOnce(assetId)) return undefined;\n const held = await store.readBytes(assetId, width);\n if (!held) return undefined;\n // The touch is the LRU stamp, coalesced into the next swap; a closing partition may refuse it.\n await store.touchBytes([byteKey(assetId, width)]).catch(() => undefined);\n return await this.canServe(assetId, viewing) && custody === this.custody ? held : undefined;\n }\n\n /** Completion fence for both a cached source and an uncached ordinary source. */\n async canServe(assetId: string, viewing?: object): Promise<boolean> {\n const custody = this.custody;\n const store = this.carrier();\n if (!store) return false;\n const rows = await store.rowsReferencing(assetId);\n if (rows.length === 0) return false;\n const viewed = await store.viewedAsset(assetId);\n const once = rows.every((row) => this.options.viewOnce?.(row.table, row.row) === true);\n const owns = (!viewed && !once) || [...this.session.entries()].some(([key, entry]) =>\n entry.viewing === viewing && key.startsWith(this.sessionKey(assetId)));\n return custody === this.custody && owns;\n }\n\n async viewed(assetId: string): Promise<boolean> {\n checkedAssetId(assetId);\n const store = this.carrier();\n return store ? store.viewedAsset(assetId) : false;\n }\n\n async viewOnce(assetId: string): Promise<boolean> {\n checkedAssetId(assetId);\n const store = this.carrier();\n if (!store) return false;\n const once = await this.viewOnceRows(assetId);\n if (once.length === 0) return false;\n const viewed = new Set((await store.viewedRows()).map(rowKey));\n return once.some((ref) => !viewed.has(rowKey(ref)));\n }\n\n async markViewed(assetId: string): Promise<boolean> {\n checkedAssetId(assetId);\n const store = this.carrier();\n if (!store) return false;\n const once = await this.viewOnceRows(assetId);\n if (once.length === 0) return false;\n await store.commit({ viewed: once });\n return true;\n }\n\n /** After a network fetch: cache under the row's lease, or mark the view-once rows viewed and cache nothing. */\n async put(assetId: string, width: number | null, blob: Blob, viewing?: object): Promise<ByteCacheOutcome> {\n const custody = this.custody;\n const bytes = new Uint8Array(await blob.arrayBuffer());\n if (custody !== this.custody) return \"refused\";\n return this.putBytes(assetId, width, { bytes, type: blob.type }, viewing);\n }\n\n putBytes(assetId: string, width: number | null, value: AssetBytes, viewing?: object): Promise<ByteCacheOutcome> {\n const custody = this.custody;\n // Two concurrent consumers may fetch; only one can acquire the viewing allowance.\n const result = this.admissions.then(() => custody === this.custody\n ? this.admit(assetId, width, value, viewing) : \"refused\" as const);\n this.admissions = result.catch(() => undefined);\n return result;\n }\n\n private async admit(assetId: string, width: number | null, value: AssetBytes, viewing?: object): Promise<ByteCacheOutcome> {\n const custody = this.custody;\n checkedAssetId(assetId);\n checkedPut({ assetId, width, ...value });\n const store = this.carrier();\n if (!store) return \"unleased\";\n if (await store.viewedAsset(assetId)) return \"refused\";\n const rows = await store.rowsReferencing(assetId);\n if (rows.length === 0 || custody !== this.custody) return \"unleased\";\n const once = rows\n .filter((row) => this.options.viewOnce?.(row.table, row.row) === true)\n .map(({ table, id }) => ({ table, id }));\n // Per row: the view-once rows are marked viewed; an ordinary row sharing the id still leases the bytes.\n if (once.length > 0 && !viewing) return \"refused\";\n if (once.length === rows.length) {\n try {\n await store.commit({ viewed: once });\n } catch {\n return \"refused\";\n }\n if (custody !== this.custody || (await store.rowsReferencing(assetId)).length === 0\n || !await store.viewedAsset(assetId) || custody !== this.custody) return \"unleased\";\n if (this.session.size >= SESSION_VIEW_LIMIT) this.session.delete(this.session.keys().next().value!);\n if (viewing) this.session.set(this.sessionKey(assetId, width), { viewing, value: { bytes: value.bytes.slice(), type: value.type } });\n return \"viewed\";\n }\n try {\n await store.commit({\n ...(once.length === 0 ? {} : { viewed: once }),\n bytes: { put: [{ assetId, width, ...value }], ceiling: this.options.maxAssetBytes },\n });\n } catch {\n return \"refused\";\n }\n const status = await store.bytes();\n return custody === this.custody && status.entries.some((entry) => entry.assetId === assetId && entry.width === width) ? \"cached\" : \"refused\";\n }\n\n async status(): Promise<ByteCacheStatus> {\n const store = this.carrier();\n return store ? store.bytes() : { entries: [], totalBytes: 0, viewed: [] };\n }\n\n /** Nothing is served, marked, or cached without an open partition and a byte carrier. */\n private carrier(): (RangeStore & ByteCarrier) | undefined {\n return this.partition !== undefined && isByteCarrier(this.store) ? this.store : undefined;\n }\n\n private sessionKey(assetId: string, width?: number | null): string {\n return `${this.partition}\\u0000${assetId}\\u0000${width === undefined ? \"\" : width}`;\n }\n\n /** The session blob, only while the row that was viewed is still held on this partition. */\n private async sessionBytes(assetId: string, width: number | null, viewing?: object): Promise<AssetBytes | undefined> {\n const store = this.carrier();\n if (!store) return undefined;\n const key = this.sessionKey(assetId, width);\n const blob = this.session.get(key);\n if (!viewing || blob?.viewing !== viewing) return undefined;\n if ((await store.rowsReferencing(assetId)).length > 0) return blob.value;\n this.session.delete(key);\n return undefined;\n }\n\n private async viewOnceRows(assetId: string): Promise<RowRef[]> {\n const store = this.carrier();\n if (!store) return [];\n const rows = await store.rowsReferencing(assetId);\n return rows\n .filter((row) => this.options.viewOnce?.(row.table, row.row) === true)\n .map(({ table, id }) => ({ table, id }));\n }\n}\n", "/** The store's answer and cursor-chain keys share one shape-preserving encoding. */\nexport function canonical(value: unknown): string {\n if (value === undefined) return \"undefined\";\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n return `{${Object.keys(value as object).sort().map((key) =>\n `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`).join(\",\")}}`;\n}\n", "// @ref LLP 1012#7-writes-offline \u2014 cursor identity is not order. Only held,\n// post-commit next links prove progress; explicit negatives settle deletions.\nimport type { StoredAnswer, WatermarkRecord } from \"./range-store.js\";\nimport { canonical } from \"./canonical.js\";\n\nexport interface OverlayWatermark extends Pick<WatermarkRecord, \"op\" | \"args\" | \"watermark\"> {\n cursorArg: string;\n /** Last proven progress, and positions already consumed, survive a remount/reopen. */\n progress?: string;\n consumed?: string[];\n}\n\nfunction object(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** Each page keeps the name used when it was filed, including a pre-manifest c. */\nexport function pagePosition(page: Pick<StoredAnswer, \"op\" | \"args\" | \"cursorArg\">, mark: OverlayWatermark): string | null | undefined {\n if (page.op !== mark.op || !object(page.args) || !object(mark.args)) return undefined;\n const cursor = page.cursorArg ?? mark.cursorArg;\n const base = { ...mark.args };\n const args = { ...page.args };\n // Before the manifest, a caller can already pass { after: null } while the\n // recorded name is c. Only the now-known cursor substitutes for that missing\n // field; other nullable/string arguments remain part of the query identity.\n delete base[Object.hasOwn(base, mark.cursorArg) ? mark.cursorArg : cursor];\n delete args[cursor];\n if (canonical(base) !== canonical(args)) return undefined;\n const position = page.args[cursor];\n return position === null || typeof position === \"string\" ? position : undefined;\n}\n\n/**\n * An ordered path starting at the commit snapshot, never inferred from a newer\n * seq or a different opaque string. A cycle, ambiguity, or missing link ends\n * the proven prefix. The caller supplies only non-empty, intact held pages.\n */\nexport function cursorChain(pages: StoredAnswer[], mark: OverlayWatermark, committedSeq: number): string[] {\n const links = new Map<string | null, string | null>();\n for (const page of pages) {\n if ((page.nextSeq ?? page.seq) < committedSeq || typeof page.next !== \"string\") continue;\n const position = pagePosition(page, mark);\n if (position === undefined) continue;\n // Conflicting links quarantine only this position, including off-path ones.\n links.set(position, links.has(position) && links.get(position) !== page.next ? null : page.next);\n }\n const seen = new Set<string | null>([mark.watermark]);\n const chain: string[] = [];\n let position = mark.watermark;\n while (links.has(position)) {\n const next = links.get(position);\n if (next == null || seen.has(next)) break;\n seen.add(next);\n chain.push(next);\n position = next;\n }\n return chain;\n}\n\n/** A re-mark can consume progress only once and only beyond the last proven mark. */\nexport function advanceOverlay(mark: OverlayWatermark, tail: WatermarkRecord | undefined, chain: string[]): boolean {\n if (!tail || pagePosition({ ...tail, args: object(tail.args)\n ? { ...tail.args, [tail.cursorArg ?? mark.cursorArg]: tail.watermark } : tail.args }, mark) === undefined) return false;\n if (typeof tail.watermark !== \"string\" || (mark.consumed ?? []).includes(tail.watermark)) return false;\n const at = chain.indexOf(tail.watermark);\n if (mark.progress !== undefined && !chain.includes(mark.progress)) {\n // A page can grow or be evicted. Re-anchor at the nearest surviving consumed\n // position (or the snapshot root), without forgetting what already counted.\n mark.progress = [...(mark.consumed ?? [])].reverse().find((position) => chain.includes(position));\n }\n const previous = mark.progress === undefined ? -1 : chain.indexOf(mark.progress);\n if (at < 0 || at <= previous) return false;\n mark.progress = tail.watermark;\n mark.consumed = [...new Set([...(mark.consumed ?? []), ...chain.slice(0, at + 1)])];\n return true;\n}\n", "// @ref LLP 1012#4-the-range-store \u2014 every carrier persists the same per-principal answer/range model.\n// @ref LLP 1012#5-retention-revocation-and-the-fence \u2014 eviction is decided once over a complete swap.\n// @ref LLP 1012#9-asset-bytes-on-the-device \u2014 asset bytes leave in the same commit as the row whose lease held them.\n\nimport {\n applyByteSwap,\n assetIdsIn,\n byteKey,\n leasedAssets,\n viewedOnlyAssets,\n type ByteCacheEntry,\n type ByteCacheStatus,\n type ByteDelta,\n type ByteSwapRequest,\n type ViewedRecord,\n} from \"./byte-cache.js\";\n\nimport { advanceOverlay, cursorChain, pagePosition, type OverlayWatermark } from \"./overlay-retirement.js\";\nimport { canonical } from \"./canonical.js\";\n\nexport type PrincipalPartition = string;\nexport type RetentionPolicy = \"until-revoked\" | \"delivered-history\";\n\nexport interface RowRef { table: string; id: string }\nexport interface StoredRow extends RowRef { row: Record<string, unknown> }\n\nexport interface ReceiptRange {\n site: string;\n table: string;\n index: string;\n prefix: unknown[];\n order: \"Asc\" | \"Desc\";\n take: number;\n after: unknown;\n before: unknown;\n gt: unknown;\n gte: unknown;\n lt: unknown;\n lte: unknown;\n rowIds: string[];\n stop: \"Limit\" | \"Exhausted\";\n absence: boolean;\n haloId?: string;\n ruleHash: string;\n /**\n * Members this page was recorded with that a later swap evicted (LLP 1012 \u00A75):\n * the page's answer is `partial/evicted` from then on, and the twin's\n * drained-prefix rule (\u00A76) no longer counts the page as a link in a complete chain.\n */\n evictedIds?: string[];\n}\n\nexport interface Receipt {\n ranges: ReceiptRange[];\n absences: Array<[table: string, index: string, key: unknown[]]>;\n verdicts: unknown[];\n}\n\nexport interface HeldAnswer<Result = unknown> {\n op: string;\n args: unknown;\n state: \"complete\" | \"capped\" | \"partial\" | \"denied\";\n data?: Result;\n next?: string | null;\n seq: number;\n validator?: string;\n receipt?: Receipt;\n deliveredAt: number;\n retained?: boolean;\n caughtUp?: boolean;\n watermark?: string | null;\n reason?: string;\n rule?: string;\n}\n\nexport interface StoredAnswer extends Omit<HeldAnswer, \"data\"> {\n data?: unknown;\n refs: RowRef[];\n order: number;\n fingerprint?: string;\n /** Cursor argument used when this page was filed, before or after manifest load. */\n cursorArg?: string;\n /** Seq of the delivery that recorded `next`; conditional refreshes cannot renew a link. */\n nextSeq?: number;\n}\n\nexport interface WatermarkRecord {\n op: string;\n args: unknown;\n /** The argument the manifest types as this query's cursor; `c` before the manifest loads. */\n cursorArg?: string;\n watermark: string | null;\n validator?: string;\n generation?: string;\n schemaHash?: string;\n authEpoch?: number;\n updatedAt: number;\n /**\n * Durable position among this partition's drained queries: assigned by the store\n * when the query first records a watermark, kept across every later mark. The\n * lowest order is the log a settlement and a resume name (LLP 1012 \u00A77).\n */\n order?: number;\n}\n\n/** The generation and authority every held envelope of a partition was delivered under. */\nexport interface CoverageFacts {\n generation: string;\n schemaHash: string;\n authEpoch: number;\n}\n\n/** One certified operation as `GET /api/program` serves it: the IR the twin runs and its certificate. */\nexport interface HeldOperation {\n kind: \"query\" | \"mutation\";\n planHash: string;\n ir: unknown;\n certificate: unknown;\n}\n\n// @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 the program\n// custody the evaluator ticket names: the certified IR, certificates, and the\n// schema of one generation, held in the partition so a cold start with the\n// network cut still evaluates and prices from the certificate.\nexport interface HeldProgram {\n generation: string;\n schemaHash: string;\n schema: OfflineSchema & Record<string, unknown>;\n programs: Record<string, HeldOperation>;\n}\n\nexport interface Coverage {\n rows: StoredRow[];\n ranges: ReceiptRange[];\n absences: Receipt[\"absences\"];\n verdicts: unknown[];\n watermarks: WatermarkRecord[];\n /**\n * View-once rows already viewed on this partition: absent from `rows`, listed under\n * `absences` as a `byId` point, and named here so a replay never renders them (LLP 1012 \u00A79).\n */\n viewed?: RowRef[];\n /** Rows a swap evicted (LLP 1012 \u00A75): the twin reports a read of one as `evicted`, not `never-held`. */\n evicted?: RowRef[];\n /** The generation and auth epoch the held coverage was delivered under; absent when nothing is held. */\n facts?: CoverageFacts;\n /**\n * The facts a later delivery arrived under when its generation or schema differ\n * from `facts`: the held answers predate the program the server now runs, so the\n * twin serves nothing from them \u2014 every read is `hydrating` \u2014 until the reset\n * path drops this coverage and rebuilds it under the live generation (LLP 1012 \u00A78).\n */\n superseded?: CoverageFacts;\n /** The newest delivery's time: what an answer the twin computes reports as `stale.since`. */\n deliveredAt?: number;\n}\n\nexport type OutboxState = \"queued\" | \"committed\" | \"rejected\" | \"expired\";\n/** What the twin read when the intent was queued: the replay envelope's `trace` (LLP 1012 \u00A77). */\nexport interface OutboxTrace {\n points: Array<{ table: string; index: string; key: unknown[]; digest: string | null }>;\n verdicts: Array<{ ruleHash: string; inputsDigest: string; result: boolean }>;\n}\n// @ref LLP 1012#7-writes-offline \u2014 one durable intent: its pinned id slice, its\n// bytes, and its terminal response, so a retry is the same envelope.\nexport interface OutboxEntry {\n intent: string;\n grant: string;\n offset: number;\n count: number;\n ids: string[];\n op: string;\n args: unknown;\n issuedSeq: number;\n state: OutboxState;\n response?: unknown;\n predicted?: boolean;\n /** Prediction and its trace were skipped; the program will check this write on the server. */\n reason?: \"fence\";\n /** Engine-owned aggregate targets the prediction's overlay omits by design (the server writes them); absent when none. */\n omitted?: string[];\n trace?: OutboxTrace;\n createdAt: number;\n updatedAt: number;\n /** Durable FIFO position; assigned by the store when absent. */\n order?: number;\n}\n\n/** A principal-bound replay grant plus the client's own consumption cursor. */\nexport interface OutboxGrant {\n id: string;\n from: string;\n count: number;\n mintedAt: number;\n expiresAt: number;\n used: number;\n}\n\nexport interface OutboxStore {\n all(): Promise<OutboxEntry[]>;\n get(intent: string): Promise<OutboxEntry | undefined>;\n put(entry: OutboxEntry): Promise<void>;\n remove(intent: string): Promise<void>;\n /** The grant new intents consume from, if one is held. */\n grant(): Promise<OutboxGrant | undefined>;\n /** Every held grant, including those older queued intents still name. */\n grants(): Promise<OutboxGrant[]>;\n /** Each op's persisted write bound (`maxNewIds`); an enqueue refuses without one. */\n bounds(): Promise<Record<string, number>>;\n /** The prediction overlay by intent: the rows a queued intent's local run wrote, `removed` for a delete. */\n overlay(): Promise<Record<string, OverlayRow[]>>;\n /** The certified programs held for this partition, keyed by generation. */\n programs(): Promise<Record<string, HeldProgram>>;\n}\n\n/** A predicted row: the write's final image, or a `removed` marker for a row the intent deletes. */\nexport interface OverlayRow extends StoredRow { removed?: true }\n\nexport interface StoreDelivery {\n cursorArg?: string;\n op: string;\n args: unknown;\n state: HeldAnswer[\"state\"];\n data?: unknown;\n next?: string | null;\n seq: number;\n validator?: string;\n receipt?: Receipt;\n rows?: StoredRow[];\n deliveredAt?: number;\n reason?: string;\n rule?: string;\n}\n\nexport interface StoreTombstone extends RowRef { seq: number }\nexport interface StoreRefresh {\n op: string;\n args: unknown;\n seq: number;\n validator: string;\n deliveredAt?: number;\n}\n\nexport interface OfflineSchema {\n tables?: Record<string, {\n columns?: Record<string, unknown>;\n indexes?: Record<string, { columns?: string[] }>;\n retain?: RetentionPolicy;\n }>;\n}\n\nexport interface StoreSwap {\n deliveries?: StoreDelivery[];\n refreshes?: StoreRefresh[];\n tombstones?: StoreTombstone[];\n retention?: Record<string, RetentionPolicy>;\n schema?: OfflineSchema;\n watermark?: WatermarkRecord;\n resetCoverage?: boolean;\n /** One validated resume response, including unchanged; never a query re-delivery. */\n resumeSeq?: number;\n dropAnswers?: string[];\n outbox?: { put?: OutboxEntry[]; remove?: string[] };\n /**\n * Byte-cache puts and read touches; they land in the same swap as the rows: one\n * readwrite transaction on IndexedDB, an ordered payload write + state rename with\n * a sweep on open for the Node file carrier.\n */\n bytes?: ByteSwapRequest;\n /** View-once rows viewed now: excluded from every later answer, their bytes never cached. */\n viewed?: RowRef[];\n /** `current` names the grant new intents consume; `null` clears it. */\n grants?: { put?: OutboxGrant[]; current?: string | null; remove?: string[] };\n /** Predicted rows keyed by intent; visible to the twin's local evaluation, never to `answer()` (LLP 1012 \u00A77). */\n overlay?: { put?: Record<string, OverlayRow[]>; remove?: string[] };\n /** The certified programs, replaced whole (one generation is held at a time); custody like the outbox. */\n programs?: Record<string, HeldProgram>;\n /** The facts the swap's envelopes were delivered under; cleared by `resetCoverage`. */\n facts?: CoverageFacts;\n /** A rotation: the facts a refused delivery arrived under; held coverage is superseded until rebuild completion clears it with `null`. */\n superseded?: CoverageFacts | null;\n /**\n * The program's write bounds, replaced whole: what `/api/program` certified each op may\n * mint. Custody like the outbox \u2014 a coverage reset never touches it (LLP 1012 \u00A77).\n */\n bounds?: Record<string, number>;\n}\n\nexport interface RangeStore {\n open(partition: PrincipalPartition): Promise<void>;\n unseal(): Promise<void>;\n seal(): Promise<void>;\n wipe(partition: PrincipalPartition): Promise<void>;\n answer<Result = unknown>(op: string, args: unknown): Promise<HeldAnswer<Result> | undefined>;\n commit(swap: StoreSwap): Promise<void>;\n coverage(): Promise<Coverage>;\n readonly outbox: OutboxStore;\n close?(): Promise<void> | void;\n}\n\nexport interface RangeStoreFactory {\n (): RangeStore;\n readonly carrier?: string;\n}\n\nexport class OfflineStoreFailure extends Error {\n constructor(readonly code: \"E_OFFLINE_CARRIER\" | \"E_OFFLINE_LOCK\", message: string, readonly rewrite?: string) {\n super(message);\n this.name = \"OfflineStoreFailure\";\n }\n}\n\nexport interface PersistedRangeState {\n version: 1;\n sealed: boolean;\n clock: number;\n rows: Record<string, StoredRow>;\n answers: Record<string, StoredAnswer>;\n watermarks: Record<string, WatermarkRecord>;\n outbox: Record<string, OutboxEntry>;\n grants: Record<string, OutboxGrant>;\n currentGrant?: string;\n overlay: Record<string, OverlayRow[]>;\n /** Per committed intent, successful resumes or proven tail advances without its rows. */\n overlayMisses: Record<string, number>;\n /** The commit-time tail snapshot; null after reset until the next drain establishes a new head. */\n overlayWatermarks: Record<string, OverlayWatermark | null>;\n /** Only primary absences and tombstones, scoped to each prediction's ids. */\n overlayNegatives: Record<string, Record<string, { seq: number; source: \"absence\" | \"tombstone\" }>>;\n bounds: Record<string, number>;\n programs: Record<string, HeldProgram>;\n facts?: CoverageFacts;\n superseded?: CoverageFacts;\n negative: Record<string, number>;\n rowSeq: Record<string, number>;\n /** The byte-cache index; payloads live beside the state in the carrier, keyed by `byteKey`. */\n assets: Record<string, ByteCacheEntry>;\n viewed: Record<string, ViewedRecord>;\n}\n\nexport interface RangeStoreBackend {\n readonly carrier: string;\n open(partition: PrincipalPartition): Promise<PersistedRangeState | undefined>;\n /** One carrier transaction: the state, plus the byte payloads to write and the keys to drop. */\n replace(state: PersistedRangeState, bytes: ByteDelta): Promise<void>;\n readBytes?(key: string): Promise<Uint8Array | undefined>;\n wipe(partition: PrincipalPartition): Promise<void>;\n close(): Promise<void> | void;\n}\n\nconst NO_BYTES: ByteDelta = { put: [], remove: [] };\n\nexport function emptyState(): PersistedRangeState {\n return {\n version: 1, sealed: false, clock: 0, rows: {}, answers: {}, watermarks: {}, outbox: {},\n grants: {}, overlay: {}, overlayMisses: {}, overlayWatermarks: {}, overlayNegatives: {}, bounds: {}, programs: {}, negative: {}, rowSeq: {}, assets: {}, viewed: {},\n };\n}\n\nfunction clone<T>(value: T): T {\n return structuredClone(value);\n}\n\nexport function canonicalAnswerKey(op: string, args: unknown): string {\n return `${op}\\u0000${canonical(args === undefined ? args : jsonState(args))}`;\n}\n\nfunction rowKey(ref: RowRef): string {\n return `${ref.table}\\u0000${ref.id}`;\n}\n\nfunction viewedRef(key: string): RowRef {\n const at = key.indexOf(String.fromCharCode(0));\n return { table: key.slice(0, at), id: key.slice(at + 1) };\n}\n\nfunction recordEviction(evictions: Map<string, StoreTombstone>, eviction: StoreTombstone): void {\n const key = rowKey(eviction);\n if ((evictions.get(key)?.seq ?? -1) <= eviction.seq) evictions.set(key, eviction);\n}\n\nexport function rowReference(table: string, id: string): { $row: RowRef } {\n return { $row: { table, id } };\n}\n\nfunction asRowRef(value: unknown): RowRef | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const marker = (value as { $row?: unknown }).$row;\n return marker !== null && typeof marker === \"object\" && !Array.isArray(marker)\n && Object.keys(marker).sort().join(\",\") === \"id,table\"\n && typeof (marker as RowRef).table === \"string\" && typeof (marker as RowRef).id === \"string\"\n ? { table: (marker as RowRef).table, id: (marker as RowRef).id }\n : undefined;\n}\n\nfunction collectRefs(value: unknown, refs = new Map<string, RowRef>()): RowRef[] {\n const ref = asRowRef(value);\n if (ref) refs.set(rowKey(ref), ref);\n else if (Array.isArray(value)) for (const item of value) collectRefs(item, refs);\n else if (value && typeof value === \"object\") {\n for (const item of Object.values(value as Record<string, unknown>)) collectRefs(item, refs);\n }\n return [...refs.values()];\n}\n\nfunction expand(value: unknown, rows: Record<string, StoredRow>, viewed?: Record<string, unknown>): unknown {\n const ref = asRowRef(value);\n if (ref) return viewed?.[rowKey(ref)] ? null : rows[rowKey(ref)]?.row ?? null;\n if (Array.isArray(value)) return value.map((item) => expand(item, rows, viewed));\n if (!value || typeof value !== \"object\") return value;\n return Object.fromEntries(Object.entries(value as Record<string, unknown>)\n .map(([key, item]) => [key, expand(item, rows, viewed)]));\n}\n\nfunction hiddenRefs(before: unknown, after: unknown, output = new Map<string, RowRef>()): RowRef[] {\n if (after === null || after === undefined) {\n for (const ref of collectRefs(before)) output.set(rowKey(ref), ref);\n return [...output.values()];\n }\n const ref = asRowRef(before);\n if (ref && after === null) output.set(rowKey(ref), ref);\n else if (Array.isArray(before) && Array.isArray(after)) {\n for (let index = 0; index < before.length; index += 1) {\n hiddenRefs(before[index], index < after.length ? after[index] : undefined, output);\n }\n } else if (before && after && typeof before === \"object\" && typeof after === \"object\"\n && !Array.isArray(before) && !Array.isArray(after)) {\n for (const key of Object.keys(before as object)) {\n hiddenRefs(\n (before as Record<string, unknown>)[key],\n Object.prototype.hasOwnProperty.call(after, key) ? (after as Record<string, unknown>)[key] : undefined,\n output,\n );\n }\n }\n return [...output.values()];\n}\n\nfunction restoreRetained(before: unknown, after: unknown, retained: Set<string>): unknown {\n const ref = asRowRef(before);\n if (ref && (after === null || after === undefined) && retained.has(rowKey(ref))) return before;\n if (Array.isArray(before) && Array.isArray(after)) {\n const result = after.map((item, index) => index < before.length\n ? restoreRetained(before[index], item, retained) : item);\n for (let index = after.length; index < before.length; index += 1) {\n if (collectRefs(before[index]).some((item) => retained.has(rowKey(item)))) result.push(clone(before[index]));\n }\n return result;\n }\n if (before && after && typeof before === \"object\" && typeof after === \"object\"\n && !Array.isArray(before) && !Array.isArray(after)) {\n const result = clone(after as Record<string, unknown>);\n for (const key of Object.keys(before as object)) {\n const old = (before as Record<string, unknown>)[key];\n if (Object.prototype.hasOwnProperty.call(result, key)) result[key] = restoreRetained(old, result[key], retained);\n else if (collectRefs(old).some((item) => retained.has(rowKey(item)))) result[key] = clone(old);\n }\n return result;\n }\n if ((after === null || after === undefined)\n && collectRefs(before).some((item) => retained.has(rowKey(item)))) return clone(before);\n return after;\n}\n\nfunction sameRange(left: ReceiptRange, right: ReceiptRange): boolean {\n return left.site === right.site && left.table === right.table && left.index === right.index\n && canonical(left.prefix) === canonical(right.prefix)\n && left.order === right.order\n && canonical(left.after) === canonical(right.after)\n && canonical(left.before) === canonical(right.before)\n && canonical(left.gt) === canonical(right.gt)\n && canonical(left.gte) === canonical(right.gte)\n && canonical(left.lt) === canonical(right.lt)\n && canonical(left.lte) === canonical(right.lte)\n && left.ruleHash === right.ruleHash;\n}\n\nfunction compareValue(left: unknown, right: unknown): number {\n if (left === right) return 0;\n if (typeof left === \"number\" && typeof right === \"number\") return left < right ? -1 : 1;\n if (typeof left === \"string\" && typeof right === \"string\") return left < right ? -1 : 1;\n if (typeof left === \"boolean\" && typeof right === \"boolean\") return left ? 1 : -1;\n const a = canonical(left);\n const b = canonical(right);\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction compareKey(left: unknown[], right: unknown[]): number {\n for (let index = 0; index < Math.min(left.length, right.length); index += 1) {\n const order = compareValue(left[index], right[index]);\n if (order !== 0) return order;\n }\n return left.length - right.length;\n}\n\nfunction indexKey(schema: OfflineSchema | undefined, range: ReceiptRange, row: StoredRow | undefined): unknown[] | undefined {\n const columns = schema?.tables?.[range.table]?.indexes?.[range.index]?.columns;\n if (!row || !Array.isArray(columns) || !columns.every((item) => typeof item === \"string\")) return undefined;\n const key = columns.map((column) => row.row[column]);\n return key.some((item) => item === undefined) ? undefined : key;\n}\n\nfunction cursorKey(value: unknown, width: number): unknown[] | undefined {\n if (value === null || value === undefined) return undefined;\n if (Array.isArray(value)) return value.length === width ? value : undefined;\n return width === 1 ? [value] : undefined;\n}\n\nfunction insidePrefixBounds(key: unknown[], range: ReceiptRange): boolean {\n if (key.length < range.prefix.length\n || compareKey(key.slice(0, range.prefix.length), range.prefix) !== 0) return false;\n const suffix = key.slice(range.prefix.length);\n const after = cursorKey(range.after, suffix.length);\n const before = cursorKey(range.before, suffix.length);\n if (after && (range.order === \"Asc\" ? compareKey(suffix, after) <= 0 : compareKey(suffix, after) >= 0)) return false;\n if (before && (range.order === \"Asc\" ? compareKey(suffix, before) >= 0 : compareKey(suffix, before) <= 0)) return false;\n const first = suffix[0];\n if (range.gt !== null && range.gt !== undefined && compareValue(first, range.gt) <= 0) return false;\n if (range.gte !== null && range.gte !== undefined && compareValue(first, range.gte) < 0) return false;\n if (range.lt !== null && range.lt !== undefined && compareValue(first, range.lt) >= 0) return false;\n if (range.lte !== null && range.lte !== undefined && compareValue(first, range.lte) > 0) return false;\n return true;\n}\n\nfunction inFreshExtent(\n id: string,\n held: ReceiptRange,\n fresh: ReceiptRange,\n rows: Record<string, StoredRow>,\n schema: OfflineSchema | undefined,\n): boolean {\n const key = indexKey(schema, held, rows[rowKey({ table: held.table, id })]);\n if (!key) return fresh.stop === \"Exhausted\";\n if (!insidePrefixBounds(key, fresh)) return false;\n if (fresh.stop === \"Exhausted\") return true;\n const presentKeys = fresh.rowIds\n .map((rowId) => indexKey(schema, fresh, rows[rowKey({ table: fresh.table, id: rowId })]))\n .filter(Array.isArray) as unknown[][];\n if (presentKeys.length === 0) return false;\n const first = presentKeys.reduce((a, b) => compareKey(a, b) <= 0 ? a : b);\n const last = presentKeys.reduce((a, b) => compareKey(a, b) >= 0 ? a : b);\n return compareKey(key, first) >= 0 && compareKey(key, last) <= 0;\n}\n\n/** One JSON form for warm state and every carrier: omit undefined fields, preserve null. */\nexport function jsonState<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction normalizeState(value: PersistedRangeState | undefined): PersistedRangeState {\n if (!value) return emptyState();\n value = jsonState(value);\n if (value.version !== 1 || typeof value.rows !== \"object\" || typeof value.answers !== \"object\") {\n throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", \"range store contains an unsupported format\");\n }\n return {\n ...value,\n watermarks: value.watermarks ?? {},\n outbox: value.outbox ?? {},\n grants: value.grants ?? {},\n overlay: value.overlay ?? {},\n overlayMisses: value.overlayMisses ?? {},\n overlayWatermarks: value.overlayWatermarks ?? {},\n overlayNegatives: value.overlayNegatives ?? {},\n bounds: value.bounds ?? {},\n programs: value.programs ?? {},\n negative: value.negative ?? {},\n rowSeq: value.rowSeq ?? {},\n assets: value.assets ?? {},\n viewed: value.viewed ?? {},\n };\n}\n\n/**\n * The log a settlement's tail request and a resume's `log` both name: the drained\n * query whose watermark was recorded first in this partition \u2014 the first-mounted\n * drain, since a drain records its watermark when it first catches up \u2014 by the\n * store's durable `order`, so the choice survives restarts and re-marks and never\n * follows whichever page moved last (LLP 1012 \u00A77, \u00A78).\n */\nexport function tailWatermark(watermarks: WatermarkRecord[]): WatermarkRecord | undefined {\n return [...watermarks].sort((a, b) =>\n (a.order ?? Number.MAX_SAFE_INTEGER) - (b.order ?? Number.MAX_SAFE_INTEGER)\n || a.updatedAt - b.updatedAt\n || canonicalAnswerKey(a.op, a.args).localeCompare(canonicalAnswerKey(b.op, b.args)))[0];\n}\n\n/** Two post-commit resumes or proven tail advances retire a stranded prediction. */\nconst OVERLAY_PATIENCE = 2;\n\nfunction outboxOrder(entries: Record<string, OutboxEntry>): OutboxEntry[] {\n return Object.values(entries).sort((a, b) =>\n (a.order ?? a.createdAt) - (b.order ?? b.createdAt) || a.createdAt - b.createdAt || (a.intent < b.intent ? -1 : 1));\n}\n\n/** Shared swap engine; carrier subclasses only provide the atomic replace. */\nexport class PersistentRangeStore implements RangeStore {\n private state = emptyState();\n private partition?: PrincipalPartition;\n private tail: Promise<void> = Promise.resolve();\n\n readonly outbox: OutboxStore = {\n all: async () => this.read(() => {\n this.ensureUnsealed();\n return clone(outboxOrder(this.state.outbox));\n }),\n get: async (intent) => this.read(() => {\n this.ensureUnsealed();\n return this.state.outbox[intent] && clone(this.state.outbox[intent]);\n }),\n put: async (entry) => this.commit({ outbox: { put: [entry] } }),\n remove: async (intent) => this.commit({ outbox: { remove: [intent] } }),\n grant: async () => this.read(() => {\n this.ensureUnsealed();\n const current = this.state.currentGrant === undefined ? undefined : this.state.grants[this.state.currentGrant];\n return current && clone(current);\n }),\n grants: async () => this.read(() => {\n this.ensureUnsealed();\n return clone(Object.values(this.state.grants));\n }),\n bounds: async () => this.read(() => {\n this.ensureUnsealed();\n return clone(this.state.bounds);\n }),\n overlay: async () => this.read(() => {\n this.ensureUnsealed();\n return clone(this.state.overlay);\n }),\n programs: async () => this.read(() => {\n this.ensureUnsealed();\n return clone(this.state.programs);\n }),\n };\n\n constructor(private readonly backend: RangeStoreBackend) {}\n\n async open(partition: PrincipalPartition): Promise<void> {\n if (typeof partition !== \"string\" || partition.length === 0) {\n throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", \"range store partition must be a principal id\");\n }\n await this.enqueue(async () => {\n if (this.partition === partition) return;\n if (this.partition !== undefined && this.partition !== partition) await this.backend.close();\n this.partition = partition;\n this.state = normalizeState(await this.backend.open(partition));\n });\n }\n\n async unseal(): Promise<void> {\n await this.enqueue(async () => {\n this.ensureOpen();\n if (!this.state.sealed) return;\n const next = { ...clone(this.state), sealed: false };\n await this.backend.replace(next, NO_BYTES);\n this.state = next;\n });\n }\n\n async seal(): Promise<void> {\n await this.enqueue(async () => {\n this.ensureOpen();\n const next = { ...clone(this.state), sealed: true };\n await this.backend.replace(next, NO_BYTES);\n this.state = next;\n });\n }\n\n async wipe(partition: PrincipalPartition): Promise<void> {\n await this.enqueue(async () => {\n await this.backend.wipe(partition);\n if (this.partition === partition) {\n this.partition = undefined;\n this.state = emptyState();\n }\n });\n }\n\n async answer<Result = unknown>(op: string, args: unknown): Promise<HeldAnswer<Result> | undefined> {\n return this.read(() => {\n if (this.state.sealed) return undefined;\n const key = canonicalAnswerKey(op, args);\n const stored = this.state.answers[key];\n if (!stored) return undefined;\n const watermark = this.state.watermarks[key];\n const { refs: _refs, order: _order, fingerprint: _fingerprint, cursorArg: _cursorArg, data, ...answer } = clone(stored);\n return {\n ...answer,\n // A viewed view-once row reads as absent: the view was its one delivery (LLP 1012 \u00A79).\n ...(data === undefined ? {} : { data: expand(data, this.state.rows, this.state.viewed) as Result }),\n ...(watermark === undefined ? {} : { caughtUp: true, watermark: watermark.watermark }),\n };\n });\n }\n\n async coverage(): Promise<Coverage> {\n return this.read(() => {\n if (this.state.sealed) return { rows: [], ranges: [], absences: [], verdicts: [], watermarks: [], viewed: [], evicted: [] };\n const ranges = new Map<string, ReceiptRange>();\n const absences = new Map<string, Receipt[\"absences\"][number]>();\n const verdicts = new Map<string, unknown>();\n for (const answer of Object.values(this.state.answers)) {\n for (const range of answer.receipt?.ranges ?? []) {\n ranges.set(`${range.site}\\u0000${canonical(range.prefix)}\\u0000${canonical([\n range.order, range.after, range.before, range.gt, range.gte, range.lt, range.lte,\n ])}`, clone(range));\n }\n for (const absence of answer.receipt?.absences ?? []) absences.set(canonical(absence), clone(absence));\n for (const verdict of answer.receipt?.verdicts ?? []) verdicts.set(canonical(verdict), clone(verdict));\n }\n // A viewed view-once row is absent to the twin: not a row, and a byId absence (LLP 1012 \u00A79).\n const viewed = Object.keys(this.state.viewed).map(viewedRef);\n for (const ref of viewed) {\n const absence: Receipt[\"absences\"][number] = [ref.table, \"byId\", [ref.id]];\n absences.set(canonical(absence), absence);\n }\n let deliveredAt: number | undefined;\n for (const answer of Object.values(this.state.answers)) {\n if (deliveredAt === undefined || answer.deliveredAt > deliveredAt) deliveredAt = answer.deliveredAt;\n }\n return {\n rows: clone(Object.entries(this.state.rows).filter(([key]) => !this.state.viewed[key]).map(([, row]) => row)),\n ranges: [...ranges.values()],\n absences: [...absences.values()],\n verdicts: [...verdicts.values()],\n watermarks: clone(Object.values(this.state.watermarks)),\n viewed,\n evicted: Object.keys(this.state.negative).map(viewedRef),\n ...(this.state.facts === undefined ? {} : { facts: clone(this.state.facts) }),\n ...(this.state.superseded === undefined ? {} : { superseded: clone(this.state.superseded) }),\n ...(deliveredAt === undefined ? {} : { deliveredAt }),\n };\n });\n }\n\n async commit(swap: StoreSwap): Promise<void> {\n await this.enqueue(async () => {\n this.ensureOpen();\n // Byte payloads are not cloned: they can be megabytes and the swap never mutates them.\n const { bytes, ...rest } = swap;\n const delta: ByteDelta = { put: [], remove: [] };\n // Normalize before deriving answer keys/fingerprints, then normalize the state we publish.\n const next = normalizeState(this.applySwap(clone(this.state), { ...jsonState(rest), ...(bytes === undefined ? {} : { bytes }) }, delta));\n await this.backend.replace(next, delta);\n this.state = next;\n });\n }\n\n /** The cached rendition for an asset at a width; nothing when unheld, sealed, or the payload is gone. */\n async readBytes(assetId: string, width: number | null): Promise<{ bytes: Uint8Array; type: string } | undefined> {\n return this.read(async () => {\n if (this.state.sealed) return undefined;\n const key = byteKey(assetId, width);\n const entry = this.state.assets[key];\n if (!entry) return undefined;\n const bytes = await this.backend.readBytes?.(key);\n return bytes && bytes.byteLength === entry.size ? { bytes, type: entry.type } : undefined;\n });\n }\n\n async bytes(): Promise<ByteCacheStatus> {\n return this.read(() => {\n if (this.state.sealed) return { entries: [], totalBytes: 0, viewed: [] };\n const entries = clone(Object.values(this.state.assets));\n return {\n entries,\n totalBytes: entries.reduce((sum, entry) => sum + entry.size, 0),\n viewed: Object.keys(this.state.viewed).map(viewedRef),\n };\n });\n }\n\n /** Held rows whose values carry this asset record: the lease under which its bytes may be cached. */\n async rowsReferencing(assetId: string): Promise<StoredRow[]> {\n return this.read(() => this.state.sealed\n ? []\n : clone(Object.values(this.state.rows).filter((row) => assetIdsIn(row.row).has(assetId))));\n }\n\n /** True while every held row carrying this asset is a viewed view-once row (per row, LLP 1012 \u00A79). */\n async viewedAsset(assetId: string): Promise<boolean> {\n return this.read(() => !this.state.sealed && viewedOnlyAssets(this.state).has(assetId));\n }\n\n /** The viewed view-once rows; a live frame nulls them exactly as a held answer does. */\n async viewedRows(): Promise<RowRef[]> {\n return this.read(() => this.state.sealed ? [] : Object.keys(this.state.viewed).map(viewedRef));\n }\n\n /**\n * LRU read stamps, coalesced per swap: a read stamps the entry in memory and the next\n * swap's `replace` persists it, so a read never rewrites the carrier (LLP 1012 \u00A79).\n */\n async touchBytes(keys: string[]): Promise<void> {\n await this.enqueue(async () => {\n if (this.partition === undefined || this.state.sealed) return;\n for (const key of keys) {\n const entry = this.state.assets[key];\n if (entry) entry.lastRead = ++this.state.clock;\n }\n });\n }\n\n async close(): Promise<void> {\n await this.enqueue(async () => {\n this.partition = undefined;\n this.state = emptyState();\n await this.backend.close();\n });\n }\n\n private applySwap(state: PersistedRangeState, swap: StoreSwap, bytes: ByteDelta): PersistedRangeState {\n if (state.sealed) throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", \"range store is sealed\");\n if (swap.resetCoverage) {\n state.rows = {};\n // Sequence guards belong to this generation's coverage, just like rows.\n // A query-only successor can deliver the same row at the same data seq.\n state.rowSeq = {};\n state.negative = {};\n state.answers = {};\n state.watermarks = {};\n // These describe coverage, unlike the overlay and its replay entry.\n state.overlayWatermarks = Object.fromEntries(Object.keys(state.overlay).map((intent) => [intent, null]));\n state.overlayMisses = {};\n delete state.facts;\n }\n if (swap.superseded === null) delete state.superseded;\n if (swap.resumeSeq !== undefined && (!Number.isSafeInteger(swap.resumeSeq) || swap.resumeSeq < 0)) {\n throw new TypeError(\"store resume seq must be a non-negative safe integer\");\n }\n if (swap.facts) state.facts = clone(swap.facts);\n if (swap.superseded) state.superseded = clone(swap.superseded);\n const explicitEvictions = new Map<string, StoreTombstone>();\n // Keep provenance distinct from hidden-row and extent evictions. These facts\n // join each matching overlay below, even while its response is still queued.\n const authoritativeNegatives = new Map<string, { seq: number; source: \"absence\" | \"tombstone\" }>();\n const recordNegative = (ref: StoreTombstone, source: \"absence\" | \"tombstone\") => {\n const key = rowKey(ref);\n if ((authoritativeNegatives.get(key)?.seq ?? -1) <= ref.seq) {\n authoritativeNegatives.set(key, { seq: ref.seq, source });\n }\n recordEviction(explicitEvictions, ref);\n };\n const recordAbsences = (answer: Pick<StoredAnswer, \"receipt\" | \"seq\">) => {\n for (const [table, index, key] of answer.receipt?.absences ?? []) {\n if (index !== \"byId\" || key.length !== 1) {\n throw new TypeError(\"store receipts may evict only a primary byId absence\");\n }\n if (typeof key[0] === \"string\") recordNegative({ table, id: key[0], seq: answer.seq }, \"absence\");\n }\n };\n for (const key of swap.dropAnswers ?? []) delete state.answers[key];\n for (const refresh of swap.refreshes ?? []) {\n const answer = state.answers[canonicalAnswerKey(refresh.op, refresh.args)];\n if (!answer || refresh.seq < answer.seq) continue;\n if (answer.validator !== undefined && answer.validator !== refresh.validator) {\n throw new TypeError(`conditional validator changed for ${refresh.op}`);\n }\n if (refresh.seq === answer.seq) continue;\n answer.nextSeq ??= answer.seq;\n answer.seq = refresh.seq;\n answer.validator = refresh.validator;\n answer.deliveredAt = refresh.deliveredAt ?? Date.now();\n answer.order = ++state.clock;\n recordAbsences(answer);\n }\n const before = clone(state.answers);\n const freshRanges: Array<{ range: ReceiptRange; seq: number }> = [];\n for (const ref of swap.tombstones ?? []) {\n recordNegative(ref, \"tombstone\");\n }\n for (const delivery of swap.deliveries ?? []) {\n if (!Number.isSafeInteger(delivery.seq) || delivery.seq < 0) {\n throw new TypeError(\"store delivery seq must be a non-negative safe integer\");\n }\n const key = canonicalAnswerKey(delivery.op, delivery.args);\n const old = before[key];\n const fingerprint = canonical({\n op: delivery.op, args: delivery.args, state: delivery.state, data: delivery.data,\n next: delivery.next, seq: delivery.seq, validator: delivery.validator,\n receipt: delivery.receipt, rows: delivery.rows, reason: delivery.reason, rule: delivery.rule,\n });\n if (old && delivery.seq < old.seq) continue;\n if (old && delivery.seq === old.seq) {\n if (old.fingerprint === fingerprint) continue;\n throw new TypeError(`conflicting deliveries for ${delivery.op} at seq ${delivery.seq}`);\n }\n for (const row of delivery.rows ?? []) {\n if (!row.table || !row.id || !row.row || typeof row.row !== \"object\") {\n throw new TypeError(\"store delivery row is malformed\");\n }\n const storageKey = rowKey(row);\n if ((state.negative[storageKey] ?? -1) >= delivery.seq) {\n recordEviction(explicitEvictions, { table: row.table, id: row.id, seq: state.negative[storageKey]! });\n continue;\n }\n if (state.rowSeq[storageKey] === delivery.seq\n && canonical(state.rows[storageKey]) !== canonical(row)) {\n throw new TypeError(`conflicting row ${row.table}/${row.id} at seq ${delivery.seq}`);\n }\n if ((state.rowSeq[storageKey] ?? -1) > delivery.seq) continue;\n state.rows[storageKey] = clone(row);\n state.rowSeq[storageKey] = delivery.seq;\n }\n let data = clone(delivery.data);\n let answerState = delivery.state;\n let retained = false;\n const hidden = delivery.state === \"denied\" && old\n ? old.refs\n : old ? hiddenRefs(old.data, data) : [];\n const retainedRefs = new Set<string>();\n for (const ref of hidden) {\n if ((swap.retention?.[ref.table] ?? \"until-revoked\") === \"delivered-history\") {\n retainedRefs.add(rowKey(ref));\n retained = true;\n } else recordEviction(explicitEvictions, { ...ref, seq: delivery.seq });\n }\n if (delivery.state === \"denied\" && old && retainedRefs.size > 0) {\n data = clone(old.data);\n answerState = old.state;\n } else if (old && retainedRefs.size > 0) {\n data = restoreRetained(old.data, data, retainedRefs);\n }\n const refs = collectRefs(data);\n for (const range of delivery.receipt?.ranges ?? []) {\n for (const id of [...range.rowIds, ...(range.haloId ? [range.haloId] : [])]) {\n if (!refs.some((ref) => ref.table === range.table && ref.id === id)) refs.push({ table: range.table, id });\n }\n }\n // The pool is the answer's closure: halo and rule-input bodies (the\n // membership a message's read rule probed) are delivered content the\n // twin evaluates over, so an answer keeps every row it was delivered with.\n for (const pooled of delivery.rows ?? []) {\n if (!refs.some((ref) => ref.table === pooled.table && ref.id === pooled.id)) refs.push({ table: pooled.table, id: pooled.id });\n }\n const stored: StoredAnswer = {\n op: delivery.op,\n ...(delivery.cursorArg === undefined ? {} : { cursorArg: delivery.cursorArg }),\n args: clone(delivery.args),\n state: answerState,\n ...(data === undefined ? {} : { data }),\n ...(delivery.next === undefined ? {} : { next: delivery.next }),\n nextSeq: delivery.seq,\n seq: delivery.seq,\n ...(delivery.validator === undefined ? {} : { validator: delivery.validator }),\n ...(delivery.receipt === undefined ? {} : { receipt: clone(delivery.receipt) }),\n deliveredAt: delivery.deliveredAt ?? Date.now(),\n ...(retained ? { retained: true } : {}),\n ...(delivery.reason === undefined ? {} : { reason: delivery.reason }),\n ...(delivery.rule === undefined ? {} : { rule: delivery.rule }),\n refs,\n order: ++state.clock,\n fingerprint,\n };\n state.answers[key] = stored;\n freshRanges.push(...(delivery.receipt?.ranges ?? []).map((range) => ({ range, seq: delivery.seq })));\n recordAbsences(stored);\n }\n\n const heldRanges = Object.values(before).flatMap((answer) => answer.receipt?.ranges ?? []);\n for (const held of heldRanges) {\n const matching = freshRanges.filter(({ range: fresh }) => sameRange(held, fresh));\n if (matching.length === 0) continue;\n const present = new Set(matching.flatMap(({ range: fresh }) => [\n ...fresh.rowIds,\n ...(fresh.haloId ? [fresh.haloId] : []),\n ]));\n for (const id of held.rowIds) {\n if (present.has(id)) continue;\n const seq = matching\n .filter(({ range: fresh }) => inFreshExtent(id, held, fresh, state.rows, swap.schema))\n .reduce((latest, item) => Math.max(latest, item.seq), -1);\n if (seq >= 0) recordEviction(explicitEvictions, { table: held.table, id, seq });\n }\n }\n\n const appliedEvictions = new Set<string>();\n for (const [key, eviction] of explicitEvictions) {\n if ((state.negative[key] ?? -1) > eviction.seq) continue;\n if ((state.rowSeq[key] ?? -1) > eviction.seq) continue;\n state.negative[key] = eviction.seq;\n appliedEvictions.add(key);\n delete state.rows[key];\n delete state.rowSeq[key];\n for (const answer of Object.values(state.answers)) {\n for (const range of answer.receipt?.ranges ?? []) {\n if (range.table !== eviction.table) continue;\n const id = eviction.id;\n if (range.rowIds.includes(id)) {\n range.rowIds = range.rowIds.filter((rowId) => rowId !== id);\n // The page remembers what it lost: an interior eviction leaves a hole\n // the twin must not paper over with \"complete\" (LLP 1012 \u00A76).\n range.evictedIds = [...(range.evictedIds ?? []), id];\n }\n if (range.haloId === id) delete range.haloId;\n }\n if (!answer.refs.some((ref) => rowKey(ref) === key)) continue;\n answer.refs = answer.refs.filter((ref) => rowKey(ref) !== key);\n if (!answer.retained && answer.state !== \"denied\") {\n answer.state = \"partial\";\n answer.reason = \"evicted\";\n delete answer.next;\n }\n }\n }\n\n for (const answer of Object.values(state.answers)) {\n if (!answer.receipt) continue;\n answer.receipt.absences = answer.receipt.absences.filter(([table, index, key]) => {\n const id = index === \"byId\" && key.length === 1 ? key[0] : undefined;\n const storageKey = typeof id === \"string\" ? rowKey({ table, id }) : undefined;\n return storageKey === undefined || (state.rowSeq[storageKey] ?? -1) < 0 || appliedEvictions.has(storageKey);\n });\n }\n\n const referenced = new Set(Object.values(state.answers).flatMap((answer) => answer.refs.map(rowKey)));\n // Every pooled row joins its answer's refs above, so nothing arrives unused;\n // a row leaves here when no answer references it any more \u2014 its answer was\n // dropped, or replaced by a delivery whose closure no longer pools it.\n for (const key of Object.keys(state.rows)) if (!referenced.has(key)) {\n delete state.rows[key];\n delete state.rowSeq[key];\n }\n\n // Bytes join the swap by row lease: whatever left `state.rows` above takes its bytes with it.\n const byteDelta = applyByteSwap(state, swap, leasedAssets(Object.values(state.rows), Object.values(state.answers)));\n bytes.put.push(...byteDelta.put);\n bytes.remove.push(...byteDelta.remove);\n\n const previousTail = tailWatermark(Object.values(state.watermarks));\n if (swap.watermark) {\n const key = canonicalAnswerKey(swap.watermark.op, swap.watermark.args);\n // The order is the store's: first recorded, kept across re-marks (LLP 1012 \u00A77's tail chooser).\n const order = state.watermarks[key]?.order ?? ++state.clock;\n state.watermarks[key] = { ...clone(swap.watermark), order };\n }\n const tail = tailWatermark(Object.values(state.watermarks));\n // The outbox, its grants, its write bounds, and the prediction overlay are\n // custody of unsent work: a coverage reset above never touches them.\n for (const intent of swap.outbox?.remove ?? []) {\n delete state.outbox[intent];\n delete state.overlayMisses[intent];\n delete state.overlay[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n }\n const committedNow = new Set<string>();\n for (const entry of swap.outbox?.put ?? []) {\n if (typeof entry.intent !== \"string\" || entry.intent.length === 0) throw new TypeError(\"outbox entry needs an intent\");\n const previous = state.outbox[entry.intent];\n if (entry.state === \"committed\" && previous?.state !== \"committed\") committedNow.add(entry.intent);\n const order = previous?.order ?? entry.order ?? ++state.clock;\n state.outbox[entry.intent] = { ...clone(entry), order };\n }\n if (swap.bounds) state.bounds = clone(swap.bounds);\n if (swap.programs) state.programs = clone(swap.programs);\n for (const id of swap.grants?.remove ?? []) {\n delete state.grants[id];\n if (state.currentGrant === id) delete state.currentGrant;\n }\n for (const grant of swap.grants?.put ?? []) state.grants[grant.id] = clone(grant);\n if (swap.grants?.current === null) delete state.currentGrant;\n else if (typeof swap.grants?.current === \"string\") {\n if (!state.grants[swap.grants.current]) throw new TypeError(\"current grant must be a held grant\");\n state.currentGrant = swap.grants.current;\n }\n for (const intent of swap.overlay?.remove ?? []) {\n delete state.overlay[intent];\n delete state.overlayMisses[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n }\n for (const [intent, rows] of Object.entries(swap.overlay?.put ?? {})) {\n state.overlay[intent] = clone(rows);\n delete state.overlayMisses[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n }\n // @ref LLP 1012#7-writes-offline \u2014 retire on authoritative row/negative\n // evidence, a non-empty page reached by a post-commit next-cursor chain,\n // or two misses (proven forward marks or successful resumes, once per swap).\n // A reset rebases the snapshot at the new drain's current head; opaque cursor names\n // and positions from the former coverage cannot order the new log.\n const answers = Object.keys(state.overlay).some((intent) => state.outbox[intent]?.state === \"committed\")\n ? Object.values(state.answers) : [];\n const pages = answers.filter((answer) => {\n const nonempty = Array.isArray(answer.data) ? answer.data.length > 0 : collectRefs(answer.data).length > 0;\n return (answer.state === \"complete\" || answer.state === \"capped\") && answer.receipt !== undefined\n && !answer.receipt.ranges.some((range) => (range.evictedIds?.length ?? 0) > 0)\n && nonempty && answer.refs.length > 0 && answer.refs.every((ref) => state.rows[rowKey(ref)] !== undefined);\n });\n const chains = new Map<string, { chain: string[]; reached: Set<string | null | undefined> }>();\n for (const intent of Object.keys(state.overlay)) {\n const entry = state.outbox[intent];\n if (entry === undefined || entry.state === \"rejected\" || entry.state === \"expired\") {\n delete state.overlay[intent];\n delete state.overlayMisses[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n if (entry) delete entry.predicted;\n continue;\n }\n for (const row of state.overlay[intent]!) {\n const key = rowKey(row);\n const evidence = authoritativeNegatives.get(key);\n if (evidence !== undefined && evidence.seq >= (state.overlayNegatives[intent]?.[key]?.seq ?? -1)) {\n (state.overlayNegatives[intent] ??= {})[key] = evidence;\n }\n }\n if (entry.state !== \"committed\") continue;\n if (state.overlayWatermarks[intent] == null && tail !== undefined) {\n const snapshot = committedNow.has(intent) && state.overlayWatermarks[intent] !== null ? previousTail ?? tail : tail;\n state.overlayWatermarks[intent] = {\n op: snapshot.op, args: clone(snapshot.args), cursorArg: snapshot.cursorArg ?? \"c\",\n watermark: snapshot.watermark,\n };\n }\n const committedSeq = (entry.response as { seq?: unknown } | undefined)?.seq;\n if (!Number.isSafeInteger(committedSeq)) {\n delete state.overlay[intent];\n delete state.overlayMisses[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n delete entry.predicted;\n continue;\n }\n const overlay = state.overlay[intent]!;\n const seq = Number(committedSeq);\n // A deletion is confirmed by absence, never by a still-present row.\n const predicted = new Set(overlay.filter((row) => !row.removed).map(rowKey));\n const committedWatermark = state.overlayWatermarks[intent] ?? undefined;\n const chainKey = committedWatermark ? canonical({ op: committedWatermark.op, args: committedWatermark.args,\n cursorArg: committedWatermark.cursorArg, watermark: committedWatermark.watermark, seq }) : \"\";\n if (!chains.has(chainKey)) {\n const chain = committedWatermark ? cursorChain(pages, committedWatermark, seq) : [];\n chains.set(chainKey, { chain, reached: new Set(chain) });\n }\n const { chain, reached } = chains.get(chainKey)!;\n const negative = overlay.some((row) => {\n const evidence = state.overlayNegatives[intent]?.[rowKey(row)];\n return evidence !== undefined && evidence.seq >= seq && (state.rowSeq[rowKey(row)] ?? -1) <= evidence.seq;\n });\n // The closure's pooled halo/rule-input row is authoritative arrival too.\n const arrived = negative || answers.some((answer) => answer.seq >= seq && !answer.retained && answer.state !== \"denied\"\n && answer.refs.some((ref) => predicted.has(rowKey(ref)) && state.rows[rowKey(ref)] !== undefined))\n || (predicted.size > 0 && committedWatermark !== undefined && pages.some((page) => page.seq >= seq\n && reached.has(pagePosition(page, committedWatermark))));\n const advanced = committedWatermark !== undefined && swap.watermark !== undefined\n && tail !== undefined && canonicalAnswerKey(tail.op, tail.args) === canonicalAnswerKey(swap.watermark.op, swap.watermark.args)\n && advanceOverlay(committedWatermark, tail, chain);\n const moved = advanced || (swap.resumeSeq !== undefined && swap.resumeSeq > seq);\n const misses = arrived ? 0 : (state.overlayMisses[intent] ?? 0)\n + (moved && !committedNow.has(intent) ? 1 : 0);\n if (!arrived && misses < OVERLAY_PATIENCE) {\n if (misses > 0) state.overlayMisses[intent] = misses;\n continue;\n }\n delete state.overlay[intent];\n delete state.overlayMisses[intent];\n delete state.overlayWatermarks[intent];\n delete state.overlayNegatives[intent];\n delete entry.predicted;\n }\n return state;\n }\n\n private ensureOpen(): void {\n if (this.partition === undefined) {\n throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", `${this.backend.carrier} range store is not open`);\n }\n }\n\n private ensureUnsealed(): void {\n if (this.state.sealed) throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", \"range store is sealed\");\n }\n\n private enqueue<T>(action: () => Promise<T>): Promise<T> {\n const run = this.tail.then(action);\n this.tail = run.then(() => undefined, () => undefined);\n return run;\n }\n\n private async read<T>(action: () => T): Promise<T> {\n await this.tail;\n this.ensureOpen();\n return action();\n }\n}\n", "{\n \"systemPrincipalId\": \"system\",\n \"retentionPolicies\": [\"until-revoked\", \"delivered-history\"],\n \"valueModelVersion\": \"i53-codepoint-bytes-v2\"\n}\n", "// @ref LLP 1011#b1-opaque-cursors \u2014 The evaluator and engine share this\n// canonical tagged position format, including nominal Id/String values.\nimport { EvalError } from \"./errors\";\nimport type { Value } from \"./types\";\n\nconst VERSION = 1;\nconst MAX_BYTES = 4_096;\nconst ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n\nexport interface CursorColumn { name: string; kind: any }\nexport interface CursorPosition {\n table: string;\n index: string;\n order: \"Asc\" | \"Desc\";\n suffix: CursorColumn[];\n values: Value[];\n}\n\nexport function encodeCursor(position: CursorPosition): string {\n validateValues(position.suffix, position.values);\n const bytes = utf8(JSON.stringify([\n VERSION, position.table, position.index, position.order,\n position.suffix.map((column) => ({ name: column.name, kind: normalizeDescriptor(column.kind) })),\n position.values.map(normalizeValue),\n ]));\n if (bytes.length > MAX_BYTES) fail(\"cursor token exceeds 4096 bytes\");\n let result = \"\";\n for (let offset = 0; offset < bytes.length; offset += 3) {\n const a = bytes[offset]!;\n const b = bytes[offset + 1];\n const c = bytes[offset + 2];\n result += ALPHABET[a >> 2]!;\n result += ALPHABET[((a & 3) << 4) | ((b ?? 0) >> 4)]!;\n if (b !== undefined) result += ALPHABET[((b & 15) << 2) | ((c ?? 0) >> 6)]!;\n if (c !== undefined) result += ALPHABET[c & 63]!;\n }\n return result;\n}\n\nexport function decodeCursor(token: string): CursorPosition {\n if (token.length > Math.ceil(MAX_BYTES * 4 / 3)) fail(\"cursor token exceeds 4096 bytes\");\n if (!/^[A-Za-z0-9_-]*$/.test(token) || token.length % 4 === 1) fail(\"cursor token is not canonical base64url\");\n const bytes: number[] = [];\n for (let offset = 0; offset < token.length; offset += 4) {\n const chunk = token.slice(offset, offset + 4);\n const values = Array.from(chunk, (character) => ALPHABET.indexOf(character));\n const bits = (values[0]! << 18) | ((values[1] ?? 0) << 12) | ((values[2] ?? 0) << 6) | (values[3] ?? 0);\n bytes.push((bits >> 16) & 255);\n if (chunk.length >= 3) bytes.push((bits >> 8) & 255);\n if (chunk.length === 4) bytes.push(bits & 255);\n }\n if (bytes.length > MAX_BYTES) fail(\"cursor token exceeds 4096 bytes\");\n let tagged: any;\n try { tagged = JSON.parse(decodeUtf8(bytes)); }\n catch { fail(\"cursor token is not the canonical tagged encoding\"); }\n if (!Array.isArray(tagged) || tagged.length !== 6) fail(\"cursor token is not the canonical tagged encoding\");\n const [version, table, index, order, rawSuffix, rawValues] = tagged;\n if (version !== VERSION) fail(`cursor token version ${String(version)} is unsupported`);\n if (typeof table !== \"string\" || typeof index !== \"string\" || ![\"Asc\", \"Desc\"].includes(order)\n || !Array.isArray(rawSuffix) || !Array.isArray(rawValues)) fail(\"cursor token is not the canonical tagged encoding\");\n const suffix = rawSuffix.map((column: any): CursorColumn => {\n if (!plainObject(column) || Object.keys(column).length !== 2 || typeof column.name !== \"string\" || !(\"kind\" in column))\n fail(\"cursor token is not the canonical tagged encoding\");\n return { name: column.name, kind: normalizeDescriptor(column.kind) };\n });\n const values = rawValues.map(normalizeValue);\n const position: CursorPosition = { table, index, order, suffix, values };\n validateValues(suffix, values);\n if (encodeCursor(position) !== token) fail(\"cursor token is not canonical\");\n return position;\n}\n\nexport function decodeCursorFor(token: string, expected: Omit<CursorPosition, \"values\">): Value {\n const position = decodeCursor(token);\n if (position.table !== expected.table || position.index !== expected.index || position.order !== expected.order\n || JSON.stringify(position.suffix) !== JSON.stringify(expected.suffix)) {\n fail(\"cursor token describes a different table, index, order, or suffix\");\n }\n return { Array: position.values };\n}\n\nexport function cursorSuffix(schema: any, scan: any): CursorColumn[] {\n const table = schema.tables?.[scan.table];\n const index = table?.indexes?.[scan.index];\n if (!table || !index) fail(`cursor names missing index ${scan.table}.${scan.index}`);\n return index.columns.slice(scan.prefix.length).map((name: string) => ({ name, kind: table.columns[name] }));\n}\n\nfunction validateValues(suffix: CursorColumn[], values: Value[]): void {\n if (suffix.length !== values.length) fail(\"cursor token values do not match its typed suffix\");\n suffix.forEach((column, offset) => {\n const value = values[offset]!;\n const kind = column.kind;\n if (kind?.Optional !== undefined) {\n if (value === \"Null\") return;\n validateValues([{ name: column.name, kind: kind.Optional }], [value]);\n return;\n }\n const valid = kind === \"Id\" || kind === \"Principal\" || kind?.Ref !== undefined\n ? variant(value, \"Id\")\n : kind?.Text !== undefined || kind?.Enum !== undefined\n ? variant(value, \"String\")\n : kind === \"Int\" || kind === \"Time\" || kind?.Decimal !== undefined || kind?.Money !== undefined\n ? variant(value, \"Int\")\n : kind === \"Bool\" ? variant(value, \"Bool\")\n : kind?.Bytes !== undefined ? variant(value, \"Bytes\")\n : kind?.Json !== undefined ? [\"Bool\", \"Int\", \"String\", \"Id\", \"Bytes\"].some((name) => variant(value, name)) : false;\n if (!valid) fail(\"cursor token values do not match its typed suffix\");\n });\n}\n\nfunction normalizeDescriptor(value: any): any {\n if ([\"Id\", \"Principal\", \"Int\", \"Bool\", \"Time\"].includes(value)) return value;\n if (!plainObject(value) || Object.keys(value).length !== 1) fail(\"cursor token is not the canonical tagged encoding\");\n const name = Object.keys(value)[0]!;\n const data = value[name];\n if (name === \"Text\" || name === \"Bytes\" || name === \"Json\") {\n const key = name === \"Json\" ? \"max_bytes\" : \"max\";\n if (!plainObject(data) || Object.keys(data).length !== 1 || !nonnegativeInteger(data[key])) fail(\"cursor token is not the canonical tagged encoding\");\n return { [name]: { [key]: data[key] } };\n }\n if (name === \"Ref\") {\n if (!plainObject(data) || Object.keys(data).length !== 1 || typeof data.table !== \"string\") fail(\"cursor token is not the canonical tagged encoding\");\n return { Ref: { table: data.table } };\n }\n if (name === \"Decimal\") {\n if (!plainObject(data) || Object.keys(data).length !== 1 || !nonnegativeInteger(data.scale)) fail(\"cursor token is not the canonical tagged encoding\");\n return { Decimal: { scale: data.scale } };\n }\n if (name === \"Money\") {\n if (!plainObject(data) || Object.keys(data).length !== 2 || typeof data.currency !== \"string\" || !nonnegativeInteger(data.scale)) fail(\"cursor token is not the canonical tagged encoding\");\n return { Money: { currency: data.currency, scale: data.scale } };\n }\n if (name === \"Enum\") {\n if (!plainObject(data) || Object.keys(data).length !== 1 || !Array.isArray(data.variants) || !data.variants.every((item: any) => typeof item === \"string\")) fail(\"cursor token is not the canonical tagged encoding\");\n return { Enum: { variants: data.variants.slice() } };\n }\n if (name === \"Optional\") return { Optional: normalizeDescriptor(data) };\n if (name === \"List\") {\n if (!plainObject(data) || Object.keys(data).length !== 2 || !(\"of\" in data) || !nonnegativeInteger(data.max)) fail(\"cursor token is not the canonical tagged encoding\");\n return { List: { of: normalizeDescriptor(data.of), max: data.max } };\n }\n fail(\"cursor token is not the canonical tagged encoding\");\n}\n\nfunction normalizeValue(value: any): Value {\n if (value === \"Null\") return value;\n if (!plainObject(value) || Object.keys(value).length !== 1) fail(\"cursor token is not the canonical tagged encoding\");\n const name = Object.keys(value)[0]!;\n const data = value[name];\n if (name === \"Bool\" && typeof data === \"boolean\") return { Bool: data };\n if (name === \"Int\" && Number.isSafeInteger(data)) return { Int: data };\n if ((name === \"String\" || name === \"Id\" || name === \"Bytes\") && typeof data === \"string\") return { [name]: data } as Value;\n if (name === \"Array\" && Array.isArray(data)) return { Array: data.map(normalizeValue) };\n if ((name === \"Row\" || name === \"Map\") && plainObject(data)) {\n const normalized: Record<string, Value> = {};\n for (const key of Object.keys(data)) normalized[key] = normalizeValue(data[key]);\n return { [name]: normalized } as Value;\n }\n fail(\"cursor token is not the canonical tagged encoding\");\n}\n\nfunction utf8(text: string): number[] {\n const result: number[] = [];\n for (const character of text) {\n const code = character.codePointAt(0)!;\n if (code <= 0x7f) result.push(code);\n else if (code <= 0x7ff) result.push(0xc0 | code >> 6, 0x80 | code & 63);\n else if (code <= 0xffff) result.push(0xe0 | code >> 12, 0x80 | code >> 6 & 63, 0x80 | code & 63);\n else result.push(0xf0 | code >> 18, 0x80 | code >> 12 & 63, 0x80 | code >> 6 & 63, 0x80 | code & 63);\n }\n return result;\n}\n\nfunction decodeUtf8(bytes: number[]): string {\n let result = \"\";\n for (let offset = 0; offset < bytes.length;) {\n const a = bytes[offset++]!;\n let code: number;\n if (a < 0x80) code = a;\n else if ((a & 0xe0) === 0xc0 && offset < bytes.length) code = (a & 31) << 6 | bytes[offset++]! & 63;\n else if ((a & 0xf0) === 0xe0 && offset + 1 < bytes.length) code = (a & 15) << 12 | (bytes[offset++]! & 63) << 6 | bytes[offset++]! & 63;\n else if ((a & 0xf8) === 0xf0 && offset + 2 < bytes.length) code = (a & 7) << 18 | (bytes[offset++]! & 63) << 12 | (bytes[offset++]! & 63) << 6 | bytes[offset++]! & 63;\n else fail(\"cursor token is not canonical UTF-8\");\n if (code >= 0xd800 && code <= 0xdfff || code > 0x10ffff) fail(\"cursor token is not canonical UTF-8\");\n result += String.fromCodePoint(code);\n }\n if (JSON.stringify(result).includes(\"\uFFFD\")) fail(\"cursor token is not canonical UTF-8\");\n return result;\n}\n\nfunction variant(value: Value, name: string): boolean { return value !== \"Null\" && name in value; }\nfunction plainObject(value: any): value is Record<string, any> { return value !== null && typeof value === \"object\" && !Array.isArray(value); }\nfunction nonnegativeInteger(value: any): boolean { return Number.isInteger(value) && value >= 0; }\nfunction fail(message: string): never { throw new EvalError(\"E_INPUT\", message); }\n", "import coreIrContract from \"../../../crates/snapback2-core/ir-contract.json\" with { type: \"json\" };\nimport { canonicalRuleJson, canonicalSchemaJson } from \"./certificate-identity\";\nimport { EvalError } from \"./errors\";\nimport { sha256, utf8Length } from \"./hash\";\nimport { cursorSuffix, decodeCursor, decodeCursorFor } from \"./cursor\";\nimport type { TraceRange, Value } from \"./types\";\n\nconst I53_MAX = 9_007_199_254_740_991;\nconst I53_MIN = -I53_MAX;\n\nexport function canonicalValue(value: Value): string {\n if (value === \"Null\") return '\"Null\"';\n const kind = kindOf(value);\n const data = (value as any)[kind];\n if (kind === \"Bool\" || kind === \"Int\") return `{\"${kind}\":${JSON.stringify(data)}}`;\n if (kind === \"String\" || kind === \"Id\") return `{\"${kind}\":${JSON.stringify(data)}}`;\n if (kind === \"Bytes\") {\n if (!canonicalBytes(data)) throw new EvalError(\"E_INPUT\", \"Bytes is not canonical lowercase base16\");\n return `{\"Bytes\":${JSON.stringify(data)}}`;\n }\n if (kind === \"Array\") return `{\"Array\":${canonicalValues(data)}}`;\n const entries = Object.keys(data)\n .sort(compareCodepoints)\n .map((key) => `${JSON.stringify(key)}:${canonicalValue(data[key])}`)\n .join(\",\");\n return `{\"${kind}\":{${entries}}}`;\n}\n\nexport function canonicalValues(values: Value[]): string {\n return `[${values.map(canonicalValue).join(\",\")}]`;\n}\n\nexport function rangeStops(ranges: TraceRange[]): Record<string, string[]> {\n const result: Record<string, string[]> = Object.create(null);\n for (const range of ranges) (result[range.site] ??= []).push(range.stop);\n return sortObject(result);\n}\n\n// @ref LLP 1001#2-what-a-commit-records \u2014 omitted Optional fields are Null before rules and maintains.\nexport function materializeOptionalFields(schema: any, tableName: string, value: Value): Value {\n if (!isVariant(value, \"Row\")) return clone(value);\n const entries: Record<string, Value> = Object.assign(Object.create(null), value.Row);\n for (const [name, descriptor] of Object.entries<any>(\n schema.tables?.[tableName]?.columns ?? {},\n )) {\n if (descriptor?.Optional !== undefined && !hasOwn(entries, name)) {\n entries[name] = \"Null\";\n }\n }\n return rowValue(entries);\n}\n\nexport function rowValue(entries: Record<string, Value>): Value {\n const sorted: Record<string, Value> = Object.create(null);\n for (const key of Object.keys(entries).sort(compareCodepoints)) sorted[key] = clone(entries[key]);\n return { Row: sorted };\n}\n\nexport function field(value: Value, name: string): Value {\n const object = asObject(value);\n if (!hasOwn(object, name)) throw new EvalError(\"E_FIELD\", `missing field ${name}`);\n return object[name];\n}\n\nexport function fieldOrNull(value: Value, name: string): Value {\n const object = asObject(value);\n return hasOwn(object, name) ? object[name] : \"Null\";\n}\n\nexport function asObject(value: Value): Record<string, Value> {\n if (isVariant(value, \"Row\")) return value.Row;\n if (isVariant(value, \"Map\")) return value.Map;\n throw new EvalError(\"E_TYPE\", \"expected row or map\");\n}\n\nexport function asArray(value: Value): Value[] {\n if (!isVariant(value, \"Array\")) throw new EvalError(\"E_TYPE\", \"expected array\");\n return value.Array;\n}\n\nexport function asString(value: Value): string {\n if (isVariant(value, \"String\")) return value.String;\n if (isVariant(value, \"Id\")) return value.Id;\n throw new EvalError(\"E_TYPE\", \"expected string or id\");\n}\n\nexport function asInt(value: Value): number {\n if (!isVariant(value, \"Int\")) throw new EvalError(\"E_TYPE\", \"expected int\");\n return value.Int;\n}\n\nexport function asBool(value: Value): boolean {\n if (!isVariant(value, \"Bool\")) throw new EvalError(\"E_TYPE\", \"expected bool\");\n return value.Bool;\n}\n\nexport function int(value: number): Value {\n return { Int: safeNumber(value) };\n}\n\nexport function safeNumber(value: number): number {\n if (!Number.isSafeInteger(value) || value < I53_MIN || value > I53_MAX)\n throw new EvalError(\"E_OVERFLOW\", `${value} is outside the i53 value model`);\n return value;\n}\n\nexport function totalCompare(left: Value, right: Value): number {\n const order = [\"Null\", \"Bool\", \"Int\", \"String\", \"Id\", \"Bytes\", \"Row\", \"Array\", \"Map\"];\n const leftKind = kindOf(left);\n const rightKind = kindOf(right);\n const tag = order.indexOf(leftKind) - order.indexOf(rightKind);\n if (tag !== 0) return Math.sign(tag);\n if (leftKind === \"Null\") return 0;\n const leftData = (left as any)[leftKind];\n const rightData = (right as any)[rightKind];\n if (leftKind === \"Bool\" || leftKind === \"Int\") return comparePrimitive(leftData, rightData);\n if (leftKind === \"String\" || leftKind === \"Id\") return compareCodepoints(leftData, rightData);\n if (leftKind === \"Bytes\") {\n if (!canonicalBytes(leftData) || !canonicalBytes(rightData))\n throw new EvalError(\"E_INPUT\", \"Bytes is not canonical lowercase base16\");\n return compareCodepoints(leftData, rightData);\n }\n if (leftKind === \"Array\") return compareArrays(leftData, rightData);\n const leftEntries = Object.keys(leftData).sort(compareCodepoints);\n const rightEntries = Object.keys(rightData).sort(compareCodepoints);\n const length = comparePrimitive(leftEntries.length, rightEntries.length);\n if (length !== 0) return length;\n for (let index = 0; index < leftEntries.length; index += 1) {\n const key = compareCodepoints(leftEntries[index], rightEntries[index]);\n if (key !== 0) return key;\n const value = totalCompare(leftData[leftEntries[index]], rightData[rightEntries[index]]);\n if (value !== 0) return value;\n }\n return 0;\n}\n\nexport function compareArrays(left: Value[], right: Value[]): number {\n const length = Math.min(left.length, right.length);\n for (let index = 0; index < length; index += 1) {\n const compared = totalCompare(left[index], right[index]);\n if (compared !== 0) return compared;\n }\n return comparePrimitive(left.length, right.length);\n}\n\nexport function compareCodepoints(left: string, right: string): number {\n const leftPoints = Array.from(left, (character) => character.codePointAt(0)!);\n const rightPoints = Array.from(right, (character) => character.codePointAt(0)!);\n const length = Math.min(leftPoints.length, rightPoints.length);\n for (let index = 0; index < length; index += 1) {\n const compared = comparePrimitive(leftPoints[index], rightPoints[index]);\n if (compared !== 0) return compared;\n }\n return comparePrimitive(leftPoints.length, rightPoints.length);\n}\n\nexport function comparePrimitive(left: number | boolean, right: number | boolean): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nexport function stableSort<T>(values: T[], compare: (left: T, right: T) => number): T[] {\n if (values.length <= 1) return values;\n const middle = Math.floor(values.length / 2);\n const left = stableSort(values.slice(0, middle), compare);\n const right = stableSort(values.slice(middle), compare);\n const result: T[] = [];\n while (left.length > 0 && right.length > 0) {\n result.push(compare(left[0], right[0]) <= 0 ? left.shift()! : right.shift()!);\n }\n return result.concat(left, right);\n}\n\nexport function variant(value: any): [string, any] {\n if (typeof value === \"string\") return [value, null];\n const keys = Object.keys(value);\n if (keys.length !== 1) throw new EvalError(\"E_CORPUS\", \"invalid externally tagged variant\");\n return [keys[0], value[keys[0]]];\n}\n\n/** The wire encoding of an IR value \u2014 ids and text as strings, integers as\n * numbers, null as null, bytes as `{ Bytes: hex }`, rows and maps as objects,\n * arrays as arrays \u2014 the form the delivery envelope carries\n * (`offline.rs` `value_to_wire_json`). Verdict inputs are digested in it. */\nexport function wireJson(value: Value): unknown {\n const [kind, data] = variant(value);\n switch (kind) {\n case \"Null\": return null;\n case \"Bool\": case \"Int\": case \"String\": case \"Id\": return data;\n case \"Bytes\": return { Bytes: data };\n case \"Row\": case \"Map\":\n return Object.fromEntries(Object.keys(data).sort(compareCodepoints).map((key) => [key, wireJson(data[key])]));\n case \"Array\": return data.map(wireJson);\n default: throw new EvalError(\"E_INPUT\", `unsupported value kind ${kind}`);\n }\n}\n\n/** The digest a replay trace carries for a point read: SHA-256 over the canonical\n * wire row, exactly `snapback2-core`'s `row_digest` (`offline.rs`). */\nexport function rowDigest(row: Value): string {\n return sha256(JSON.stringify(wireJson(row)));\n}\n\n/** `Schema::rule_hash`: the schema hash beside the rule in serde's field order. */\nexport function scopedRuleHash(schema: any, rule: any): string {\n return sha256(`[${JSON.stringify(sha256(canonicalSchemaJson(schema)))},${canonicalRuleJson(rule)}]`);\n}\n\nexport function kindOf(value: Value): string {\n if (value === \"Null\") return \"Null\";\n const keys = Object.keys(value);\n if (keys.length !== 1) throw new EvalError(\"E_INPUT\", \"invalid externally tagged value\");\n return keys[0];\n}\n\nexport function isVariant<K extends Exclude<ReturnType<typeof kindOf>, \"Null\">>(\n value: Value,\n kind: K,\n): value is Extract<Value, Record<K, unknown>> {\n return value !== \"Null\" && kindOf(value) === kind;\n}\n\nexport function valuesEqual(left: Value[], right: Value[]): boolean {\n return canonicalValues(left) === canonicalValues(right);\n}\n\nexport function sameValueZero(left: Value, right: Value): boolean {\n // @ref LLP 1002#2-the-authored-surface-the-snapback2-module \u2014 Keep the client twin on the compiler's primitive collection identity contract.\n const leftKind = kindOf(left);\n const rightKind = kindOf(right);\n if ([\"Bytes\", \"Row\", \"Array\", \"Map\"].includes(leftKind)) {\n throw new EvalError(\"E_TYPE\", `SameValueZero expects primitive operands, got ${leftKind}`);\n }\n if ([\"Bytes\", \"Row\", \"Array\", \"Map\"].includes(rightKind)) {\n throw new EvalError(\"E_TYPE\", `SameValueZero expects primitive operands, got ${rightKind}`);\n }\n if ((leftKind === \"String\" || leftKind === \"Id\") && (rightKind === \"String\" || rightKind === \"Id\")) {\n const leftText = isVariant(left, \"String\") ? left.String : (left as { Id: string }).Id;\n const rightText = isVariant(right, \"String\") ? right.String : (right as { Id: string }).Id;\n return leftText === rightText;\n }\n return canonicalValue(left) === canonicalValue(right);\n}\n\nexport function startsWith<T>(values: T[], prefix: T[]): boolean {\n return prefix.every((value, index) => values[index] === value);\n}\n\nexport function validHttpUrl(value: string): boolean {\n const rest = value.startsWith(\"https://\")\n ? value.slice(\"https://\".length)\n : value.startsWith(\"http://\")\n ? value.slice(\"http://\".length)\n : \"\";\n return rest.length > 0 && !/[\\p{White_Space}\\p{Cc}]/u.test(rest);\n}\n\nexport function canonicalJson(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(canonicalJson).join(\",\")}]`;\n if (value !== null && typeof value === \"object\") {\n return `{${Object.keys(value)\n .sort(compareCodepoints)\n .map((key) => `${JSON.stringify(key)}:${canonicalJson((value as any)[key])}`)\n .join(\",\")}}`;\n }\n return JSON.stringify(value);\n}\n\nexport function validateWriteRow(schema: any, tableName: string, row: Value): void {\n const columns = schema.tables?.[tableName]?.columns;\n if (columns === undefined) throw new EvalError(\"E_SCHEMA\", `missing table ${tableName}`);\n const object = asObject(row);\n if (!hasOwn(object, \"id\")) throw new EvalError(\"E_SCHEMA\", `${tableName} row lacks id`);\n const unknown = Object.keys(object).find((name) => !hasOwn(columns, name));\n if (unknown !== undefined)\n throw new EvalError(\"E_INPUT\", `${tableName} row contains undeclared field ${unknown}`);\n for (const [name, descriptor] of Object.entries<any>(columns)) {\n const value = hasOwn(object, name) ? object[name] : undefined;\n if (value === undefined && descriptor?.Optional === undefined)\n throw new EvalError(\"E_INPUT\", `${tableName}.${name} is required`);\n if (value !== undefined) validateTypedValue(descriptor, value, `${tableName}.${name}`, false);\n }\n}\n\nexport function validateInputs(schema: any, program: any, inputs: Record<string, Value>): void {\n for (const [name, descriptor] of Object.entries<any>(program.args ?? {})) {\n const value = inputs[name];\n if (value === undefined) throw new EvalError(\"E_INPUT\", `missing arg ${name}`);\n validateTypedValue(descriptor, value, `arg ${name}`, true);\n }\n validateOpaqueCursors(schema, program.body, inputs);\n}\n\nfunction validateOpaqueCursors(schema: any, value: any, inputs: Record<string, Value>): void {\n const visitValue = (candidate: any, values: Record<string, Value>): void => {\n if (Array.isArray(candidate)) {\n for (const item of candidate) visitValue(item, values);\n return;\n }\n if (candidate === null || typeof candidate !== \"object\") return;\n const scan = candidate.Scan;\n if (scan?.opaque_cursor) {\n if (scan.before !== null) throw new EvalError(\"E_INPUT\", \"opaque cursors only support after\");\n const cursor = scan.after === null ? \"Null\" : inputExpression(scan.after, values);\n if (cursor !== \"Null\") {\n if (!isVariant(cursor, \"String\")) throw new EvalError(\"E_INPUT\", \"opaque cursor must be a string\");\n decodeCursorFor(cursor.String, {\n table: scan.table,\n index: scan.index,\n order: scan.order,\n suffix: cursorSuffix(schema, scan),\n });\n }\n }\n for (const child of Object.values(candidate)) visitValue(child, values);\n };\n const visitBody = (statements: any[], values: Record<string, Value>): void => {\n for (const statement of statements) {\n if (statement === null || typeof statement !== \"object\") continue;\n const binding = statement.Const ?? statement.Let ?? statement.Assign;\n if (binding) {\n visitValue(binding.value, values);\n const resolved = staticInputExpression(binding.value, values);\n if (resolved === undefined) delete values[binding.name];\n else values[binding.name] = resolved;\n continue;\n }\n if (statement.If) {\n visitValue(statement.If.condition, values);\n const thenValues = { ...values };\n const elseValues = { ...values };\n visitBody(statement.If.then_body, thenValues);\n visitBody(statement.If.else_body, elseValues);\n for (const name of Object.keys(values)) {\n if (!(name in thenValues) || !(name in elseValues)\n || canonicalValue(thenValues[name]) !== canonicalValue(elseValues[name])) delete values[name];\n }\n continue;\n }\n if (statement.For) {\n visitValue(statement.For.domain, values);\n visitBody(statement.For.body, { ...values });\n continue;\n }\n visitValue(statement, values);\n }\n };\n visitBody(value, { ...inputs });\n}\n\nfunction inputExpression(expression: any, inputs: Record<string, Value>): Value {\n const value = staticInputExpression(expression, inputs);\n if (value !== undefined) return value;\n throw new EvalError(\"E_INPUT\", \"opaque cursor expression must derive from an operation argument\");\n}\n\nfunction staticInputExpression(expression: any, inputs: Record<string, Value>): Value | undefined {\n if (expression?.Variable !== undefined) return inputs[expression.Variable];\n if (expression?.Literal !== undefined) return expression.Literal;\n return undefined;\n}\n\nexport function validateTypedValue(\n descriptor: any,\n value: Value,\n label: string,\n fanoutForLongList: boolean,\n): void {\n assertValue(value, label);\n if (valueContainsReservedPrincipal(value))\n throw new EvalError(\"E_INPUT\", `${label} cannot carry the reserved system principal`);\n if (descriptorContainsAsset(descriptor)) {\n validateAssetTypedValue(descriptor, value, label);\n return;\n }\n if (descriptor?.Optional !== undefined) {\n if (value !== \"Null\") validateTypedValue(descriptor.Optional, value, label, fanoutForLongList);\n return;\n }\n if (descriptor?.List !== undefined) {\n if (!isVariant(value, \"Array\")) throw new EvalError(\"E_INPUT\", `${label} must be a list`);\n if (value.Array.length > descriptor.List.max)\n throw new EvalError(fanoutForLongList ? \"E_FANOUT\" : \"E_INPUT\", `${label} exceeds list max ${descriptor.List.max}`);\n if (descriptor.List.of !== null && descriptor.List.of !== undefined) {\n for (const item of value.Array)\n validateTypedValue(descriptor.List.of, item, label, fanoutForLongList);\n }\n return;\n }\n if (descriptor === \"Cursor\") {\n if (!isVariant(value, \"String\")) throw new EvalError(\"E_INPUT\", `${label} must be a cursor string`);\n decodeCursor(value.String);\n return;\n }\n if (descriptor === \"Scalar\") return;\n if (descriptor === \"Id\" || descriptor === \"Principal\" || descriptor?.Ref !== undefined) {\n if (!isVariant(value, \"Id\")) throw new EvalError(\"E_INPUT\", `${label} must be an id`);\n return;\n }\n if (descriptor?.Text !== undefined) {\n if (!isVariant(value, \"String\")) throw new EvalError(\"E_INPUT\", `${label} must be text`);\n const codePoint = disallowedTextControlCodePoint(value.String);\n if (codePoint !== undefined)\n throw new EvalError(\"E_INPUT\", `${label} contains disallowed control character U+${codePoint.toString(16).toUpperCase().padStart(4, \"0\")}`);\n if (Array.from(value.String).length > descriptor.Text.max)\n throw new EvalError(\"E_INPUT\", `${label} exceeds text max ${descriptor.Text.max}`);\n return;\n }\n if (descriptor?.Bytes !== undefined) {\n if (!isVariant(value, \"Bytes\") || !canonicalBytes(value.Bytes))\n throw new EvalError(\"E_INPUT\", `${label} must be bytes`);\n if (value.Bytes.length / 2 > descriptor.Bytes.max)\n throw new EvalError(\"E_INPUT\", `${label} exceeds bytes max ${descriptor.Bytes.max}`);\n return;\n }\n if ([\"Int\", \"Time\"].includes(descriptor) || descriptor?.Decimal !== undefined || descriptor?.Money !== undefined) {\n if (!isVariant(value, \"Int\") || !Number.isSafeInteger(value.Int))\n throw new EvalError(\"E_INPUT\", `${label} must be an i53 integer`);\n return;\n }\n if (descriptor === \"Bool\") {\n if (!isVariant(value, \"Bool\")) throw new EvalError(\"E_INPUT\", `${label} must be a boolean`);\n return;\n }\n if (descriptor?.Json !== undefined) {\n if (utf8Length(canonicalValue(value)) > descriptor.Json.max_bytes)\n throw new EvalError(\"E_INPUT\", `${label} exceeds JSON max ${descriptor.Json.max_bytes} bytes`);\n return;\n }\n if (descriptor?.Enum !== undefined) {\n if (!isVariant(value, \"String\") || !descriptor.Enum.variants.includes(value.String))\n throw new EvalError(\"E_INPUT\", `${label} is not a declared enum value`);\n return;\n }\n throw new EvalError(\"E_SCHEMA\", `unsupported type for ${label}`);\n}\n\nfunction disallowedTextControlCodePoint(text: string): number | undefined {\n for (const character of text) {\n const codePoint = character.codePointAt(0)!;\n if (codePoint < 0x20 && ![0x09, 0x0a, 0x0d].includes(codePoint)) return codePoint;\n }\n return undefined;\n}\n\nfunction descriptorContainsAsset(descriptor: any): boolean {\n if (descriptor?.Image !== undefined || descriptor?.Video !== undefined) return true;\n if (descriptor?.Optional !== undefined) return descriptorContainsAsset(descriptor.Optional);\n if (descriptor?.List?.of !== null && descriptor?.List?.of !== undefined)\n return descriptorContainsAsset(descriptor.List.of);\n return false;\n}\n\n// @ref LLP 1006#6-the-write-validated-not-stamped \u2014 the twin enforces the closed asset record and list uniqueness but owns no ledger authority.\nfunction validateAssetTypedValue(descriptor: any, value: Value, label: string): string[] {\n if (descriptor?.Optional !== undefined) {\n return value === \"Null\" ? [] : validateAssetTypedValue(descriptor.Optional, value, label);\n }\n if (descriptor?.List !== undefined) {\n if (!isVariant(value, \"Array\")) throw assetType(`${label} must be a list`);\n if (value.Array.length > descriptor.List.max)\n throw assetType(`${label} exceeds list max ${descriptor.List.max}`);\n const ids = value.Array.flatMap((item, index) =>\n validateAssetTypedValue(descriptor.List.of, item, `${label}[${index}]`),\n );\n const seen = new Set<string>();\n const duplicate = ids.find((id) => seen.has(id) || !seen.add(id));\n if (duplicate !== undefined)\n throw assetType(`${label} repeats asset id ${duplicate}; asset ids in a list must be unique`);\n return ids;\n }\n const kind = descriptor?.Image !== undefined ? \"image\" : descriptor?.Video !== undefined ? \"video\" : null;\n if (kind === null) throw new EvalError(\"E_SCHEMA\", `unsupported asset type for ${label}`);\n if (!isVariant(value, \"Map\")) throw assetType(`${label} must be a closed ${kind} asset map`);\n const expected = kind === \"image\" ? [\"height\", \"id\", \"width\"] : [\"duration\", \"height\", \"id\", \"width\"];\n const actual = Object.keys(value.Map).sort(compareCodepoints);\n if (actual.length !== expected.length || actual.some((name, index) => name !== expected[index]))\n throw assetType(`${label} must contain exactly ${expected.join(\", \")}`);\n const idValue = value.Map.id;\n const id = isVariant(idValue, \"String\") ? idValue.String : \"\";\n if (!validEngineId(id)) throw assetType(`${label}.id must be a minted s2id`);\n for (const field of kind === \"image\" ? [\"width\", \"height\"] : [\"width\", \"height\", \"duration\"]) {\n const member = value.Map[field];\n if (!isVariant(member, \"Int\") || !Number.isSafeInteger(member.Int) || member.Int <= 0)\n throw assetType(`${label}.${field} must be a positive i53 integer`);\n }\n return [id];\n}\n\nfunction validEngineId(id: string): boolean {\n return /^s2id-[0-9a-f]{32}-[0-9a-f]{16}$/.test(id) && !id.endsWith(\"-0000000000000000\");\n}\n\nfunction assetType(message: string): EvalError {\n return new EvalError(\"E_ASSET_TYPE\", message);\n}\n\nexport function assertValue(value: Value, label: string): void {\n if (value === \"Null\") return;\n const kind = kindOf(value);\n const data = (value as any)[kind];\n if (kind === \"Bool\" && typeof data === \"boolean\") return;\n if (kind === \"Int\" && Number.isSafeInteger(data)) return;\n if ((kind === \"String\" || kind === \"Id\") && typeof data === \"string\") return;\n if (kind === \"Bytes\" && canonicalBytes(data)) return;\n if (kind === \"Array\" && Array.isArray(data)) {\n for (const item of data) assertValue(item, label);\n return;\n }\n if ((kind === \"Row\" || kind === \"Map\") && data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n for (const item of Object.values(data)) assertValue(item as Value, label);\n return;\n }\n throw new EvalError(\"E_INPUT\", `${label} is not a valid value`);\n}\n\nexport function valueContainsReservedPrincipal(value: Value): boolean {\n if (isVariant(value, \"Id\")) return value.Id === coreIrContract.systemPrincipalId;\n if (isVariant(value, \"Array\")) return value.Array.some(valueContainsReservedPrincipal);\n if (isVariant(value, \"Row\")) return Object.values(value.Row).some(valueContainsReservedPrincipal);\n if (isVariant(value, \"Map\")) return Object.values(value.Map).some(valueContainsReservedPrincipal);\n return false;\n}\n\nexport function canonicalBytes(value: unknown): value is string {\n return typeof value === \"string\" && /^(?:[0-9a-f]{2})*$/.test(value);\n}\n\nexport function hasOwn(value: object, key: PropertyKey): boolean {\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nexport function clone<T>(value: T): T {\n if (value === null || value === undefined) return value;\n return JSON.parse(JSON.stringify(value));\n}\n\nexport function sortObject<T>(value: Record<string, T>): Record<string, T> {\n const sorted: Record<string, T> = Object.create(null);\n for (const key of Object.keys(value).sort(compareCodepoints)) sorted[key] = value[key];\n return sorted;\n}\n\nexport function builtinArity(kind: string): number {\n switch (kind) {\n case \"Len\": case \"Sort\": case \"DedupeById\": case \"MentionTokens\": case \"Count\": case \"CountCapped\": case \"Sum\": return 1;\n case \"Concat\": case \"Min\": case \"Max\": case \"Divmod\": return 2;\n case \"Slice\": case \"DeterministicShare\": return 3;\n default: throw new EvalError(\"E_OPAQUE\", `unsupported builtin ${kind}`);\n }\n}\n\nexport function valueText(value: Value): string {\n if (value === \"Null\") return \"null\";\n if (isVariant(value, \"Bool\")) return String(value.Bool);\n if (isVariant(value, \"Int\")) return String(value.Int);\n if (isVariant(value, \"String\")) return value.String;\n if (isVariant(value, \"Id\")) return value.Id;\n if (isVariant(value, \"Bytes\")) return value.Bytes;\n if (isVariant(value, \"Array\")) return value.Array.map(valueText).join(\",\");\n return \"[object Object]\";\n}\n\nexport function isWordCharacter(character: string): boolean {\n return character === \"_\" || /[\\p{L}\\p{N}]/u.test(character);\n}\n", "export function splitMentionTokens(text: string): string[] {\n const tokens: string[] = [];\n let token = \"\";\n for (const character of text) {\n if (isMentionWhitespace(character.codePointAt(0)!)) {\n if (token.length > 0) tokens.push(token);\n token = \"\";\n } else {\n token += character;\n }\n }\n if (token.length > 0) tokens.push(token);\n return tokens;\n}\n\nfunction isMentionWhitespace(point: number): boolean {\n return (\n (point >= 0x0009 && point <= 0x000d) ||\n point === 0x0020 ||\n point === 0x0085 ||\n point === 0x00a0 ||\n point === 0x1680 ||\n (point >= 0x2000 && point <= 0x200a) ||\n point === 0x2028 ||\n point === 0x2029 ||\n point === 0x202f ||\n point === 0x205f ||\n point === 0x3000\n );\n}\n", "import coreIrContract from \"../../../crates/snapback2-core/ir-contract.json\" with { type: \"json\" };\nimport { EvalError, requireRowIdentity } from \"./errors\";\nimport { cursorSuffix, decodeCursorFor, encodeCursor } from \"./cursor\";\nimport { sha256 } from \"./hash\";\nimport { splitMentionTokens } from \"./text\";\nimport type { ClientStore } from \"./store\";\nimport {\n asArray,\n asBool,\n asInt,\n asObject,\n asString,\n builtinArity,\n canonicalJson,\n canonicalValue,\n canonicalValues,\n clone,\n compareCodepoints,\n field,\n fieldOrNull,\n int,\n isVariant,\n isWordCharacter,\n materializeOptionalFields,\n rowDigest,\n rowValue,\n safeNumber,\n sameValueZero,\n scopedRuleHash,\n stableSort,\n startsWith,\n totalCompare,\n validHttpUrl,\n validateWriteRow,\n valueText,\n variant, wireJson,\n} from \"./value-runtime\";\nimport type { Context, Execution, Trace, TraceVerdict, TraceWrite, Value } from \"./types\";\n\nexport const CURRENT_VALUE_MODEL_VERSION = coreIrContract.valueModelVersion;\n\ntype Flow =\n | { kind: \"next\" }\n | { kind: \"break\" }\n | { kind: \"continue\" }\n | { kind: \"return\"; value: Value };\n\nconst NEXT: Flow = { kind: \"next\" };\n\nexport class Runner {\n private readonly env = new Map<string, Value>();\n private readonly consts = new Set<string>();\n private readonly context: Context;\n readonly trace: Trace = { ranges: [], absences: [], points: [], merges: [], verdicts: [] };\n private readonly ruleMemo = new Map<string, boolean>();\n /** Verdicts the rule check in progress derived; committed to the trace only when the check discloses the row. */\n private pendingVerdicts: TraceVerdict[] = [];\n private readonly tracedVerdicts = new Set<string>();\n private readonly writes = new Map<string, TraceWrite>();\n private readonly partial = new Set<string>();\n private authorityMissSerial = 0;\n /** Engine-owned aggregate targets this run could not update because they are not held. */\n private readonly unheldMaintainTargets: string[] = [];\n private readonly createdRows = new Set<string>();\n private readonly insertedRows: Array<{ table: string; row: Value }> = [];\n private createdPoints: Array<{\n table: string;\n index: string;\n key: string;\n rowId: string;\n }> = [];\n\n constructor(\n private readonly store: ClientStore,\n private readonly schema: any,\n context: Context,\n private readonly certificate: any,\n ) {\n this.context = clone(context);\n for (const [name, value] of Object.entries(context.args)) {\n this.env.set(name, clone(value));\n }\n }\n\n execute(program: any): Execution {\n const flow = this.statements(program.body);\n this.checkFinalConstraints();\n return {\n result: this.partial.size === 0 && flow.kind === \"return\" ? flow.value : \"Null\",\n trace: this.trace,\n next: mintNext(this.schema, this.certificate, this.trace),\n writes: [...this.writes.values()],\n };\n }\n\n coverageMisses(): string[] {\n return Array.from(this.partial).sort(compareCodepoints);\n }\n\n /** Where `missing-authority` came from: unheld maintained targets versus rule inputs and write rows. */\n authorityMisses(): { maintainTargets: string[]; other: number } {\n return { maintainTargets: [...this.unheldMaintainTargets], other: this.authorityMissSerial - this.unheldMaintainTargets.length };\n }\n\n private statements(statements: any[]): Flow {\n for (const statement of statements) {\n const [kind, data] = variant(statement);\n let flow: Flow = NEXT;\n switch (kind) {\n case \"Const\":\n this.env.set(data.name, this.expr(data.value));\n this.consts.add(data.name);\n break;\n case \"Let\":\n this.env.set(data.name, this.expr(data.value));\n break;\n case \"Assign\":\n if (this.consts.has(data.name))\n throw new EvalError(\"E_INPUT\", `cannot assign to const binding ${data.name}`);\n this.env.set(data.name, this.expr(data.value));\n break;\n case \"Push\": {\n const target = this.env.get(data.target);\n if (target === undefined || !isVariant(target, \"Array\"))\n throw new EvalError(\"E_TYPE\", \"push target is not an array\");\n target.Array.push(this.expr(data.value));\n break;\n }\n case \"If\":\n flow = this.statements(\n asBool(this.expr(data.condition)) ? data.then_body : data.else_body,\n );\n break;\n case \"For\": {\n for (const value of this.domain(data.domain)) {\n this.env.set(data.binding, value);\n const bodyFlow = this.statements(data.body);\n if (bodyFlow.kind === \"continue\" || bodyFlow.kind === \"next\") continue;\n if (bodyFlow.kind === \"break\") break;\n flow = bodyFlow;\n break;\n }\n break;\n }\n case \"Require\":\n if (!asBool(this.expr(data.condition)))\n throw new EvalError(\"E_REQUIRE\", \"program requirement failed\", data.code);\n break;\n case \"Insert\":\n this.insert(data.table, this.expr(data.row));\n break;\n case \"Update\":\n this.update(data.table, this.expr(data.key), this.expr(data.patch));\n break;\n case \"Upsert\": {\n const key = this.expr(data.key);\n const row = this.expr(data.row);\n this.validateAddressedRowId(data.table, key, row);\n if (this.store.byId(data.table, asString(key)) === null) this.insert(data.table, row);\n else this.replace(data.table, key, row);\n break;\n }\n case \"Delete\":\n this.delete(data.table, asString(this.expr(data.key)));\n break;\n // @ref LLP 1001#8-emit-and-the-outbox \u2014 the twin does not run effects, but it must consume the authoritative outbox id.\n case \"Emit\":\n this.expr(data.payload);\n if (this.context.new_ids.shift() === undefined)\n throw new EvalError(\"E_INPUT\", \"newId envelope exhausted\");\n break;\n case \"Return\":\n flow = { kind: \"return\", value: this.expr(data) };\n break;\n case \"Break\":\n flow = { kind: \"break\" };\n break;\n case \"Continue\":\n flow = { kind: \"continue\" };\n break;\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported statement ${kind}`);\n }\n if (flow.kind !== \"next\") return flow;\n }\n return NEXT;\n }\n\n private domain(domain: any): Value[] {\n const [kind, data] = variant(domain);\n switch (kind) {\n case \"Page\":\n return asArray(this.scan(data));\n case \"LiteralRange\": {\n const values: Value[] = [];\n for (let value = data.start; value < data.end_exclusive; value += 1) {\n values.push(int(value));\n }\n return values;\n }\n case \"ArgList\": {\n const values = asArray(this.requiredEnv(data.name));\n if (values.length > data.max) throw new EvalError(\"E_FANOUT\", \"argument list bound\");\n return values;\n }\n case \"DerivedArray\": {\n const values = asArray(this.expr(data.value));\n if (values.length > data.max) throw new EvalError(\"E_FANOUT\", \"derived array bound\");\n return values;\n }\n case \"Recurse\":\n return this.recurse(data);\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported loop domain ${kind}`);\n }\n }\n\n private recurse(recurse: any): Value[] {\n const queue: [Value, number][] = [[this.expr(recurse.seed), 0]];\n const visited = new Set<string>();\n const rows: Value[] = [];\n while (queue.length > 0) {\n const [key, depth] = queue.shift()!;\n const canonical = canonicalValue(key);\n if (depth > recurse.depth || visited.has(canonical)) continue;\n visited.add(canonical);\n const row = this.get({\n site: recurse.site,\n table: recurse.table,\n index: recurse.index,\n key: [{ Literal: key }],\n provenance: recurse.provenance,\n });\n if (row === \"Null\") continue;\n const next = field(row, recurse.next_field);\n rows.push(row);\n if (next === \"Null\") continue;\n const successors = isVariant(next, \"Array\") ? next.Array : [next];\n if (successors.length > recurse.fanout)\n throw new EvalError(\"E_FANOUT\", \"recursive fanout exceeded\");\n for (const successor of successors) queue.push([successor, depth + 1]);\n }\n return rows;\n }\n\n private expr(expression: any): Value {\n const [kind, data] = variant(expression);\n switch (kind) {\n case \"Literal\":\n return clone(data);\n case \"Variable\":\n return clone(this.requiredEnv(data));\n case \"Input\":\n return this.input(data);\n case \"Field\":\n return clone(field(this.expr(data.base), data.name));\n case \"Array\":\n return { Array: data.map((value: any) => this.expr(value)) };\n case \"Object\": {\n const row: Record<string, Value> = Object.create(null);\n for (const key of Object.keys(data).sort(compareCodepoints)) row[key] = this.expr(data[key]);\n return { Row: row };\n }\n case \"Binary\":\n return this.binary(data);\n case \"Unary\": {\n const value = this.expr(data.value);\n if (data.op === \"Not\") return { Bool: !asBool(value) };\n if (data.op === \"Neg\") return int(-asInt(value));\n throw new EvalError(\"E_OPAQUE\", `unsupported unary ${data.op}`);\n }\n case \"Builtin\": {\n const builtinKind = variant(data.builtin)[0];\n const expected = builtinArity(builtinKind);\n if (data.args.length !== expected) {\n throw new EvalError(\"E_INPUT\", `${builtinKind} requires ${expected} arguments, received ${data.args.length}`);\n }\n return this.builtin(data.builtin, data.args.map((value: any) => this.expr(value)));\n }\n case \"Get\":\n return this.get(data);\n case \"Exists\":\n return { Bool: this.get(data) !== \"Null\" };\n case \"Scan\":\n return this.scan(data);\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported expression ${kind}`);\n }\n }\n\n private input(input: string): Value {\n switch (input) {\n case \"Viewer\":\n return { Id: this.context.viewer };\n case \"Now\":\n if (this.context.now === null) throw new EvalError(\"E_INPUT\", \"now was not pinned\");\n return int(this.context.now);\n case \"NewId\": {\n const next = this.context.new_ids.shift();\n if (next === undefined) throw new EvalError(\"E_INPUT\", \"newId envelope exhausted\");\n return { Id: next };\n }\n case \"ReadTime\":\n if (this.context.read_time === null)\n throw new EvalError(\"E_INPUT\", \"readTime was not pinned\");\n return int(this.context.read_time);\n default:\n throw new EvalError(\"E_INPUT\", `unknown modeled input ${input}`);\n }\n }\n\n private binary(data: any): Value {\n const left = this.expr(data.left);\n if (data.op === \"And\" && !asBool(left)) return { Bool: false };\n if (data.op === \"Or\" && asBool(left)) return { Bool: true };\n const right = this.expr(data.right);\n switch (data.op) {\n case \"Eq\":\n return { Bool: canonicalValue(left) === canonicalValue(right) };\n case \"Ne\":\n return { Bool: canonicalValue(left) !== canonicalValue(right) };\n case \"SameValueZero\":\n return { Bool: sameValueZero(left, right) };\n case \"Lt\":\n return { Bool: totalCompare(left, right) < 0 };\n case \"Lte\":\n return { Bool: totalCompare(left, right) <= 0 };\n case \"Gt\":\n return { Bool: totalCompare(left, right) > 0 };\n case \"Gte\":\n return { Bool: totalCompare(left, right) >= 0 };\n case \"Add\":\n return int(asInt(left) + asInt(right));\n case \"Sub\":\n return int(asInt(left) - asInt(right));\n case \"Mul\":\n return int(asInt(left) * asInt(right));\n case \"And\":\n return { Bool: asBool(left) && asBool(right) };\n case \"Or\":\n return { Bool: asBool(left) || asBool(right) };\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported binary ${data.op}`);\n }\n }\n\n private builtin(builtin: any, args: Value[]): Value {\n const [kind, data] = variant(builtin);\n switch (kind) {\n case \"Len\": {\n const value = args[0];\n if (isVariant(value, \"String\")) return int(Array.from(value.String).length);\n if (isVariant(value, \"Id\")) return int(Array.from(value.Id).length);\n if (isVariant(value, \"Array\")) return int(value.Array.length);\n if (isVariant(value, \"Row\")) return int(Object.keys(value.Row).length);\n if (isVariant(value, \"Map\")) return int(Object.keys(value.Map).length);\n throw new EvalError(\"E_TYPE\", \"len expects string, array, or map\");\n }\n case \"Slice\": {\n const start = Math.max(0, asInt(args[1]));\n const end = Math.max(0, asInt(args[2]));\n if (isVariant(args[0], \"Array\")) return { Array: args[0].Array.slice(start, end) };\n if (isVariant(args[0], \"String\"))\n return { String: Array.from(args[0].String).slice(start, end).join(\"\") };\n throw new EvalError(\"E_TYPE\", \"slice expects array or string\");\n }\n case \"Concat\": {\n const [left, right] = args;\n if (isVariant(left, \"String\") || isVariant(right, \"String\"))\n return { String: valueText(left) + valueText(right) };\n if (isVariant(left, \"Id\") && isVariant(right, \"Id\"))\n return { Id: canonicalValues([left, right]) };\n if (isVariant(left, \"Array\") && isVariant(right, \"Array\"))\n return { Array: left.Array.concat(right.Array) };\n throw new EvalError(\"E_TYPE\", \"concat operands differ\");\n }\n case \"Min\":\n return totalCompare(args[0], args[1]) <= 0 ? args[0] : args[1];\n case \"Max\":\n return totalCompare(args[0], args[1]) >= 0 ? args[0] : args[1];\n case \"Divmod\": {\n const numerator = asInt(args[0]);\n const denominator = asInt(args[1]);\n if (denominator === 0) throw new EvalError(\"E_DIV_ZERO\", \"division by zero\");\n let quotient = Math.trunc(numerator / denominator);\n let remainder = numerator - quotient * denominator;\n if (remainder < 0) {\n if (denominator > 0) {\n quotient -= 1;\n remainder += denominator;\n } else {\n quotient += 1;\n remainder -= denominator;\n }\n }\n return rowValue({\n quotient: int(quotient),\n remainder: int(remainder),\n sink: { String: data.remainder_sink },\n });\n }\n case \"Sort\": {\n const values = asArray(args[0]).slice();\n for (const value of values) {\n for (const key of data.keys) field(value, key.field);\n }\n return {\n Array: stableSort(values, (left, right) => {\n for (const key of data.keys) {\n let compared = totalCompare(field(left, key.field), field(right, key.field));\n if (key.order === \"Desc\") compared = -compared;\n if (compared !== 0) return compared;\n }\n return 0;\n }),\n };\n }\n case \"DedupeById\": {\n const seen = new Set<string>();\n const values: Value[] = [];\n for (const value of asArray(args[0])) {\n const id = asString(field(value, \"id\"));\n if (!seen.has(id)) {\n seen.add(id);\n values.push(value);\n }\n }\n const page = this.certificate?.result_page_site;\n const take = this.certificate?.merge_sites?.find((entry: any) => entry.site === data.site)?.take;\n const row = page?.merge && page.site === data.site && Number.isInteger(take)\n ? values.slice(0, take).at(-1) : undefined;\n this.trace.merges.push({\n site: data.site,\n deduplicated_union_len: values.length,\n last_returned_suffix: row === undefined ? null : page.suffix.map((column: any) => clone(field(row, column.name))),\n });\n return { Array: values };\n }\n case \"MentionTokens\": {\n const seen = new Set<string>();\n const mentions: Value[] = [];\n for (const token of splitMentionTokens(asString(args[0]))) {\n if (!token.startsWith(\"@\")) continue;\n const characters = Array.from(token.slice(1));\n while (characters.length > 0 && !isWordCharacter(characters[0])) characters.shift();\n while (\n characters.length > 0 &&\n !isWordCharacter(characters[characters.length - 1])\n )\n characters.pop();\n const mention = characters.join(\"\");\n if (mention.length > 0 && !seen.has(mention)) {\n seen.add(mention);\n mentions.push({ String: mention });\n }\n }\n return { Array: mentions };\n }\n case \"DeterministicShare\": {\n const amount = asInt(args[0]);\n const recipients = stableSort(asArray(args[1]).slice(), totalCompare);\n if (recipients.length === 0) throw new EvalError(\"E_DIV_ZERO\", \"no recipients\");\n if (new Set(recipients.map(canonicalValue)).size !== recipients.length)\n throw new EvalError(\"E_INPUT\", \"share recipients must be unique\");\n const recipient = args[2];\n const position = recipients.findIndex(\n (candidate) => canonicalValue(candidate) === canonicalValue(recipient),\n );\n if (position < 0) throw new EvalError(\"E_INPUT\", \"recipient missing from shares\");\n const base = Math.floor(amount / recipients.length);\n const remainder = amount - base * recipients.length;\n return int(base + (position < remainder ? 1 : 0));\n }\n case \"Count\":\n case \"CountCapped\":\n return int(asArray(args[0]).length);\n case \"Sum\": {\n let sum = 0;\n for (const value of asArray(args[0])) sum = safeNumber(sum + asInt(value));\n return int(sum);\n }\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported builtin ${kind}`);\n }\n }\n\n private get(read: any): Value {\n const key = read.key.map((value: any) => this.expr(value));\n const found = this.store.lookup(read.table, read.index, key);\n const disclosed = found !== null && this.checkRule(read.table, \"read\", null, found);\n // @ref LLP 1012#7-writes-offline \u2014 the point digest is what the program\n // observed: the wire row when disclosed, an absence when missing or hidden.\n this.trace.points.push({\n site: read.site,\n table: read.table,\n index: read.index,\n key: key.map(clone),\n digest: disclosed ? rowDigest(found) : null,\n ...(typeof read.provenance === \"string\" ? { provenance: read.provenance } : {}),\n });\n if (found === null) {\n this.trace.absences.push({\n site: read.site,\n table: read.table,\n index: read.index,\n key,\n ...(typeof read.provenance === \"string\" ? { provenance: read.provenance } : {}),\n });\n return \"Null\";\n }\n return disclosed ? clone(found) : \"Null\";\n }\n\n private scan(scan: any): Value {\n const prefix = scan.prefix.map((value: any) => this.expr(value));\n let after = scan.after === null ? null : this.expr(scan.after);\n const before = scan.before === null ? null : this.expr(scan.before);\n if (scan.opaque_cursor && after === \"Null\") after = null;\n else if (scan.opaque_cursor && after !== null) {\n if (!isVariant(after, \"String\")) throw new EvalError(\"E_INPUT\", \"opaque cursor must be a string\");\n after = decodeCursorFor(after.String, {\n table: scan.table, index: scan.index, order: scan.order, suffix: cursorSuffix(this.schema, scan),\n });\n }\n const evaluatedRange = scan.range === null ? null : this.evaluateRange(scan.range);\n const [boundKind, boundData] = variant(scan.take);\n const take =\n boundKind === \"Literal\"\n ? boundData\n : asInt(this.context.args[boundData.name] ?? this.requiredEnv(boundData.name));\n if (!Number.isInteger(take) || take < 0 || (boundKind === \"Arg\" && take > boundData.max))\n throw new EvalError(\"E_FANOUT\", \"scan take exceeded\");\n const examined = this.store.scan(\n scan.table,\n scan.index,\n prefix,\n after,\n before,\n evaluatedRange,\n scan.order,\n take + 2,\n );\n const stop = examined.length > take ? \"limit\" : \"exhausted\";\n const visible = examined.filter((row) =>\n this.checkRule(scan.table, \"read\", null, row)\n );\n const returned = visible.slice(0, take);\n const suffix = cursorSuffix(this.schema, scan);\n this.trace.ranges.push({\n site: scan.site,\n table: scan.table,\n index: scan.index,\n ...(typeof scan.provenance === \"string\" ? { provenance: scan.provenance } : {}),\n prefix,\n order: scan.order,\n take,\n after,\n before,\n gt: evaluatedRange?.gt ?? null,\n gte: evaluatedRange?.gte ?? null,\n lt: evaluatedRange?.lt ?? null,\n lte: evaluatedRange?.lte ?? null,\n rule_hash: scopedRuleHash(this.schema, this.schema.tables[scan.table].rules.read),\n stop,\n lastReturnedSuffix: returned.length === 0 ? null\n : suffix.map((column) => clone(field(returned[returned.length - 1]!, column.name))),\n });\n return { Array: returned.map(clone) };\n }\n\n private evaluateRange(range: any): any {\n return {\n gt: range.gt === null ? null : this.expr(range.gt),\n gte: range.gte === null ? null : this.expr(range.gte),\n lt: range.lt === null ? null : this.expr(range.lt),\n lte: range.lte === null ? null : this.expr(range.lte),\n };\n }\n\n private insert(table: string, row: Value): void {\n row = materializeOptionalFields(this.schema, table, row);\n validateWriteRow(this.schema, table, row);\n if (!this.checkRule(table, \"insert\", null, row))\n throw new EvalError(\"E_RULE\", `${table} insert`);\n this.checkConstraints(table, null, row, \"insert\");\n if (this.store.byId(table, asString(field(row, \"id\"))) !== null)\n throw new EvalError(\"E_CONSTRAINT\", `duplicate id on ${table}`);\n this.store.put(table, row);\n this.recordWrite(table, row);\n this.rememberCreatedRow(table, row);\n this.insertedRows.push({ table, row: clone(row) });\n this.ruleMemo.clear();\n this.maintain(table, null, row);\n }\n\n private update(table: string, key: Value, patch: Value): void {\n const old = this.store.byId(table, asString(key));\n if (old === null) {\n this.missingWriteRow(table, asString(key));\n return;\n }\n const object = { ...asObject(old), ...asObject(patch) };\n this.replace(table, key, rowValue(object));\n }\n\n private replace(table: string, key: Value, row: Value): void {\n const old = this.store.byId(table, asString(key));\n if (old === null) throw new EvalError(\"E_INPUT\", `missing ${table} row`);\n row = materializeOptionalFields(this.schema, table, row);\n validateWriteRow(this.schema, table, row);\n this.validateAddressedRowId(table, key, row);\n // @ref LLP 1001#9-schema-additions \u2014 update authority is one relation\n // evaluated once over the old and next row images.\n if (!this.checkRule(table, \"update\", old, row))\n throw new EvalError(\"E_RULE\", `${table} update`);\n this.checkConstraints(table, old, row, \"update\");\n this.store.put(table, row);\n this.recordWrite(table, row);\n this.refreshCreatedPoints(table, row);\n this.ruleMemo.clear();\n this.maintain(table, old, row);\n }\n\n private delete(table: string, id: string): void {\n const old = this.store.byId(table, id);\n if (old === null) {\n this.missingWriteRow(table, id);\n return;\n }\n if (!this.checkRule(table, \"delete\", null, old))\n throw new EvalError(\"E_RULE\", `${table} delete`);\n this.checkConstraints(table, old, old, \"delete\");\n this.store.remove(table, id);\n this.writes.set(`${table}\\0${id}`, { table, id, row: null });\n this.forgetCreatedPoints(table, id);\n this.ruleMemo.clear();\n this.maintain(table, old, null);\n }\n\n // @ref LLP 1011#b3-one-missing-row-rule-no-id-in-an-upsert-row \u2014 preserve\n // the engine's held/absent/unheld distinction in the receipt-only twin.\n private missingWriteRow(table: string, id: string): void {\n if (!this.store.authorityAbsence(table, id)) {\n this.partial.add(\"missing-authority\");\n this.authorityMissSerial += 1;\n return;\n }\n throw new EvalError(\"E_REQUIRE\", \"program requirement failed\", \"NOT_FOUND\");\n }\n\n private maintain(source: string, old: Value | null, next: Value | null): void {\n for (const maintain of this.schema.maintains ?? []) {\n if (maintain.source !== source) continue;\n if (old !== null) this.applyAggregate(maintain, old, -1);\n if (next !== null) this.applyAggregate(maintain, next, 1);\n }\n }\n\n private applyAggregate(maintain: any, source: Value, direction: number): void {\n // @ref LLP 1001#4-generation-and-runtime-registryrs-successorrs \u2014 maintained targets are engine-owned but still validated.\n source = materializeOptionalFields(this.schema, maintain.source, source);\n const group = maintain.by.map((name: string) => clone(field(source, name)));\n const idValue = canonicalValues(group);\n const [kind, data] = variant(maintain.kind);\n const delta =\n kind === \"Count\" ? direction : safeNumber(direction * asInt(field(source, data.of)));\n const existing = this.store.byId(maintain.target, idValue);\n if (existing === null && !this.store.authorityAbsence(maintain.target, idValue)) {\n this.partial.add(\"missing-authority\");\n this.authorityMissSerial += 1;\n this.unheldMaintainTargets.push(maintain.target);\n return;\n }\n const oldValue = existing === null ? 0 : asInt(field(existing, \"value\"));\n const object: Record<string, Value> = Object.assign(Object.create(null), {\n id: { Id: idValue },\n value: int(oldValue + delta),\n });\n maintain.by.forEach((name: string, index: number) => {\n object[name] = group[index];\n });\n const row = materializeOptionalFields(this.schema, maintain.target, rowValue(object));\n const effect = existing === null ? \"insert\" : \"update\";\n // Maintained targets are engine-owned. They bypass authored write rules\n // while retaining the same constraints and created-row provenance as Rust.\n validateWriteRow(this.schema, maintain.target, row);\n this.checkConstraints(maintain.target, existing, row, effect);\n this.store.put(maintain.target, row);\n this.recordWrite(maintain.target, row);\n if (existing === null) {\n this.rememberCreatedRow(maintain.target, row);\n this.insertedRows.push({ table: maintain.target, row: clone(row) });\n } else this.refreshCreatedPoints(maintain.target, row);\n this.ruleMemo.clear();\n }\n\n private recordWrite(table: string, row: Value): void {\n const id = asString(field(row, \"id\"));\n this.writes.set(`${table}\\0${id}`, { table, id, row: clone(row) });\n }\n\n private validateAddressedRowId(table: string, key: Value, row: Value): void {\n requireRowIdentity(table, \"addressed write\", asString(key), asString(field(row, \"id\")));\n }\n\n private rememberCreatedRow(table: string, row: Value): void {\n const id = asString(field(row, \"id\"));\n this.createdRows.add(`${table}\\0${id}`);\n this.refreshCreatedPoints(table, row);\n }\n\n private refreshCreatedPoints(table: string, row: Value): void {\n const rowId = asString(field(row, \"id\"));\n if (!this.createdRows.has(`${table}\\0${rowId}`)) return;\n this.forgetCreatedPoints(table, rowId);\n for (const [index, definition] of Object.entries<any>(\n this.schema.tables[table]?.indexes ?? {},\n )) {\n this.createdPoints.push({\n table,\n index,\n key: canonicalValues(\n definition.columns.map((column: string) => fieldOrNull(row, column)),\n ),\n rowId,\n });\n }\n }\n\n private forgetCreatedPoints(table: string, rowId: string): void {\n this.createdPoints = this.createdPoints.filter(\n (point) => point.table !== table || point.rowId !== rowId,\n );\n }\n\n private checkConstraints(\n tableName: string,\n old: Value | null,\n row: Value,\n effect: \"insert\" | \"update\" | \"delete\",\n ): void {\n const table = this.schema.tables[tableName];\n for (const constraint of table.constraints ?? []) {\n const [kind, data] = variant(constraint);\n if (kind === \"AppendOnly\" && effect !== \"insert\")\n throw new EvalError(\"E_CONSTRAINT\", `${tableName} is appendOnly`);\n if (\n kind === \"Immutable\" &&\n effect === \"update\" &&\n data.fields.some(\n (name: string) => canonicalValue(field(old!, name)) !== canonicalValue(field(row, name)),\n )\n )\n throw new EvalError(\"E_CONSTRAINT\", `${tableName} immutable fields changed`);\n if (kind === \"Unique\") this.checkUnique(tableName, data.index, old, row);\n if (kind === \"Cap\") {\n const entersGroup =\n effect === \"insert\" ||\n (effect === \"update\" && data.by.some((name: string) =>\n canonicalValue(field(old!, name)) !== canonicalValue(field(row, name))));\n if (!entersGroup) continue;\n const entry = Object.entries<any>(table.indexes).find(([, index]) =>\n startsWith(index.columns, data.by),\n );\n if (entry === undefined) throw new EvalError(\"E_SCHEMA\", \"cap index missing\");\n const prefix = data.by.map((name: string) => field(row, name));\n const existing = this.store.scan(\n tableName,\n entry[0],\n prefix,\n null,\n null,\n null,\n \"Asc\",\n data.max,\n );\n if (existing.length >= data.max)\n throw new EvalError(\"E_CONSTRAINT\", `${tableName} cap reached`);\n if (!this.store.hasCompleteRange(tableName, entry[0], prefix)) {\n this.partial.add(`${tableName}.${entry[0]}`);\n }\n }\n if (kind === \"Text\" && (effect === \"insert\" || effect === \"update\")) {\n const value = asObject(row)[data.field];\n if (value !== undefined && value !== \"Null\") {\n const text = asString(value);\n if (Array.from(text).length < (data.min ?? 0))\n throw new EvalError(\n \"E_CONSTRAINT\",\n `${tableName}.${data.field} must contain at least ${data.min ?? 0} characters`,\n );\n const valid =\n data.format === undefined ||\n data.format === null ||\n (data.format === \"handle\" && /^[a-z0-9_]*$/.test(text)) ||\n (data.format === \"url\" && validHttpUrl(text));\n if (!valid)\n throw new EvalError(\n \"E_CONSTRAINT\",\n `${tableName}.${data.field} has invalid ${String(data.format)} format`,\n );\n }\n }\n }\n for (const [indexName, index] of Object.entries<any>(table.indexes)) {\n if (index.unique) this.checkUnique(tableName, indexName, old, row);\n }\n }\n\n private checkFinalConstraints(): void {\n for (const { table: sourceTable, row } of this.insertedRows) {\n for (const constraint of this.schema.tables[sourceTable]?.constraints ?? []) {\n const [kind, data] = variant(constraint);\n if (kind !== \"FinalExistsOnInsert\") continue;\n const key = data.key.map((term: any) => this.ruleTerm(term, null, row));\n if (this.store.lookup(data.table, data.index, key) === null)\n throw new EvalError(\n \"E_CONSTRAINT\",\n `${sourceTable} insert requires final row at ${data.table}.${data.index}`,\n );\n }\n }\n }\n\n private checkUnique(table: string, indexName: string, old: Value | null, row: Value): void {\n const index = this.schema.tables[table].indexes[indexName];\n const key = index.columns.map((name: string) => fieldOrNull(row, name));\n const found = this.store.lookup(table, indexName, key);\n if (\n found !== null &&\n (old === null || asString(field(found, \"id\")) !== asString(field(old, \"id\")))\n )\n throw new EvalError(\"E_CONSTRAINT\", `sealed unique conflict on ${table}.${indexName}`);\n if (\n indexName !== \"byId\" &&\n found === null &&\n !this.store.hasAbsence(table, indexName, key) &&\n !this.store.hasCompleteRange(table, indexName, key)\n ) {\n this.partial.add(`${table}.${indexName}`);\n }\n }\n\n private checkRule(\n table: string,\n effect: \"read\" | \"insert\" | \"update\" | \"delete\",\n old: Value | null,\n next: Value,\n ): boolean {\n // @ref LLP 1012#5-retention-revocation-and-the-fence \u2014 under `retain\n // delivered-history` a held row is readable to the twin: delivery was the\n // authorization, so the kept row renders under local evaluation too.\n if (effect === \"read\" && this.store.readable(table)) return true;\n const rule = this.schema.tables[table].rules[effect];\n const authorityMissSerial = this.authorityMissSerial;\n const outer = this.pendingVerdicts;\n this.pendingVerdicts = [];\n const allowed = this.evaluateRule(\n rule,\n scopedRuleHash(this.schema, rule),\n old,\n next,\n effect === \"insert\",\n ) && this.authorityMissSerial === authorityMissSerial;\n // Only a check that disclosed its row leaves verdicts on the trace: the\n // server discards the rule inputs a hidden candidate minted, so a traced\n // verdict from a failed check would be one nothing at commit derived.\n if (allowed) {\n for (const verdict of this.pendingVerdicts) {\n const key = `${verdict.rule_hash}\\0${verdict.inputs_digest}\\0${verdict.result}`;\n if (this.tracedVerdicts.has(key)) continue;\n this.tracedVerdicts.add(key);\n this.trace.verdicts.push(verdict);\n }\n }\n this.pendingVerdicts = outer;\n return allowed;\n }\n\n private evaluateRule(\n rule: any,\n ruleHash: string,\n old: Value | null,\n next: Value,\n createdAllowed: boolean,\n ): boolean {\n const [kind, data] = variant(rule);\n switch (kind) {\n case \"Public\":\n case \"Allow\":\n return true;\n case \"Deny\":\n return false;\n case \"Eq\":\n return canonicalValue(this.ruleTerm(data[0], old, next)) === canonicalValue(this.ruleTerm(data[1], old, next));\n case \"Ne\":\n return canonicalValue(this.ruleTerm(data[0], old, next)) !== canonicalValue(this.ruleTerm(data[1], old, next));\n case \"And\":\n return data.every((child: any) =>\n this.evaluateRule(child, ruleHash, old, next, createdAllowed)\n );\n case \"Or\":\n return data.some((child: any) =>\n this.evaluateRule(child, ruleHash, old, next, createdAllowed)\n );\n case \"Not\":\n return !this.evaluateRule(data, ruleHash, old, next, createdAllowed);\n case \"Exists\": {\n // @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 absence and authorization are authority-only.\n const key = data.key.map((term: any) => this.ruleTerm(term, old, next));\n // The verdict's inputs digest as the wire defines it: `sha256(canonical([table, index, key]))` (LLP 1012 \u00A77).\n const pinnedDigest = sha256(canonicalJson([data.table, data.index, key.map(wireJson)]));\n const memoKey = `${ruleHash}:${pinnedDigest}`;\n const memoized = this.ruleMemo.get(memoKey);\n if (memoized !== undefined) {\n this.pendingVerdicts.push({ rule_hash: ruleHash, inputs_digest: pinnedDigest, result: memoized });\n return memoized;\n }\n if (!this.ruleInputIsReadable(data)) {\n // @ref LLP 1001#2-what-a-commit-records \u2014 held rows cannot replace authority-only verdicts.\n const verdict = this.store.verdict(ruleHash, pinnedDigest, this.context);\n if (verdict !== null) {\n this.ruleMemo.set(memoKey, verdict);\n this.pendingVerdicts.push({ rule_hash: ruleHash, inputs_digest: pinnedDigest, result: verdict });\n return verdict;\n }\n this.partial.add(\"missing-authority\");\n this.authorityMissSerial += 1;\n return false;\n }\n const found = this.store.lookup(data.table, data.index, key);\n if (found === null && !this.store.hasAbsence(data.table, data.index, key)) {\n this.partial.add(`${data.table}.${data.index}`);\n this.ruleMemo.set(memoKey, false);\n return false;\n }\n const result = found !== null;\n this.ruleMemo.set(memoKey, result);\n this.pendingVerdicts.push({ rule_hash: ruleHash, inputs_digest: pinnedDigest, result });\n return result;\n }\n case \"Created\": {\n if (!createdAllowed)\n throw new EvalError(\n \"E_SCHEMA\",\n \"created-row probe evaluated outside a table insert rule\",\n );\n const key = data.key.map((term: any) => this.ruleTerm(term, old, next));\n const encoded = canonicalValues(key);\n return this.createdPoints.some(\n (point) =>\n point.table === data.table &&\n point.index === data.index &&\n point.key === encoded,\n );\n }\n default:\n throw new EvalError(\"E_OPAQUE\", `unsupported rule ${kind}`);\n }\n }\n\n private ruleInputIsReadable(probe: any): boolean {\n const table = this.schema.tables[probe.table];\n const index = table?.indexes?.[probe.index];\n if (!table || !index) return false;\n const prove = (rule: any): boolean => {\n const [kind, data] = variant(rule);\n if (kind === \"Public\" || kind === \"Allow\") return true;\n if (kind === \"Eq\") {\n const left = substituteRuleTerm(data[0], index.columns, probe.key);\n const right = substituteRuleTerm(data[1], index.columns, probe.key);\n return left !== null && right !== null && canonicalJson(left) === canonicalJson(right);\n }\n if (kind === \"And\") return data.length > 0 && data.every(prove);\n if (kind === \"Or\") return data.some(prove);\n if (kind === \"Exists\" && data.table === probe.table && data.index === probe.index) {\n const key = data.key.map((term: any) => substituteRuleTerm(term, index.columns, probe.key));\n return key.every((term: any) => term !== null) && canonicalJson(key) === canonicalJson(probe.key);\n }\n return false;\n };\n return prove(table.rules.read);\n }\n\n private ruleTerm(term: any, old: Value | null, next: Value): Value {\n const [kind, data] = variant(term);\n if (kind === \"Field\") return clone(field(next, data));\n if (kind === \"NextField\") {\n if (old === null)\n throw new EvalError(\"E_SCHEMA\", \"next-row rule term evaluated outside an update rule\");\n return clone(field(next, data));\n }\n if (kind === \"OldField\") {\n if (old === null)\n throw new EvalError(\"E_SCHEMA\", \"old-row rule term evaluated outside an update rule\");\n return clone(field(old, data));\n }\n if (kind === \"Viewer\") return { Id: this.context.viewer };\n if (kind === \"Literal\") return clone(data);\n throw new EvalError(\"E_OPAQUE\", `unsupported rule term ${kind}`);\n }\n\n private requiredEnv(name: string): Value {\n const value = this.env.get(name);\n if (value === undefined) throw new EvalError(\"E_INPUT\", `unknown variable ${name}`);\n return value;\n }\n}\n\n\nfunction substituteRuleTerm(term: any, columns: string[], probeKey: any[]): any | null {\n const [kind, data] = variant(term);\n if (kind === \"OldField\" || kind === \"NextField\") return null;\n if (kind !== \"Field\") return clone(term);\n const position = columns.indexOf(data);\n return position < 0 || position >= probeKey.length ? null : clone(probeKey[position]);\n}\n\nfunction mintNext(schema: any, certificate: any, trace: Trace): string | null {\n const page = certificate?.result_page_site;\n if (!page || !queryCapped(certificate, trace)) return null;\n const values = page.merge\n ? trace.merges.slice().reverse().find((entry) => entry.site === page.site)?.last_returned_suffix\n : trace.ranges.slice().reverse().find((entry) => entry.site === page.site)?.lastReturnedSuffix;\n if (values === null || values === undefined) return null;\n return encodeCursor({\n table: page.table,\n index: page.index,\n order: page.order,\n suffix: page.suffix,\n values,\n });\n}\n\n/** The wire state a query run reports: `capped` exactly when the engine's `query_state` says so. */\nexport function queryState(certificate: any, trace: Trace): \"complete\" | \"capped\" {\n return queryCapped(certificate, trace) ? \"capped\" : \"complete\";\n}\n\nfunction queryCapped(certificate: any, trace: Trace): boolean {\n if (certificate.completeness === \"Capped\") return true;\n if (trace.ranges.some((range) => range.stop === \"limit\"\n || !certificate.read_sites?.find((site: any) => site.site === range.site)?.hoist)) return true;\n return (certificate.merge_sites ?? []).some((site: any) => {\n const merge = trace.merges.find((entry) => entry.site === site.site);\n const unionTooLarge = merge === undefined || merge.deduplicated_union_len > site.take;\n const laneLimited = trace.ranges.some((range) => site.lane_sites.includes(range.site) && range.stop !== \"exhausted\");\n return unionTooLarge || laneLimited;\n });\n}\n", "export function exactVerdict(\n verdicts: readonly any[],\n ruleHash: string,\n pinnedDigest: string,\n viewer: string,\n authEpoch: number,\n): boolean | null {\n const verdict = verdicts.find((candidate) =>\n candidate.rule_hash === ruleHash &&\n candidate.pinned_inputs_digest === pinnedDigest &&\n candidate.principal === viewer &&\n candidate.auth_epoch === authEpoch\n );\n return verdict?.result ?? null;\n}\n\nexport function exactByIdAbsence(\n absences: readonly any[],\n table: string,\n id: string,\n valuesEqual: (left: any[], right: any[]) => boolean,\n): boolean {\n return absences.some(([candidateTable, index, key]) =>\n candidateTable === table && index === \"byId\" && valuesEqual(key, [{ Id: id }])\n );\n}\n", "import { exactByIdAbsence, exactVerdict } from \"./authority\";\nimport { canonicalSchemaJson } from \"./certificate-identity\";\nimport { EvalError } from \"./errors\";\nimport { sha256 } from \"./hash\";\nimport { Runner } from \"./runner\";\nimport {\n asString,\n canonicalValue,\n canonicalValues,\n clone,\n compareArrays,\n compareCodepoints,\n field,\n fieldOrNull,\n isVariant,\n kindOf,\n materializeOptionalFields,\n scopedRuleHash,\n totalCompare,\n validateInputs,\n validateWriteRow,\n valuesEqual,\n} from \"./value-runtime\";\nimport type {\n ClosureReceipt,\n Context,\n Execution,\n LocalExecution,\n ReceiptRange,\n Trace,\n TraceRange,\n Value,\n} from \"./types\";\n\nexport interface ClientStoreOptions {\n /** Tables whose held rows the twin may read regardless of their read rule (`retain delivered-history`). */\n readable?: Iterable<string>;\n}\n\n/** A drained uniform prefix: every row with these column equalities is held (LLP 1012 \u00A76). */\ninterface DrainedPrefix {\n table: string;\n ruleHash: string;\n columns: string[];\n prefix: Value[];\n}\n\nexport class ClientStore {\n private tables = new Map<string, Map<string, Value>>();\n private coverage: ClosureReceipt;\n private rangeDeletions = new Map<string, number>();\n private readonly readableTables: Set<string>;\n private drained?: DrainedPrefix[];\n\n constructor(\n private readonly schema: any,\n receipt: ClosureReceipt,\n private readonly options: ClientStoreOptions = {},\n ) {\n this.readableTables = new Set(options.readable ?? []);\n this.coverage = this.receiptForSchema(receipt);\n this.seedReceipt(receipt);\n }\n\n readable(table: string): boolean {\n return this.readableTables.has(table);\n }\n\n applyMutation(program: any, context: Context): LocalExecution {\n validateInputs(this.schema, program, context.args);\n // @ref LLP 1001#3-read-and-write-states-no-silent-states \u2014 local prediction adopts the write set only as one atomic mutation.\n const staged = this.fork();\n const before = staged.coveredIndexKeys();\n const runner = new Runner(staged, this.schema, context, null);\n let execution: Execution;\n try {\n execution = runner.execute(program);\n } catch (error) {\n if (runner.coverageMisses().includes(\"missing-authority\")) {\n return { state: \"partial\", partialSites: [\"missing-authority\"], execution: { result: \"Null\", trace: runner.trace, next: null, writes: [] } };\n }\n if (error instanceof EvalError) {\n error.trace = runner.trace;\n error.partialSites = this.uncoveredSites(runner.trace, runner.coverageMisses());\n }\n throw error;\n }\n const partialSites = runner.coverageMisses();\n // Coverage is judged on the state the run read, before its writes land.\n const uncoveredSites = this.uncoveredSites(execution.trace);\n if (partialSites.length > 0) {\n return { state: \"partial\", partialSites, execution, uncoveredSites, authorityMisses: runner.authorityMisses() };\n }\n const after = staged.coveredIndexKeys();\n for (let offset = 0; offset < before.length; offset += 1) {\n for (const [id, key] of before[offset]) {\n const next = after[offset].get(id);\n if (next === undefined || !valuesEqual(key, next)) {\n const site = staged.coverage.ranges[offset].site;\n staged.rangeDeletions.set(site, (staged.rangeDeletions.get(site) ?? 0) + 1);\n }\n }\n }\n this.tables = staged.tables;\n this.coverage = staged.coverage;\n this.rangeDeletions = staged.rangeDeletions;\n this.drained = undefined;\n return { state: \"predicted\", partialSites: [], execution, uncoveredSites };\n }\n\n reexecute(program: any, context: Context, certificate: any = null): LocalExecution {\n validateInputs(this.schema, program, context.args);\n const runner = new Runner(this, this.schema, context, certificate);\n let execution: Execution;\n try {\n execution = runner.execute(program);\n } catch (error) {\n // A refusal after an uncovered read is not the server's answer: the\n // caller reads `partialSites` off the error before believing the code.\n if (error instanceof EvalError) {\n error.trace = runner.trace;\n error.partialSites = this.uncoveredSites(runner.trace, runner.coverageMisses());\n }\n throw error;\n }\n const partialSites = this.uncoveredSites(execution.trace, runner.coverageMisses());\n if (partialSites.length > 0) execution.next = null;\n return {\n state: partialSites.length === 0 ? \"fresh\" : \"partial\",\n partialSites,\n execution,\n };\n }\n\n /** The sites a run read outside coverage: uncovered ranges, unheld absences, and the runner's own misses. */\n uncoveredSites(trace: Trace, misses: string[] = []): string[] {\n const partial = new Set(misses);\n for (const range of trace.ranges) {\n const covered = this.coverage.ranges.some(\n (coverage) => whole(coverage) && rangeCovered(coverage, range),\n ) || this.drainedPrefixCovers(range.table, range.index, range.prefix, range.rule_hash);\n if (!covered || (this.rangeDeletions.get(range.site) ?? 0) > 1)\n partial.add(range.site);\n }\n for (const absence of trace.absences) {\n const held =\n this.coverage.absences.some(\n ([table, index, key]) =>\n table === absence.table &&\n index === absence.index &&\n valuesEqual(key, absence.key),\n ) || this.lookup(absence.table, absence.index, absence.key) !== null;\n if (!held) partial.add(absence.site);\n }\n return Array.from(partial).sort(compareCodepoints);\n }\n\n rehydrate(receipt: ClosureReceipt): number {\n const before = this.allIds();\n this.tables = new Map();\n this.coverage = this.receiptForSchema(receipt);\n this.rangeDeletions = new Map();\n this.drained = undefined;\n this.seedReceipt(receipt);\n const after = this.allIds();\n let evicted = 0;\n for (const id of before) if (!after.has(id)) evicted += 1;\n return evicted;\n }\n\n rows(table: string): Value[] {\n return Array.from(this.tables.get(table)?.values() ?? []);\n }\n\n lookup(table: string, indexName: string, key: Value[]): Value | null {\n const index = this.index(table, indexName);\n if (key.length !== index.columns.length) {\n throw new EvalError(\n \"E_TYPE\",\n `point read ${table}.${indexName} supplied ${key.length} of ${index.columns.length} key columns`,\n );\n }\n key.forEach((value, offset) => {\n assertIndexableScalar(value, `point read ${table}.${indexName} key component ${offset + 1}`);\n });\n for (const row of this.rows(table)) {\n const values = index.columns.map((column: string) => fieldOrNull(row, column));\n if (valuesEqual(values, key)) return row;\n }\n return null;\n }\n\n scan(\n table: string,\n indexName: string,\n prefix: Value[],\n after: Value | null,\n before: Value | null,\n range: any | null,\n order: \"Asc\" | \"Desc\",\n limit: number,\n ): Value[] {\n const index = this.index(table, indexName);\n if (prefix.length > index.columns.length) {\n throw new EvalError(\"E_TYPE\", `scan ${table}.${indexName} prefix has too many columns`);\n }\n prefix.forEach((value, offset) => {\n assertIndexableScalar(value, `scan ${table}.${indexName} prefix component ${offset + 1}`);\n });\n for (const [name, value] of Object.entries<Value | null | undefined>(range ?? {})) {\n if (value !== null && value !== undefined) {\n assertIndexableScalar(value, `scan ${table}.${indexName} range.${name}`);\n }\n }\n const rangeColumn = prefix.length;\n const remaining = index.columns.length - rangeColumn;\n // @ref LLP 1001#3-read-and-write-states-no-silent-states \u2014 a cursor must\n // move a scan; a fully named index has no post-prefix position to compare.\n if (remaining === 0 && (after !== null || before !== null)) {\n throw new EvalError(\n \"E_TYPE\",\n `scan ${table}.${indexName} prefix names every index column, so a cursor has no position to compare; remove after/before or shorten the prefix`,\n );\n }\n const cursorTuple = (cursor: Value): Value[] => {\n let values: Value[];\n if (isVariant(cursor, \"Array\")) {\n if (cursor.Array.length !== remaining) {\n throw new EvalError(\"E_TYPE\", `cursor supplied ${cursor.Array.length} of ${remaining} remaining index columns`);\n }\n values = cursor.Array;\n } else if (remaining === 1) {\n values = [cursor];\n } else {\n throw new EvalError(\"E_TYPE\", `cursor for ${remaining} remaining index columns must be an array`);\n }\n values.forEach((value, offset) => {\n const column = index.columns[rangeColumn + offset]!;\n validateCursorComponent(this.schema, table, indexName, column, value);\n });\n return values;\n };\n const afterTuple = after === null ? null : cursorTuple(after);\n const beforeTuple = before === null ? null : cursorTuple(before);\n const selected = this.rows(table).filter((row) => {\n const values = index.columns.map((column: string) => fieldOrNull(row, column));\n if (!valuesEqual(values.slice(0, prefix.length), prefix)) return false;\n if (rangeColumn >= values.length) return true;\n const value = values[rangeColumn];\n const position = values.slice(rangeColumn);\n if (afterTuple !== null && compareArrays(position, afterTuple) * (order === \"Asc\" ? 1 : -1) <= 0) return false;\n if (beforeTuple !== null && compareArrays(position, beforeTuple) * (order === \"Asc\" ? 1 : -1) >= 0) return false;\n if (range?.gt !== null && range?.gt !== undefined && totalCompare(value, range.gt) <= 0)\n return false;\n if (range?.gte !== null && range?.gte !== undefined && totalCompare(value, range.gte) < 0)\n return false;\n if (range?.lt !== null && range?.lt !== undefined && totalCompare(value, range.lt) >= 0)\n return false;\n if (range?.lte !== null && range?.lte !== undefined && totalCompare(value, range.lte) > 0)\n return false;\n return true;\n });\n const direction = order === \"Asc\" ? 1 : -1;\n selected.sort((left, right) => {\n for (const column of index.columns) {\n const compared = totalCompare(fieldOrNull(left, column), fieldOrNull(right, column));\n if (compared !== 0) return compared * direction;\n }\n return (\n compareCodepoints(asString(field(left, \"id\")), asString(field(right, \"id\"))) *\n direction\n );\n });\n return selected.slice(0, limit);\n }\n\n put(table: string, row: Value): void {\n const normalized = materializeOptionalFields(this.schema, table, row);\n validateWriteRow(this.schema, table, normalized);\n for (const [indexName, index] of Object.entries<any>(\n this.schema.tables?.[table]?.indexes ?? {},\n )) {\n for (const column of index.columns) {\n assertIndexableScalar(\n fieldOrNull(normalized, column),\n `indexed column ${table}.${indexName}.${column}`,\n );\n }\n }\n const id = asString(field(normalized, \"id\"));\n let rows = this.tables.get(table);\n if (rows === undefined) {\n rows = new Map();\n this.tables.set(table, rows);\n }\n rows.set(id, normalized);\n }\n\n remove(table: string, id: string): Value | null {\n const rows = this.tables.get(table);\n const old = rows?.get(id) ?? null;\n rows?.delete(id);\n return old;\n }\n\n byId(table: string, id: string): Value | null {\n return this.tables.get(table)?.get(id) ?? null;\n }\n\n verdict(ruleHash: string, pinnedDigest: string, context: Context): boolean | null {\n return exactVerdict(this.coverage.verdicts, ruleHash, pinnedDigest, context.viewer, context.auth_epoch);\n }\n\n authorityAbsence(table: string, id: string): boolean { return exactByIdAbsence(this.coverage.absences, table, id, valuesEqual); }\n\n hasAbsence(table: string, index: string, key: Value[]): boolean {\n return this.coverage.absences.some(\n ([heldTable, heldIndex, heldKey]) =>\n heldTable === table && heldIndex === index && valuesEqual(heldKey, key),\n );\n }\n\n hasCompleteRange(table: string, index: string, prefix: Value[]): boolean {\n const readRule = this.schema.tables?.[table]?.rules?.read;\n if (readRule !== undefined\n && this.drainedPrefixCovers(table, index, prefix, scopedRuleHash(this.schema, readRule))) return true;\n return this.coverage.ranges.some(\n (range) =>\n whole(range) &&\n range.table === table &&\n range.index === index &&\n valuesEqual(range.prefix, prefix) &&\n range.order === \"Asc\" &&\n range.after === null &&\n range.before === null &&\n range.gt === null &&\n range.gte === null &&\n range.lt === null &&\n range.lte === null &&\n range.stop === \"Exhausted\",\n );\n }\n\n // @ref LLP 1012#6-reads-offline \u2014 a certified-uniform prefix drained to\n // `next: null` is the viewer's whole partition for that prefix, so it covers\n // every named query over that prefix on any index of the same table: the\n // thread reads the log on another index than the drain and still replays.\n private drainedPrefixCovers(table: string, indexName: string, prefix: Value[], ruleHash: string): boolean {\n const columns: string[] | undefined = this.schema.tables?.[table]?.indexes?.[indexName]?.columns;\n if (!columns) return false;\n return this.drainedPrefixes().some((drained) =>\n drained.table === table\n && drained.ruleHash === ruleHash\n && drained.columns.every((column, at) => {\n const position = columns.indexOf(column);\n return position >= 0 && position < prefix.length && valuesEqual([prefix[position]!], [drained.prefix[at]!]);\n }));\n }\n\n /**\n * The drained prefixes: for each (table, index, order, rule, prefix) group a\n * chain of held pages from `after: null` to `Exhausted`, each page's `after`\n * the previous page's last recorded row \u2014 by that row's index suffix when it\n * is held, by its id alone when it is not (a viewed view-once row is absent\n * to the twin but the server's cursor still names it), which needs the index\n * to end in `id`. A page with a hole (`evicted_ids`) is no link: the store\n * already calls its answer `partial/evicted`. And once the chain is complete,\n * every other page of the group must add no row the chain does not hold \u2014 a\n * page past a re-marked `Exhausted` that still holds rows would let a scan\n * over-claim. Every `after: null` page is tried as a chain start.\n */\n private drainedPrefixes(): DrainedPrefix[] {\n if (this.drained) return this.drained;\n const groups = new Map<string, ReceiptRange[]>();\n for (const range of this.coverage.ranges) {\n if (range.before !== null || range.gt !== null || range.gte !== null || range.lt !== null || range.lte !== null) continue;\n const key = [range.table, range.index, range.order, range.rule_hash, canonicalValues(range.prefix)].join(\"\\0\");\n let pages = groups.get(key);\n if (!pages) groups.set(key, pages = []);\n pages.push(range);\n }\n const drained: DrainedPrefix[] = [];\n for (const pages of groups.values()) {\n const starts = pages.filter((page) => page.after === null);\n if (starts.length === 0) continue;\n const index = this.schema.tables?.[starts[0]!.table]?.indexes?.[starts[0]!.index];\n if (!index) continue;\n const suffixColumns: string[] = index.columns.slice(starts[0]!.prefix.length);\n const endsInId = suffixColumns[suffixColumns.length - 1] === \"id\";\n const later = pages.filter((page) => page.after !== null);\n const afterComponents = (page: ReceiptRange): Value[] =>\n isVariant(page.after!, \"Array\") ? page.after!.Array : [page.after!];\n const linked = (page: ReceiptRange): ReceiptRange | undefined => {\n const lastId = page.row_ids[page.row_ids.length - 1];\n if (lastId === undefined) return undefined;\n const row = this.byId(page.table, lastId);\n if (row !== null) {\n const suffix = suffixColumns.map((column) => fieldOrNull(row, column));\n return later.find((candidate) => valuesEqual(afterComponents(candidate), suffix));\n }\n if (!endsInId) return undefined;\n return later.find((candidate) => {\n const components = afterComponents(candidate);\n return components.length === suffixColumns.length && valuesEqual([components[components.length - 1]!], [{ Id: lastId }]);\n });\n };\n const complete = starts.some((first) => {\n const seen = new Set<ReceiptRange>();\n let page: ReceiptRange | undefined = first;\n while (page !== undefined && !seen.has(page)) {\n if (!whole(page)) return false;\n seen.add(page);\n if (page.stop === \"Exhausted\") break;\n page = linked(page);\n }\n if (page === undefined || page.stop !== \"Exhausted\") return false;\n const held = new Set<string>();\n for (const link of seen) for (const id of link.row_ids) held.add(id);\n return pages.every((other) => seen.has(other) || other.row_ids.every((id) => held.has(id)));\n });\n if (!complete) continue;\n drained.push({\n table: starts[0]!.table,\n ruleHash: starts[0]!.rule_hash,\n columns: index.columns.slice(0, starts[0]!.prefix.length),\n prefix: starts[0]!.prefix,\n });\n }\n this.drained = drained;\n return drained;\n }\n\n private seedReceipt(receipt: ClosureReceipt): void {\n for (const row of receipt.rows) this.put(row.table, row.row);\n }\n\n private receiptForSchema(receipt: ClosureReceipt): ClosureReceipt {\n const coverage = clone(receipt);\n if (coverage.schema_hash !== sha256(canonicalSchemaJson(this.schema))) {\n // @ref LLP 1001#2-what-a-commit-records \u2014 authority-only absence\n // facts cannot cross a predecessor/successor schema boundary.\n coverage.absences = [];\n }\n return coverage;\n }\n\n private fork(): ClientStore {\n const fork = new ClientStore(this.schema, { rows: [], ranges: [], absences: [], verdicts: [] }, this.options);\n fork.tables = new Map(\n Array.from(this.tables, ([table, rows]) => [\n table,\n new Map(Array.from(rows, ([id, row]) => [id, clone(row)])),\n ]),\n );\n fork.coverage = clone(this.coverage);\n fork.rangeDeletions = new Map(this.rangeDeletions);\n return fork;\n }\n\n private coveredIndexKeys(): Array<Map<string, Value[]>> {\n return this.coverage.ranges.map((range) => {\n const retained = new Set(range.row_ids);\n if (range.halo !== null) retained.add(range.halo.id);\n const index = this.index(range.table, range.index);\n const keys = new Map<string, Value[]>();\n for (const row of this.rows(range.table)) {\n const id = asString(field(row, \"id\"));\n if (retained.has(id)) {\n keys.set(id, index.columns.map((column: string) => clone(fieldOrNull(row, column))));\n }\n }\n return keys;\n });\n }\n\n private allIds(): Set<string> {\n const ids = new Set<string>();\n for (const [table, rows] of this.tables) {\n for (const id of rows.keys()) ids.add(`${table}:${id}`);\n }\n return ids;\n }\n\n private index(table: string, indexName: string): any {\n const index = this.schema.tables?.[table]?.indexes?.[indexName];\n if (index === undefined) throw new EvalError(\"E_SCHEMA\", `missing index ${table}.${indexName}`);\n return index;\n }\n}\n\n\n/** A page that lost no member since it was recorded: only such a page covers what it says (LLP 1012 \u00A75, \u00A76). */\nfunction whole(range: ReceiptRange): boolean {\n return range.evicted_ids === undefined || range.evicted_ids.length === 0;\n}\n\nfunction nullableValueEqual(left: Value | null, right: Value | null): boolean {\n return left === null ? right === null : right !== null && valuesEqual([left], [right]);\n}\n\nfunction rangeCovered(coverage: ReceiptRange, range: TraceRange): boolean {\n return coverage.site === range.site\n && coverage.table === range.table\n && coverage.index === range.index\n && valuesEqual(coverage.prefix, range.prefix)\n && coverage.order === range.order\n && coverage.take === range.take\n && nullableValueEqual(coverage.after, range.after)\n && nullableValueEqual(coverage.before, range.before)\n && nullableValueEqual(coverage.gt, range.gt)\n && nullableValueEqual(coverage.gte, range.gte)\n && nullableValueEqual(coverage.lt, range.lt)\n && nullableValueEqual(coverage.lte, range.lte)\n && coverage.rule_hash === range.rule_hash;\n}\n\nfunction validateCursorComponent(\n schema: any,\n table: string,\n index: string,\n column: string,\n value: Value,\n): void {\n assertIndexableScalar(value, `cursor component for ${table}.${index} column ${column}`);\n const actual = kindOf(value);\n // @ref LLP 1001#3-read-and-write-states-no-silent-states \u2014 Null is the\n // universal pre-first cursor sentinel, independent of stored nullability.\n if (actual === \"Null\") return;\n const descriptor = schema.tables?.[table]?.columns?.[column];\n const expected = cursorColumnKind(descriptor);\n const matches = expected === \"scalar\" || expected === actual;\n if (!matches) {\n throw new EvalError(\n \"E_TYPE\",\n `cursor component for ${table}.${index} column ${column} must be ${expected}, got ${actual.toLowerCase()}`,\n );\n }\n}\n\nfunction assertIndexableScalar(value: Value, what: string): void {\n const actual = kindOf(value);\n if (![\"Null\", \"Bool\", \"Int\", \"String\", \"Id\", \"Bytes\"].includes(actual)) {\n throw new EvalError(\"E_TYPE\", `${actual.toLowerCase()} is not an indexable scalar (${what})`);\n }\n}\n\nfunction cursorColumnKind(descriptor: any): \"Id\" | \"String\" | \"Int\" | \"Bool\" | \"Bytes\" | \"scalar\" {\n if (descriptor?.Optional !== undefined) return cursorColumnKind(descriptor.Optional);\n if (descriptor === \"Id\" || descriptor === \"Principal\" || descriptor?.Ref !== undefined) return \"Id\";\n if (descriptor?.Text !== undefined || descriptor?.Enum !== undefined) return \"String\";\n if ([\"Int\", \"Time\"].includes(descriptor) || descriptor?.Decimal !== undefined || descriptor?.Money !== undefined) return \"Int\";\n if (descriptor === \"Bool\") return \"Bool\";\n if (descriptor?.Bytes !== undefined) return \"Bytes\";\n return \"scalar\";\n}\n", "// @ref LLP 1012#6-reads-offline \u2014 the twin hydrates from `coverage()`: rows,\n// ranges, absences, and verdicts re-tagged through the held schema into the\n// evaluator's private receipt, exactly as the Rust `ClientStore` sees them.\nimport {\n DeliveryEnvelopeDecodeError,\n tagWireBoundary,\n tagWireIndexValues,\n tagWireRow,\n tagWireValue,\n type EvaluatorClosureReceipt,\n type TaggedValue,\n type WireValue,\n} from \"./offline-protocol.js\";\nimport { schemaDigest } from \"./offline-schema.js\";\nimport type { Coverage, ReceiptRange, RowRef } from \"./store/range-store.js\";\n\ntype TaggedRow = EvaluatorClosureReceipt[\"rows\"][number];\n\nfunction rowKey(ref: RowRef): string {\n return `${ref.table} ${ref.id}`;\n}\n\nconst digests = new WeakMap<object, string>();\n\n/** The one schema hasher, computed here and never taken from the caller (memoized per schema object). */\nfunction digestOf(schema: any): string {\n const held = typeof schema === \"object\" && schema !== null ? digests.get(schema) : undefined;\n if (held !== undefined) return held;\n const digest = schemaDigest(schema);\n if (typeof schema === \"object\" && schema !== null) digests.set(schema, digest);\n return digest;\n}\n\n/**\n * The evaluator's `ClosureReceipt` for a partition's coverage. Rows keep the\n * pool's order; a range's halo is the pooled row its `haloId` names; `n2Key`\n * never leaves the server, so it is `null` here as it is on the wire. The\n * schema hash is recomputed from the schema, never taken from the caller, so\n * every rebuild proves the hasher against the server's; an expected hash that\n * disagrees refuses the rebuild \u2014 coverage delivered under another schema, or\n * a hasher drifted from Rust, is `hydrating`, never evaluated (LLP 1012 \u00A78).\n */\nexport function closureFromCoverage(coverage: Coverage, schema: any, expectedSchemaHash?: string): EvaluatorClosureReceipt {\n const schemaHash = digestOf(schema);\n if (expectedSchemaHash !== undefined && expectedSchemaHash !== schemaHash) {\n throw new DeliveryEnvelopeDecodeError(\"schema\", `hash ${schemaHash} does not match the held program's ${expectedSchemaHash}`);\n }\n const rows = new Map<string, TaggedRow>();\n for (const row of coverage.rows) {\n rows.set(rowKey(row), { table: row.table, id: row.id, row: tagWireRow(schema, row.table, row.row as Record<string, WireValue>) });\n }\n return {\n schema_hash: schemaHash,\n rows: [...rows.values()],\n ranges: coverage.ranges.map((range) => tagRange(schema, range, rows)),\n absences: coverage.absences.map(([table, index, key]) => [\n table,\n index,\n tagWireIndexValues(schema, table, index, key as WireValue[], 0),\n ]),\n verdicts: coverage.verdicts.map((verdict) => {\n const record = verdict as Record<string, unknown>;\n return {\n rule_hash: String(record.ruleHash),\n pinned_inputs_digest: String(record.pinnedInputsDigest),\n principal: String(record.principal),\n auth_epoch: Number(record.authEpoch),\n result: record.result === true,\n };\n }),\n };\n}\n\nfunction tagRange(schema: any, range: ReceiptRange, rows: Map<string, TaggedRow>): EvaluatorClosureReceipt[\"ranges\"][number] {\n const boundary = (value: unknown): TaggedValue | null =>\n value === null || value === undefined ? null : tagWireBoundary(schema, range as never, value as WireValue);\n const halo = range.haloId === undefined ? undefined : rows.get(rowKey({ table: range.table, id: range.haloId }));\n return {\n site: range.site,\n table: range.table,\n index: range.index,\n prefix: tagWireIndexValues(schema, range.table, range.index, range.prefix as WireValue[], 0),\n order: range.order,\n take: range.take,\n after: boundary(range.after),\n before: boundary(range.before),\n gt: boundary(range.gt),\n gte: boundary(range.gte),\n lt: boundary(range.lt),\n lte: boundary(range.lte),\n rule_hash: range.ruleHash,\n row_ids: [...range.rowIds],\n stop: range.stop,\n absence: range.absence,\n halo: halo === undefined ? null : structuredClone(halo),\n n2_key: null,\n ...(range.evictedIds === undefined || range.evictedIds.length === 0 ? {} : { evicted_ids: [...range.evictedIds] }),\n };\n}\n\n/** Tag one operation argument by the IR's descriptor (`Cursor`, `Optional`, or a column type). */\nexport function tagArgument(descriptor: unknown, value: unknown, path: string): TaggedValue {\n if (descriptor !== null && typeof descriptor === \"object\" && !Array.isArray(descriptor) && \"Optional\" in descriptor) {\n return value === null || value === undefined ? \"Null\" : tagArgument((descriptor as { Optional: unknown }).Optional, value, path);\n }\n if (descriptor === \"Cursor\") {\n if (value === null || value === undefined) return \"Null\";\n if (typeof value !== \"string\") throw new TypeError(`${path} must be an opaque cursor string`);\n return { String: value };\n }\n if (value === undefined) throw new TypeError(`${path} is required`);\n return tagWireValue(descriptor, value as WireValue, path);\n}\n\nexport function tagArguments(descriptors: unknown, args: unknown): Record<string, TaggedValue> {\n const tagged: Record<string, TaggedValue> = Object.create(null);\n if (descriptors === null || typeof descriptors !== \"object\") return tagged;\n const record = args !== null && typeof args === \"object\" && !Array.isArray(args) ? args as Record<string, unknown> : {};\n for (const [name, descriptor] of Object.entries(descriptors as Record<string, unknown>)) {\n tagged[name] = tagArgument(descriptor, record[name], `args.${name}`);\n }\n return tagged;\n}\n\nexport type PartialReason = \"never-held\" | \"evicted\" | \"computed-key\";\n\nexport interface PartialSite {\n site: string;\n reason: PartialReason;\n}\n\ninterface TraceLike {\n ranges: Array<{ site: string; table: string; provenance?: string }>;\n absences: Array<{ site: string; table: string; index: string; key: unknown[]; provenance?: string }>;\n}\n\n/**\n * Why a site fell outside coverage: a row a swap evicted (`evicted`: a\n * primary-key read of an evicted row, or a range over a table one of whose\n * held pages lost a member), a key the program computed from another row so\n * no page could have named it (`computed-key`), or a read the store simply\n * never held (`never-held`).\n */\nexport function partialReasons(sites: string[], trace: TraceLike, coverage: Coverage): PartialSite[] {\n const evicted = new Set((coverage.evicted ?? []).map(rowKey));\n const holed = new Set(coverage.ranges.filter((range) => (range.evictedIds?.length ?? 0) > 0).map((range) => range.table));\n return sites.map((site) => {\n const absence = trace.absences.find((item) => item.site === site);\n const range = trace.ranges.find((item) => item.site === site);\n const provenance = absence?.provenance ?? range?.provenance;\n if (absence && absence.index === \"byId\") {\n const id = absence.key[0];\n const text = id !== null && typeof id === \"object\" && \"Id\" in id ? String((id as { Id: unknown }).Id) : undefined;\n if (text !== undefined && evicted.has(rowKey({ table: absence.table, id: text }))) return { site, reason: \"evicted\" };\n }\n if (range && holed.has(range.table)) return { site, reason: \"evicted\" };\n if (provenance === \"Shape\") return { site, reason: \"computed-key\" };\n return { site, reason: \"never-held\" };\n });\n}\n", "// @ref LLP 1012#6-reads-offline \u2014 the twin is the client: with the backend\n// unreachable the certified program runs here over `coverage()`; a read inside\n// coverage is exact, a read outside is `partial` at that site with its reason.\n// @ref LLP 1012#7-writes-offline \u2014 on enqueue the twin runs the mutation over\n// held rows, writes the prediction overlay, and records the trace the server\n// validates at commit: every point read with its digest, every rule verdict.\nimport { wireJson } from \"../../evaluator/src/value-runtime.js\";\nimport { tagWireRow, type WireValue } from \"./offline-protocol.js\";\nimport { EvalError } from \"../../evaluator/src/errors.js\";\nimport { queryState } from \"../../evaluator/src/runner.js\";\nimport { ClientStore } from \"../../evaluator/src/store.js\";\nimport { emptyTrace } from \"./store/outbox.js\";\nimport { closureFromCoverage, partialReasons, tagArguments, type PartialSite } from \"./twin-hydrate.js\";\nimport type { Context, Trace } from \"../../evaluator/src/types.js\";\nimport type { Coverage, HeldProgram, OutboxEntry, OutboxTrace, OverlayRow } from \"./store/range-store.js\";\n\nexport interface TwinSources {\n /** The certified program held for this partition, if any. */\n program(): HeldProgram | undefined;\n coverage(): Promise<Coverage | undefined>;\n overlay(): Promise<Record<string, OverlayRow[]>>;\n /** Every durable intent, FIFO; overlays are layered in this order. */\n entries(): Promise<OutboxEntry[]>;\n principal(): string | undefined;\n now(): number;\n seq(): number;\n}\n\n/** A query the twin answered locally, in the wire's shape plus its offline facts. */\nexport interface LocalAnswer {\n state: \"complete\" | \"capped\" | \"partial\" | \"denied\";\n data?: unknown;\n next?: string | null;\n seq: number;\n reason?: string;\n rule?: string;\n /** The first uncovered site (`partial`). */\n site?: string;\n /** Every uncovered site with its reason (`partial`). */\n sites?: PartialSite[];\n /** Queued intents whose predicted rows are visible in `data`, in order. */\n predicted?: string[];\n /** The newest delivery the answer was computed from. */\n since?: number;\n}\n\nexport interface Prediction {\n predicted: boolean;\n overlay: OverlayRow[];\n trace: OutboxTrace;\n /** Range reads evaluated over held rows only; ranges re-execute fresh at commit and are never validated. */\n partialRanges: string[];\n /** The point reads or rule inputs outside coverage that stopped the prediction. */\n uncovered: PartialSite[];\n /**\n * Engine-owned aggregate targets (`maintain \u2026 count`) this write updates on the\n * server but the overlay omits, because the store does not hold them: named so\n * a reader can tell an intentionally omitted aggregate from a lost write.\n */\n omitted: string[];\n}\n\ninterface Hydrated {\n program: HeldProgram;\n coverage: Coverage;\n store: ClientStore;\n predicted: string[];\n}\n\nfunction tagged<T>(call: (...args: any[]) => T, ...args: any[]): T | undefined {\n try { return call(...args); }\n catch (error) {\n // DeliveryEnvelopeDecodeError is a TypeError; these are exactly the three\n // closed tagging/hashing failures the offline contract admits.\n if (!(error instanceof TypeError || error instanceof EvalError)) throw error;\n (globalThis as { __snapbackTwinLast?: string }).__snapbackTwinLast = `tagged:${String(error)}`;\n }\n}\n\n/** Debug seam for the witness: why the twin last declined to evaluate (never part of a result). */\nexport function twinLastDecline(): string | undefined { return (globalThis as { __snapbackTwinLast?: string }).__snapbackTwinLast; }\nfunction decline(reason: string): undefined { (globalThis as { __snapbackTwinLast?: string }).__snapbackTwinLast = reason; return undefined; }\n\nexport class Twin {\n constructor(private readonly sources: TwinSources) {}\n\n /**\n * The certified program run over coverage. `undefined` when no program is\n * held, when the coverage was delivered under another generation or schema\n * (the successor fence: a predecessor's program never evaluates into current\n * state), or when the operation is not a query the program knows.\n */\n async evaluate(op: string, args: unknown): Promise<LocalAnswer | undefined> {\n const hydrated = await this.hydrate();\n if (!hydrated) return decline(\"hydrate\");\n const operation = hydrated.program.programs[op];\n if (!operation || operation.kind !== \"query\") return decline(\"unknown-op\");\n const ir = operation.ir as { args?: unknown };\n const context = this.context(hydrated, ir, args, []);\n if (!context) return decline(\"context\");\n const since = hydrated.coverage.deliveredAt;\n const base = {\n seq: this.sources.seq(),\n ...(since === undefined ? {} : { since }),\n ...(hydrated.predicted.length ? { predicted: hydrated.predicted } : {}),\n };\n const partial = (sites: string[], trace: Trace, data?: unknown): LocalAnswer => {\n const reasons = partialReasons(sites, trace, hydrated.coverage);\n return {\n state: \"partial\",\n ...(data === undefined ? {} : { data }),\n reason: reasons[0]?.reason ?? \"never-held\",\n ...(reasons[0] === undefined ? {} : { site: reasons[0].site }),\n sites: reasons,\n ...base,\n };\n };\n try {\n const local = hydrated.store.reexecute(ir, context, operation.certificate);\n const result = local.execution.result;\n const data = result === \"Null\" && local.state !== \"fresh\" ? undefined : wireJson(result);\n if (local.state === \"fresh\") {\n return { state: queryState(operation.certificate, local.execution.trace), data, next: local.execution.next, ...base };\n }\n return partial(local.partialSites, local.execution.trace, data);\n } catch (error) {\n if (!(error instanceof EvalError)) throw error;\n if (error.trace && error.partialSites?.length) return partial(error.partialSites, error.trace);\n if (error.code === \"E_REQUIRE\") return { state: \"denied\", rule: error.authoredCode ?? error.code, ...base };\n // A covered execution failure is not missing coverage.\n throw error;\n }\n }\n\n /**\n * The mutation run over held rows with the intent's pinned ids as its `new`\n * envelope, so the prediction and the commit mint the same ids. Predicted\n * when every point read and rule input was covered; a range the store does\n * not hold whole is evaluated over the rows it has and named in\n * `partialRanges` \u2014 ranges re-execute at commit and are never validated. An\n * uncovered point or rule input, or a local refusal, leaves the intent\n * queued without a prediction and with an empty trace: the server judges.\n */\n async predict(op: string, args: unknown, ids: string[]): Promise<Prediction> {\n const none: Prediction = { predicted: false, overlay: [], trace: emptyTrace(), partialRanges: [], uncovered: [], omitted: [] };\n const hydrated = await this.hydrate();\n if (!hydrated) return none;\n const operation = hydrated.program.programs[op];\n if (!operation || operation.kind !== \"mutation\") return none;\n const ir = operation.ir as { args?: unknown };\n const context = this.context(hydrated, ir, args, ids);\n if (!context) return none;\n let local: ReturnType<ClientStore[\"applyMutation\"]>;\n try {\n local = hydrated.store.applyMutation(ir, context);\n } catch (error) {\n // A typed local mutation refusal (including an unsupported local IR or\n // schema) does not reject the intent: the server still judges it (\u00A77).\n // Unexpected JS errors propagate; they cannot enqueue an empty trace.\n if (!(error instanceof EvalError)) throw error;\n return {\n ...none,\n uncovered: error.trace && error.partialSites ? partialReasons(error.partialSites, error.trace, hydrated.coverage) : [],\n };\n }\n const trace = local.execution.trace;\n // An engine-owned aggregate target the store does not hold (`maintain \u2026\n // count`) is the server's to update: it is no read of the program's and\n // nothing the viewer renders from this write, so it does not block the\n // prediction; the overlay simply carries no count row, and names the\n // target under `omitted`. Every other `missing-authority` (a rule input,\n // a write row) does block.\n const misses = local.authorityMisses;\n const onlyMaintainTargets = local.state === \"partial\"\n && local.partialSites.every((site) => site === \"missing-authority\")\n && misses?.other === 0 && misses.maintainTargets.length;\n if (local.state !== \"predicted\" && !onlyMaintainTargets) return { ...none, uncovered: partialReasons(local.partialSites, trace, hydrated.coverage) };\n const rangeSites = new Set(trace.ranges.map((range) => range.site));\n const uncovered = local.uncoveredSites ?? [];\n const blocking = uncovered.filter((site) => !rangeSites.has(site) || trace.absences.some((absence) => absence.site === site));\n if (blocking.length) return { ...none, uncovered: partialReasons(blocking, trace, hydrated.coverage) };\n return {\n predicted: true,\n overlay: local.execution.writes.map((write) => write.row === null\n ? { table: write.table, id: write.id, row: {}, removed: true as const }\n : { table: write.table, id: write.id, row: wireJson(write.row) as Record<string, unknown> }),\n trace: {\n points: trace.points.map((point) => ({\n table: point.table,\n index: point.index,\n key: point.key.map(wireJson),\n digest: point.digest,\n })),\n verdicts: trace.verdicts.map((verdict) => ({\n ruleHash: verdict.rule_hash,\n inputsDigest: verdict.inputs_digest,\n result: verdict.result,\n })),\n },\n partialRanges: uncovered,\n uncovered: [],\n omitted: [...new Set(misses?.maintainTargets ?? [])],\n };\n }\n\n private context(hydrated: Hydrated, ir: { args?: unknown }, args: unknown, ids: string[]): Context | undefined {\n const principal = this.sources.principal();\n if (principal === undefined) throw new TypeError(\"no partition is open\");\n const localArgs = tagged(tagArguments, ir.args, args);\n return localArgs && {\n viewer: principal,\n principal_kind: \"user\",\n // @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 the auth-epoch fence:\n // a verdict minted under another epoch never matches, so it cannot vouch here.\n auth_epoch: hydrated.coverage.facts?.authEpoch ?? 0,\n args: localArgs,\n now: this.sources.now(),\n new_ids: [...ids],\n read_time: null,\n };\n }\n\n private async hydrate(): Promise<Hydrated | undefined> {\n const program = this.sources.program();\n if (!program) return decline(\"no-program\");\n const coverage = await this.sources.coverage();\n if (!coverage) return decline(\"no-coverage\");\n // Coverage a rotation superseded is never evaluated, exact or partial: the\n // reset path rebuilds it under the live generation (LLP 1012 \u00A78).\n if (coverage.superseded) return decline(\"superseded\");\n if (coverage.facts\n && (coverage.facts.generation !== program.generation || coverage.facts.schemaHash !== program.schemaHash)) {\n return decline(`facts:${coverage.facts.generation}/${program.generation}`);\n }\n // @ref LLP 1012#5-retention-revocation-and-the-fence \u2014 rule 4's twin-side\n // meaning: a held row of a `retain delivered-history` table is readable.\n const readable = Object.keys(program.schema.tables ?? {})\n .filter((name) => program.schema.tables![name]?.retain === \"delivered-history\");\n const overlay = await this.sources.overlay();\n const entries = await this.sources.entries();\n const predicted: string[] = [];\n // Only the tagger/hasher's closed failure set means this coverage was not\n // delivered under the held program. Store construction and overlay\n // mutation sit outside this catch: their bugs must never look hydrating.\n const closure = tagged(closureFromCoverage, coverage, program.schema, program.schemaHash);\n if (!closure) return decline(\"closure\");\n const store = new ClientStore(program.schema, closure, { readable });\n for (const entry of entries) {\n const rows = overlay[entry.intent];\n if (!rows) continue;\n for (const row of rows) {\n if (row.removed) store.remove(row.table, row.id);\n else {\n const value = tagged(tagWireRow, program.schema, row.table, row.row as Record<string, WireValue>);\n if (!value) return decline(`overlay-row:${row.table}`);\n store.put(row.table, value);\n }\n }\n predicted.push(entry.intent);\n }\n return { program, coverage, store, predicted };\n }\n}\n", "import { throwIfAborted } from \"./client-wire.js\";\nimport {\n DeliveryEnvelopeDecodeError,\n decodeDeliveryEnvelope,\n expandRows,\n type DeliveryEnvelopeV1,\n} from \"./offline-protocol.js\";\nimport { OutboxLedger, decodeGrant } from \"./store/outbox.js\";\nimport {\n canonicalAnswerKey,\n type Coverage,\n type CoverageFacts,\n type HeldAnswer,\n type HeldOperation,\n type HeldProgram,\n type OfflineSchema,\n type OutboxEntry,\n type OutboxGrant,\n type RangeStore,\n type RetentionPolicy,\n type RowRef,\n type StoreDelivery,\n type StoreRefresh,\n type StoreTombstone,\n type WatermarkRecord,\n tailWatermark,\n} from \"./store/range-store.js\";\nimport { ByteCache } from \"./store/byte-cache.js\";\nimport { Twin, type LocalAnswer, type Prediction } from \"./twin.js\";\nimport type { Manifest, OfflineClientOptions, OutboxSettlement } from \"./types.js\";\n\n/**\n * Ids a certified mutation can mint: the certificate's insert/upsert bounds, which\n * already price every row the program creates. A program without a certificate\n * has no bound, and an offline write against it refuses rather than guessing.\n */\nexport function certificateMaxNewIds(program: unknown): number | undefined {\n if (!object(program)) return undefined;\n const certificate = program.certificate;\n if (!object(certificate) || !Array.isArray(certificate.write_sites)) return undefined;\n let total = 0;\n for (const site of certificate.write_sites) {\n if (!object(site)) continue;\n if ((site.kind === \"Insert\" || site.kind === \"Upsert\") && Number.isSafeInteger(site.max_rows)) {\n total += Number(site.max_rows);\n }\n }\n return total;\n}\n\n// The tail chooser lives with the store, which keys the overlay drop by it; the\n// settlement tail and the resume's `log` import it from here as before.\nexport { tailWatermark };\n\nexport interface MountedQuery {\n op: string;\n args: unknown;\n drain: boolean;\n}\n\nexport interface ResumeRequestV1 {\n protocol: 1;\n generation: string;\n schemaHash: string;\n authEpoch: number;\n log?: { op: string; args: unknown; watermark: string | null; validator?: string };\n mounted: Array<{ op: string; args: unknown; validator: string }>;\n}\n\nexport interface ResumeAdjustment {\n which?: string;\n cap?: number;\n}\n\nexport interface AcceptedDelivery<Result> {\n result: {\n state: \"complete\" | \"capped\" | \"partial\" | \"denied\";\n data?: Result;\n next?: string | null;\n seq: number;\n reason?: string;\n rule?: string;\n };\n envelope?: DeliveryEnvelopeV1;\n refresh?: StoreRefresh;\n}\n\ntype ResumeFacts = CoverageFacts;\n\n/**\n * `GET /api/program` as custody: the shape the twin holds per generation.\n * Anything malformed is refused here rather than evaluated later.\n */\nexport function decodeHeldProgram(value: unknown): HeldProgram | undefined {\n if (!object(value)) return undefined;\n const { generation, schemaHash, schema, programs } = value;\n if (typeof generation !== \"string\" || typeof schemaHash !== \"string\" || !object(schema) || !object(schema.tables) || !object(programs)) {\n return undefined;\n }\n const held: Record<string, HeldOperation> = {};\n for (const [name, entry] of Object.entries(programs)) {\n if (!object(entry) || (entry.kind !== \"query\" && entry.kind !== \"mutation\")) continue;\n if (typeof entry.planHash !== \"string\" || !object(entry.ir) || !object(entry.certificate)) continue;\n // The payload binds each op to one certificate: the plan hashes must agree.\n if (entry.certificate.plan_hash !== entry.planHash) continue;\n held[name] = { kind: entry.kind, planHash: entry.planHash, ir: entry.ir, certificate: entry.certificate };\n }\n return { generation, schemaHash, schema: schema as HeldProgram[\"schema\"], programs: held };\n}\n\n// @ref LLP 1012#15-diagnostics \u2014 a local authority violation (a delivery for\n// another principal or auth epoch; a commit with no partition open) has its\n// own code: it is never `E_OFFLINE_RESET`, which drops held coverage, so a\n// healthy store is refused a delivery and keeps everything. A delivery under\n// another generation or schema is not a violation but a rotation: it is not\n// held, and the coverage is superseded until the reset path (`commitMany`).\nexport class OfflineAuthorityError extends Error {\n readonly code = \"E_OFFLINE_AUTHORITY\";\n constructor(message: string) {\n super(message);\n this.name = \"OfflineAuthorityError\";\n }\n}\n\nfunction object(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** The argument the manifest types `Cursor` (or `Optional(Cursor)`), by name order as the server picks it. */\nfunction cursorArgument(args: unknown): string | undefined {\n if (!object(args)) return undefined;\n for (const name of Object.keys(args).sort()) {\n const kind = args[name];\n if (kind === \"Cursor\" || (object(kind) && kind.Optional === \"Cursor\")) return name;\n }\n return undefined;\n}\n\nfunction rowKey(ref: RowRef): string {\n return `${ref.table}\\u0000${ref.id}`;\n}\n\n/**\n * Walks the envelope's reference form beside its expansion and nulls every `$row`\n * that names a viewed view-once row, so a live frame or a fresh query never\n * re-renders what `answer()` already hides (LLP 1012 \u00A79).\n */\nfunction nullViewed(reference: unknown, expanded: unknown, viewed: Set<string>): unknown {\n if (!object(reference)) {\n return Array.isArray(reference) && Array.isArray(expanded)\n ? expanded.map((item, index) => nullViewed(reference[index], item, viewed))\n : expanded;\n }\n const marker = reference.$row;\n if (object(marker) && Object.keys(reference).length === 1) {\n if (typeof marker.table === \"string\" && typeof marker.id === \"string\" && Object.keys(marker).length === 2) {\n return viewed.has(rowKey({ table: marker.table, id: marker.id })) ? null : expanded;\n }\n if (object(marker.$value) && object(expanded)) return nullViewed(marker.$value, expanded, viewed);\n }\n if (!object(expanded)) return expanded;\n return Object.fromEntries(Object.entries(expanded)\n .map(([key, item]) => [key, nullViewed(reference[key], item, viewed)]));\n}\n\nfunction resumeWhichMatches(which: string | undefined, op: string, args: unknown): boolean {\n if (!which) return false;\n return which === op || which === canonicalAnswerKey(op, args);\n}\n\nexport class OfflineRuntime {\n readonly store: RangeStore;\n readonly fenceDays: number;\n readonly maxAssetBytes: number;\n /** Asset bytes beside the rows, under their lease (LLP 1012 \u00A79); lane O4. */\n readonly bytes: ByteCache;\n readonly outbox: OutboxLedger;\n /** The replay currently in flight; the next drain queues behind it. Never rejects. */\n drainTail: Promise<void> = Promise.resolve();\n /**\n * The last drain's outcome, rejection kept: `settled()` awaits this so a\n * non-retryable refusal that stopped the replay reaches the caller instead of\n * resolving with intents still queued (LLP 1012 \u00A77).\n */\n drainOutcome: Promise<OutboxSettlement> = Promise.resolve();\n /** The twin: the certified program over this partition's coverage (LLP 1012 \u00A76, \u00A77). */\n readonly twin: Twin;\n private partition?: string;\n private retention: Record<string, RetentionPolicy> = {};\n private cursors: Record<string, string> = {};\n private schema?: OfflineSchema;\n private facts?: ResumeFacts;\n /** Set by a delivery under another generation or schema: held coverage is stale-exact until the reset path (LLP 1012 \u00A78). */\n private superseded?: CoverageFacts;\n private latestSeq = 0;\n private sessionEpoch?: number;\n private pendingGrant?: OutboxGrant;\n private pendingBounds?: Record<string, number>;\n private pendingProgram?: HeldProgram;\n private held?: HeldProgram;\n private standIn?: string;\n private resumeQueries: MountedQuery[] = [];\n private tail: Promise<void> = Promise.resolve();\n /** Fences deliveries already in flight when coverage or principal is replaced. */\n coverageRevision = 0;\n\n constructor(private readonly options: OfflineClientOptions) {\n this.store = options.store();\n this.fenceDays = options.fenceDays ?? 7;\n this.maxAssetBytes = options.maxAssetBytes ?? 256 * 1024 * 1024;\n this.bytes = new ByteCache(this.store, { maxAssetBytes: this.maxAssetBytes, viewOnce: options.viewOnce });\n this.outbox = new OutboxLedger(this.store, {\n now: () => Date.now(),\n fenceMs: this.fenceDays * 24 * 60 * 60 * 1_000,\n });\n this.twin = new Twin({\n program: () => this.held,\n coverage: () => this.coverage(),\n overlay: () => this.store.outbox.overlay(),\n entries: () => this.outbox.entries(),\n principal: () => this.partition,\n now: () => Date.now(),\n seq: () => this.latestSeq,\n });\n }\n\n get principal(): string | undefined { return this.partition; }\n\n /** The generation of the certified program this partition holds, if any. */\n get programGeneration(): string | undefined { return this.held?.generation; }\n\n /** A live delivery rotated past the held coverage; only the reset resume may clear it. */\n get resetNeeded(): boolean { return this.superseded !== undefined; }\n\n /** The twin's answer for a query, or `undefined` when it cannot run (no program, another generation). */\n async evaluate(op: string, args: unknown): Promise<LocalAnswer | undefined> {\n if (this.partition === undefined) return undefined;\n return this.twin.evaluate(op, args);\n }\n\n /** The twin's run of a mutation over held rows with the intent's pinned ids. */\n async predict(op: string, args: unknown, ids: string[]): Promise<Prediction> {\n return this.twin.predict(op, args, ids);\n }\n\n /** The highest server seq this runtime has committed; what a queued intent was issued against. */\n get seq(): number { return this.latestSeq; }\n\n async open(principal: string, authenticated = false): Promise<void> {\n if (this.partition !== principal) this.outbox.resetTrust();\n // The session allowance is dropped before the first await of a partition change:\n // a byte read that lands between the carrier's open and bind() must never hand\n // the previous principal's blob to the incoming partition (grok, O4-web round 2).\n if (this.partition !== undefined && this.partition !== principal) this.bytes.forget();\n await this.serial(async () => {\n if (this.partition !== principal) {\n this.outbox.resetTrust();\n this.facts = undefined;\n this.superseded = undefined;\n this.held = undefined;\n this.standIn = undefined;\n this.drainOutcome = Promise.resolve();\n }\n if (this.partition !== undefined && this.partition !== principal) await this.store.wipe(this.partition);\n if (this.partition !== principal) {\n this.coverageRevision += 1;\n this.facts = this.superseded = this.held = undefined;\n this.latestSeq = 0;\n this.sessionEpoch = undefined;\n }\n await this.store.open(principal);\n if (authenticated) await this.store.unseal();\n this.partition = principal;\n this.bytes.bind(principal);\n await this.loadFacts();\n await this.loadProgram();\n await this.flushGrant();\n await this.flushBounds();\n this.outbox.notify();\n });\n }\n\n /** Called only after the owner authenticated this exact principal. */\n async reauthenticate(principal: string): Promise<void> {\n await this.serial(async () => {\n if (this.partition !== principal) {\n throw new OfflineAuthorityError(`authenticated principal ${principal} does not match the open offline partition`);\n }\n await this.store.unseal();\n await this.loadFacts();\n await this.loadProgram();\n await this.flushGrant();\n await this.flushBounds();\n this.outbox.notify();\n });\n }\n\n /**\n * Records the `grant` a login, guest, or resume response carries. The\n * partition may not be open yet (login opens it next), so the grant waits\n * until the store for this principal is writable. Returns its input.\n */\n noteGrant<T>(value: T): T {\n const grant = decodeGrant(value);\n if (grant) this.pendingGrant = grant;\n return value;\n }\n\n async adoptPendingGrant(): Promise<void> {\n await this.serial(() => this.flushGrant());\n }\n\n /** True when a resume request's `log` is an ordinary answer standing in for a drained log. */\n standInLog(log: { op: string; args: unknown }): boolean {\n return this.standIn !== undefined && this.standIn === canonicalAnswerKey(log.op, log.args);\n }\n\n async queuedIntents(): Promise<OutboxEntry[]> {\n if (this.partition === undefined) return [];\n return this.outbox.queued();\n }\n\n async seal(): Promise<void> {\n this.outbox.resetTrust();\n if (this.partition === undefined) return;\n await this.serial(async () => {\n this.bytes.forget();\n await this.store.seal();\n this.outbox.notify();\n });\n }\n\n async wipe(): Promise<void> {\n this.outbox.resetTrust();\n await this.serial(async () => {\n if (this.partition === undefined) return;\n const partition = this.partition;\n this.coverageRevision += 1;\n this.partition = undefined;\n this.facts = undefined;\n this.superseded = undefined;\n this.held = undefined;\n this.sessionEpoch = undefined;\n this.bytes.bind(undefined);\n await this.store.wipe(partition);\n this.outbox.notify();\n });\n }\n\n async close(): Promise<void> {\n this.outbox.resetTrust();\n await this.tail;\n this.outbox.close();\n this.bytes.forget();\n await this.store.close?.();\n }\n\n manifest(value: Manifest): void {\n const tables = value.tables ?? value.schema?.tables ?? {};\n const retention: Record<string, RetentionPolicy> = {};\n for (const [name, table] of Object.entries(tables)) {\n if (!table || typeof table !== \"object\") continue;\n const word = (table as { retain?: unknown }).retain;\n if (word === \"until-revoked\" || word === \"delivered-history\") retention[name] = word;\n }\n this.retention = retention;\n const cursors: Record<string, string> = {};\n for (const [name, operation] of Object.entries(value.ops ?? {})) {\n const cursor = cursorArgument((operation as { args?: unknown } | undefined)?.args);\n if (cursor !== undefined) cursors[name] = cursor;\n }\n this.cursors = cursors;\n // A fresh login has no receipt/auth epoch. A parameter-free query (including\n // optional cursor arguments) can earn those facts before a logless resume.\n this.resumeQueries = Object.entries(value.ops ?? {}).flatMap(([op, operation]) => {\n if (operation.kind !== \"query\" || !object(operation.args)) return [];\n if (!Object.values(operation.args).every((arg) => object(arg) && \"Optional\" in arg)) return [];\n return [{ op, args: Object.fromEntries(Object.keys(operation.args).map((key) => [key, null])), drain: false }];\n });\n if (value.schema?.tables) this.schema = value.schema as OfflineSchema;\n }\n\n /**\n * The op's cursor argument as the manifest names it (the server keys the resume tail\n * by that argument's type, never its name); `c`, the recipe's spelling, until the\n * manifest is loaded.\n */\n cursorArg(op: string): string {\n return this.cursors[op] ?? \"c\";\n }\n\n /**\n * Records `/api/program`: the schema, the certified program held for the twin\n * keyed by its generation, and each op's write bound \u2014 persisted together\n * with the outbox so a cold start with the owner cut evaluates and prices its\n * slices from the certificate, never from a guess (LLP 1012 \u00A77, \u00A78).\n */\n async program(value: unknown, signal?: AbortSignal): Promise<void> {\n throwIfAborted(signal);\n if (!object(value) || !object(value.programs)) return;\n const bounds: Record<string, number> = {};\n for (const [name, program] of Object.entries(value.programs)) {\n const bound = certificateMaxNewIds(program);\n if (bound !== undefined) bounds[name] = bound;\n }\n const held = decodeHeldProgram(value);\n // Always acquire the runtime queue before the ledger, as open() does when\n // adopting a login grant. Cancellation is checked at each queue boundary.\n await this.serial(() => {\n throwIfAborted(signal);\n return this.outbox.write(async () => {\n throwIfAborted(signal);\n // Custody must succeed before a reset can erase the predecessor coverage.\n if (this.partition !== undefined) {\n await this.store.commit({ bounds, ...(held ? { programs: { [held.generation]: held } } : {}) });\n throwIfAborted(signal);\n } else {\n this.pendingBounds = bounds;\n this.pendingProgram = held;\n }\n if (held) { this.held = held; this.schema = held.schema; }\n this.outbox.notify();\n });\n });\n }\n\n async accept<Result>(op: string, args: unknown, raw: unknown): Promise<AcceptedDelivery<Result>> {\n if (object(raw) && raw.state === \"unchanged\") {\n if (Object.keys(raw).sort().join(\",\") !== \"seq,state,validator\"\n || !Number.isSafeInteger(raw.seq) || Number(raw.seq) < 0\n || typeof raw.validator !== \"string\" || !/^[0-9a-f]{64}$/.test(raw.validator)) {\n throw new DeliveryEnvelopeDecodeError(\"$\", \"conditional delivery must be { state, seq, validator }\");\n }\n const held = await this.answer<Result>(op, args);\n if (!held || held.validator !== raw.validator) {\n throw new DeliveryEnvelopeDecodeError(\"$.validator\", \"does not match the held answer\");\n }\n const result = {\n state: held.state,\n ...(held.data === undefined ? {} : { data: held.data }),\n ...(held.next === undefined ? {} : { next: held.next }),\n seq: raw.seq as number,\n ...(held.reason === undefined ? {} : { reason: held.reason }),\n ...(held.rule === undefined ? {} : { rule: held.rule }),\n } as AcceptedDelivery<Result>[\"result\"];\n return {\n result,\n refresh: { op, args, seq: raw.seq as number, validator: raw.validator, deliveredAt: Date.now() },\n };\n }\n if (!object(raw) || raw.protocol === undefined) {\n return { result: raw as AcceptedDelivery<Result>[\"result\"] };\n }\n const envelope = decodeDeliveryEnvelope(raw);\n const result: AcceptedDelivery<Result>[\"result\"] = {\n state: envelope.state,\n ...(envelope.state === \"denied\" ? {} : { data: await this.expandUnviewed(envelope) as Result }),\n ...(envelope.state === \"complete\" || envelope.state === \"capped\" ? { next: envelope.next } : {}),\n seq: envelope.seq,\n ...(envelope.reason === undefined ? {} : { reason: envelope.reason }),\n ...(envelope.rule === undefined ? {} : { rule: envelope.rule }),\n };\n return { result, envelope };\n }\n\n async commit(op: string, args: unknown, accepted: AcceptedDelivery<unknown>, revision = this.coverageRevision, current?: () => boolean): Promise<boolean> {\n return this.commitMany([{ op, args, accepted }], undefined, undefined, revision, current);\n }\n\n async commitMany(\n items: Array<{ op: string; args: unknown; accepted: AcceptedDelivery<unknown> }>,\n watermark?: Omit<WatermarkRecord, \"generation\" | \"schemaHash\" | \"authEpoch\" | \"updatedAt\">,\n outbox?: { put?: OutboxEntry[]; remove?: string[] },\n revision?: number,\n current?: () => boolean,\n resumeSeq?: number,\n ): Promise<boolean> {\n if (items.length === 0 && !watermark && !outbox && resumeSeq === undefined) return false;\n // An outbox write shares the ledger's tail (one critical section for every\n // enqueue, adoption, bound, settlement, and prediction drop), acquired\n // inside the runtime queue just like program and grant adoption.\n const run = async () => {\n if ((current && !current()) || (revision !== undefined && revision !== this.coverageRevision)) return false;\n if (this.partition === undefined) {\n throw new OfflineAuthorityError(\"an offline partition must be opened before committing a delivery\");\n }\n const deliveries: StoreDelivery[] = [];\n const refreshes: StoreRefresh[] = [];\n const tombstones: StoreTombstone[] = [];\n let nextFacts = this.facts;\n let superseded = this.superseded;\n let sawSupersession = false;\n for (const { op, args, accepted } of items) {\n const envelope = accepted.envelope;\n if (envelope && envelope.authority.principal !== this.partition) {\n throw new OfflineAuthorityError(\n `delivery principal ${envelope.authority.principal} does not match open partition ${this.partition}`,\n );\n }\n if (accepted.refresh) {\n refreshes.push(accepted.refresh);\n continue;\n }\n if (envelope) {\n // The first authenticated delivery establishes session authority. A\n // program reset keeps that epoch: the owner's 409 checked it before\n // checking generation. A successor envelope cannot choose a new epoch.\n if (this.sessionEpoch !== undefined && envelope.authority.authEpoch !== this.sessionEpoch) {\n throw new OfflineAuthorityError(\"delivery auth epoch does not match the authenticated session\");\n }\n if (!nextFacts && this.held) nextFacts = {\n generation: this.held.generation, schemaHash: this.held.schemaHash,\n authEpoch: this.sessionEpoch ?? envelope.authority.authEpoch,\n };\n // @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 a\n // rotation: the server now runs another generation or schema. The\n // delivery is not held (one generation per partition), the caller\n // still gets the live answer, and the held coverage is marked\n // superseded so the twin serves nothing stale-exact from it; the next\n // resume carries the old facts, is refused `E_OFFLINE_RESET`, and the\n // reset path drops the coverage and re-fetches the program.\n if (nextFacts && (envelope.generation !== nextFacts.generation || envelope.schemaHash !== nextFacts.schemaHash)) {\n superseded = { generation: envelope.generation, schemaHash: envelope.schemaHash, authEpoch: envelope.authority.authEpoch };\n sawSupersession = true;\n continue;\n }\n // Another auth epoch under the same program is a local authority\n // violation: refused, and the coverage kept (LLP 1012 \u00A715).\n if (nextFacts && envelope.authority.authEpoch !== nextFacts.authEpoch) {\n throw new OfflineAuthorityError(\"delivery auth epoch does not match the open coverage\");\n }\n nextFacts = {\n generation: envelope.generation,\n schemaHash: envelope.schemaHash,\n authEpoch: envelope.authority.authEpoch,\n };\n }\n const source = envelope ?? accepted.result;\n deliveries.push({\n cursorArg: this.cursorArg(op),\n op,\n args,\n state: source.state,\n ...(source.data === undefined ? {} : { data: source.data }),\n ...(source.next === undefined ? {} : { next: source.next }),\n seq: source.seq,\n ...(envelope?.validator === undefined ? {} : { validator: envelope.validator }),\n ...(envelope?.receipt === undefined ? {} : { receipt: envelope.receipt }),\n ...(envelope?.rows === undefined ? {} : { rows: envelope.rows }),\n ...(\"reason\" in source && typeof source.reason === \"string\" ? { reason: source.reason } : {}),\n ...(\"rule\" in source && typeof source.rule === \"string\" ? { rule: source.rule } : {}),\n deliveredAt: Date.now(),\n });\n for (const row of envelope?.rows ?? []) {\n for (const ref of this.options.onTombstone?.(row) ?? []) tombstones.push({ ...ref, seq: envelope!.seq });\n }\n }\n // A settlement may only persist beside a tail actually admitted under\n // this coverage. A successor tail leaves the intent queued for replay.\n const settlement = sawSupersession ? undefined : outbox;\n const watermarkRecord = !sawSupersession && watermark ? {\n ...watermark,\n cursorArg: this.cursorArg(watermark.op),\n ...(nextFacts?.generation === undefined ? {} : { generation: nextFacts.generation }),\n ...(nextFacts?.schemaHash === undefined ? {} : { schemaHash: nextFacts.schemaHash }),\n ...(nextFacts?.authEpoch === undefined ? {} : { authEpoch: nextFacts.authEpoch }),\n updatedAt: Date.now(),\n } : undefined;\n await this.store.commit({\n deliveries,\n refreshes,\n tombstones,\n retention: this.retention,\n schema: this.schema,\n ...(watermarkRecord ? { watermark: watermarkRecord } : {}),\n ...(settlement ? { outbox: settlement } : {}),\n // A resume counts toward overlay retirement only under the coverage it\n // resumed; a successor tail persists nothing but its pending marker.\n ...(resumeSeq === undefined || sawSupersession ? {} : { resumeSeq }),\n ...(nextFacts && nextFacts !== this.facts ? { facts: nextFacts } : {}),\n ...(superseded && superseded !== this.superseded ? { superseded } : {}),\n });\n this.facts = nextFacts;\n this.sessionEpoch ??= nextFacts?.authEpoch;\n this.superseded = superseded;\n for (const item of [...deliveries, ...refreshes]) this.latestSeq = Math.max(this.latestSeq, item.seq);\n // A delivery or unchanged resume can clear a committed entry's predicted flag.\n this.outbox.notify();\n return sawSupersession;\n };\n return this.serial(() => outbox ? this.outbox.write(run) : run());\n }\n\n async answer<Result>(op: string, args: unknown): Promise<HeldAnswer<Result> | undefined> {\n // Superseded coverage answers nothing: not served offline, and its validators\n // are never sent, so a conditional `unchanged` cannot carry a stale answer forward.\n if (!this.coverageCurrent()) return undefined;\n const revision = this.coverageRevision;\n const answer = await this.store.answer<Result>(op, args);\n return revision === this.coverageRevision && this.coverageCurrent() ? answer : undefined;\n }\n\n private coverageCurrent(): boolean {\n return this.partition !== undefined && this.superseded === undefined\n && (!this.facts || !this.held || (this.facts.generation === this.held.generation\n && this.facts.schemaHash === this.held.schemaHash));\n }\n\n /** The envelope's data with every viewed view-once row read as `null`, on the wire as in the store. */\n private async expandUnviewed(envelope: DeliveryEnvelopeV1): Promise<unknown> {\n const expanded = expandRows(envelope);\n const store = this.store as Partial<{ viewedRows(): Promise<RowRef[]> }>;\n if (this.partition === undefined || typeof store.viewedRows !== \"function\") return expanded;\n const viewed = new Set((await store.viewedRows()).map(rowKey));\n return viewed.size === 0 ? expanded : nullViewed(envelope.data, expanded, viewed);\n }\n\n async markWatermark(op: string, args: unknown, watermark: string | null, validator?: string, revision = this.coverageRevision): Promise<void> {\n if (this.partition === undefined) return;\n await this.commitMany([], { op, args, watermark, ...(validator === undefined ? {} : { validator }) }, undefined, revision);\n }\n\n async resumeRequest(\n mounted: MountedQuery[],\n adjustment: ResumeAdjustment = {},\n ): Promise<ResumeRequestV1 | undefined> {\n if (this.partition === undefined || !this.facts) return undefined;\n // The owner checks authority and generation before processing queries. A\n // reset probe needs only old facts, never old validators or a drained log.\n if (!this.coverageCurrent()) return { protocol: 1, ...this.facts, mounted: [] };\n const coverage = await this.store.coverage();\n // The same chooser as the settlement tail (`tailWatermark`), so the log a\n // resume asks for is the log a committed intent's rows are filed under.\n const watermark = tailWatermark(coverage.watermarks);\n const cap = Math.max(0, Math.min(32, Number.isSafeInteger(adjustment.cap) ? adjustment.cap! : 32));\n const candidates = mounted.filter((query) => !query.drain\n && query.op !== watermark?.op\n && !resumeWhichMatches(adjustment.which, query.op, query.args));\n const indexedWhich = adjustment.which?.match(/^mounted\\[(\\d+)\\]$/)?.[1];\n if (indexedWhich !== undefined) candidates.splice(Number(indexedWhich), 1);\n const mountedAnswers = (await Promise.all(candidates.slice(0, cap).map(async (query) => ({\n query,\n answer: await this.answer(query.op, query.args),\n })))).filter((item): item is { query: MountedQuery; answer: HeldAnswer & { validator: string } } =>\n typeof item.answer?.validator === \"string\");\n // A delivery can supersede coverage while the carrier reads are in flight.\n if (!this.facts) return undefined;\n if (!this.coverageCurrent()) return { protocol: 1, ...this.facts, mounted: [] };\n const omitLog = adjustment.which === \"log\"\n || (watermark !== undefined && resumeWhichMatches(adjustment.which, watermark.op, watermark.args));\n // Without a drained log the owner still needs one member to answer, and the\n // device still needs the grant a resume returns: the first held mounted\n // answer stands in, with a null watermark, and leaves no watermark behind.\n const standIn = !watermark && !omitLog ? mountedAnswers.shift() : undefined;\n this.standIn = standIn ? canonicalAnswerKey(standIn.query.op, standIn.query.args) : undefined;\n if (!watermark && !standIn && (await this.queuedIntents()).length === 0) return undefined;\n return {\n protocol: 1,\n ...this.facts,\n ...(standIn ? {\n log: { op: standIn.query.op, args: standIn.query.args, watermark: null, validator: standIn.answer.validator },\n } : !watermark || omitLog ? {} : {\n log: {\n op: watermark.op,\n args: watermark.args,\n watermark: watermark.watermark,\n ...(watermark.validator === undefined ? {} : { validator: watermark.validator }),\n },\n }),\n mounted: mountedAnswers.map(({ query, answer }) => ({\n op: query.op,\n args: query.args,\n validator: answer.validator,\n })),\n };\n }\n\n async resetCoverage(authEpoch?: number, signal?: AbortSignal): Promise<void> {\n // The fence's trust anchor belongs to the coverage being replaced.\n this.outbox.resetTrust();\n if (this.partition !== undefined) await this.serial(async () => {\n throwIfAborted(signal);\n const epoch = authEpoch ?? this.sessionEpoch ?? this.facts?.authEpoch;\n const facts = this.held && epoch !== undefined ? {\n generation: this.held.generation, schemaHash: this.held.schemaHash, authEpoch: epoch,\n } : undefined;\n // Keep a durable pending marker through the entire rebuild, including a\n // crash after program adoption. Facts let a cold restart authenticate its\n // resume even before any fresh query has committed.\n const superseded = facts ?? this.superseded ?? this.facts;\n await this.store.commit({ resetCoverage: true, facts, superseded });\n this.coverageRevision += 1;\n this.facts = facts;\n this.sessionEpoch = epoch;\n this.superseded = superseded;\n });\n }\n\n /** Clear only the rebuild we completed, never a successor discovered during it. */\n async completeReset(revision: number, signal?: AbortSignal): Promise<boolean> {\n return this.serial(async () => {\n throwIfAborted(signal);\n if (revision !== this.coverageRevision) return false;\n if (!this.superseded) return true;\n if (!this.facts || !this.held || this.facts.generation !== this.held.generation\n || this.facts.schemaHash !== this.held.schemaHash\n || this.superseded.generation !== this.held.generation\n || this.superseded.schemaHash !== this.held.schemaHash) return false;\n await this.store.commit({ superseded: null });\n this.superseded = undefined;\n return true;\n });\n }\n\n async coverage(): Promise<Coverage | undefined> {\n return this.partition === undefined ? undefined : this.store.coverage();\n }\n\n /** A real query earns the authority facts; metadata alone never renews trust. */\n async resumeSeed(mounted: MountedQuery[]): Promise<MountedQuery | undefined> {\n if (this.partition === undefined) return undefined;\n const coverage = await this.store.coverage();\n const held = tailWatermark(coverage.watermarks);\n // Prefer the mounted drain, then the recorded log, then the first manifest\n // query with a Cursor and known arguments, then the first all-optional query.\n // An ordinary mounted query must not displace the app's chosen delivery log.\n const log = mounted.find((query) => query.drain);\n if (log) return log;\n if (held) return { op: held.op, args: held.args, drain: true };\n for (const op of Object.keys(this.cursors)) {\n const query = mounted.find((query) => query.op === op) ?? this.resumeQueries.find((query) => query.op === op);\n if (query) return query;\n }\n return this.resumeQueries[0] ?? mounted[0];\n }\n\n private async flushGrant(): Promise<void> {\n const grant = this.pendingGrant;\n if (!grant || this.partition === undefined) return;\n this.pendingGrant = undefined;\n try {\n await this.outbox.adopt(grant);\n } catch (error) {\n this.pendingGrant = grant;\n throw error;\n }\n }\n\n private async flushBounds(): Promise<void> {\n const bounds = this.pendingBounds;\n if (!bounds || this.partition === undefined) return;\n const program = this.pendingProgram;\n this.pendingBounds = undefined;\n this.pendingProgram = undefined;\n try {\n // One generation is held at a time: the program replaces its predecessor whole.\n await this.outbox.recordBounds(bounds, program === undefined ? undefined : { [program.generation]: program });\n } catch (error) {\n this.pendingBounds = bounds;\n this.pendingProgram = program;\n throw error;\n }\n }\n\n private async loadProgram(): Promise<void> {\n let programs: Record<string, HeldProgram>;\n // Custody like the outbox: sealed with it, read again on unseal.\n try { programs = await this.store.outbox.programs(); } catch { return; }\n const held = Object.values(programs)[0];\n if (held) this.held = held;\n if (held && this.schema === undefined) this.schema = held.schema;\n }\n\n private async loadFacts(): Promise<void> {\n const coverage = await this.store.coverage();\n this.superseded = coverage.superseded;\n if (coverage.facts) {\n this.facts = coverage.facts;\n this.sessionEpoch ??= coverage.facts.authEpoch;\n return;\n }\n const watermark = tailWatermark(coverage.watermarks);\n if (watermark?.generation && watermark.schemaHash && watermark.authEpoch !== undefined) {\n this.facts = {\n generation: watermark.generation,\n schemaHash: watermark.schemaHash,\n authEpoch: watermark.authEpoch,\n };\n }\n }\n\n private serial<T>(action: () => Promise<T>): Promise<T> {\n const run = this.tail.then(action);\n this.tail = run.then(() => undefined, () => undefined);\n return run;\n }\n}\n\n/**\n * The offline view of a query: the twin's local answer when it ran and is at\n * least as exact as the held one, else the held answer, else `hydrating`. A\n * held answer's facts (`seq`, `since`, the drain's watermark, `retained`) stay\n * with the twin's data: the stored answer is the covered case, not a second\n * mechanism (LLP 1012 \u00A76).\n */\nexport function offlineView<Result>(held: HeldAnswer<Result> | undefined, local?: LocalAnswer): any {\n const exactHeld = held !== undefined && (held.state === \"complete\" || held.state === \"capped\");\n const useLocal = local !== undefined && !(local.state === \"partial\" && exactHeld) && !held?.retained;\n if (!useLocal) {\n if (!held) return { state: \"hydrating\", live: false, connection: \"offline\" };\n const {\n op: _op,\n args: _args,\n receipt: _receipt,\n validator: _validator,\n deliveredAt,\n ...answer\n } = held;\n return {\n ...answer,\n live: false,\n connection: \"offline\",\n stale: { since: deliveredAt },\n };\n }\n const { since, ...answer } = local;\n const facts = held === undefined ? {} : {\n seq: held.seq,\n ...(held.caughtUp === undefined ? {} : { caughtUp: held.caughtUp }),\n ...(held.watermark === undefined ? {} : { watermark: held.watermark }),\n };\n return {\n ...answer,\n ...facts,\n live: false,\n connection: \"offline\",\n stale: { since: held?.deliveredAt ?? since ?? Date.now() },\n };\n}\n", "// @ref LLP 1012#7-writes-offline \u2014 writes that cannot reach the owner become\n// durable intents; replay is FIFO, one envelope per request, and a settlement\n// lands in the same swap as the rows the commit produced.\nimport { throwIfAborted } from \"./client-wire.js\";\nimport {\n SnapbackRefusal,\n isSnapbackRefusal,\n wireMutation,\n wireObject,\n wireQuery,\n wireRefusalEnvelope,\n wireShape,\n} from \"./client-wire.js\";\nimport { DeliveryEnvelopeDecodeError } from \"./offline-protocol.js\";\nimport { tailWatermark, type AcceptedDelivery, type OfflineRuntime } from \"./offline.js\";\nimport { replayEnvelope, type OutboxEntry } from \"./store/outbox.js\";\nimport { referenceName } from \"./api.js\";\nimport type { MutationResult, OutboxApi } from \"./types.js\";\n\n/** Records the grant a login/guest response carries; the value passes through untouched. */\nexport function captureGrant<T>(runtime: OfflineRuntime | undefined, value: T): T {\n return runtime ? runtime.noteGrant(value) : value;\n}\n\n/**\n * The replayed mutation's terminal object: today's committed/rejected shapes\n * plus the trace conflict, which carries no diagnostic code of its own on the\n * wire and is given the client-side `E_OFFLINE_CONFLICT` envelope here.\n */\nexport function wireReplayResponse<Result>(value: unknown): MutationResult<Result> & { intent?: string } {\n const surface = \"replayed mutation response\";\n const record = wireObject(value, surface);\n const intent = typeof record.intent === \"string\" ? { intent: record.intent } : {};\n if (record.state === \"rejected\" && record.reason === \"conflict\") {\n if (record.site !== undefined && typeof record.site !== \"string\") throw wireShape(`${surface}.site must be a string`);\n const site = record.site as string | undefined;\n return {\n state: \"rejected\",\n reason: \"conflict\",\n code: \"E_OFFLINE_CONFLICT\",\n family: \"offline\",\n message: `the rows this write read have changed${site ? ` at ${site}` : \"\"}`,\n ...(site === undefined ? {} : { site }),\n rewrite: \"read the current row, then send the write again as a new intent\",\n guide: \"offline\",\n ...intent,\n };\n }\n const result = wireMutation<Result>(value);\n if (result.state === \"rejected\" && typeof record.reason === \"string\") return { ...result, reason: record.reason, ...intent };\n return { ...result, ...intent };\n}\n\ntype Transport = (path: string, init: RequestInit) => Promise<unknown>;\ntype DrainResult = { stopped: boolean; reason?: \"fence\" };\n\nexport interface SubmitMutationOptions {\n runtime: OfflineRuntime | undefined;\n /** The client's transport is cut (`client.offline()`); the owner is never tried. */\n offline: boolean;\n op: string;\n args: unknown;\n json: Transport;\n failure(error: unknown): Error;\n drain(): Promise<{ stopped: boolean }>;\n}\n\n/**\n * A client with no store (no partition open) sends today's bytes. With a\n * partition open every write carries the replay envelope, online or not: the\n * twin runs it locally for its ids and trace, the intent is durable before the\n * request, and the server's ledger makes the online path exactly-once too \u2014 a\n * 503 after a commit can no longer double-send (LLP 1002 \u00A79, LLP 1012 \u00A77). A\n * partition with no custody yet (no grant, or an unknown write bound) refuses\n * `E_OFFLINE_ID_BLOCK` with no request rather than fall back to plain bytes:\n * that window is exactly where a 503 after a commit would double-send.\n * Offline, behind queued intents a drain could not clear, or after a transport\n * failure, the write resolves `queued`.\n */\nexport async function submitMutation<Result>(options: SubmitMutationOptions): Promise<MutationResult<Result>> {\n const { runtime } = options;\n const plain = async () => wireMutation<Result>(await options.json(\"/api/mutation\", {\n method: \"POST\",\n body: JSON.stringify({ op: options.op, args: options.args }),\n }));\n if (!runtime || runtime.principal === undefined) return plain();\n const enqueue = async (): Promise<OutboxEntry> => {\n try {\n return await runtime.outbox.enqueue(\n { op: options.op, args: options.args, issuedSeq: runtime.seq },\n (ids) => runtime.predict(options.op, options.args, ids),\n );\n } catch (error) {\n throw options.failure(error);\n }\n };\n const queued = (entry: OutboxEntry): MutationResult<Result> => ({ state: \"queued\", intent: entry.intent, ids: entry.ids });\n if (options.offline) return queued(await enqueue());\n if ((await runtime.queuedIntents()).length > 0) {\n // FIFO: an intent issued behind queued ones must not overtake them. An\n // older intent's refusal is its own: it reaches `settled()` and\n // `useOutbox()`, never this call, which queues behind it.\n let stopped = true;\n try {\n ({ stopped } = await options.drain());\n } catch {\n stopped = true;\n }\n if (stopped) return queued(await enqueue());\n }\n const entry = await enqueue();\n let stopped: boolean;\n try {\n ({ stopped } = await options.drain());\n } catch (error) {\n // A refusal that stopped the replay belongs to the intent that drew it;\n // this one is durable and reports through its entry.\n const own = await runtime.store.outbox.get(entry.intent);\n if (own && own.state !== \"queued\") return settledResult<Result>(own, runtime);\n throw error;\n }\n const settled = await runtime.store.outbox.get(entry.intent);\n // A transport failure mid-drain leaves the intent queued: the retry is the same envelope.\n if (!settled || settled.state === \"queued\") return queued(entry);\n void stopped;\n return settledResult<Result>(settled, runtime);\n}\n\n/** An online write that settled in its own call: the terminal answer, with the entry retired from the queue. */\nasync function settledResult<Result>(entry: OutboxEntry, runtime: OfflineRuntime): Promise<MutationResult<Result>> {\n await runtime.outbox.dismiss(entry.intent);\n if (entry.state === \"expired\") {\n throw new SnapbackRefusal({\n code: \"E_OFFLINE_INTENT_EXPIRED\",\n family: \"offline\",\n message: \"the owner refused this intent because its replay grant is unknown, foreign, or older than thirty days\",\n site: \"client.outbox.replay\",\n rewrite: \"dismiss this intent, resume online for a fresh grant, then send again\",\n guide: \"offline\",\n });\n }\n return entry.response as MutationResult<Result>;\n}\n\nexport interface DrainOptions {\n signal?: AbortSignal;\n runtime: OfflineRuntime;\n json: Transport;\n shape(message: string): Error;\n failure(error: unknown): Error;\n}\n\n/**\n * Replays queued intents in order. A transport failure leaves the intent\n * queued and stops; a rejection, conflict, or refusal settles only that intent\n * and the drain continues. Past the fence, replay waits for a successful\n * resume; only the owner's `E_OFFLINE_INTENT_EXPIRED` refusal settles expired.\n */\nexport function drainOutbox(options: DrainOptions): Promise<DrainResult> {\n const { runtime } = options;\n const run = runtime.drainTail.then(() => drainQueued(options));\n runtime.drainTail = run.then(() => undefined, () => undefined);\n // The outcome keeps the rejection for `settled()`; the handler here only\n // stops an unobserved refusal from surfacing as an unhandled rejection.\n const outcome = run.then((result) => result.reason === \"fence\" ? { stopped: \"fence\" as const } : undefined);\n void outcome.catch(() => undefined);\n runtime.drainOutcome = outcome;\n return run;\n}\n\nasync function drainQueued(options: DrainOptions): Promise<DrainResult> {\n const { runtime } = options;\n throwIfAborted(options.signal);\n if (runtime.principal === undefined) return { stopped: false };\n for (const queued of await runtime.outbox.queued()) {\n throwIfAborted(options.signal);\n const entry = await runtime.store.outbox.get(queued.intent);\n throwIfAborted(options.signal);\n if (!entry || entry.state !== \"queued\") continue;\n // @ref LLP 1012#7-writes-offline \u2014 the fence never discards a queued\n // write: an intent neither its grant nor a later resume can vouch for\n // stops the drain, and only the owner's refusal can expire it.\n if (!(await runtime.outbox.canReplay(entry))) return { stopped: true, reason: \"fence\" };\n throwIfAborted(options.signal);\n let raw: unknown;\n try {\n raw = await options.json(\"/api/mutation\", { method: \"POST\", body: JSON.stringify(replayEnvelope(entry)) });\n } catch (error) {\n if (isSnapbackRefusal(error) && error.retryable) return { stopped: true };\n if (isSnapbackRefusal(error) && error.envelope.family === \"offline\") {\n await settle(\n options,\n entry,\n error.code === \"E_OFFLINE_INTENT_EXPIRED\" ? \"expired\" : \"rejected\",\n { state: \"rejected\", ...wireRefusalEnvelope(error.envelope, \"offline refusal\"), intent: entry.intent },\n );\n continue;\n }\n throw error;\n }\n throwIfAborted(options.signal);\n const result = wireReplayResponse(raw);\n if (result.state === \"committed\") {\n // @ref LLP 1012#7-writes-offline \u2014 a committed settlement lands with the\n // rows the commit produced or not at all: when the tail cannot be fetched\n // the intent stays queued and the drain stops; the retry is the same\n // envelope, which the owner's ledger answers unexecuted, and the tail\n // then joins the settlement swap.\n const revision = runtime.coverageRevision;\n let tail: Awaited<ReturnType<typeof logTail>>;\n try {\n tail = await logTail(options, revision);\n } catch (error) {\n if (isSnapbackRefusal(error) && error.retryable) return { stopped: true };\n throw error;\n }\n throwIfAborted(options.signal);\n if (revision !== runtime.coverageRevision) return { stopped: true };\n if (!(await settle(options, entry, \"committed\", result, tail, revision))) return { stopped: true };\n } else {\n await settle(options, entry, \"rejected\", result);\n }\n }\n return { stopped: false };\n}\n\nasync function settle(\n options: DrainOptions,\n entry: OutboxEntry,\n state: \"committed\" | \"rejected\" | \"expired\",\n response?: unknown,\n tail?: { op: string; args: unknown; accepted: AcceptedDelivery<unknown> },\n revision = options.runtime.coverageRevision,\n): Promise<boolean> {\n const settled = options.runtime.outbox.settle(entry, state, response);\n try {\n throwIfAborted(options.signal);\n const superseded = await options.runtime.commitMany(tail ? [tail] : [], undefined, { put: [settled] }, revision,\n () => !options.signal?.aborted);\n throwIfAborted(options.signal);\n return !superseded && revision === options.runtime.coverageRevision;\n } catch (error) {\n throw options.failure(error);\n }\n}\n\n/**\n * The delivery log after the watermark, fetched right after a commit so the\n * committed intent and the rows it produced enter the store in one swap.\n * The chooser is the rule, not the newest page: the tail is the drained query\n * (`drain: true`) mounted first in this partition \u2014 the one whose watermark the\n * store recorded first \u2014 and the resume request's `log` uses the same chooser\n * (`tailWatermark`), so a second drained query never feeds the wrong page into\n * the settlement swap (LLP 1012 \u00A77).\n */\nasync function logTail(options: DrainOptions, revision: number) {\n const { runtime } = options;\n const coverage = await runtime.coverage();\n throwIfAborted(options.signal);\n if (revision !== runtime.coverageRevision) return undefined;\n const watermark = coverage ? tailWatermark(coverage.watermarks) : undefined;\n // No drained query, no tail: the intent settles `committed` with no rows in\n // its swap. That is the only way a queue held under a login grant with\n // nothing delivered can progress (LLP 1012 \u00A77); the prediction overlay\n // stays until the server's rows arrive, so it is not a stranded queue and\n // must not be \"fixed\" into one.\n if (!watermark) return undefined;\n const cursor = watermark.cursorArg ?? runtime.cursorArg(watermark.op);\n const args = watermark.watermark === null\n ? watermark.args\n : { ...(watermark.args as Record<string, unknown>), [cursor]: watermark.watermark };\n const held = await runtime.answer(watermark.op, args);\n throwIfAborted(options.signal);\n if (revision !== runtime.coverageRevision) return undefined;\n const raw = await options.json(\"/api/query?receipt=1\", {\n method: \"POST\",\n body: JSON.stringify(held?.validator ? { op: watermark.op, args, validator: held.validator } : { op: watermark.op, args }),\n });\n throwIfAborted(options.signal);\n if (revision !== runtime.coverageRevision) return undefined;\n let accepted: AcceptedDelivery<unknown>;\n try {\n accepted = await runtime.accept(watermark.op, args, raw);\n } catch (error) {\n throw error instanceof DeliveryEnvelopeDecodeError ? options.shape(error.message) : error;\n }\n wireQuery(accepted.result);\n return { op: watermark.op, args, accepted };\n}\n\nexport function createOutboxApi(\n runtime: OfflineRuntime | undefined,\n drain: () => Promise<DrainResult>,\n ready: () => Promise<void> = async () => undefined,\n): OutboxApi {\n const entries = async (): Promise<OutboxEntry[]> => {\n if (!runtime || runtime.principal === undefined) return [];\n try {\n return await runtime.outbox.entries();\n } catch (error) {\n // A sealed partition keeps its outbox closed until the principal re-authenticates.\n if (error instanceof Error && /sealed/.test(error.message)) return [];\n throw error;\n }\n };\n return {\n entries,\n dismiss: async (intent) => {\n if (runtime && runtime.principal !== undefined) await runtime.outbox.dismiss(intent);\n },\n subscribe: (listener) => {\n let active = true;\n let version = 0;\n const push = () => {\n const current = ++version;\n const principal = runtime?.principal;\n void entries().then((value) => {\n if (active && current === version && principal === runtime?.principal) listener(value);\n }, () => undefined);\n };\n push();\n const unsubscribe = runtime?.outbox.subscribe(push);\n return () => { active = false; unsubscribe?.(); };\n },\n // @ref LLP 1012#7-writes-offline \u2014 with a partition open every write needs a\n // grant before any request leaves; the fence disables prediction and replay,\n // not enqueue, so an app may keep accepting writes while trust is stale. The\n // op form also checks its certified bound and remaining capacity. Answered\n // after the client's own startup, so a partition about to open never reads\n // as \"no partition, plain bytes\".\n ready: async (op) => {\n await ready().catch(() => undefined);\n if (!runtime || runtime.principal === undefined) return true;\n try {\n return await runtime.outbox.ready(op === undefined ? undefined : referenceName(op));\n } catch (error) {\n if (error instanceof Error && /sealed/.test(error.message)) return false;\n throw error;\n }\n },\n fence: async () => {\n await ready().catch(() => undefined);\n if (!runtime || runtime.principal === undefined) return \"inside\";\n try { return await runtime.outbox.fence(); }\n catch (error) {\n if (error instanceof Error && /sealed/.test(error.message)) return \"past\";\n throw error;\n }\n },\n drain: async () => {\n const result = await drain();\n return result.reason === \"fence\" ? { stopped: \"fence\" } : undefined;\n },\n // A fence stop is explicit even though custody remains queued. Other\n // non-retryable refusals still reject; transport stops retain their behavior.\n settled: async () => runtime?.drainOutcome,\n };\n}\n", "import type { Cursor, QueryResult, Subscription, SubscriptionDelivery } from \"./types.js\";\n\ninterface Waiter<Event> {\n predicate: (event: Event) => boolean;\n resolve: (event: Event) => void;\n reject: (error: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n}\n\nexport interface DrainOptions<Args, Result> {\n args: Args;\n query(args: Args): Promise<QueryResult<Result>>;\n subscribe(args: Args, callback: (event: SubscriptionDelivery<Result>) => void): Subscription<SubscriptionDelivery<Result>>;\n /** `offline`: every page came from the store; the watermark is the persisted one and nothing is recorded. */\n mark(watermark: Cursor | null, current: () => boolean, offline: boolean): Promise<void>;\n onEvent(event: SubscriptionDelivery<Result>): void;\n /** The cursor argument's name, resolved when a page is built (the manifest may still be loading); `c` by default. */\n cursor?(): Promise<string> | string;\n}\n\n/** Follows a cursor to exhaustion, records its watermark, then watches the tail. */\nexport class DrainSubscription<Args, Result> implements Subscription<SubscriptionDelivery<Result>> {\n private readonly waiters = new Set<Waiter<SubscriptionDelivery<Result>>>();\n private tail?: Subscription<SubscriptionDelivery<Result>>;\n private last?: SubscriptionDelivery<Result>;\n private watermark: Cursor | null = null;\n private cursorName = \"c\";\n private closed = false;\n private generation = 0;\n\n constructor(private readonly options: DrainOptions<Args, Result>) {\n this.start(null);\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.tail?.close();\n const error = new Error(\"subscription closed\");\n error.name = \"AbortError\";\n this.fail(error);\n }\n\n /** Discard a stale cursor after E_OFFLINE_RESET and cold-drain from the prefix root. */\n reset(): void {\n if (this.closed) return;\n this.tail?.close();\n this.tail = undefined;\n this.watermark = null;\n this.last = undefined;\n this.start(null);\n }\n\n until(\n predicate: (event: SubscriptionDelivery<Result>) => boolean,\n timeoutMs = 30_000,\n ): Promise<SubscriptionDelivery<Result>> {\n if (this.last && predicate(this.last)) return Promise.resolve(this.last);\n if (this.closed) return Promise.reject(new Error(\"subscription closed\"));\n return new Promise((resolve, reject) => {\n const waiter: Waiter<SubscriptionDelivery<Result>> = {\n predicate,\n resolve,\n reject,\n timer: setTimeout(() => {\n this.waiters.delete(waiter);\n reject(new Error(`subscription condition timed out after ${timeoutMs} ms`));\n }, timeoutMs),\n };\n this.waiters.add(waiter);\n });\n }\n\n private start(cursor: Cursor | null): void {\n const generation = ++this.generation;\n void this.drain(cursor, generation).catch((error) => {\n if (this.current(generation)) this.fail(error);\n });\n }\n\n private current(generation: number): boolean { return !this.closed && generation === this.generation; }\n\n private async drain(start: Cursor | null, generation: number): Promise<void> {\n let cursor = start;\n // @ref LLP 1012#6-reads-offline \u2014 a drain answered from the store keeps the\n // watermark the last online drain or resume persisted: the twin mints its\n // own page cursors, so a chain followed offline says nothing about the\n // server's log, and re-marking it would move the resume position backward.\n let offline = false;\n let held: Cursor | null | undefined;\n while (this.current(generation)) {\n this.cursorName = (await this.options.cursor?.()) ?? \"c\";\n if (!this.current(generation)) return;\n const args = { ...(this.options.args as Record<string, unknown>), [this.cursorName]: cursor } as Args;\n const page = await this.options.query(args);\n if (!this.current(generation)) return;\n if (page.state === \"hydrating\") {\n this.deliver(page);\n return;\n }\n if (page.state !== \"complete\" && page.state !== \"capped\") {\n this.deliver(page as SubscriptionDelivery<Result>);\n return;\n }\n const facts = page as { connection?: string; watermark?: Cursor | null };\n if (facts.connection === \"offline\") {\n offline = true;\n if (held === undefined && typeof facts.watermark === \"string\") held = facts.watermark;\n }\n if (page.next !== null) {\n this.watermark = page.next;\n this.deliver({ ...page, live: false, caughtUp: false, watermark: this.watermark });\n cursor = page.next;\n continue;\n }\n if (offline && held !== undefined) this.watermark = held;\n await this.options.mark(this.watermark, () => this.current(generation), offline);\n if (!this.current(generation)) return;\n this.deliver({ ...page, live: false, caughtUp: true, watermark: this.watermark });\n this.watchTail(generation);\n return;\n }\n }\n\n private watchTail(generation: number): void {\n if (!this.current(generation)) return;\n this.tail?.close();\n const args = { ...(this.options.args as Record<string, unknown>), [this.cursorName]: this.watermark } as Args;\n this.tail = this.options.subscribe(args, (event) => {\n if (!this.current(generation)) return;\n if ((event.state === \"complete\" || event.state === \"capped\") && event.next !== null) {\n this.watermark = event.next;\n this.deliver({ ...event, caughtUp: false, watermark: this.watermark });\n this.tail?.close();\n this.tail = undefined;\n this.start(this.watermark);\n return;\n }\n if (event.state === \"complete\" || event.state === \"capped\") {\n this.deliver({ ...event, caughtUp: true, watermark: this.watermark });\n } else this.deliver(event);\n });\n }\n\n private deliver(event: SubscriptionDelivery<Result>): void {\n this.last = event;\n try { this.options.onEvent(event); } catch { /* application callbacks cannot stop the drain */ }\n for (const waiter of [...this.waiters]) {\n let matches = false;\n try { matches = waiter.predicate(event); }\n catch (error) {\n clearTimeout(waiter.timer);\n this.waiters.delete(waiter);\n waiter.reject(error instanceof Error ? error : new Error(String(error)));\n }\n if (!matches) continue;\n clearTimeout(waiter.timer);\n this.waiters.delete(waiter);\n waiter.resolve(event);\n }\n }\n\n private fail(value: unknown): void {\n const error = value instanceof Error ? value : new Error(String(value));\n for (const waiter of this.waiters) {\n clearTimeout(waiter.timer);\n waiter.reject(error);\n }\n this.waiters.clear();\n }\n}\n", "import type { AssetFetchOptions } from \"./store/byte-cache.js\";\nimport type { Channel as ChannelRef, Op } from \"./api.js\";\nimport type { AssetCache, ByteCacheEntry, ByteCacheStatus, ViewOncePredicate } from \"./store/byte-cache.js\";\nimport type { OutboxEntry, RangeStoreFactory, RowRef, StoredRow } from \"./store/range-store.js\";\n\nexport type { OutboxEntry, OutboxGrant, OutboxState, OutboxTrace } from \"./store/range-store.js\";\n\nexport type { AssetCache, ByteCacheEntry, ByteCacheStatus, ViewOncePredicate };\n\n// @ref LLP 1006#1-the-move \u2014 the phantom kind keeps the two closed asset records\n// nominal; these must stay identical to the package-root declarations the\n// generated `snapback2` API imports, or a client-minted record cannot flow into\n// a generated argument.\nexport type ImageAsset = { readonly __asset: \"image\"; readonly id: string; readonly width: number; readonly height: number };\nexport type VideoAsset = { readonly __asset: \"video\"; readonly id: string; readonly width: number; readonly height: number; readonly duration: number };\n\n/** Server-minted authority subject; structurally compatible with `snapback2.Principal`. */\nexport type Principal = string & { readonly __snapbackPrincipal: \"Principal\" };\nexport type Cursor = string & { readonly __snapbackCursor: \"Cursor\" };\n\nexport interface RefusalEnvelope {\n code: string;\n family: string;\n message: string;\n site?: string;\n rule?: string;\n rewrite?: string;\n guide: string;\n /** Offline resume detail identifying the request member that exceeded a cap. */\n which?: string;\n /** Offline resume detail limiting the next bounded request. */\n cap?: number;\n}\n\n/** Opt-in body fields for a query request that asks for local-first custody. */\nexport interface QueryReceiptRequest {\n readonly receipt: true;\n readonly validator?: string;\n}\n\n/** Opt-in query fields for a subscription request that asks for local-first custody. */\nexport interface SubscribeReceiptRequest {\n readonly receipt: true;\n readonly validator?: string;\n}\n\nexport type QueryComplete<Result> = { state: \"complete\"; data: Result; seq: number; next: Cursor | null };\nexport type QueryCapped<Result> = {\n state: \"capped\";\n data: Result;\n seq: number;\n next: Cursor | null;\n};\nexport type QueryPartial<Result> = {\n state: \"partial\";\n data?: Result;\n seq: number;\n reason: string;\n};\nexport type QueryDenied = {\n state: \"denied\";\n seq: number;\n rule: string;\n};\nexport type ServerQueryResult<Result> =\n | QueryComplete<Result>\n | QueryCapped<Result>\n | QueryPartial<Result>\n | QueryDenied;\n\nexport type OfflineFacts = {\n live: false;\n connection: \"offline\";\n stale: { since: number };\n retained?: boolean;\n caughtUp?: boolean;\n watermark?: Cursor | null;\n /** Queued intents whose predicted rows are inside `data`, in order (the twin, LLP 1012 \u00A77). */\n predicted?: string[];\n /** A local `partial`: the uncovered site and every uncovered site with its reason. */\n site?: string;\n sites?: Array<{ site: string; reason: \"never-held\" | \"evicted\" | \"computed-key\" }>;\n};\nexport type OfflineQueryResult<Result> =\n | (QueryComplete<Result> & OfflineFacts)\n | (QueryCapped<Result> & OfflineFacts)\n | (QueryPartial<Result> & OfflineFacts)\n | (QueryDenied & OfflineFacts)\n | { state: \"hydrating\"; live: false; connection: \"offline\" };\nexport type QueryResult<Result> = ServerQueryResult<Result> | OfflineQueryResult<Result>;\n\nexport type MutationCommitted<Result> = { state: \"committed\"; seq: number; data: Result; intent?: string };\nexport type MutationRejected = {\n state: \"rejected\";\n code: string;\n family: string;\n message: string;\n retryable?: boolean;\n rewrite?: string;\n site?: string;\n rule?: string;\n guide: string;\n /** `conflict` when trace validation rolled a replayed write back (LLP 1012 \u00A77). */\n reason?: string;\n intent?: string;\n};\n/** The write is durable in this device's outbox and will replay after the next resume. */\nexport type MutationQueued = { state: \"queued\"; intent: string; ids: string[] };\nexport type MutationResult<Result> = MutationCommitted<Result> | MutationRejected | MutationQueued;\n\nexport type LiveQueryDelivery<Result> = ServerQueryResult<Result> & { live: true; caughtUp?: boolean; watermark?: Cursor | null };\nexport type StaleDelivery<Result> = {\n state: \"stale\";\n live: false;\n since: number;\n data?: Result;\n seq?: number;\n};\nexport type RefusedDelivery = {\n state: \"refused\";\n code: string;\n family: string;\n message: string;\n site?: string;\n rule?: string;\n rewrite?: string;\n guide: string;\n seq?: number;\n};\nexport type QueryRefusedDelivery = RefusedDelivery & { live: false };\nexport type SubscriptionDelivery<Result> =\n | LiveQueryDelivery<Result>\n | (ServerQueryResult<Result> & { live: false; caughtUp?: boolean; watermark?: Cursor | null })\n | OfflineQueryResult<Result>\n | StaleDelivery<Result>\n | QueryRefusedDelivery;\n\nexport interface Subscription<Event> {\n close(): void;\n until(predicate: (event: Event) => boolean, timeoutMs?: number): Promise<Event>;\n}\n\nexport interface AuthSession { token: string; viewer: Principal }\nexport interface AuthMe { viewer: Principal; kind: string }\nexport interface AuthApi {\n signup(input: { email: string; password: string }): Promise<AuthSession>;\n login(input: { email: string; password: string }): Promise<AuthSession>;\n guest(): Promise<AuthSession>;\n logout(): Promise<{ ok: boolean }>;\n me(): Promise<AuthMe>;\n}\n\nexport interface ChannelEvent<Payload = unknown> { from: Principal; payload: Payload; at: number }\nexport type ChannelDelivery<Payload = unknown> = ChannelEvent<Payload> | RefusedDelivery;\nexport type ChannelPublishResult =\n | { ok: true }\n | ({ state: \"refused\" } & RefusalEnvelope);\nexport interface ChannelHandle<Payload = unknown> {\n publish(payload: Payload): Promise<ChannelPublishResult>;\n subscribe(callback: (event: ChannelDelivery<Payload>) => void): Subscription<ChannelDelivery<Payload>>;\n}\n\nexport interface ManifestOperation { kind: string; args: unknown; planHash: string }\nexport interface ManifestTable { retain?: \"until-revoked\" | \"delivered-history\"; [key: string]: unknown }\nexport interface Manifest {\n generation: string;\n programGeneration: string;\n ops: Record<string, ManifestOperation>;\n channels: Record<string, unknown>;\n auth: Record<string, unknown>;\n schemaHash?: string;\n tables?: Record<string, ManifestTable>;\n schema?: { tables?: Record<string, ManifestTable>; [key: string]: unknown };\n}\n\nexport type AssetRecord = ImageAsset | VideoAsset;\nexport interface NativeAssetSource {\n readonly uri: string;\n readonly size?: number;\n readonly fileSize?: number;\n readonly type?: string;\n readonly mimeType?: string;\n}\nexport type AssetUploadSource = File | NativeAssetSource;\nexport interface UploadProgress {\n readonly loaded: number;\n readonly total: number;\n}\nexport type AssetKind = \"image\" | \"video\";\nexport interface AssetUploadOptions {\n /**\n * The nominal record expected back. The server sniffs the bytes and decides the\n * kind; when `kind` is given the client verifies the returned record and refuses\n * `E_ASSET_TYPE` on a mismatch, so the result can flow straight into a generated\n * `image`/`video` argument (LLP 1006 \u00A710). Without it the result is the union.\n */\n readonly kind?: AssetKind;\n /**\n * Reports streamed byte progress where the runtime supports request streams.\n * Expo native File uploads use expo/fetch's direct File body and report only\n * whole-body start and successful completion (0, then total).\n */\n readonly onProgress?: (progress: UploadProgress) => void;\n}\nexport interface AssetUrlOptions {\n readonly width?: number;\n readonly carrier?: boolean;\n readonly download?: boolean;\n}\n\n/** Replaces generated asset leaves with the browser/native upload convenience accepted by the SDK. */\nexport type AssetInput<Value> =\n Value extends VideoAsset ? Value | File | NativeAssetSource\n : Value extends ImageAsset ? Value | File | NativeAssetSource\n : Value extends File ? Value\n : Value extends readonly (infer Item)[] ? AssetInput<Item>[]\n : Value extends object ? { [Key in keyof Value]: AssetInput<Value[Key]> }\n : Value;\n\nexport type ConnectionState = \"connected\" | \"reconnecting\" | \"offline\";\nexport interface ClientSnapshot {\n /** Client-local cache/transport partition; never a server bearer or epoch. */\n authGeneration: number;\n token?: string;\n persona?: string;\n connection: ConnectionState;\n generation?: string;\n lastRefusal?: RefusalEnvelope;\n}\n\nexport interface AuthTokenStore {\n /** Restores the bearer before `client.ready` settles. */\n load(): string | null | undefined | Promise<string | null | undefined>;\n /** Persists a bearer, or clears custody with `null`. */\n save(token: string | null): void | Promise<void>;\n /** Optional companion custody needed to reopen a per-principal offline partition before network I/O. */\n loadPrincipal?(): string | null | undefined | Promise<string | null | undefined>;\n savePrincipal?(principal: string | null): void | Promise<void>;\n}\n\ninterface ClientLocationOptions {\n url: string;\n fetch?: typeof globalThis.fetch;\n offline?: OfflineClientOptions;\n}\n\nexport interface OfflineClientOptions {\n store: RangeStoreFactory;\n fenceDays?: number;\n /** Ceiling on cached asset bytes per partition, LRU by each rendition's own last read; default 256 MiB. */\n maxAssetBytes?: number;\n onTombstone?: (row: StoredRow) => RowRef[];\n /**\n * Names the rows whose media renders once: a viewed row is excluded from every\n * later offline answer and its bytes are never cached (LLP 1012 \u00A79). This stands\n * in for LLP 1006's one-use delivery until that lands on the server.\n */\n viewOnce?: ViewOncePredicate;\n}\n\n/** A client has exactly one authority source: a dev persona or bearer custody. */\nexport type CreateClientOptions = ClientLocationOptions & (\n | { as: string; token?: never; tokenStore?: never }\n | { as?: never; token?: string; tokenStore?: AuthTokenStore }\n);\n\n// @ref LLP 1012#7-writes-offline \u2014 the outbox is readable before the first\n// request, so a queued message is on screen at cold start.\nexport type OutboxSettlement = void | { stopped: \"fence\" };\n\nexport interface OutboxApi {\n /** Every durable intent of the open partition, FIFO; empty without a store. */\n entries(): Promise<OutboxEntry[]>;\n /** Drops one settled entry; queued intents cannot be dismissed. */\n dismiss(intent: string): Promise<void>;\n /** Observes the outbox; called with the current entries at once and after every change. */\n subscribe(listener: (entries: OutboxEntry[]) => void): () => void;\n /**\n * Without an op, true when a write will not refuse `E_OFFLINE_ID_BLOCK` for\n * want of a replay grant: no partition is open (today's bytes), or the open\n * partition holds a current, unexpired grant \u2014 minted by a login, a guest\n * call, or the first drain reaching its watermark. The fence gates replay and\n * prediction, not this (see `fence`). With an op, also means this write would\n * not refuse `E_OFFLINE_ID_BLOCK` for want of a known bound or capacity for\n * `1 + maxNewIds`. Grant, bound, fence, and expiry changes are observable\n * through `subscribe` even when the entries are unchanged (LLP 1012 \u00A77).\n */\n ready<Args = unknown, Result = unknown>(op?: Op<Args, Result>): Promise<boolean>;\n /** Past means replay waits for this partition's successful resume; enqueue remains ready. */\n fence(): Promise<\"inside\" | \"past\">;\n /** Replays FIFO; a fence stop returns { stopped: \"fence\" } with the intents still queued. */\n drain(): Promise<OutboxSettlement>;\n /**\n * Resolves once the in-flight replay, if any, emptied the queue or a retryable\n * transport failure stopped it; returns { stopped: \"fence\" } if resume is\n * required, and rejects with a non-retryable refusal that stopped it.\n */\n settled(): Promise<OutboxSettlement>;\n}\n\nexport interface SnapbackClient {\n readonly auth: AuthApi;\n readonly outbox: OutboxApi;\n /** Settles only after explicit token restoration and any initial persistence. */\n readonly ready: Promise<void>;\n readonly snapshot: ClientSnapshot;\n query<Args, Result>(ref: Op<Args, Result>, args: NoInfer<Args>): Promise<QueryResult<Result>>;\n mutation<Args, Result>(ref: Op<Args, Result>, args: NoInfer<AssetInput<Args>>): Promise<MutationResult<Result>>;\n /** Uploads one browser File or Expo URI-backed File and returns its closed asset record. */\n upload(source: AssetUploadSource, options: AssetUploadOptions & { readonly kind: \"image\" }): Promise<ImageAsset>;\n upload(source: AssetUploadSource, options: AssetUploadOptions & { readonly kind: \"video\" }): Promise<VideoAsset>;\n upload(source: AssetUploadSource, options?: AssetUploadOptions): Promise<AssetRecord>;\n assetUrl(asset: AssetRecord | null | undefined, options?: AssetUrlOptions): Promise<string | undefined>;\n assetUrl(assets: readonly AssetRecord[], options?: AssetUrlOptions): Promise<string[]>;\n /** Authentication headers for a native image source; carriers stay reserved for players/downloads. */\n assetHeaders(): Promise<Record<string, string>>;\n /** Fetches a client-issued asset URL: the byte cache under the row's lease first, then the network with the header credential. */\n assetBlob(url: string, options?: AssetFetchOptions): Promise<Blob>;\n /** Native byte path: cache first, then an authenticated ArrayBuffer response; no Blob. */\n assetBytes(url: string, options?: AssetFetchOptions): Promise<import(\"./store/byte-cache.js\").AssetBytes>;\n /** The partition's byte cache when the client has an offline store; components read it before the network. */\n readonly assetCache: AssetCache | undefined;\n /** Delivers validated query receipt states with `live: true`; transport loss is client-made `stale`. */\n subscribe<Args, Result>(\n ref: Op<Args, Result>,\n args: NoInfer<Args>,\n callback: (delivery: SubscriptionDelivery<Result>) => void,\n options?: { drain?: boolean },\n ): Subscription<SubscriptionDelivery<Result>>;\n channel<Args, Payload = unknown>(ref: ChannelRef<Args, Payload>, args: NoInfer<Args>): ChannelHandle<Payload>;\n manifest(): Promise<Manifest>;\n subscribeStatus(callback: (snapshot: ClientSnapshot) => void): () => void;\n /** Cut only this client's transport; the owner remains running. */\n offline(): Promise<void>;\n /** Restore transport and perform resume before new subscription opens. */\n online(): Promise<void>;\n /** Close and reopen this logical device on the same durable partition. */\n restart(): Promise<SnapbackClient>;\n /** Resolves when the offline carrier is quiet; safe to remove the store after. */\n close(): Promise<void>;\n}\n\ntype ViewFacts = { live: boolean; stale?: { since: number }; retained?: boolean; caughtUp?: boolean; watermark?: Cursor | null; predicted?: string[] };\nexport type QueryView<Result> =\n | (QueryComplete<Result> & ViewFacts)\n | (QueryCapped<Result> & ViewFacts)\n | (QueryPartial<Result> & ViewFacts)\n | (QueryDenied & ViewFacts)\n | { state: \"refused\"; live: false; refusal: RefusalEnvelope }\n | { state: \"stale\"; live: false; data?: Result; seq?: number; since: number }\n | { state: \"hydrating\"; live: false };\nexport type QueryViewState = QueryView<unknown>[\"state\"];\nexport type QueryHookResult<Result> = QueryView<Result> & { connection: ConnectionState };\nexport type QueryMachineEvent<Result> = QueryResult<Result> | SubscriptionDelivery<Result>;\n\nexport function initialQueryState<Result>(): QueryView<Result> {\n return { state: \"hydrating\", live: false };\n}\n\nfunction canonical(value: unknown): string {\n if (value === undefined) return \"undefined\";\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n return `{${Object.keys(value as object)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`)\n .join(\",\")}}`;\n}\n\nexport function stableSerialize(value: unknown): string {\n return canonical(value);\n}\n\n// @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 React preserves data identity while exposing every receipt-backed state.\nexport function reduceQueryState<Result>(\n current: QueryView<Result>,\n event: QueryMachineEvent<Result>,\n): QueryView<Result> {\n const eventData = \"data\" in event ? event.data : undefined;\n const currentData = \"data\" in current ? current.data : undefined;\n const data = canonical(eventData) === canonical(currentData) ? currentData : eventData;\n const live = \"live\" in event ? event.live : false;\n const facts = {\n ...(\"stale\" in event && event.stale !== undefined ? { stale: event.stale } : {}),\n ...(\"retained\" in event && event.retained !== undefined ? { retained: event.retained } : {}),\n ...(\"caughtUp\" in event && event.caughtUp !== undefined ? { caughtUp: event.caughtUp } : {}),\n ...(\"watermark\" in event && event.watermark !== undefined ? { watermark: event.watermark } : {}),\n ...(\"predicted\" in event && event.predicted !== undefined ? { predicted: event.predicted } : {}),\n };\n let next: QueryView<Result>;\n switch (event.state) {\n case \"complete\":\n next = { state: \"complete\", live, data: data as Result, seq: event.seq, next: event.next, ...facts };\n break;\n case \"capped\":\n next = { state: \"capped\", live, data: data as Result, seq: event.seq, next: event.next, ...facts };\n break;\n case \"partial\":\n next = data === undefined\n ? { state: \"partial\", live, seq: event.seq, reason: event.reason, ...facts }\n : { state: \"partial\", live, data: data as Result, seq: event.seq, reason: event.reason, ...facts };\n break;\n case \"denied\":\n next = { state: \"denied\", live, rule: event.rule, seq: event.seq, ...facts };\n break;\n case \"hydrating\":\n next = { state: \"hydrating\", live: false };\n break;\n case \"refused\": {\n const refusal: RefusalEnvelope = {\n code: event.code,\n family: event.family,\n message: event.message,\n guide: event.guide,\n };\n if (event.site !== undefined) refusal.site = event.site;\n if (event.rule !== undefined) refusal.rule = event.rule;\n if (event.rewrite !== undefined) refusal.rewrite = event.rewrite;\n next = { state: \"refused\", live: false, refusal };\n break;\n }\n case \"stale\":\n next = data === undefined\n ? { state: \"stale\", live: false, ...(event.seq === undefined ? {} : { seq: event.seq }), since: event.since }\n : {\n state: \"stale\",\n live: false,\n data: data as Result,\n ...(event.seq === undefined ? {} : { seq: event.seq }),\n since: event.since,\n };\n break;\n }\n return canonical(current) === canonical(next) ? current : next;\n}\n", "// @ref LLP 1012#8-the-delivery-envelope-the-validator-and-resume \u2014 offline transport coordination is isolated from auth custody and asset methods.\nimport { throwIfAborted } from \"./client-wire.js\";\nimport { drainOutbox } from \"./client-outbox.js\";\nimport { DrainSubscription } from \"./drain.js\";\nimport { DeliveryEnvelopeDecodeError } from \"./offline-protocol.js\";\nimport {\n SnapbackRefusal,\n copyRefusal,\n isSnapbackRefusal,\n isTerminalSession,\n sseObject,\n wireQuery,\n wireSubscription,\n} from \"./client-wire.js\";\nimport {\n OfflineRuntime,\n offlineView,\n type AcceptedDelivery,\n type MountedQuery,\n type ResumeAdjustment,\n} from \"./offline.js\";\nimport {\n stableSerialize,\n type OfflineClientOptions,\n type LiveQueryDelivery,\n type QueryResult,\n type QueryRefusedDelivery,\n type RefusalEnvelope,\n type SnapbackClient,\n type Subscription,\n type SubscriptionDelivery,\n} from \"./types.js\";\nimport type { Op } from \"./api.js\";\n\nexport function validateOfflineOptions(options: OfflineClientOptions | undefined): void {\n if (options === undefined) return;\n if (!options || typeof options !== \"object\" || typeof options.store !== \"function\") {\n throw new TypeError(\"createClient offline.store must be a carrier factory\");\n }\n if (options.fenceDays !== undefined\n && (!Number.isInteger(options.fenceDays) || options.fenceDays < 1 || options.fenceDays > 30)) {\n throw new TypeError(\"createClient offline.fenceDays must be an integer from 1 through 30\");\n }\n if (options.maxAssetBytes !== undefined\n && (!Number.isSafeInteger(options.maxAssetBytes) || options.maxAssetBytes < 1)) {\n throw new TypeError(\"createClient offline.maxAssetBytes must be a positive safe integer\");\n }\n if (options.viewOnce !== undefined && typeof options.viewOnce !== \"function\") {\n throw new TypeError(\"createClient offline.viewOnce must be a (table, row) => boolean predicate\");\n }\n}\n\nexport function createOfflineRuntime(options: OfflineClientOptions | undefined): OfflineRuntime | undefined {\n validateOfflineOptions(options);\n return options ? new OfflineRuntime(options) : undefined;\n}\n\nexport function offlineRefusal(error: unknown, carrier: string): SnapbackRefusal {\n if (isSnapbackRefusal(error)) return error;\n const candidate = error && typeof error === \"object\" ? (error as { code?: unknown }).code : undefined;\n if (candidate === \"E_OFFLINE_ID_BLOCK\") {\n const local = error as { message: string; site?: string; rewrite?: string };\n return new SnapbackRefusal({\n code: candidate,\n family: \"offline\",\n message: local.message,\n site: local.site ?? \"client.outbox.enqueue\",\n rewrite: local.rewrite ?? \"resume online for a fresh grant, then enqueue a new intent\",\n guide: \"offline\",\n });\n }\n if (candidate === \"E_OFFLINE_AUTHORITY\") {\n return new SnapbackRefusal({\n code: candidate,\n family: \"offline\",\n message: error instanceof Error ? error.message : String(error),\n site: \"RangeStore.commit\",\n rewrite: \"keep the held coverage; a delivery for another principal or auth epoch is refused, not committed \u2014 open the partition it belongs to (another generation is not refused: it supersedes the held coverage until the next resume resets it)\",\n guide: \"offline\",\n });\n }\n const code = candidate === \"E_OFFLINE_LOCK\" || candidate === \"E_OFFLINE_CARRIER\" ? candidate : \"E_OFFLINE_CARRIER\";\n const carrierRewrite = (error as { rewrite?: unknown } | undefined)?.rewrite;\n const rewrite = typeof carrierRewrite === \"string\" ? carrierRewrite : code === \"E_OFFLINE_LOCK\"\n ? (carrier === \"SQLite\" ? \"this account is open in another client; close it and try again\" : \"this account is open in another tab\")\n : `install or configure the ${carrier} carrier`;\n return new SnapbackRefusal({\n code,\n family: \"offline\",\n message: error instanceof Error ? error.message : String(error),\n site: \"RangeStore.open\",\n rewrite,\n guide: \"offline\",\n });\n}\n\nexport function offlineNetworkRefusal(): SnapbackRefusal {\n return new SnapbackRefusal({\n code: \"E_NETWORK\",\n family: \"owner\",\n message: \"client transport is offline\",\n rewrite: \"call client.online() to restore this device transport\",\n guide: \"offline\",\n }, true);\n}\n\nexport async function acceptOffline<Result>(\n runtime: OfflineRuntime | undefined,\n op: string,\n args: unknown,\n raw: unknown,\n shape: (message: string) => Error,\n): Promise<AcceptedDelivery<Result>> {\n if (!runtime) return { result: raw as AcceptedDelivery<Result>[\"result\"] };\n try {\n return await runtime.accept<Result>(op, args, raw);\n } catch (error) {\n if (error instanceof DeliveryEnvelopeDecodeError) throw shape(error.message);\n throw error;\n }\n}\n\nexport async function commitOffline(\n runtime: OfflineRuntime | undefined,\n op: string,\n args: unknown,\n accepted: AcceptedDelivery<unknown>,\n failure: (error: unknown) => Error,\n revision?: number,\n current?: () => boolean,\n): Promise<boolean> {\n if (!runtime) return false;\n try { return await runtime.commit(op, args, accepted, revision, current); }\n catch (error) { throw failure(error); }\n}\n\nexport async function decodeOfflineSubscription<Result>(options: {\n runtime: OfflineRuntime;\n op: string;\n args: unknown;\n data: string;\n shape(message: string): Error;\n failure(error: unknown): Error;\n observe?(): Promise<void>;\n revision?: number;\n current?: () => boolean;\n superseded?(): void;\n}): Promise<LiveQueryDelivery<Result> | QueryRefusedDelivery> {\n const raw = sseObject(options.data, \"subscription delivery\");\n const accepted = await acceptOffline<Result>(options.runtime, options.op, options.args, raw, options.shape);\n const value = accepted.envelope || accepted.refresh\n ? { ...wireQuery<Result>(accepted.result, \"subscription delivery\"), live: true as const }\n : wireSubscription<Result>(options.data);\n if (value.state !== \"refused\") {\n const superseded = await commitOffline(options.runtime, options.op, options.args, accepted, options.failure, options.revision, options.current);\n if (superseded) options.superseded?.();\n if (!options.current || options.current()) await options.observe?.();\n }\n return value;\n}\n\nexport function settleSubscription<Result>(\n value: LiveQueryDelivery<Result> | QueryRefusedDelivery,\n ensureAuthority: () => void,\n patch: (value: { connection: \"connected\"; lastRefusal: RefusalEnvelope | undefined }) => void,\n): { seq: number; data?: Result } | undefined {\n if (value.state === \"refused\" && isTerminalSession(value)) {\n throw new SnapbackRefusal(copyRefusal(value));\n }\n ensureAuthority();\n patch({\n connection: \"connected\",\n lastRefusal: value.state === \"refused\" ? copyRefusal(value) : undefined,\n });\n return value.state === \"refused\"\n ? undefined\n : \"data\" in value ? { seq: value.seq, data: value.data } : { seq: value.seq };\n}\n\n// @ref LLP 1012#6-reads-offline \u2014 the twin is the client: a read with the\n// backend unreachable runs the certified program over coverage; a retained\n// answer (\u00A75 rule 4) is served as held, since its rows are what the swap kept.\nexport async function answerOffline<Result>(\n runtime: OfflineRuntime | undefined,\n op: string,\n args: unknown,\n failure: (error: unknown) => Error,\n): Promise<QueryResult<Result>> {\n try {\n const held = await runtime?.answer<Result>(op, args);\n const local = held?.retained ? undefined : await runtime?.evaluate(op, args);\n return offlineView(held, local) as QueryResult<Result>;\n } catch (error) {\n throw failure(error);\n }\n}\n\nexport function createOfflineDrain<Args, Result>(options: {\n ref: Op<Args, Result>;\n op: string;\n args: Args;\n callback: (delivery: SubscriptionDelivery<Result>) => void;\n runtime: OfflineRuntime | undefined;\n /** Settles once the manifest was loaded or could not be: the cursor argument's name is known after it. */\n ready?: Promise<void>;\n mounted: Map<string, MountedQuery>;\n query(pageArgs: Args): Promise<QueryResult<Result>>;\n subscribe(tailArgs: Args, callback: (delivery: SubscriptionDelivery<Result>) => void): Subscription<SubscriptionDelivery<Result>>;\n track(subscription: Subscription<SubscriptionDelivery<Result>>): Subscription<SubscriptionDelivery<Result>>;\n observe?(): Promise<void>;\n /** Performs a resume; a drained log that holds no replay grant asks for one here. */\n resume?(): Promise<void>;\n}): Subscription<SubscriptionDelivery<Result>> {\n const key = `${options.op}\\u0000${stableSerialize(options.args)}`;\n options.mounted.set(key, { op: options.op, args: options.args, drain: true });\n const draining = new DrainSubscription<Args, Result>({\n args: options.args,\n query: options.query,\n subscribe: options.subscribe,\n // The cursor argument is named by the manifest's op descriptor (`c` until it is loaded).\n cursor: async () => {\n await options.ready?.catch(() => undefined);\n return options.runtime?.cursorArg(options.op) ?? \"c\";\n },\n mark: async (watermark, current, offline) => {\n if (!options.runtime || offline) return;\n const revision = options.runtime.coverageRevision;\n const tailArgs = { ...(options.args as Record<string, unknown>), [options.runtime.cursorArg(options.op)]: watermark };\n const held = await options.runtime.answer(options.op, tailArgs);\n if (!current()) return;\n await options.runtime.markWatermark(options.op, options.args, watermark, held?.validator, revision);\n if (!current()) return;\n await options.observe?.();\n // @ref LLP 1012#7-writes-offline \u2014 the recipe's drain is where a device\n // earns its first grant, so a send after going offline has ids to pin.\n if (options.resume && !(await options.runtime.outbox.grant())) {\n await options.resume().catch(() => undefined);\n }\n },\n onEvent: options.callback,\n });\n const tracked = options.track(draining);\n const close = tracked.close.bind(tracked);\n tracked.close = () => {\n options.mounted.delete(key);\n close();\n };\n return tracked;\n}\n\nexport async function goOffline(options: {\n ready: Promise<void>;\n ensureOpen(): void;\n force(value: boolean): void;\n connection(value: \"offline\" | \"reconnecting\"): void;\n reconnect(): void;\n}): Promise<void> {\n await options.ready;\n options.ensureOpen();\n options.force(true);\n options.connection(\"offline\");\n options.reconnect();\n}\n\nexport async function goOnline<Authority>(options: {\n ready: Promise<void>;\n ensureOpen(): void;\n force(value: boolean): void;\n connection(value: \"offline\" | \"reconnecting\"): void;\n authority(): Promise<Authority>;\n resume(authority: Authority): Promise<void>;\n setResume(run: Promise<void>): void;\n reconnect(): void;\n}): Promise<void> {\n await options.ready;\n options.ensureOpen();\n options.force(false);\n options.connection(\"reconnecting\");\n const authority = await options.authority();\n const run = options.resume(authority);\n options.setResume(run.then(() => undefined, () => undefined));\n try {\n await run;\n } finally {\n // A rejected resume or drain must not leave the transport closed.\n options.reconnect();\n }\n}\n\nexport async function restartOffline(options: {\n ready: Promise<void>;\n ensureOpen(): void;\n forced(): boolean;\n shutdown(): Promise<void>;\n create(): SnapbackClient;\n}): Promise<SnapbackClient> {\n await options.ready;\n options.ensureOpen();\n const stayedOffline = options.forced();\n await options.shutdown();\n const restarted = options.create();\n await restarted.ready;\n if (stayedOffline) await restarted.offline();\n return restarted;\n}\n\nexport async function initializeOfflineClient<Principal, Authority>(options: {\n principal?: Principal;\n bearer: boolean;\n authority: Authority;\n open(principal: Principal, authenticated?: boolean): Promise<void>;\n confirm(authority: Authority): Promise<Principal>;\n metadata(authority: Authority): Promise<void>;\n resume(authority: Authority): Promise<void>;\n ignore(error: unknown): boolean;\n}): Promise<void> {\n let principal = options.principal;\n if (principal) await options.open(principal);\n try {\n if (options.bearer) {\n principal = await options.confirm(options.authority);\n await options.open(principal, true);\n }\n if (!principal) return;\n await options.metadata(options.authority);\n await options.resume(options.authority);\n } catch (error) {\n if (!options.ignore(error)) throw error;\n }\n}\n\ntype RefusalLike = Error & {\n code?: string;\n status?: number;\n envelope?: { which?: unknown; cap?: unknown };\n};\n\nfunction refusal(error: unknown): RefusalLike | undefined {\n return error instanceof Error && typeof (error as RefusalLike).code === \"string\"\n ? error as RefusalLike : undefined;\n}\n\nfunction record(value: unknown, surface: string, shape: (message: string) => Error): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw shape(`${surface} must be an object`);\n return value as Record<string, unknown>;\n}\n\nfunction resumeAdjustment(error: RefusalLike): ResumeAdjustment {\n const which = typeof error.envelope?.which === \"string\" ? error.envelope.which : undefined;\n const cap = Number.isSafeInteger(error.envelope?.cap) && Number(error.envelope?.cap) >= 0\n ? Number(error.envelope?.cap) : undefined;\n return { ...(which === undefined ? {} : { which }), ...(cap === undefined ? {} : { cap }) };\n}\n\nexport async function performOfflineResume<Authority>(options: {\n signal?: AbortSignal;\n runtime: OfflineRuntime | undefined;\n mounted: Map<string, MountedQuery>;\n authority: Authority;\n bearerConfirmed: boolean;\n json(path: string, init: RequestInit, authority: Authority): Promise<unknown>;\n validated(authority: Authority): void;\n shape(message: string): Error;\n failure?(error: unknown): Error;\n subscriptions: Iterable<Subscription<unknown>>;\n /** Re-fetches `/api/program` for the live generation after `E_OFFLINE_RESET`. */\n reload?(authority: Authority): Promise<void>;\n}, adjustment: ResumeAdjustment = {}, retry = true): Promise<boolean> {\n const check = () => throwIfAborted(options.signal);\n check();\n if (!options.runtime) return false;\n const revision = options.runtime.coverageRevision;\n const generation = options.runtime.outbox.generation;\n let request = await options.runtime.resumeRequest([...options.mounted.values()], adjustment);\n check();\n if (!request) {\n // @ref LLP 1012#7-writes-offline \u2014 no resume can be built without facts (a\n // login grant with nothing delivered yet), but the queue must never sit:\n // inside the fence the held grant replays it directly. Past the fence a\n // login grant may precede every delivery: earn real authority facts\n // through a named query, then use the owner's supported logless resume;\n // metadata or a fresh consumption grant alone never opens the fence.\n if ((await options.runtime.queuedIntents()).length === 0) return false;\n check();\n if (await options.runtime.outbox.fence() === \"inside\") {\n check();\n await drainOutbox(drainOptions(options));\n check();\n return false;\n }\n check();\n const seed = await options.runtime.resumeSeed([...options.mounted.values()]);\n check();\n if (!seed) throw resumeUnavailable(\"no query with known arguments can establish resume facts\");\n const raw = await options.json(\"/api/query?receipt=1\", {\n method: \"POST\", body: JSON.stringify({ op: seed.op, args: seed.args }), signal: options.signal,\n }, options.authority);\n check();\n const accepted = await acceptOffline(options.runtime, seed.op, seed.args, raw, options.shape);\n check();\n wireQuery(accepted.result);\n await commitOffline(options.runtime, seed.op, seed.args, accepted, options.failure ?? ((error) => error as Error),\n revision, () => !options.signal?.aborted);\n check();\n request = await options.runtime.resumeRequest([...options.mounted.values()], adjustment);\n check();\n if (!request) throw resumeUnavailable(\"the owner query did not deliver the facts required for resume\");\n }\n const standIn = request.log !== undefined && options.runtime.standInLog(request.log);\n const rebuild = async () => {\n check();\n await options.reload?.(options.authority);\n check();\n // A 409 authenticated request.authEpoch before checking the program; a\n // successful probe below verifies the same epoch explicitly.\n await options.runtime!.resetCoverage(request.authEpoch, options.signal);\n check();\n for (const subscription of [...options.subscriptions]) {\n (subscription as Subscription<unknown> & { reset?: () => void }).reset?.();\n }\n return true;\n };\n let value: unknown;\n try {\n value = await options.json(\"/api/resume\", { method: \"POST\", body: JSON.stringify(request), signal: options.signal }, options.authority);\n check();\n } catch (error) {\n check();\n const candidate = refusal(error);\n if (candidate?.code === \"E_OFFLINE_RESET\") return rebuild();\n if (candidate?.status === 404) {\n if ((await options.runtime.queuedIntents()).length > 0) throw error;\n return false;\n }\n if (candidate?.code === \"E_OFFLINE_RESUME\" && retry) {\n return performOfflineResume(options, resumeAdjustment(candidate), false);\n }\n throw error;\n }\n const response = record(value, \"resume response\", options.shape);\n if (response.generation !== request.generation || response.schemaHash !== request.schemaHash) {\n throw options.shape(\"resume response generation does not match the request\");\n }\n const authority = record(response.authority, \"resume response.authority\", options.shape);\n if (authority.principal !== options.runtime.principal || authority.authEpoch !== request.authEpoch) {\n throw options.shape(\"resume response authority does not match the open partition\");\n }\n // A cold reopen mid-rebuild can already name the current program. A 200\n // authenticates it, but the durable marker still requires the cold rebuild.\n if (options.runtime.resetNeeded) return rebuild();\n if (options.bearerConfirmed) await options.runtime.reauthenticate(authority.principal as string);\n check();\n if (!Array.isArray(response.mounted)) throw options.shape(\"resume response.mounted must be an array\");\n const swaps: Array<{ op: string; args: unknown; accepted: AcceptedDelivery<unknown> }> = [];\n let watermark: { op: string; args: unknown; watermark: string | null; validator?: string } | undefined;\n if (response.log && typeof response.log === \"object\" && !Array.isArray(response.log)\n && (response.log as Record<string, unknown>).unchanged !== true && request.log) {\n const { watermark: returned, ...delivery } = response.log as Record<string, unknown>;\n if (returned !== null && typeof returned !== \"string\") throw options.shape(\"resume response.log.watermark must be a string or null\");\n // The server answers the log as the page after `watermark` (writer_resume log_args), so\n // it is held under that cursor's args; filing it under the base args would replace the\n // drained first page with the tail \u2014 an empty one after a restart (LLP 1012 \u00A78). The\n // cursor argument is the one the manifest types `Cursor`, whatever its name.\n const tailArgs = request.log.watermark === null\n ? request.log.args\n : { ...(request.log.args as Record<string, unknown>), [options.runtime.cursorArg(request.log.op)]: request.log.watermark };\n const accepted = await acceptOffline(options.runtime, request.log.op, tailArgs, delivery, options.shape);\n check();\n swaps.push({ op: request.log.op, args: tailArgs, accepted });\n // A stand-in log (no drained query held) borrows an ordinary answer; it\n // must not leave a watermark behind and turn that answer into a drain.\n if (!standIn) watermark = {\n op: request.log.op,\n args: request.log.args,\n watermark: returned as string | null,\n ...(accepted.envelope?.validator === undefined ? {} : { validator: accepted.envelope.validator }),\n };\n }\n for (const [index, item] of response.mounted.entries()) {\n if (item && typeof item === \"object\" && !Array.isArray(item)\n && (item as Record<string, unknown>).unchanged === true) continue;\n const requested = request.mounted[index];\n if (!requested) throw options.shape(\"resume response returned an unrequested mounted query\");\n swaps.push({\n op: requested.op,\n args: requested.args,\n accepted: await acceptOffline(options.runtime, requested.op, requested.args, item, options.shape),\n });\n check();\n }\n if (!Number.isSafeInteger(response.seq) || Number(response.seq) < 0) {\n throw options.shape(\"resume response.seq must be a non-negative safe integer\");\n }\n await options.runtime.commitMany(swaps, watermark, undefined, revision, () => !options.signal?.aborted, Number(response.seq));\n check();\n options.validated(options.authority);\n // @ref LLP 1012#7-writes-offline \u2014 a resume may omit a replacement grant;\n // successful re-authorization itself renews trust, then replay is FIFO.\n options.runtime.noteGrant(response);\n try {\n await options.runtime.adoptPendingGrant();\n check();\n } catch (error) {\n throw options.failure ? options.failure(error) : error;\n }\n if (!options.runtime.outbox.resumeSucceeded(generation)) return false;\n await drainOutbox(drainOptions(options));\n check();\n return false;\n}\n\nfunction resumeUnavailable(message: string): SnapbackRefusal {\n return new SnapbackRefusal({\n code: \"E_OFFLINE_RESUME\", family: \"offline\", message,\n site: \"client.online.resume\", guide: \"offline\",\n rewrite: \"query an authorized operation online with receipt support, then call online() again; queued writes are kept\",\n });\n}\n\nfunction drainOptions<Authority>(options: {\n signal?: AbortSignal;\n runtime: OfflineRuntime | undefined;\n authority: Authority;\n json(path: string, init: RequestInit, authority: Authority): Promise<unknown>;\n shape(message: string): Error;\n failure?(error: unknown): Error;\n}): Parameters<typeof drainOutbox>[0] {\n return {\n runtime: options.runtime!,\n signal: options.signal,\n json: (path, init) => options.json(path, init, options.authority),\n shape: options.shape,\n failure: options.failure ?? ((error) => (error instanceof Error ? error : new Error(String(error)))),\n };\n}\n", "// @ref LLP 1012#9-asset-bytes-on-the-device \u2014 the byte cache is read before the\n// network and filled after it; a viewed view-once row is refused before any byte moves.\nimport { AssetInputError } from \"./assets.js\";\nimport { SnapbackRefusal } from \"./client-wire.js\";\nimport { ASSET_ID, type AssetCache, type AssetBytes, type ByteCache } from \"./store/byte-cache.js\";\nimport type { RefusalEnvelope } from \"./types.js\";\n\nexport interface AssetBlobTarget { url: string; assetId: string; width: number | null }\n\n/** The tokenless asset URL this client issued, split into the cache key it names. */\nexport function assetBlobTarget(baseUrl: string, url: string): AssetBlobTarget {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new AssetInputError(\"E_ASSET_TYPE\", \"asset blob URL must be absolute\");\n }\n const base = new URL(baseUrl);\n if (parsed.origin !== base.origin || !parsed.pathname.startsWith(\"/api/asset/\") || parsed.searchParams.has(\"s\")) {\n throw new AssetInputError(\"E_ASSET_TYPE\", \"asset blob fetch requires a tokenless URL issued by this client\");\n }\n const assetId = decodeURIComponent(parsed.pathname.slice(\"/api/asset/\".length));\n const raw = parsed.searchParams.get(\"w\");\n let width: number | null = null;\n if (raw !== null) {\n width = Number(raw);\n if (!Number.isSafeInteger(width) || width <= 0) throw new AssetInputError(\"E_ASSET_TYPE\", \"asset width must be a positive integer\");\n }\n return { url, assetId: ASSET_ID.test(assetId) ? assetId : \"\", width };\n}\n\nexport function viewedRefusal(assetId: string): SnapbackRefusal {\n return new SnapbackRefusal({\n code: \"E_ASSET_VIEWED\",\n family: \"offline\",\n message: `asset ${assetId} belongs to a view-once row that was already viewed on this device`,\n site: \"assetBlob\",\n rewrite: \"render a view-once row once; do not fetch its bytes again\",\n guide: \"offline\",\n });\n}\n\n/**\n * The one viewed guard every byte path consults after the cache missed and before\n * a URL is minted or a byte moves: the ids whose view-once row was already viewed\n * on this partition. `assetBlob` refuses them; `useAssetUrl` mints no URL for them.\n */\nexport async function viewedAssetIds(cache: AssetCache | undefined, ids: readonly string[]): Promise<Set<string>> {\n const viewed = new Set<string>();\n if (!cache) return viewed;\n await Promise.all(ids.map(async (id) => {\n if (ASSET_ID.test(id) && await cache.viewed(id)) viewed.add(id);\n }));\n return viewed;\n}\n\n/**\n * Cache-first bytes for one asset rendition. Without a byte cache this is the\n * network fetch; with one, a held rendition (or what this instance showed for a\n * view-once row) is answered without the network, a viewed view-once row is refused\n * before any byte moves, and a fetched rendition is kept under its row's lease.\n */\nexport async function cachedAssetBlob(\n cache: ByteCache | undefined,\n target: AssetBlobTarget,\n network: () => Promise<Blob>,\n record: (refusal: RefusalEnvelope) => void, current: () => void, viewing?: object,\n): Promise<Blob> {\n const value = await cachedAssetBytes(cache, target, async () => {\n const blob = await network();\n return { bytes: new Uint8Array(await blob.arrayBuffer()), type: blob.type };\n }, record, current, viewing);\n return new Blob([value.bytes as BlobPart], { type: value.type });\n}\n\n/** Native byte ingress; the caller fences custody after each awaited read. */\nexport async function cachedAssetBytes(\n cache: ByteCache | undefined, target: AssetBlobTarget, network: () => Promise<AssetBytes>,\n record: (refusal: RefusalEnvelope) => void, current: () => void, viewing?: object,\n): Promise<AssetBytes> {\n if (!cache || target.assetId === \"\") return network();\n const held = await cache.getBytes(target.assetId, target.width, viewing);\n current();\n if (held) return held;\n const viewed = await cache.viewed(target.assetId);\n current();\n if (viewed) {\n const refusal = viewedRefusal(target.assetId);\n record(refusal.envelope);\n throw refusal;\n }\n const initiallyOnce = await cache.viewOnce(target.assetId);\n if (initiallyOnce && !viewing) {\n const refusal = new SnapbackRefusal({ code: \"E_ASSET_TYPE\", family: \"input\", site: \"assetBlob\",\n message: \"view-once bytes require a mounted viewing instance\",\n rewrite: \"pass the same viewing token for the lifetime of the mounted consumer\", guide: \"assets/client\" });\n record(refusal.envelope);\n throw refusal;\n }\n // Revocation during the fetch must also suppress an initially view-once row.\n const leased = initiallyOnce || await cache.canServe(target.assetId);\n current();\n const value = await network();\n current();\n const admitted = await cache.putBytes(target.assetId, target.width, value, viewing);\n current();\n const once = await cache.viewOnce(target.assetId);\n const viewedNow = await cache.viewed(target.assetId);\n const allowed = await cache.canServe(target.assetId, viewing);\n current();\n if ((once && admitted !== \"viewed\" && admitted !== \"cached\") || ((leased || once || viewedNow || admitted === \"viewed\") && !allowed)) {\n if (viewedNow && !allowed) {\n const refusal = viewedRefusal(target.assetId);\n record(refusal.envelope);\n throw refusal;\n }\n const refusal = new SnapbackRefusal({ code: \"E_OFFLINE_CARRIER\", family: \"offline\",\n site: \"assetBytes\", message: \"asset viewing allowance was not durably admitted or its row lease changed\",\n rewrite: \"restore the carrier and fetch a currently held, unviewed row\", guide: \"offline\" });\n record(refusal.envelope);\n throw refusal;\n }\n return value;\n}\n", "// The asset arm of the client \u2014 uploads, delivery URLs, header credentials,\n// and the byte fetch \u2014 as functions over the small host surface the client\n// exposes, so `client.ts` stays under the file cap without changing behavior.\nimport {\n AssetInputError,\n assetPath,\n assetRecord,\n expoUploadFetch,\n isBlobLike,\n isBrowserFile,\n isNativeAssetSource,\n prepareAssetSource,\n preparedBody,\n withProgress,\n type PreparedAssetSource,\n} from \"./assets.js\";\nimport { assetBlobTarget, cachedAssetBlob, cachedAssetBytes, viewedAssetIds, type AssetBlobTarget } from \"./client-assets.js\";\nimport { offlineNetworkRefusal } from \"./client-offline.js\";\nimport { SnapbackRefusal, isSnapbackRefusal, responseRefusal, wireAssetSession } from \"./client-wire.js\";\nimport type { AssetBytes, AssetFetchOptions, ByteCache } from \"./store/byte-cache.js\";\nimport type {\n AssetRecord,\n AssetUploadOptions,\n AssetUploadSource,\n AssetUrlOptions,\n RefusalEnvelope,\n} from \"./types.js\";\n\n/** The authority snapshot every request is fenced by (LLP 1002 \u00A79). */\nexport interface Authority {\n authGeneration: number;\n custodyGeneration: number;\n fence: number;\n token?: string;\n}\n\nexport interface CarrierSession {\n token: string;\n expiresAt: number;\n authGeneration: number;\n custodyGeneration: number;\n fence: number;\n}\n\n/** What the client lends the asset arm; the class satisfies it structurally. */\nexport interface UploadHost {\n readonly url: string;\n readonly persona?: string;\n readonly assetCache?: ByteCache;\n readonly fetchImpl: typeof globalThis.fetch;\n readonly customFetch: boolean;\n carrier?: CarrierSession;\n headers(authority: Authority, stream?: boolean, hasBody?: boolean): Headers;\n json(path: string, init: RequestInit, authority: Authority): Promise<unknown>;\n ensureAuthority(authority: Authority | undefined): asserts authority is Authority;\n recordRefusal(envelope: RefusalEnvelope): void;\n validated(authority: Authority | undefined): void;\n networkRefusal(message: string): SnapbackRefusal;\n transportRefusal(message: string): SnapbackRefusal;\n}\n\nexport async function uploadAsset(\n host: UploadHost,\n source: AssetUploadSource,\n options: AssetUploadOptions,\n authority: Authority,\n): Promise<AssetRecord> {\n const prepared = await prepareAssetSource(source)\n .catch((error) => { throw assetInput(host, error); });\n return uploadPrepared(host, prepared, options, authority);\n}\n\nexport async function assetUrlFor(\n host: UploadHost,\n assetOrList: AssetRecord | readonly AssetRecord[] | null | undefined,\n options: AssetUrlOptions,\n authority: Authority,\n): Promise<string | string[] | undefined> {\n const records = Array.isArray(assetOrList)\n ? assetOrList\n : assetOrList == null ? [] : [assetOrList as AssetRecord];\n const viewed = await viewedAssetIds(host.assetCache, records.map((asset) => asset.id));\n host.ensureAuthority(authority);\n const mintable = records.filter((asset) => !viewed.has(asset.id));\n const wantsCarrier = options.carrier === true || options.download === true;\n if (wantsCarrier && mintable.some((asset) => !(\"duration\" in asset))) {\n throw assetInput(host, new AssetInputError(\n \"E_ASSET_CARRIER_IMAGE\",\n \"image asset URLs never carry a session token; fetch the URL with assetHeaders or assetBlob\",\n ));\n }\n let carrier: string | undefined;\n if (wantsCarrier && mintable.length > 0 && (authority.token !== undefined || host.persona !== undefined)) {\n carrier = await assetCarrier(host, authority);\n }\n try {\n if (Array.isArray(assetOrList)) {\n return mintable.map((asset) => assetPath(host.url, asset, options.width, carrier));\n }\n return assetOrList == null || viewed.has((assetOrList as AssetRecord).id)\n ? undefined\n : assetPath(host.url, assetOrList as AssetRecord, options.width, carrier);\n } catch (error) {\n throw assetInput(host, error);\n }\n}\n\nexport function assetHeadersFor(host: UploadHost, authority: Authority): Record<string, string> {\n const headers: Record<string, string> = {};\n if (authority.token) headers.Authorization = `Bearer ${authority.token}`;\n if (host.persona) headers[\"X-Snapback-As\"] = host.persona;\n return headers;\n}\n\nexport async function assetBlobFor(\n host: UploadHost,\n bytes: ByteCache | undefined,\n offline: () => boolean,\n url: string,\n options: AssetFetchOptions,\n authority: Authority,\n): Promise<Blob> {\n let target: AssetBlobTarget;\n try { target = assetBlobTarget(host.url, url); } catch (error) { throw assetInput(host, error); }\n return cachedAssetBlob(bytes, target, async () => {\n if (offline()) throw offlineNetworkRefusal();\n const headers = host.headers(authority);\n headers.set(\"Accept\", \"*/*\");\n // Expo SDK 54 ignores RequestInit.cache but forwards these headers.\n // Private owner responses also forbid storage (LLP 1012 \u00A79).\n headers.set(\"Cache-Control\", \"no-store\");\n const response = await fetchResponse(host, url, { headers, signal: options.signal, cache: \"no-store\" }, authority);\n host.validated(authority);\n return response.blob();\n }, (refusal) => host.recordRefusal(refusal), () => host.ensureAuthority(authority), options.viewing);\n}\n\nexport async function assetBytesFor(\n host: UploadHost, cache: ByteCache | undefined, offline: () => boolean, url: string,\n options: AssetFetchOptions, authority: Authority,\n): Promise<AssetBytes> {\n let target: AssetBlobTarget;\n try { target = assetBlobTarget(host.url, url); } catch (error) { throw assetInput(host, error); }\n return cachedAssetBytes(cache, target, async () => {\n if (offline()) throw offlineNetworkRefusal();\n const headers = host.headers(authority);\n headers.set(\"Accept\", \"*/*\");\n // Expo SDK 54 ignores RequestInit.cache but forwards these headers.\n // Private owner responses also forbid storage (LLP 1012 \u00A79).\n headers.set(\"Cache-Control\", \"no-store\");\n const response = await fetchResponse(host, url, { headers, signal: options.signal, cache: \"no-store\" }, authority);\n const bytes = new Uint8Array(await response.arrayBuffer());\n host.ensureAuthority(authority);\n host.validated(authority);\n return { bytes, type: response.headers.get(\"Content-Type\") ?? \"application/octet-stream\" };\n }, (refusal) => host.recordRefusal(refusal), () => host.ensureAuthority(authority), options.viewing);\n}\n\nexport async function uploadPrepared(\n host: UploadHost,\n prepared: PreparedAssetSource,\n options: AssetUploadOptions,\n authority: Authority,\n): Promise<AssetRecord> {\n host.ensureAuthority(authority);\n let response: Response;\n if (options.onProgress && isBrowserFile(prepared.source) && !host.customFetch\n && typeof XMLHttpRequest === \"function\") {\n response = await xhrUpload(host, prepared.source, prepared.bytes, options, authority);\n } else {\n let body;\n try {\n body = await preparedBody(prepared);\n } catch (error) {\n throw assetInput(host, error);\n }\n const headers = host.headers(authority);\n headers.set(\"Content-Length\", String(prepared.bytes));\n const nativeExpoFile = isNativeAssetSource(prepared.source)\n && !/^(?:data|https?):/i.test(prepared.source.uri)\n && isBlobLike(body);\n if (nativeExpoFile) {\n let nativeFetch: typeof globalThis.fetch;\n try {\n nativeFetch = await expoUploadFetch();\n } catch (error) {\n throw assetInput(host, error);\n }\n options.onProgress?.({ loaded: 0, total: prepared.bytes });\n response = await fetchResponse(host, `${host.url}/api/upload`, {\n method: \"POST\",\n headers,\n body: body as unknown as BodyInit,\n }, authority, nativeFetch);\n options.onProgress?.({ loaded: prepared.bytes, total: prepared.bytes });\n } else {\n body = withProgress(body, prepared.bytes, options);\n const stream = !isBlobLike(body);\n response = await fetchResponse(host, `${host.url}/api/upload`, {\n method: \"POST\",\n headers,\n body: body as unknown as BodyInit,\n ...(stream ? { duplex: \"half\" } as RequestInit : {}),\n }, authority);\n }\n }\n let value: unknown;\n try {\n value = await response.json();\n } catch {\n throw assetInput(host, new AssetInputError(\"E_ASSET_TYPE\", \"upload response must contain valid JSON\"));\n }\n try {\n const record = assetRecord(value);\n const produced = Object.hasOwn(record, \"duration\") ? \"video\" : \"image\";\n if (options.kind && options.kind !== produced) {\n throw new AssetInputError(\"E_ASSET_TYPE\", `upload produced ${produced === \"image\" ? \"an image\" : \"a video\"} asset but kind ${options.kind} was requested`);\n }\n host.validated(authority);\n return record;\n } catch (error) {\n throw assetInput(host, error);\n }\n}\n\nfunction xhrUpload(\n host: UploadHost,\n file: File | Blob,\n bytes: number,\n options: AssetUploadOptions,\n authority: Authority,\n): Promise<Response> {\n return new Promise<Response>((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", `${host.url}/api/upload`);\n for (const [name, value] of host.headers(authority)) xhr.setRequestHeader(name, value);\n options.onProgress?.({ loaded: 0, total: bytes });\n xhr.upload.onprogress = (event) => options.onProgress?.({\n loaded: Math.min(bytes, event.loaded),\n total: bytes,\n });\n xhr.onerror = () => reject(host.networkRefusal(\"asset upload failed\"));\n xhr.onabort = () => reject(host.networkRefusal(\"asset upload was aborted\"));\n xhr.onload = () => {\n try {\n host.ensureAuthority(authority);\n options.onProgress?.({ loaded: bytes, total: bytes });\n resolve(new Response(xhr.responseText, {\n status: xhr.status,\n headers: { \"Content-Type\": xhr.getResponseHeader(\"Content-Type\") ?? \"application/json\" },\n }));\n } catch (error) {\n reject(error);\n }\n };\n xhr.send(file);\n }).then(async (response) => {\n if (response.ok) return response;\n if (response.status >= 400 && response.status < 500) {\n const refusal = await responseRefusal(response);\n host.recordRefusal(refusal.envelope);\n throw refusal;\n }\n throw host.transportRefusal(`/api/upload returned HTTP ${response.status}`);\n });\n}\n\nasync function fetchResponse(\n host: UploadHost,\n url: string,\n init: RequestInit,\n authority: Authority,\n fetchImpl: typeof globalThis.fetch = host.fetchImpl,\n): Promise<Response> {\n let response: Response;\n try {\n response = await fetchImpl(url, init);\n } catch (error) {\n host.ensureAuthority(authority);\n throw host.networkRefusal(error instanceof Error ? error.message : String(error));\n }\n host.ensureAuthority(authority);\n if (response.ok) return response;\n if (response.status >= 400 && response.status < 500) {\n const refusal = await responseRefusal(response);\n host.recordRefusal(refusal.envelope);\n throw refusal;\n }\n throw host.transportRefusal(`${new URL(url).pathname} returned HTTP ${response.status}`);\n}\n\nasync function assetCarrier(host: UploadHost, authority: Authority): Promise<string> {\n const refreshBefore = Date.now() + 60_000;\n if (host.carrier\n && host.carrier.authGeneration === authority.authGeneration\n && host.carrier.custodyGeneration === authority.custodyGeneration\n && host.carrier.fence === authority.fence\n && host.carrier.expiresAt > refreshBefore) return host.carrier.token;\n const carrier = wireAssetSession(await host.json(\n \"/api/auth/asset-session\",\n { method: \"POST\", body: JSON.stringify({}) },\n authority,\n ));\n host.ensureAuthority(authority);\n host.carrier = {\n token: carrier.token,\n expiresAt: carrier.expiresAt,\n authGeneration: authority.authGeneration,\n custodyGeneration: authority.custodyGeneration,\n fence: authority.fence,\n };\n return carrier.token;\n}\n\nexport function assetInput(host: UploadHost, error: unknown): SnapbackRefusal {\n if (isSnapbackRefusal(error)) return error;\n const input = error instanceof AssetInputError\n ? error\n : new AssetInputError(\"E_ASSET_TYPE\", error instanceof Error ? error.message : String(error));\n const refusal = new SnapbackRefusal({\n code: input.code,\n family: \"input\",\n message: input.message,\n rewrite: \"pass a File or { uri, size?/fileSize?, type?/mimeType? } only to a matching manifest asset argument\",\n guide: \"assets/client\",\n });\n host.recordRefusal(refusal.envelope);\n return refusal;\n}\n", "import type { Subscription } from \"./types.js\";\n\ninterface ParsedEvent { id?: string; data: string }\ninterface ErrorDecision<Event> { event?: Event; failure?: Error; retry: boolean }\nexport interface ReconnectingSseOptions<Event> {\n open(lastEventId: string | undefined, signal: AbortSignal): Promise<Response>;\n decode(event: ParsedEvent, current: () => boolean): Event | Promise<Event>;\n bufferedTerminal?(event: ParsedEvent): Error | undefined;\n onError(error: unknown, hadDelivery: boolean): Promise<ErrorDecision<Event>> | ErrorDecision<Event>;\n onLoss(last: Event | undefined): Event | undefined;\n terminal?(event: Event): Error | undefined;\n onEvent?: (event: Event) => void;\n}\ninterface Waiter<Event> {\n predicate: (event: Event) => boolean;\n resolve: (event: Event) => void;\n reject: (error: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n}\n\nfunction abortError(): Error {\n const error = new Error(\"subscription closed\");\n error.name = \"AbortError\";\n return error;\n}\n\nasync function delay(ms: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) throw abortError();\n await new Promise<void>((resolve, reject) => {\n const onAbort = () => {\n clearTimeout(timer);\n reject(abortError());\n };\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nasync function* parseSse(\n response: Response,\n signal: AbortSignal,\n onActivity: () => void,\n): AsyncGenerator<ParsedEvent> {\n if (!response.body) throw new Error(\"SSE response has no body\");\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let data: string[] = [];\n let id: string | undefined;\n let finished = false;\n const line = (raw: string): ParsedEvent | undefined => {\n const value = raw.endsWith(\"\\r\") ? raw.slice(0, -1) : raw;\n if (value === \"\") {\n if (data.length === 0) return undefined;\n const event = { id, data: data.join(\"\\n\") };\n data = [];\n id = undefined;\n onActivity();\n return event;\n }\n if (value.startsWith(\":\")) {\n onActivity();\n return undefined;\n }\n const colon = value.indexOf(\":\");\n const field = colon < 0 ? value : value.slice(0, colon);\n let fieldValue = colon < 0 ? \"\" : value.slice(colon + 1);\n if (fieldValue.startsWith(\" \")) fieldValue = fieldValue.slice(1);\n if (field === \"data\") data.push(fieldValue);\n if (field === \"id\" && !fieldValue.includes(\"\\0\")) id = fieldValue;\n return undefined;\n };\n const cancel = () => { void reader.cancel().catch(() => undefined); };\n signal.addEventListener(\"abort\", cancel, { once: true });\n try {\n while (true) {\n const chunk = await reader.read();\n buffer += decoder.decode(chunk.value, { stream: !chunk.done });\n let newline = buffer.indexOf(\"\\n\");\n while (newline >= 0) {\n const event = line(buffer.slice(0, newline));\n buffer = buffer.slice(newline + 1);\n if (event) yield event;\n newline = buffer.indexOf(\"\\n\");\n }\n // A fence may race with a read that already returned bytes. Let the\n // transport inspect complete buffered frames for terminal authority\n // evidence, but never finalize an incomplete frame after abort.\n if (signal.aborted) throw abortError();\n if (chunk.done) {\n finished = true;\n break;\n }\n }\n if (buffer.length > 0) {\n const event = line(buffer);\n if (event) yield event;\n }\n const final = line(\"\");\n if (final) yield final;\n } finally {\n signal.removeEventListener(\"abort\", cancel);\n if (!finished) await reader.cancel().catch(() => undefined);\n reader.releaseLock();\n }\n}\n\n// @ref LLP 1002#4-the-wire \u2014 streaming fetch consumes SSE id/data frames and ignores heartbeat comments in browsers and Node.\nexport class ReconnectingSse<Event> implements Subscription<Event> {\n private readonly controller = new AbortController();\n private readonly waiters = new Set<Waiter<Event>>();\n private last: Event | undefined;\n private lastEventId: string | undefined;\n private terminalFailure: Error | undefined;\n private closed = false;\n private activeAttempt?: AbortController;\n private retryNow?: () => void;\n private resets = 0;\n private running?: Promise<void>;\n\n constructor(private readonly options: ReconnectingSseOptions<Event>) {\n this.start();\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.controller.abort();\n for (const waiter of this.waiters) {\n clearTimeout(waiter.timer);\n waiter.reject(abortError());\n }\n this.waiters.clear();\n }\n\n /** Interrupt only the current attempt; the reconnecting subscription stays mounted. */\n reconnect(): void {\n if (this.closed) return;\n this.activeAttempt?.abort();\n this.retryNow?.();\n }\n\n /** A successor starts a new stream, with no predecessor event id or answer. */\n reset(): void {\n if (this.closed) return;\n this.terminalFailure = undefined;\n this.resets += 1;\n this.lastEventId = undefined;\n this.last = undefined;\n this.reconnect();\n this.start();\n }\n\n until(predicate: (event: Event) => boolean, timeoutMs = 30_000): Promise<Event> {\n if (this.terminalFailure) return Promise.reject(this.terminalFailure);\n if (this.last !== undefined && predicate(this.last)) return Promise.resolve(this.last);\n if (this.closed) return Promise.reject(abortError());\n return new Promise<Event>((resolve, reject) => {\n const waiter: Waiter<Event> = {\n predicate,\n resolve,\n reject,\n timer: setTimeout(() => {\n this.waiters.delete(waiter);\n reject(new Error(`subscription condition timed out after ${timeoutMs} ms`));\n }, timeoutMs),\n };\n this.waiters.add(waiter);\n });\n }\n\n private deliver(event: Event, settleWaiters = true): void {\n this.last = event;\n try {\n this.options.onEvent?.(event);\n } catch {\n // A consumer callback must not tear down the transport.\n }\n if (!settleWaiters) return;\n for (const waiter of [...this.waiters]) {\n let matches = false;\n try {\n matches = waiter.predicate(event);\n } catch (error) {\n clearTimeout(waiter.timer);\n this.waiters.delete(waiter);\n waiter.reject(error instanceof Error ? error : new Error(String(error)));\n continue;\n }\n if (!matches) continue;\n clearTimeout(waiter.timer);\n this.waiters.delete(waiter);\n waiter.resolve(event);\n }\n }\n\n private fail(error: Error): void {\n this.terminalFailure = error;\n for (const waiter of this.waiters) {\n clearTimeout(waiter.timer);\n waiter.reject(error);\n }\n this.waiters.clear();\n }\n\n private start(): void {\n if (this.closed || this.running) return;\n const reset = this.resets;\n const run = this.run();\n this.running = run;\n void run.finally(() => {\n this.running = undefined;\n // reset() can clear a terminal latch while the old run is unwinding.\n if (!this.closed && !this.terminalFailure && reset !== this.resets) this.start();\n }).catch(() => undefined);\n }\n\n private async run(): Promise<void> {\n let backoff = 250;\n let hadDelivery = false;\n let lossReported = false;\n while (!this.closed) {\n const reset = this.resets;\n const attempt = new AbortController();\n this.activeAttempt = attempt;\n const closeAttempt = () => attempt.abort();\n this.controller.signal.addEventListener(\"abort\", closeAttempt, { once: true });\n let idleTimer: ReturnType<typeof setTimeout> | undefined;\n let idle = false;\n let decodingTerminal: Error | undefined;\n const current = () => !this.closed && reset === this.resets && !attempt.signal.aborted;\n const armIdle = () => {\n if (idleTimer !== undefined) clearTimeout(idleTimer);\n idleTimer = setTimeout(() => {\n idle = true;\n attempt.abort();\n }, 30_000);\n };\n try {\n armIdle();\n const response = await this.options.open(this.lastEventId, attempt.signal);\n if (!response.ok) throw response;\n for await (const parsed of parseSse(response, attempt.signal, armIdle)) {\n if (this.closed || attempt.signal.aborted) {\n let terminal: Error | undefined;\n try {\n terminal = this.options.bufferedTerminal?.(parsed);\n } catch {\n // Malformed or stale nonterminal buffered frames stay suppressed.\n }\n if (terminal !== undefined) {\n try {\n await this.options.onError(terminal, hadDelivery);\n } catch {\n // A closed transport has no remaining observer to fail.\n }\n return;\n }\n continue;\n }\n try { decodingTerminal = this.options.bufferedTerminal?.(parsed); } catch { decodingTerminal = undefined; }\n const event = await this.options.decode(parsed, current);\n decodingTerminal = undefined;\n if (!current()) continue;\n if (parsed.id !== undefined) this.lastEventId = parsed.id;\n this.deliver(event);\n hadDelivery = true;\n lossReported = false;\n backoff = 250;\n const terminal = this.options.terminal?.(event);\n if (terminal !== undefined) {\n this.fail(terminal);\n return;\n }\n }\n if (this.closed) return;\n if (reset === this.resets && !lossReported) {\n const loss = this.options.onLoss(this.last);\n if (loss !== undefined) this.deliver(loss);\n lossReported = true;\n }\n } catch (error) {\n // Session evidence survives a decode crossing reset/close; onError\n // still fences it by the exact bearer before retiring any custody.\n if (decodingTerminal && !current()) {\n const decision = await this.options.onError(decodingTerminal, hadDelivery);\n if (!this.closed) {\n if (decision.event !== undefined) this.deliver(decision.event, decision.failure === undefined);\n if (decision.failure !== undefined) this.fail(decision.failure);\n }\n return;\n }\n if (this.closed || this.controller.signal.aborted) return;\n if (reset !== this.resets) continue;\n const failure = idle\n ? new Error(\"SSE stream idle for 30000 ms\")\n : error;\n const decision = await this.options.onError(failure, hadDelivery);\n if (this.closed || this.controller.signal.aborted) return;\n if (decision.event !== undefined) this.deliver(decision.event, decision.failure === undefined);\n if (decision.failure !== undefined) this.fail(decision.failure);\n if (!decision.retry) return;\n if (!lossReported) {\n const loss = this.options.onLoss(this.last);\n if (loss !== undefined) this.deliver(loss);\n lossReported = true;\n }\n } finally {\n if (idleTimer !== undefined) clearTimeout(idleTimer);\n this.controller.signal.removeEventListener(\"abort\", closeAttempt);\n if (this.activeAttempt === attempt) this.activeAttempt = undefined;\n }\n if (reset !== this.resets) continue;\n try {\n await Promise.race([\n delay(backoff, this.controller.signal),\n new Promise<void>((resolve) => { this.retryNow = resolve; }),\n ]);\n } catch {\n return;\n } finally {\n this.retryNow = undefined;\n }\n backoff = Math.min(backoff * 2, 5_000);\n }\n }\n}\n", "import type { AssetFetchOptions } from \"./store/byte-cache.js\";\nimport { throwIfAborted } from \"./client-wire.js\";\nimport { api, referenceName, type Api, type ApiProxy, type Channel as ChannelRef, type Op } from \"./api.js\";\nimport { AssetInputError, mayNeedAssetPlanning, planAssetArguments, substituteAssetRecords } from \"./assets.js\";\nimport { captureGrant, createOutboxApi, drainOutbox, submitMutation } from \"./client-outbox.js\";\nimport {\n acceptOffline,\n answerOffline,\n commitOffline,\n createOfflineDrain,\n createOfflineRuntime,\n decodeOfflineSubscription,\n goOffline,\n goOnline,\n initializeOfflineClient,\n offlineNetworkRefusal,\n offlineRefusal as makeOfflineRefusal,\n performOfflineResume,\n restartOffline,\n settleSubscription,\n validateOfflineOptions,\n} from \"./client-offline.js\";\nimport {\n assetBlobFor, assetBytesFor,\n assetHeadersFor,\n assetInput,\n assetUrlFor,\n uploadAsset,\n uploadPrepared,\n type Authority,\n} from \"./client-upload.js\";\nimport {\n SnapbackRefusal,\n copyRefusal,\n fallbackRefusal,\n isSnapbackRefusal,\n isTerminalSession,\n responseRefusal,\n sseObject,\n terminalSessionEnvelope,\n wireAuthMe,\n wireAuthSession,\n wireChannelDelivery,\n wireChannelPublish,\n wireLogout,\n wireManifest,\n wireQuery,\n wireShape,\n wireSubscription,\n} from \"./client-wire.js\";\nimport { type OfflineRuntime, type MountedQuery } from \"./offline.js\";\nimport { ReconnectingSse } from \"./sse.js\";\nimport { stableSerialize } from \"./types.js\";\nimport type {\n AssetInput,\n AssetRecord,\n AssetUploadOptions,\n AssetUploadSource,\n AssetUrlOptions,\n AuthMe,\n AuthSession,\n AuthTokenStore,\n ChannelDelivery,\n ChannelHandle,\n ChannelPublishResult,\n ClientSnapshot,\n CreateClientOptions,\n ImageAsset,\n LiveQueryDelivery,\n Manifest,\n MutationResult,\n OutboxApi,\n Principal,\n QueryResult,\n QueryRefusedDelivery,\n RefusalEnvelope,\n RefusedDelivery,\n SnapbackClient,\n Subscription,\n SubscriptionDelivery,\n VideoAsset,\n} from \"./types.js\";\n\nexport { api };\nexport { SnapbackRefusal, isSnapbackRefusal };\nexport { browserTokenStore } from \"./token-store.js\";\nexport type { Api, ApiProxy, ChannelRef as Channel, Op };\nexport * from \"./types.js\";\nexport type {\n Coverage,\n CoverageFacts,\n HeldAnswer,\n HeldOperation,\n HeldProgram,\n OutboxEntry,\n OutboxStore,\n OverlayRow,\n RangeStore,\n RangeStoreFactory,\n Receipt,\n ReceiptRange,\n StoreSwap,\n} from \"./store/range-store.js\";\nexport type { LocalAnswer, Prediction } from \"./twin.js\";\nexport type { PartialReason, PartialSite } from \"./twin-hydrate.js\";\n\ntype SessionExpiration =\n | { cleared: false }\n | { cleared: true; authGeneration: number; fence: number };\n\ntype InternalClientOptions = CreateClientOptions & {\n offlinePrincipal?: Principal;\n offlineReadObserver?: (ref: unknown, args: unknown, result: unknown) => void;\n /** A restart of a device whose transport was cut boots cut, before any request. */\n startOffline?: boolean;\n};\n\n// @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 auth custody is restored explicitly and every principal transition fences old in-memory work.\nclass Client implements SnapbackClient {\n readonly auth;\n readonly outbox: OutboxApi;\n readonly ready: Promise<void>;\n readonly url: string;\n readonly fetchImpl: typeof globalThis.fetch;\n readonly customFetch: boolean;\n private readonly tokenStore?: AuthTokenStore;\n readonly persona?: string;\n private readonly createOptions: InternalClientOptions;\n private readonly offlineRuntime?: OfflineRuntime;\n private readonly mounted = new Map<string, MountedQuery>();\n private offlineMetadataLoaded = false;\n private resumeTail: Promise<void> = Promise.resolve();\n private resumeFlight?: Promise<void>;\n private resumeController?: AbortController;\n private resetRefusal?: RefusalEnvelope;\n // Pending reads, never buffered authority-bearing responses. Custody is per principal.\n private readonly supersessionQueries = new Map<string, { principal: string; op: string; args: unknown }>();\n private forcedOffline = false;\n private currentToken?: string;\n private currentPrincipal?: Principal;\n private authGeneration = 0;\n private custodyGeneration = 0;\n private operationFence = 0;\n private transitionTail: Promise<void> = Promise.resolve();\n private custodyTail: Promise<void> = Promise.resolve();\n private currentSnapshot: ClientSnapshot;\n private readonly statusListeners = new Set<(snapshot: ClientSnapshot) => void>();\n private readonly subscriptions = new Set<Subscription<unknown>>();\n private readonly writes = new Set<Promise<unknown>>();\n carrier?: {\n token: string;\n expiresAt: number;\n authGeneration: number;\n custodyGeneration: number;\n fence: number;\n };\n private closed = false;\n private closing: Promise<void> = Promise.resolve();\n\n constructor(options: InternalClientOptions) {\n if (!options?.url) throw new TypeError(\"createClient requires url\");\n if (options.as !== undefined && (options.token !== undefined || options.tokenStore !== undefined)) {\n throw new TypeError(\"createClient cannot combine dev persona `as` with bearer token custody\");\n }\n this.createOptions = options;\n this.url = options.url.replace(/\\/+$/, \"\");\n this.fetchImpl = options.fetch ?? globalThis.fetch?.bind(globalThis);\n this.customFetch = options.fetch !== undefined;\n if (typeof this.fetchImpl !== \"function\") throw new TypeError(\"createClient requires a fetch implementation\");\n this.tokenStore = options.tokenStore;\n this.persona = options.as;\n this.forcedOffline = options.startOffline === true;\n this.currentSnapshot = { authGeneration: 0, persona: options.as, connection: this.forcedOffline ? \"offline\" : \"reconnecting\" };\n validateOfflineOptions(options.offline);\n try {\n this.offlineRuntime = createOfflineRuntime(options.offline);\n } catch (error) {\n throw this.offlineRefusal(error);\n }\n this.outbox = createOutboxApi(this.offlineRuntime, () => this.drainNow(), () => this.ready);\n this.auth = {\n signup: (input: { email: string; password: string }) => this.session(\"/api/auth/signup\", input),\n login: (input: { email: string; password: string }) => this.session(\"/api/auth/login\", input),\n guest: () => this.session(\"/api/auth/guest\", {}),\n logout: () => this.logout(),\n me: () => this.me(),\n };\n this.ready = this.hydrate(options.token).then(() => this.initializeOffline());\n }\n\n get snapshot(): ClientSnapshot {\n return this.currentSnapshot;\n }\n\n async query<Args, Result>(ref: Op<Args, Result>, args: Args): Promise<QueryResult<Result>> {\n const authority = await this.operationAuthority(false);\n const op = referenceName(ref);\n if (this.forcedOffline) {\n this.patchSnapshot({ connection: \"offline\" });\n return answerOffline(this.offlineRuntime, op, args, (error) => this.offlineRefusal(error));\n }\n await this.ensureOfflineMetadata(authority);\n this.scheduleSupersessionReset(authority);\n let backoff = 50;\n for (let attempt = 1; ; attempt += 1) {\n try {\n const held = await this.offlineRuntime?.answer(op, args);\n const revision = this.offlineRuntime?.coverageRevision;\n const raw = await this.json(this.offlineRuntime ? \"/api/query?receipt=1\" : \"/api/query\", {\n method: \"POST\",\n body: JSON.stringify(this.offlineRuntime && held?.validator ? { op, args, validator: held.validator } : { op, args }),\n }, authority);\n const accepted = await acceptOffline<Result>(this.offlineRuntime, op, args, raw, wireShape);\n const result = wireQuery<Result>(accepted.result);\n const superseded = await commitOffline(this.offlineRuntime, op, args, accepted, (error) => this.offlineRefusal(error), revision);\n this.validated(authority);\n if (superseded || revision !== this.offlineRuntime?.coverageRevision) this.scheduleSupersessionReset(authority, { op, args });\n if (this.offlineRuntime && this.createOptions.offlineReadObserver) {\n const held = await answerOffline<Result>(\n this.offlineRuntime,\n op,\n args,\n (error) => this.offlineRefusal(error),\n );\n this.createOptions.offlineReadObserver(ref, args, held);\n }\n // Every typed receipt terminates this request. In particular, an\n // empty Capped array is the terminal drain state, never a retry cue.\n return result;\n } catch (error) {\n if (isSnapbackRefusal(error) && error.retryable && this.offlineRuntime && attempt >= 3) {\n this.patchSnapshot({ connection: \"offline\" });\n return answerOffline(this.offlineRuntime, op, args, (failure) => this.offlineRefusal(failure));\n }\n if (!isSnapbackRefusal(error)\n || (error.code !== \"E_TRANSPORT\" && error.code !== \"E_NETWORK\")\n || !error.retryable\n || attempt >= 3) throw error;\n await new Promise<void>((resolve) => setTimeout(resolve, backoff));\n this.ensureAuthority(authority);\n backoff *= 2;\n }\n }\n }\n\n async mutation<Args, Result>(ref: Op<Args, Result>, args: AssetInput<Args>): Promise<MutationResult<Result>> {\n const authority = await this.operationAuthority();\n return this.trackWrite(async () => {\n try {\n let mutationArgs: unknown = args;\n if (mayNeedAssetPlanning(args)) {\n // @ref LLP 1006#10-clients \u2014 the descriptor fence binds substitution\n // to the manifest read here. The owner independently validates the\n // resulting records against its live generation on every request.\n const operation = referenceName(ref);\n const descriptorManifest = await this.manifestFor(authority);\n const descriptor = descriptorManifest.ops[operation]?.args;\n if (descriptor === undefined) {\n throw assetInput(this, new AssetInputError(\n \"E_ASSET_TYPE\",\n `manifest generation ${descriptorManifest.generation} has no argument descriptor for ${operation}`,\n ));\n }\n const placements = await planAssetArguments(args, descriptor)\n .catch((error) => { throw assetInput(this, error); });\n if (placements.length > 0) {\n const records: AssetRecord[] = [];\n for (const placement of placements) {\n records.push(await uploadPrepared(this, placement.prepared, {}, authority));\n }\n const current = await this.manifestFor(authority);\n if (current.generation !== descriptorManifest.generation) {\n throw assetInput(this, new AssetInputError(\n \"E_ASSET_NOT_READY\",\n `descriptor generation changed from ${descriptorManifest.generation} to ${current.generation} during asset upload`,\n ));\n }\n mutationArgs = substituteAssetRecords(args, placements, records);\n }\n }\n const result = await submitMutation<Result>({\n runtime: this.offlineRuntime, offline: this.forcedOffline, op: referenceName(ref), args: mutationArgs,\n json: (path, init) => this.json(path, init, authority), failure: (error) => this.offlineRefusal(error),\n drain: () => this.drainNow(),\n });\n if (result.state === \"rejected\" && isTerminalSession(result)) {\n const wasCurrent = this.authorityCurrent(authority);\n const expiration = await this.expireSession(authority);\n if (!wasCurrent || !this.expirationCurrent(expiration)) throw this.supersededRefusal();\n this.recordRefusal(result);\n return result;\n }\n this.validated(authority);\n return result;\n } catch (error) {\n if (isSnapbackRefusal(error) && error.code === \"E_WIRE_SHAPE\") {\n const ambiguous = new SnapbackRefusal(copyRefusal(error.envelope), true);\n this.patchSnapshot({\n connection: this.transportFailureState(),\n lastRefusal: ambiguous.envelope,\n });\n throw ambiguous;\n }\n throw error;\n }\n });\n }\n\n upload(source: AssetUploadSource, options: AssetUploadOptions & { readonly kind: \"image\" }): Promise<ImageAsset>;\n upload(source: AssetUploadSource, options: AssetUploadOptions & { readonly kind: \"video\" }): Promise<VideoAsset>;\n upload(source: AssetUploadSource, options?: AssetUploadOptions): Promise<AssetRecord>;\n async upload(source: AssetUploadSource, options: AssetUploadOptions = {}): Promise<AssetRecord> {\n const authority = await this.operationAuthority();\n return this.trackWrite(() => uploadAsset(this, source, options, authority));\n }\n\n async assetUrl(asset: AssetRecord | null | undefined, options?: AssetUrlOptions): Promise<string | undefined>;\n async assetUrl(assets: readonly AssetRecord[], options?: AssetUrlOptions): Promise<string[]>;\n async assetUrl(assetOrList: AssetRecord | readonly AssetRecord[] | null | undefined, options: AssetUrlOptions = {}): Promise<string | string[] | undefined> {\n return assetUrlFor(this, assetOrList, options, await this.operationAuthority());\n }\n async assetHeaders(): Promise<Record<string, string>> {\n return assetHeadersFor(this, await this.operationAuthority());\n }\n async assetBlob(url: string, options: AssetFetchOptions = {}): Promise<Blob> {\n const authority = await this.operationAuthority();\n return assetBlobFor(this, this.offlineRuntime?.bytes, () => this.forcedOffline, url, options, authority);\n }\n async assetBytes(url: string, options: AssetFetchOptions = {}) {\n const authority = await this.operationAuthority();\n return assetBytesFor(this, this.offlineRuntime?.bytes, () => this.forcedOffline, url, options, authority);\n }\n get assetCache(): OfflineRuntime[\"bytes\"] | undefined {\n return this.offlineRuntime?.bytes;\n }\n subscribe<Args, Result>(\n ref: Op<Args, Result>,\n args: Args,\n callback: (delivery: SubscriptionDelivery<Result>) => void,\n options: { drain?: boolean } = {},\n ): Subscription<SubscriptionDelivery<Result>> {\n if (options.drain) return this.drain(ref, args, callback);\n return this.subscribeRegular(ref, args, callback);\n }\n\n private subscribeRegular<Args, Result>(\n ref: Op<Args, Result>,\n args: Args,\n callback: (delivery: SubscriptionDelivery<Result>) => void,\n ): Subscription<SubscriptionDelivery<Result>> {\n const op = referenceName(ref);\n const mountedKey = `${op}\\u0000${stableSerialize(args)}`;\n this.mounted.set(mountedKey, { op, args, drain: false });\n let lastPair: { seq: number; data?: Result } | undefined;\n let revision: number | undefined;\n let authority: Authority | undefined;\n let subscription: Subscription<SubscriptionDelivery<Result>>;\n const finish = (value: LiveQueryDelivery<Result> | QueryRefusedDelivery) => {\n lastPair = settleSubscription(value, () => this.ensureAuthority(authority), (patch) =>\n this.patchSnapshot({ ...patch, lastRefusal: patch.lastRefusal ?? this.resetRefusal }));\n return value;\n };\n subscription = new ReconnectingSse<SubscriptionDelivery<Result>>({\n open: async (lastEventId, signal) => {\n authority ??= await this.operationAuthority();\n if (this.forcedOffline) throw offlineNetworkRefusal();\n await this.ensureOfflineMetadata(authority);\n this.scheduleSupersessionReset(authority);\n revision = this.offlineRuntime?.coverageRevision;\n const held = await this.offlineRuntime?.answer(op, args);\n let path = `/api/subscribe?op=${encodeURIComponent(op)}&args=${encodeURIComponent(JSON.stringify(args))}`;\n if (this.offlineRuntime) path += \"&receipt=1\";\n if (held?.validator) path += `&validator=${encodeURIComponent(held.validator)}`;\n return this.stream(path, lastEventId, signal, authority);\n },\n decode: ({ data }, current) => {\n const frameRevision = revision;\n if (!this.offlineRuntime) return finish(wireSubscription<Result>(data));\n return decodeOfflineSubscription<Result>({\n runtime: this.offlineRuntime, op, args, data, shape: wireShape,\n failure: (error) => this.offlineRefusal(error),\n revision: frameRevision, current,\n superseded: () => this.scheduleSupersessionReset(authority!, { op, args }),\n observe: this.createOptions.offlineReadObserver\n ? async () => this.createOptions.offlineReadObserver!(\n ref,\n args,\n await answerOffline(this.offlineRuntime, op, args, (error) => this.offlineRefusal(error)),\n )\n : undefined,\n }).then(value => current() || (value.state === \"refused\" && isTerminalSession(value)) ? finish(value) : value);\n },\n bufferedTerminal: ({ data }) => {\n const value = wireSubscription<Result>(data);\n return value.state === \"refused\" && isTerminalSession(value)\n ? new SnapbackRefusal(copyRefusal(value))\n : undefined;\n },\n onError: async (error) => {\n const { retry, event, refusal } = await this.subscriptionError(error, authority, subscription);\n if (retry && this.offlineRuntime) {\n this.patchSnapshot({ connection: \"offline\" });\n const event = await answerOffline<Result>(\n this.offlineRuntime,\n op,\n args,\n (failure) => this.offlineRefusal(failure),\n );\n return { retry, event: event as SubscriptionDelivery<Result>, failure: refusal };\n }\n return {\n retry,\n event: event === undefined ? undefined : { ...event, live: false as const },\n failure: refusal,\n };\n },\n onLoss: () => {\n if (!this.authorityCurrent(authority)) return undefined;\n this.patchSnapshot({ connection: this.transportFailureState() });\n if (this.offlineRuntime) return undefined;\n if (!lastPair) return undefined;\n return \"data\" in lastPair\n ? { state: \"stale\", live: false, since: Date.now(), seq: lastPair.seq, data: lastPair.data }\n : { state: \"stale\", live: false, since: Date.now(), seq: lastPair.seq };\n },\n terminal: (event) => event.state === \"refused\"\n ? new SnapbackRefusal(copyRefusal(event))\n : undefined,\n onEvent: callback,\n });\n const tracked = this.track(subscription);\n const close = tracked.close.bind(tracked);\n tracked.close = () => {\n this.mounted.delete(mountedKey);\n close();\n };\n return tracked;\n }\n\n private drain<Args, Result>(\n ref: Op<Args, Result>,\n args: Args,\n callback: (delivery: SubscriptionDelivery<Result>) => void,\n ): Subscription<SubscriptionDelivery<Result>> {\n const op = referenceName(ref);\n return createOfflineDrain({\n ref,\n op,\n args,\n callback,\n runtime: this.offlineRuntime,\n ready: this.ready,\n mounted: this.mounted,\n query: (pageArgs: Args) => this.query(ref, pageArgs),\n subscribe: (tailArgs, onEvent) => this.subscribeRegular(ref, tailArgs, onEvent),\n track: (subscription) => this.track(subscription),\n resume: async () => this.performResume(await this.operationAuthority()),\n observe: this.offlineRuntime && this.createOptions.offlineReadObserver\n ? async () => this.createOptions.offlineReadObserver!(\n ref,\n args,\n await answerOffline(this.offlineRuntime, op, args, (error) => this.offlineRefusal(error)),\n )\n : undefined,\n });\n }\n\n channel<Args, Payload = unknown>(ref: ChannelRef<Args, Payload>, args: Args): ChannelHandle<Payload> {\n const path = referenceName(ref);\n const name = encodeURIComponent(path.startsWith(\"channels.\") ? path.slice(\"channels.\".length) : path);\n return {\n publish: async (payload: Payload) => {\n const authority = await this.operationAuthority();\n return this.trackWrite(async () => {\n const result = wireChannelPublish(await this.json(`/api/channel/${name}/publish`, {\n method: \"POST\",\n body: JSON.stringify({ args, payload }),\n }, authority));\n if (\"state\" in result) {\n if (isTerminalSession(result)) {\n const wasCurrent = this.authorityCurrent(authority);\n const expiration = await this.expireSession(authority);\n if (!wasCurrent || !this.expirationCurrent(expiration)) throw this.supersededRefusal();\n }\n this.recordRefusal(result);\n } else {\n this.validated(authority);\n }\n return result;\n });\n },\n subscribe: (callback: (event: ChannelDelivery<Payload>) => void) => {\n const path = `/api/channel/${name}/subscribe?args=${encodeURIComponent(JSON.stringify(args))}`;\n let authority: Authority | undefined;\n let subscription: Subscription<ChannelDelivery<Payload>>;\n subscription = new ReconnectingSse<ChannelDelivery<Payload>>({\n open: async (lastEventId, signal) => {\n authority ??= await this.operationAuthority();\n return this.stream(path, lastEventId, signal, authority);\n },\n decode: ({ data }) => {\n const value = wireChannelDelivery<Payload>(data);\n if (\"state\" in value && value.state === \"refused\" && isTerminalSession(value)) {\n throw new SnapbackRefusal(copyRefusal(value));\n }\n this.ensureAuthority(authority);\n this.patchSnapshot({\n connection: \"connected\",\n lastRefusal: \"state\" in value && value.state === \"refused\"\n ? copyRefusal(value)\n : undefined,\n });\n return value;\n },\n bufferedTerminal: ({ data }) => {\n const value = wireChannelDelivery<Payload>(data);\n return \"state\" in value && value.state === \"refused\" && isTerminalSession(value)\n ? new SnapbackRefusal(copyRefusal(value))\n : undefined;\n },\n onError: async (error) => {\n const decision = await this.subscriptionError(error, authority, subscription);\n return { retry: decision.retry, event: decision.event, failure: decision.refusal };\n },\n onLoss: () => {\n if (!this.authorityCurrent(authority)) return undefined;\n this.patchSnapshot({ connection: this.transportFailureState() });\n return undefined;\n },\n terminal: (event) => \"state\" in event && event.state === \"refused\"\n ? new SnapbackRefusal(copyRefusal(event))\n : undefined,\n onEvent: callback,\n });\n return this.track(subscription);\n },\n };\n }\n\n async manifest(): Promise<Manifest> {\n const authority = await this.operationAuthority();\n return this.manifestFor(authority);\n }\n\n async offline(): Promise<void> {\n return goOffline({\n ready: this.ready,\n ensureOpen: () => this.ensureOpen(),\n force: (value) => { this.forcedOffline = value; },\n connection: (value) => { this.patchSnapshot({ connection: value }); },\n reconnect: () => this.reconnectTransports(),\n });\n }\n\n async online(): Promise<void> {\n return goOnline({\n ready: this.ready,\n ensureOpen: () => this.ensureOpen(),\n force: (value) => { this.forcedOffline = value; },\n connection: (value) => { this.patchSnapshot({ connection: value }); },\n authority: () => this.operationAuthority(),\n resume: (authority) => this.performResume(authority),\n setResume: (run) => { this.resumeTail = run; },\n reconnect: () => this.reconnectTransports(),\n });\n }\n\n async restart(): Promise<SnapbackClient> {\n return restartOffline({\n ready: this.ready,\n ensureOpen: () => this.ensureOpen(),\n forced: () => this.forcedOffline,\n shutdown: async () => {\n this.closed = true;\n this.abortResume();\n this.operationFence += 1;\n this.closeTransports();\n this.patchSnapshot({ connection: \"offline\" });\n await this.offlineRuntime?.close();\n },\n create: () => {\n const offline = this.createOptions.offline;\n const options: InternalClientOptions = this.persona !== undefined\n ? { url: this.url, as: this.persona, fetch: this.fetchImpl, offline, startOffline: this.forcedOffline,\n offlineReadObserver: this.createOptions.offlineReadObserver }\n : { url: this.url, token: this.currentToken, tokenStore: this.tokenStore, fetch: this.fetchImpl, offline,\n offlinePrincipal: this.currentPrincipal, startOffline: this.forcedOffline,\n offlineReadObserver: this.createOptions.offlineReadObserver };\n return new Client(options);\n },\n });\n }\n\n subscribeStatus(callback: (snapshot: ClientSnapshot) => void): () => void {\n this.statusListeners.add(callback);\n try {\n callback(this.currentSnapshot);\n } catch (error) {\n this.statusListeners.delete(callback);\n throw error;\n }\n return () => this.statusListeners.delete(callback);\n }\n\n close(): Promise<void> {\n if (this.closed) return this.closing;\n this.closed = true;\n this.abortResume();\n this.operationFence += 1;\n this.closeTransports();\n this.patchSnapshot({ connection: \"offline\" });\n // Resolves once the carrier is quiet: a test or a shutdown that removes the\n // store's directory right after close() would otherwise race the last swap.\n this.closing = this.offlineRuntime?.close() ?? Promise.resolve();\n return this.closing;\n }\n\n private track<Event>(subscription: Subscription<Event>): Subscription<Event> {\n this.subscriptions.add(subscription as Subscription<unknown>);\n const close = subscription.close.bind(subscription);\n subscription.close = () => {\n this.subscriptions.delete(subscription as Subscription<unknown>);\n close();\n };\n return subscription;\n }\n\n private async session(path: string, input: unknown): Promise<AuthSession> {\n this.ensureBearerTransition(path.slice(\"/api/auth/\".length));\n return this.transition(async (authority) => {\n const session = wireAuthSession(\n captureGrant(this.offlineRuntime, await this.json(path, { method: \"POST\", body: JSON.stringify(input) }, authority, false, false)),\n `${path.slice(\"/api/\".length)} response`,\n );\n await this.openOffline(session.viewer, true);\n await this.installToken(session.token);\n this.ensureOpen();\n // The program lands with the grant, so \"log in, go offline, write\" prices and predicts from custody.\n try {\n await this.ensureOfflineMetadata({\n authGeneration: this.authGeneration,\n custodyGeneration: this.custodyGeneration,\n fence: this.operationFence,\n token: this.currentToken,\n });\n } catch (error) {\n if (!isSnapbackRefusal(error) || !error.retryable) throw error;\n }\n this.validated(undefined);\n return session;\n });\n }\n\n private async logout(): Promise<{ ok: boolean }> {\n this.ensureBearerTransition(\"logout\");\n return this.transition(async (authority) => {\n let result: { ok: boolean } | undefined;\n let requestFailure: unknown;\n try {\n result = wireLogout(await this.json(\n \"/api/auth/logout\",\n { method: \"POST\" },\n authority,\n false,\n false,\n ));\n } catch (error) {\n requestFailure = error;\n }\n let wipeFailure: unknown;\n try { await this.wipeOffline(); } catch (error) { wipeFailure = error; }\n await this.clearToken();\n this.ensureOpen();\n if (requestFailure !== undefined) throw requestFailure;\n if (wipeFailure !== undefined) throw wipeFailure;\n this.validated(undefined);\n return result as { ok: boolean };\n });\n }\n\n private async me(): Promise<AuthMe> {\n const authority = await this.operationAuthority();\n const result = wireAuthMe(await this.json(\"/api/auth/me\", {}, authority));\n await this.openOffline(result.viewer, true);\n this.validated(authority);\n return result;\n }\n\n private async hydrate(explicitToken: string | undefined): Promise<void> {\n let token = explicitToken;\n let principal: string | null | undefined;\n if (token === undefined && this.tokenStore) {\n try {\n const [storedToken, storedPrincipal] = await Promise.all([\n this.tokenStore.load(), this.tokenStore.loadPrincipal?.(),\n ]);\n token = storedToken ?? undefined;\n principal = storedPrincipal;\n } catch (error) {\n throw this.storageRefusal(\"load\", error);\n }\n }\n if (token !== undefined && (typeof token !== \"string\" || token.length === 0)) {\n throw this.storageRefusal(\"load\", new TypeError(\"stored token must be a non-empty string or null\"));\n }\n if (explicitToken !== undefined) await this.saveToken(token!);\n if (this.closed) return;\n this.currentToken = token;\n if (token !== undefined && principal) this.currentPrincipal = principal as Principal;\n this.authGeneration += 1;\n this.publishAuthSnapshot();\n }\n\n headers(authority: Authority, stream = false, hasBody = false): Headers {\n const headers = new Headers();\n headers.set(\"Accept\", stream ? \"text/event-stream\" : \"application/json\");\n if (hasBody) headers.set(\"Content-Type\", \"application/json\");\n if (authority.token) headers.set(\"Authorization\", `Bearer ${authority.token}`);\n if (this.persona) headers.set(\"X-Snapback-As\", this.persona);\n return headers;\n }\n\n private async manifestFor(authority: Authority, signal?: AbortSignal): Promise<Manifest> {\n throwIfAborted(signal);\n const value = wireManifest(await this.json(\"/api/manifest\", { signal }, authority));\n throwIfAborted(signal);\n this.validated(authority);\n this.patchSnapshot({ generation: value.generation });\n this.offlineRuntime?.manifest(value);\n // A generation change re-fetches the program on the next read (LLP 1012 \u00A78).\n if (this.offlineRuntime && this.offlineRuntime.programGeneration !== value.programGeneration) this.offlineMetadataLoaded = false;\n return value;\n }\n\n /**\n * The manifest and, when the partition holds none for the live generation,\n * `GET /api/program`: the twin's custody and the write bounds. `force`\n * reloads after `E_OFFLINE_RESET`, whose generation the held program predates.\n */\n private async ensureOfflineMetadata(authority: Authority, force = false, retry = true, signal?: AbortSignal): Promise<void> {\n throwIfAborted(signal);\n if (!this.offlineRuntime || (this.offlineMetadataLoaded && !force)) return;\n let manifest: Manifest;\n // Unreachable at cold start: held answers and the outbox still serve; the metadata loads on the next reach.\n try { manifest = await this.manifestFor(authority, signal); throwIfAborted(signal); } catch (error) {\n if (!force && isSnapbackRefusal(error) && error.retryable) return;\n throw error;\n }\n if (this.offlineRuntime.programGeneration !== manifest.programGeneration || force) {\n try {\n const program = await this.json(\n `/api/program?generation=${encodeURIComponent(manifest.programGeneration)}`,\n { signal },\n authority,\n );\n throwIfAborted(signal);\n await this.offlineRuntime.program(program, signal);\n throwIfAborted(signal);\n } catch (error) {\n if (!isSnapbackRefusal(error) || error.status !== 404) throw error;\n if (force) {\n // The owner can advance between manifest and program. Coalesce that\n // successor into this reset; repeated churn keeps the reset pending.\n if (retry) return this.ensureOfflineMetadata(authority, true, false, signal);\n throw error;\n }\n }\n }\n this.offlineMetadataLoaded = true;\n }\n\n networkRefusal(message: string): SnapbackRefusal {\n const refusal = new SnapbackRefusal(fallbackRefusal(\"E_NETWORK\", message), true);\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n return refusal;\n }\n\n transportRefusal(message: string): SnapbackRefusal {\n const refusal = new SnapbackRefusal(fallbackRefusal(\"E_TRANSPORT\", message), true);\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n return refusal;\n }\n\n async json(\n path: string,\n init: RequestInit,\n authority: Authority,\n enforceAuthority = true,\n clearTerminalSession = true,\n ): Promise<unknown> {\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n if (this.forcedOffline) throw offlineNetworkRefusal();\n let response: Response;\n try {\n response = await this.fetchImpl(`${this.url}${path}`, {\n ...init,\n headers: this.headers(authority, false, init.body !== undefined && init.body !== null),\n });\n } catch (error) {\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n const refusal = new SnapbackRefusal(\n fallbackRefusal(\"E_NETWORK\", error instanceof Error ? error.message : String(error)),\n true,\n );\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n throw refusal;\n }\n if (!response.ok) {\n if (response.status >= 400 && response.status < 500) {\n let refusal: SnapbackRefusal;\n try {\n refusal = await responseRefusal(response);\n } catch (error) {\n if (isSnapbackRefusal(error)) {\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n if (error.retryable) {\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: error.envelope });\n }\n throw error;\n }\n throw error;\n }\n const wasCurrent = !enforceAuthority || this.authorityCurrent(authority);\n let expiration: SessionExpiration | undefined;\n if (clearTerminalSession && isTerminalSession(refusal.envelope)) {\n expiration = await this.expireSession(authority);\n }\n if (enforceAuthority && (!wasCurrent\n || (expiration !== undefined && !this.expirationCurrent(expiration)))) {\n throw this.supersededRefusal();\n }\n if (enforceAuthority && !(clearTerminalSession && isTerminalSession(refusal.envelope))) {\n this.ensureAuthority(authority);\n }\n else this.ensureOpen();\n this.patchSnapshot({ connection: \"connected\" });\n this.recordRefusal(refusal.envelope);\n throw refusal;\n }\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n const refusal = new SnapbackRefusal(\n fallbackRefusal(\"E_TRANSPORT\", `${path} returned HTTP ${response.status}`),\n true,\n );\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n throw refusal;\n }\n let value: unknown;\n try {\n value = await response.json();\n } catch {\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n const refusal = wireShape(`${path} must contain valid JSON`);\n this.recordRefusal(refusal.envelope);\n throw refusal;\n }\n let terminal: RefusalEnvelope | undefined;\n try {\n terminal = clearTerminalSession ? terminalSessionEnvelope(value) : undefined;\n } catch (error) {\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n throw error;\n }\n if (terminal !== undefined && enforceAuthority && !this.authorityCurrent(authority)) {\n await this.expireSession(authority);\n throw this.supersededRefusal();\n }\n if (enforceAuthority) this.ensureAuthority(authority);\n else this.ensureOpen();\n this.patchSnapshot({ connection: \"connected\" });\n return value;\n }\n\n private async stream(\n path: string,\n lastEventId: string | undefined,\n signal: AbortSignal,\n authority: Authority,\n ): Promise<Response> {\n this.ensureAuthority(authority);\n if (this.forcedOffline) throw offlineNetworkRefusal();\n const headers = this.headers(authority, true);\n if (lastEventId !== undefined) headers.set(\"Last-Event-ID\", lastEventId);\n try {\n const response = await this.fetchImpl(`${this.url}${path}`, { headers, signal });\n if (!response.ok) {\n if (response.status >= 400 && response.status < 500) {\n let refusal: SnapbackRefusal | undefined;\n try {\n refusal = await responseRefusal(response);\n } catch (error) {\n if (isSnapbackRefusal(error) && !error.retryable) throw error;\n // A non-envelope 4xx cannot be interpreted as a terminal owner refusal.\n }\n if (refusal !== undefined) {\n if (isTerminalSession(refusal.envelope)\n && (signal.aborted || !this.authorityCurrent(authority))) {\n await this.expireSession(authority);\n throw this.supersededRefusal();\n }\n if (!isTerminalSession(refusal.envelope)) this.ensureAuthority(authority);\n throw refusal;\n }\n }\n this.ensureAuthority(authority);\n throw new SnapbackRefusal(\n fallbackRefusal(\"E_HTTP\", `${path} returned HTTP ${response.status}`),\n true,\n );\n }\n this.ensureAuthority(authority);\n throwIfAborted(signal);\n this.patchSnapshot({ connection: \"connected\" });\n return response;\n } catch (error) {\n if (isSnapbackRefusal(error) && isTerminalSession(error.envelope)) throw error;\n // An aborted transport can still settle when a custom fetch ignores its\n // signal. Fence it before interpreting or publishing the late result.\n this.ensureAuthority(authority);\n if (signal.aborted) throw error;\n if (isSnapbackRefusal(error)) {\n this.patchSnapshot({\n connection: error.retryable ? this.transportFailureState() : \"connected\",\n lastRefusal: error.envelope,\n });\n throw error;\n }\n const refusal = new SnapbackRefusal(\n fallbackRefusal(\"E_NETWORK\", error instanceof Error ? error.message : String(error)),\n true,\n );\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n throw refusal;\n }\n }\n\n private async subscriptionError(\n error: unknown,\n authority: Authority | undefined,\n origin: Subscription<unknown>,\n ): Promise<{ event?: RefusedDelivery; retry: boolean; refusal?: SnapbackRefusal }> {\n const refusal = isSnapbackRefusal(error)\n ? error\n : new SnapbackRefusal(\n fallbackRefusal(\"E_NETWORK\", error instanceof Error ? error.message : String(error)),\n true,\n );\n if (refusal.code === \"E_AUTH_SUPERSEDED\") {\n return { retry: false, refusal };\n }\n if (isTerminalSession(refusal.envelope) && authority !== undefined) {\n const wasCurrent = this.authorityCurrent(authority);\n let expiration: SessionExpiration;\n try {\n expiration = await this.expireSession(authority, origin);\n } catch (error) {\n if (this.closed) {\n return { retry: false, refusal: this.supersededRefusal() };\n }\n const terminal = isSnapbackRefusal(error)\n ? error\n : new SnapbackRefusal({\n code: \"E_AUTH_TOKEN_STORE\",\n family: \"auth\",\n message: `token store clear failed: ${error instanceof Error ? error.message : String(error)}`,\n guide: \"auth/session\",\n });\n this.patchSnapshot({ connection: \"connected\", lastRefusal: terminal.envelope });\n return {\n retry: false,\n refusal: terminal,\n event: { state: \"refused\", ...terminal.envelope },\n };\n }\n if (this.closed) {\n return { retry: false, refusal: this.supersededRefusal() };\n }\n if (!wasCurrent || !this.expirationCurrent(expiration)) {\n return { retry: false, refusal: this.supersededRefusal() };\n }\n }\n if (this.closed) {\n return { retry: false, refusal: this.supersededRefusal() };\n }\n if (refusal.retryable) {\n this.patchSnapshot({ connection: this.transportFailureState(), lastRefusal: refusal.envelope });\n return { retry: true };\n }\n this.patchSnapshot({ connection: \"connected\", lastRefusal: refusal.envelope });\n return { retry: false, refusal, event: { state: \"refused\", ...refusal.envelope } };\n }\n\n private async initializeOffline(): Promise<void> {\n if (!this.offlineRuntime) return;\n const authority = {\n authGeneration: this.authGeneration,\n custodyGeneration: this.custodyGeneration,\n fence: this.operationFence,\n token: this.currentToken,\n };\n return initializeOfflineClient({\n principal: this.persona === undefined\n ? this.createOptions.offlinePrincipal ?? this.currentPrincipal\n : `dev:${this.persona}` as Principal,\n bearer: this.persona === undefined && this.currentToken !== undefined,\n authority,\n open: (principal, authenticated) => this.openOffline(principal, authenticated),\n confirm: async (current) => wireAuthMe(await this.json(\"/api/auth/me\", {}, current)).viewer,\n metadata: (current) => this.ensureOfflineMetadata(current),\n resume: (current) => this.performResume(current),\n // A bounded rebuild refusal leaves durable work for online(); it must\n // not permanently reject the restore barrier that online() itself awaits.\n ignore: (error) => isSnapbackRefusal(error)\n && (error.retryable || error.code === \"E_OFFLINE_RESUME\" || error.code === \"E_OFFLINE_RESET\"),\n });\n }\n\n private async openOffline(principal: Principal, authenticated = false): Promise<void> {\n if (!this.offlineRuntime) return;\n try {\n const changed = this.offlineRuntime.principal !== principal;\n await this.offlineRuntime.open(principal, authenticated);\n if (authenticated) await this.offlineRuntime.reauthenticate(principal);\n this.currentPrincipal = principal;\n if (changed) {\n this.supersessionQueries.clear();\n this.offlineMetadataLoaded = false;\n }\n } catch (error) {\n throw this.offlineRefusal(error);\n }\n }\n\n private async sealOffline(): Promise<void> {\n if (!this.offlineRuntime) return;\n try { await this.offlineRuntime.seal(); }\n catch (error) { throw this.offlineRefusal(error); }\n }\n\n private async wipeOffline(): Promise<void> {\n if (!this.offlineRuntime) return;\n this.abortResume();\n this.supersessionQueries.clear();\n try { await this.offlineRuntime.wipe(); this.currentPrincipal = undefined; }\n catch (error) { throw this.offlineRefusal(error); }\n }\n\n /** A live read never waits for reset. online() joins it and reports its outcome. */\n private scheduleSupersessionReset(authority: Authority, item?: { op: string; args: unknown }): void {\n const principal = this.offlineRuntime?.principal;\n if (!this.authorityCurrent(authority) || principal === undefined) return;\n if (item) this.supersessionQueries.set(`${principal}\\u0000${item.op}\\u0000${stableSerialize(item.args)}`, { principal, ...item });\n if (this.forcedOffline || (!this.offlineRuntime?.resetNeeded && this.supersessionQueries.size === 0)) return;\n // The rejection is retained on the snapshot; the next opportunity retries.\n void this.performResume(authority).catch(() => undefined);\n }\n\n private performResume(authority: Authority): Promise<void> {\n if (!this.offlineRuntime || this.forcedOffline) return Promise.resolve();\n if (this.resumeFlight) return this.resumeFlight;\n const controller = new AbortController();\n this.resumeController = controller;\n const run = this.resumeOffline(authority, controller.signal).then(() => {\n throwIfAborted(controller.signal);\n this.ensureAuthority(authority);\n this.resetRefusal = undefined;\n this.validated(authority);\n }, (error) => {\n // Local no-facts refusals never pass through json(): offlineRefusal()\n // publishes them on cold initialization as well as online().\n if (this.authorityCurrent(authority)) {\n const refusal = this.offlineRefusal(error);\n this.resetRefusal = refusal.envelope;\n }\n throw error;\n });\n this.resumeFlight = run;\n void run.then(() => {\n if (this.resumeFlight !== run) return;\n this.resumeFlight = undefined;\n this.resumeController = undefined;\n this.scheduleSupersessionReset(authority);\n }, () => {\n if (this.resumeFlight === run) { this.resumeFlight = undefined; this.resumeController = undefined; }\n });\n return run;\n }\n\n private abortResume(): void {\n this.resumeController?.abort();\n this.resumeController = undefined;\n this.resumeFlight = undefined;\n }\n\n private async resumeOffline(authority: Authority, signal: AbortSignal): Promise<void> {\n const runtime = this.offlineRuntime!;\n const check = () => { throwIfAborted(signal); this.ensureAuthority(authority); };\n const json = async (path: string, init: RequestInit) => {\n check();\n const value = await this.json(path, { ...init, signal }, authority);\n check();\n return value;\n };\n await this.ensureOfflineMetadata(authority, false, true, signal);\n check();\n // One flight owns bounded convergence, including successors found by cold\n // subscription opens. Keep all pending keys until an entire round commits.\n for (let round = 0; round < 3; round++) {\n const reset = await performOfflineResume({\n runtime, mounted: this.mounted, authority, signal,\n bearerConfirmed: authority.token !== undefined, json,\n validated: (current) => { check(); this.validated(current); },\n shape: wireShape, failure: (error) => this.offlineRefusal(error),\n subscriptions: this.subscriptions,\n reload: (current) => this.ensureOfflineMetadata(current, true, true, signal),\n });\n check();\n if (reset) for (const item of this.mounted.values()) {\n const principal = runtime.principal!;\n const key = `${principal}\\u0000${item.op}\\u0000${stableSerialize(item.args)}`;\n if (!this.supersessionQueries.has(key)) this.supersessionQueries.set(key, { principal, op: item.op, args: item.args });\n }\n const pending = [...this.supersessionQueries];\n const revision = runtime.coverageRevision;\n let superseded = false;\n // Fresh authenticated reads, never buffered envelopes. The epoch remains\n // the session epoch authenticated by the resume, even for first facts.\n for (const [, item] of pending) {\n check();\n if (item.principal !== runtime.principal) continue;\n const raw = await json(\"/api/query?receipt=1\", {\n method: \"POST\", body: JSON.stringify({ op: item.op, args: item.args }),\n });\n check();\n const accepted = await acceptOffline(runtime, item.op, item.args, raw, wireShape);\n check();\n wireQuery(accepted.result);\n superseded = await commitOffline(runtime, item.op, item.args, accepted,\n (error) => this.offlineRefusal(error), revision, () => !signal.aborted);\n check();\n if (superseded || revision !== runtime.coverageRevision) break;\n }\n if (superseded || revision !== runtime.coverageRevision) continue;\n let fenced = false;\n if (reset) {\n // @ref LLP 1012#7-writes-offline \u2014 the rebuild cleared the fence's trust\n // anchor (resetCoverage resets trust), so this drain releases only\n // intents inside the fence; a fence stop is answered by the resume the\n // next round completes, never by the rebuild alone.\n const drained = await drainOutbox({ runtime, json, signal, shape: wireShape, failure: (error) => this.offlineRefusal(error) });\n check();\n fenced = drained.reason === \"fence\";\n }\n const complete = await runtime.completeReset(revision, signal);\n check();\n if (!complete) continue;\n for (const [key, item] of pending) if (this.supersessionQueries.get(key) === item) this.supersessionQueries.delete(key);\n if (this.supersessionQueries.size === 0 && !runtime.resetNeeded && !fenced) return;\n }\n throw new SnapbackRefusal({\n code: \"E_OFFLINE_RESET\", family: \"offline\", message: \"the program changed during three coverage rebuild attempts\",\n site: \"client.resume\", rewrite: \"retry online() after the program stops rotating\", guide: \"offline\",\n });\n }\n\n private async drainNow(): Promise<{ stopped: boolean; reason?: \"fence\" }> {\n const authority = await this.operationAuthority();\n if (!this.offlineRuntime) return { stopped: false };\n return drainOutbox({ runtime: this.offlineRuntime, json: (path, init) => this.json(path, init, authority),\n shape: wireShape, failure: (error) => this.offlineRefusal(error) });\n }\n\n private offlineRefusal(error: unknown): SnapbackRefusal {\n const carrier = this.createOptions?.offline?.store.carrier\n ?? this.createOptions?.offline?.store.name\n ?? \"configured\";\n const refusal = makeOfflineRefusal(error, carrier);\n this.recordRefusal(refusal.envelope);\n return refusal;\n }\n\n recordRefusal(envelope: RefusalEnvelope): void {\n this.patchSnapshot({ lastRefusal: envelope });\n }\n\n validated(authority: Authority | undefined): void {\n if (authority !== undefined) this.ensureAuthority(authority);\n else this.ensureOpen();\n if (!this.forcedOffline) this.patchSnapshot({ connection: \"connected\", lastRefusal: this.resetRefusal });\n }\n\n private async operationAuthority(waitForResume = true): Promise<Authority> {\n await this.ready;\n while (true) {\n const transition = this.transitionTail;\n await transition;\n if (transition === this.transitionTail) break;\n }\n if (waitForResume) await this.resumeTail;\n this.ensureOpen();\n return {\n authGeneration: this.authGeneration,\n custodyGeneration: this.custodyGeneration,\n fence: this.operationFence,\n token: this.currentToken,\n };\n }\n\n private transition<T>(\n action: (authority: Authority) => Promise<T>,\n waitForWrites = true,\n except?: Subscription<unknown>,\n ): Promise<T> {\n this.operationFence += 1;\n this.supersessionQueries.clear();\n this.abortResume();\n this.resetRefusal = undefined;\n this.closeTransports(except);\n const run = this.transitionTail.then(async () => {\n await this.ready;\n this.ensureOpen();\n if (waitForWrites) await this.settleWrites();\n const authority: Authority = {\n authGeneration: this.authGeneration,\n custodyGeneration: this.custodyGeneration,\n fence: this.operationFence,\n token: this.currentToken,\n };\n try {\n return await action(authority);\n } finally {\n this.authGeneration += 1;\n this.publishAuthSnapshot();\n }\n });\n this.transitionTail = run.then(() => undefined, () => undefined);\n return run;\n }\n\n private async expireSession(authority: Authority, origin?: Subscription<unknown>): Promise<SessionExpiration> {\n if (authority.token === undefined) return { cleared: false };\n return this.custody(async () => {\n if (this.currentToken !== authority.token\n || this.custodyGeneration !== authority.custodyGeneration) return { cleared: false };\n this.operationFence += 1;\n const fence = this.operationFence;\n const authGeneration = this.authGeneration + 1;\n this.closeTransports(origin);\n let sealFailure: unknown;\n try {\n try { await this.sealOffline(); } catch (error) { sealFailure = error; }\n await this.clearTokenNow();\n if (sealFailure !== undefined) throw sealFailure;\n } finally {\n this.authGeneration += 1;\n this.publishAuthSnapshot();\n }\n return { cleared: true, authGeneration, fence };\n });\n }\n\n private expirationCurrent(expiration: SessionExpiration): boolean {\n return expiration.cleared\n && !this.closed\n && this.currentToken === undefined\n && this.operationFence === expiration.fence\n && this.authGeneration === expiration.authGeneration;\n }\n\n private async installToken(token: string): Promise<void> {\n await this.custody(async () => {\n this.ensureOpen();\n await this.saveToken(token);\n await this.tokenStore?.savePrincipal?.(this.currentPrincipal ?? null);\n // Commit replacement custody only after durable persistence succeeds,\n // but before close can prevent its in-memory installation. Predecessor\n // evidence may clear a failed save; it cannot erase a completed one.\n this.custodyGeneration += 1;\n // Persistence may have outlived close(). Retain the durable token for a\n // future client restore, but never resurrect this closed instance.\n this.ensureOpen();\n this.currentToken = token;\n });\n }\n\n private custody<Result>(action: () => Promise<Result>): Promise<Result> {\n const run = this.custodyTail.then(action);\n this.custodyTail = run.then(() => undefined, () => undefined);\n return run;\n }\n\n private async saveToken(token: string): Promise<void> {\n if (!this.tokenStore) return;\n try {\n await this.tokenStore.save(token);\n } catch (error) {\n throw this.storageRefusal(\"save\", error);\n }\n }\n\n private async clearToken(): Promise<void> {\n await this.custody(() => this.clearTokenNow());\n }\n\n private async clearTokenNow(): Promise<void> {\n let failure: SnapbackRefusal | undefined;\n if (this.tokenStore) {\n try {\n await this.tokenStore.save(null);\n await this.tokenStore.savePrincipal?.(null);\n } catch (error) {\n failure = this.storageRefusal(\"clear\", error);\n }\n }\n this.currentToken = undefined;\n this.currentPrincipal = undefined;\n if (failure) throw failure;\n }\n\n private storageRefusal(action: string, error: unknown): SnapbackRefusal {\n const refusal = new SnapbackRefusal({\n code: \"E_AUTH_TOKEN_STORE\",\n family: \"auth\",\n message: `token store ${action} failed: ${error instanceof Error ? error.message : String(error)}`,\n guide: \"auth/session\",\n });\n this.recordRefusal(refusal.envelope);\n return refusal;\n }\n\n private ensureBearerTransition(action: string): void {\n if (this.persona === undefined) return;\n const refusal = new SnapbackRefusal({\n code: \"E_AUTH_PERSONA_TRANSITION\",\n family: \"auth\",\n message: `dev persona clients cannot ${action} a bearer session`,\n guide: \"auth/personas\",\n });\n this.recordRefusal(refusal.envelope);\n throw refusal;\n }\n\n private trackWrite<Result>(run: () => Promise<Result>): Promise<Result> {\n const request = run();\n this.writes.add(request as Promise<unknown>);\n void request.finally(() => this.writes.delete(request as Promise<unknown>)).catch(() => undefined);\n return request;\n }\n\n private async settleWrites(): Promise<void> {\n while (this.writes.size > 0) await Promise.allSettled([...this.writes]);\n }\n\n private closeTransports(except?: Subscription<unknown>): void {\n for (const subscription of [...this.subscriptions]) {\n if (subscription !== except) subscription.close();\n }\n }\n\n private reconnectTransports(): void {\n for (const subscription of this.subscriptions) {\n (subscription as Subscription<unknown> & { reconnect?: () => void }).reconnect?.();\n }\n }\n\n private authorityCurrent(authority: Authority | undefined): authority is Authority {\n return authority !== undefined\n && !this.closed\n && authority.fence === this.operationFence\n && authority.authGeneration === this.authGeneration\n && authority.custodyGeneration === this.custodyGeneration\n && authority.token === this.currentToken;\n }\n\n ensureAuthority(authority: Authority | undefined): asserts authority is Authority {\n if (!this.authorityCurrent(authority)) {\n throw this.supersededRefusal();\n }\n }\n\n private supersededRefusal(): SnapbackRefusal {\n return new SnapbackRefusal({\n code: \"E_AUTH_SUPERSEDED\",\n family: \"auth\",\n message: \"operation belonged to a previous authentication generation\",\n guide: \"auth/session\",\n });\n }\n\n private ensureOpen(): void {\n if (this.closed) {\n throw new SnapbackRefusal({\n code: \"E_CLIENT_CLOSED\",\n family: \"owner\",\n message: \"client is closed\",\n guide: \"owner/connect\",\n });\n }\n }\n\n private publishAuthSnapshot(): void {\n this.patchSnapshot({ authGeneration: this.authGeneration, token: this.currentToken });\n }\n\n private transportFailureState(): \"reconnecting\" | \"offline\" {\n return this.forcedOffline || (typeof navigator !== \"undefined\" && navigator.onLine === false)\n ? \"offline\" : \"reconnecting\";\n }\n\n private patchSnapshot(patch: Partial<ClientSnapshot>): ClientSnapshot {\n const next = { ...this.currentSnapshot, ...patch };\n if (patch.token === undefined && \"token\" in patch) delete next.token;\n if (patch.lastRefusal === undefined && \"lastRefusal\" in patch) delete next.lastRefusal;\n if (JSON.stringify(next) === JSON.stringify(this.currentSnapshot)) return this.currentSnapshot;\n this.currentSnapshot = next;\n for (const listener of this.statusListeners) {\n try {\n listener(next);\n } catch {\n // Application observers cannot turn a validated client operation into a refusal.\n }\n }\n return next;\n }\n}\n\n// @ref LLP 1002#9-the-client-snapback2client-snapback2react-snapback2test \u2014 one small headless client speaks the owner wire directly.\nexport function createClient(options: CreateClientOptions): SnapbackClient {\n return new Client(options);\n}\n", "import { mkdir, readFile, readdir, rename, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport {\n OfflineStoreFailure,\n PersistentRangeStore,\n type PersistedRangeState,\n type PrincipalPartition,\n type RangeStoreBackend,\n type RangeStoreFactory,\n} from \"./range-store.js\";\nimport type { ByteDelta } from \"./byte-cache.js\";\nimport { projectState, unprojectState } from \"./projection.js\";\n\nexport interface FileRangeStoreOptions {\n /** Test barrier used to prove a failed pre-rename write leaves the old file. */\n beforeRename?: (temporaryPath: string, finalPath: string) => void | Promise<void>;\n}\n\nclass FileBackend implements RangeStoreBackend {\n readonly carrier = \"Node file\";\n private path?: string;\n private writeNumber = 0;\n\n constructor(private readonly root: string, private readonly options: FileRangeStoreOptions) {}\n\n async open(partition: PrincipalPartition): Promise<PersistedRangeState | undefined> {\n await mkdir(this.root, { recursive: true });\n this.path = this.partitionPath(partition);\n let state: PersistedRangeState | undefined;\n try {\n state = unprojectState(projectState(JSON.parse(await readFile(this.path, \"utf8\")) as PersistedRangeState));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw new OfflineStoreFailure(\n \"E_OFFLINE_CARRIER\",\n `Node file carrier could not open ${this.path}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n await this.sweepBytes(state);\n return state;\n }\n\n // @ref LLP 1012#9-asset-bytes-on-the-device \u2014 the index in the state file is the\n // authority over bytes. This carrier has no transaction: it is an ordered write\n // (payloads first, then the state file's rename, then the removals) plus a sweep\n // on open. A crash leaves only garbage the next open sweeps, never a served byte\n // without its row; a removed payload may outlive its row on disk until the delete\n // after the rename or the next open. IndexedDB is the carrier with one transaction.\n async replace(state: PersistedRangeState, bytes: ByteDelta): Promise<void> {\n if (!this.path) throw new OfflineStoreFailure(\"E_OFFLINE_CARRIER\", \"Node file carrier is not open\");\n const temporary = `${this.path}.tmp-${process.pid}-${++this.writeNumber}`;\n await mkdir(dirname(this.path), { recursive: true });\n if (bytes.put.length > 0) {\n await mkdir(this.bytesDirectory(), { recursive: true });\n for (const item of bytes.put) {\n await writeFile(join(this.bytesDirectory(), item.key), item.bytes, { mode: 0o600 });\n }\n }\n await writeFile(temporary, `${JSON.stringify(state)}\\n`, { encoding: \"utf8\", mode: 0o600 });\n try {\n await this.options.beforeRename?.(temporary, this.path);\n await rename(temporary, this.path);\n } catch (error) {\n await rm(temporary, { force: true }).catch(() => undefined);\n throw error;\n }\n for (const key of bytes.remove) {\n await rm(join(this.bytesDirectory(), key), { force: true }).catch(() => undefined);\n }\n }\n\n async readBytes(key: string): Promise<Uint8Array | undefined> {\n if (!this.path) return undefined;\n try {\n return new Uint8Array(await readFile(join(this.bytesDirectory(), key)));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw error;\n }\n }\n\n async wipe(partition: PrincipalPartition): Promise<void> {\n const target = this.partitionPath(partition);\n await rm(target, { force: true });\n await rm(`${target.slice(0, -\".json\".length)}.bytes`, { recursive: true, force: true });\n if (this.path === target) this.path = undefined;\n }\n\n close(): void {\n this.path = undefined;\n }\n\n private async sweepBytes(state: PersistedRangeState | undefined): Promise<void> {\n const directory = this.bytesDirectory();\n let names: string[];\n try {\n names = await readdir(directory);\n } catch {\n return;\n }\n const held = state?.assets ?? {};\n for (const name of names) {\n if (held[name] === undefined) await rm(join(directory, name), { force: true }).catch(() => undefined);\n }\n }\n\n private bytesDirectory(): string {\n return `${this.path!.slice(0, -\".json\".length)}.bytes`;\n }\n\n private partitionPath(partition: PrincipalPartition): string {\n return resolve(this.root, `${encodeURIComponent(partition)}.json`);\n }\n}\n\n/** Node-only carrier used by `snapback2 test` and durability harnesses. */\nexport function fileRangeStore(root: string, options: FileRangeStoreOptions = {}): RangeStoreFactory {\n if (typeof root !== \"string\" || root.length === 0) throw new TypeError(\"fileRangeStore requires a directory\");\n const absolute = resolve(root);\n const factory = (() => new PersistentRangeStore(new FileBackend(absolute, options))) as RangeStoreFactory;\n Object.defineProperty(factory, \"carrier\", { value: \"Node file\" });\n return factory;\n}\n", "import { emptyState, jsonState, type PersistedRangeState } from \"./range-store.js\";\n\nexport type StateEntry = { key: string; value: unknown };\nexport type StateProjection = Record<\"rows\" | \"answers\" | \"outbox\" | \"meta\", StateEntry[]>;\n\n// @ref LLP 1013#3-the-sqlite-carrier \u2014 one projection for both database carriers;\n// the rest carries future metadata fields without a second list to keep in sync.\nexport function projectState(state: PersistedRangeState): StateProjection {\n // State has the JSON wire form on every carrier: omit undefined object fields,\n // preserve null, and turn undefined array slots into null. Bytes travel separately.\n const { rows = {}, answers = {}, outbox = {}, ...meta } = jsonState(state);\n const entries = (value: object) => Object.entries(value).map(([key, value]) => ({ key, value }));\n return { rows: entries(rows), answers: entries(answers), outbox: entries(outbox), meta: [{ key: \"state\", value: meta }] };\n}\n\nexport function unprojectState(projected: StateProjection): PersistedRangeState | undefined {\n const meta = projected.meta.find(({ key }) => key === \"state\");\n if (!meta && !projected.rows.length && !projected.answers.length && !projected.outbox.length) return undefined;\n const record = (entries: StateEntry[]) => Object.fromEntries(entries.map(({ key, value }) => [key, value]));\n return {\n ...emptyState(),\n ...meta?.value as Omit<PersistedRangeState, \"rows\" | \"answers\" | \"outbox\">,\n rows: record(projected.rows) as PersistedRangeState[\"rows\"],\n answers: record(projected.answers) as PersistedRangeState[\"answers\"],\n outbox: record(projected.outbox) as PersistedRangeState[\"outbox\"],\n };\n}\n\n/** Split only the first separator: a row id may itself contain NUL. */\nexport function encodeStateKey(key: string, tuple: boolean): string {\n const at = tuple ? key.indexOf(\"\\u0000\") : -1;\n return JSON.stringify(at < 0 ? [key] : [key.slice(0, at), key.slice(at + 1)]);\n}\n\nexport function decodeStateKey(key: string): string {\n const parts: unknown = JSON.parse(key);\n if (!Array.isArray(parts) || parts.length < 1 || parts.length > 2 || parts.some((part) => typeof part !== \"string\")) {\n throw new Error(\"invalid sqlite state key\");\n }\n return parts.join(\"\\u0000\");\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["rm", "join", "resolve", "record", "field", "refusal", "tagged", "record", "field", "canonical", "record", "field", "a", "b", "expand", "tagged", "record", "record", "held", "object", "position", "clone", "rowKey", "rowKey", "ref", "clone", "present", "chain", "utf8", "normalizeValue", "fail", "values", "tagged", "compareCodepoints", "clone", "compareCodepoints", "object", "variant", "id", "field", "clone", "compareCodepoints", "variant", "canonical", "object", "valuesEqual", "receipt", "compareCodepoints", "clone", "rowKey", "digest", "record", "tagged", "tagged", "tagged", "object", "object", "rowKey", "result", "query", "answer", "record", "plain", "entry", "stopped", "resolve", "canonical", "record", "refusal", "refusal", "record", "resolve", "resolve", "field", "terminal", "decision", "held", "resolve", "refusal", "event", "path", "error", "value", "record", "resolve", "fault", "rm", "fetch", "join"]
7
7
  }