@sequenceholdings/orm 2.8.4 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/authoring.cjs +142 -56
  2. package/dist/authoring.cjs.map +1 -1
  3. package/dist/authoring.d.cts +7 -3
  4. package/dist/authoring.d.ts +7 -3
  5. package/dist/authoring.js +142 -56
  6. package/dist/authoring.js.map +1 -1
  7. package/dist/canonical.cjs +63 -13
  8. package/dist/canonical.cjs.map +1 -1
  9. package/dist/canonical.d.cts +77 -72
  10. package/dist/canonical.d.ts +77 -72
  11. package/dist/canonical.js +63 -13
  12. package/dist/canonical.js.map +1 -1
  13. package/dist/cli.cjs +170 -72
  14. package/dist/cli.cjs.map +1 -1
  15. package/dist/cli.d.cts +23 -1
  16. package/dist/cli.d.ts +23 -1
  17. package/dist/cli.js +167 -73
  18. package/dist/cli.js.map +1 -1
  19. package/dist/client.cjs.map +1 -1
  20. package/dist/client.d.cts +1 -1
  21. package/dist/client.d.ts +1 -1
  22. package/dist/client.js.map +1 -1
  23. package/dist/compiler.cjs +77 -20
  24. package/dist/compiler.cjs.map +1 -1
  25. package/dist/compiler.d.cts +2 -2
  26. package/dist/compiler.d.ts +2 -2
  27. package/dist/compiler.js +77 -20
  28. package/dist/compiler.js.map +1 -1
  29. package/dist/{constants-Dou1RkTo.d.cts → constants-D2o0vK6U.d.cts} +8 -1
  30. package/dist/{constants-Dou1RkTo.d.ts → constants-D2o0vK6U.d.ts} +8 -1
  31. package/dist/dynamic-input.d.cts +1 -1
  32. package/dist/dynamic-input.d.ts +1 -1
  33. package/dist/index.cjs +193 -82
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +62 -59
  36. package/dist/index.d.ts +62 -59
  37. package/dist/index.js +192 -83
  38. package/dist/index.js.map +1 -1
  39. package/dist/ir.cjs +70 -15
  40. package/dist/ir.cjs.map +1 -1
  41. package/dist/ir.d.cts +76 -76
  42. package/dist/ir.d.ts +76 -76
  43. package/dist/ir.js +70 -15
  44. package/dist/ir.js.map +1 -1
  45. package/dist/predicate-v2.cjs +70 -15
  46. package/dist/predicate-v2.cjs.map +1 -1
  47. package/dist/predicate-v2.d.cts +1 -1
  48. package/dist/predicate-v2.d.ts +1 -1
  49. package/dist/predicate-v2.js +70 -15
  50. package/dist/predicate-v2.js.map +1 -1
  51. package/dist/sdl.cjs +70 -15
  52. package/dist/sdl.cjs.map +1 -1
  53. package/dist/sdl.d.cts +1 -1
  54. package/dist/sdl.d.ts +1 -1
  55. package/dist/sdl.js +70 -15
  56. package/dist/sdl.js.map +1 -1
  57. package/package.json +3 -3
  58. package/templates/orm-namespace/package.json +2 -1
  59. package/dist/{definition-DjfC7Lll.d.cts → definition-B99BsOAO.d.cts} +4 -4
  60. package/dist/{definition-DjfC7Lll.d.ts → definition-B99BsOAO.d.ts} +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/client/errors.ts","../src/client/transport.ts","../src/client/query-builder.ts","../src/client/sql.ts","../src/client/operation-selection.ts","../src/client/response.ts","../src/client/operations.ts","../src/client/transport-executor.ts","../src/client/index.ts"],"names":["entry"],"mappings":"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","file":"client.js","sourcesContent":["/** Shared grammar for namespace identifiers; never interpolate arbitrary paths.\n * orm_events and orm_native_sources are migration-owned control-plane schemas,\n * not builder namespaces. Exclude their suffixes at every API/authoring entry.\n */\nexport const NAMESPACE_PATTERN = /^(?!(?:events|native_sources)$)[a-z][a-z0-9_]{0,40}$/\n\n/** Caller-scoped delegated data credential, supplied by an authenticated host. */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/** Separate service-identity credential; never used as an implicit fallback. */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\n/** Native source columns may have one leading underscore; relation names may not. */\nexport const COLUMN_IDENTIFIER_PATTERN = /^_?[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, an org pin's `org/<key>`, or an Application\n * capability pin's `app/<application-id>/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/|app\\/[a-z][a-z0-9-]{0,63}\\/)?[a-z0-9-]{1,64}$/\n\n/** Hard ceiling for an explicitly authored flat persisted GraphQL read. */\nexport const MAX_PERSISTED_READ_ROWS = 50_001\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]{0,62}\\.[a-z][a-z0-9_]{0,62}$/\n\n/** Qualified source syntax only; the serving installation controls authorized backing. */\nexport const SYNCED_SOURCE_PATTERN = QUALIFIED_TABLE_PATTERN\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => {\n if (!NAMESPACE_PATTERN.test(namespace)) throw new Error(`invalid or reserved ORM namespace '${namespace}'`)\n return `${ORM_SCHEMA_PREFIX}${namespace}`\n}\nexport const consumerRoleName = (namespace: string): string =>\n `${ormSchemaName(namespace)}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * A per-file byte cap where the loader reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** Generated SDL aggregates every table/view; it is not an individual source file. */\nexport const MAX_GENERATED_SDL_BYTES = 16 * 1024 * 1024\n\n/** Registration and reviewed exports carry SDL, canonical metadata, snapshots and migrations. */\nexport const ORM_REGISTRATION_MAX_BYTES = 64 * 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n\n/**\n * Per-cell metadata (`cellMetadata: true`, and every resolved-table source) is\n * stored as typed system columns beside each tracked column `c`:\n *\n * - `c__at` timestamptz — when the cell was last written (NULL: never / no opinion)\n * - `c__by` text — who wrote it\n * - `c__rev` uuid — a resolved table's manual source only: the edit's\n * identity, so an async writeback confirmation clears\n * only the exact edit it delivered\n *\n * A resolved view additionally exposes, per resolved column, the winner's\n * `c__src` (source name) and `c__lost` (newer candidates that lost, jsonb).\n * None of these are GraphQL columns: they surface through the typed `cells`\n * object and are never client-writable.\n */\nexport const CELL_PARTS = ['at', 'by', 'rev', 'source', 'conflicts'] as const\nexport type CellPart = (typeof CELL_PARTS)[number]\nexport const CELL_PART_SUFFIX: Readonly<Record<CellPart, string>> = {\n at: '__at', by: '__by', rev: '__rev', source: '__src', conflicts: '__lost',\n}\n/** Longest physical column name that can carry cell parts (63 minus the longest suffix). */\nexport const MAX_TRACKED_COLUMN_NAME = MAX_IDENTIFIER_LENGTH - 6\n/** GraphQL field carrying a row's per-cell metadata object. */\nexport const CELLS_FIELD = 'cells'\n\n/** Physical (and logical) name of one cell part of a column. */\nexport function cellColumnName(column: string, part: CellPart): string {\n return `${column}${CELL_PART_SUFFIX[part]}`\n}\n\n/**\n * Actor recorded when the data plane computes a materialized resolved table's\n * rows for every caller. Its claims are what the compute view's synced\n * sources see (materialized ETL sources must be readable by anyone).\n */\nexport const MATERIALIZE_ACTOR = 'orm:materialize'\nexport const MATERIALIZE_CLAIMS_JSON = JSON.stringify({ sub: MATERIALIZE_ACTOR, org: null, roles: [], capabilities: [] })\n\n/**\n * Apply-generated function that reconciles a materialized resolved table with\n * its compute view: `SELECT * FROM orm_<ns>.\"<table>__refresh\"(wait)` returns\n * `(upserted, deleted, locked)`; without `wait` it skips when another refresh\n * holds the table's lock. The one refresh implementation — the Atlas\n * reconcile, the post-ETL hook, and an operator in psql all call it.\n */\nexport function materializedRefreshFunctionName(table: string): string {\n return `${table}__refresh`\n}\n\n/**\n * Advisory-lock key serializing a materialized table's refreshes (hashed with\n * `hashtext`). A full refresh holds it exclusively and every ORM write's\n * per-row refresh holds it shared, both before reading the compute view — so\n * a full refresh never reads a snapshot older than a write it then overwrites.\n */\nexport function materializeLockKey(schema: string, table: string): string {\n return `orm:materialize:${schema}.${table}`\n}\n","export class OrmClientError extends Error {\n override readonly name: string = 'OrmClientError'\n\n constructor(message: string, readonly status: number | null = null) {\n super(message)\n }\n}\n\nexport interface OperationErrorEntry {\n readonly message: string\n readonly extensions?: { readonly code?: string }\n}\n\nexport class OrmOperationError extends OrmClientError {\n override readonly name = 'OrmOperationError'\n\n constructor(\n message: string,\n status: number | null,\n readonly code: string | null,\n readonly errors: readonly OperationErrorEntry[] = [],\n ) {\n super(message, status)\n }\n}\n","/**\n * Fetch-based transport for the Data API. Deliberately free of node builtins\n * so the client runs anywhere a `fetch` exists — browsers, artifact bridges,\n * Cloud Functions, `node:vm` sandboxes.\n */\nimport { ORM_DATA_TOKEN_HEADER } from '../constants.js'\n\nimport { OrmClientError } from './errors.js'\nexport { OrmClientError } from './errors.js'\n\nexport interface OrmTransport {\n get(path: string, params: URLSearchParams): Promise<unknown>\n post(path: string, body: unknown): Promise<unknown>\n}\n\nexport function createFetchTransport({\n baseUrl,\n getToken,\n getDataToken,\n fetchImpl = globalThis.fetch,\n}: {\n baseUrl: string\n /** App-user / session bearer → `Authorization: Bearer`. */\n getToken?: () => Promise<string | null> | string | null\n /** Delegated, attenuated function token → the `ORM_DATA_TOKEN_HEADER`. */\n getDataToken?: () => Promise<string | null> | string | null\n fetchImpl?: typeof globalThis.fetch\n}): OrmTransport {\n if (!fetchImpl) throw new OrmClientError('no fetch implementation available')\n if ((getToken ? 1 : 0) + (getDataToken ? 1 : 0) !== 1) {\n throw new OrmClientError('provide exactly one of getToken (bearer) or getDataToken (delegated)')\n }\n const root = baseUrl.replace(/\\/+$/, '')\n\n const request = async (path: string, init: Omit<RequestInit, 'headers'>): Promise<unknown> => {\n const token = await (getDataToken ?? getToken)!()\n if (!token) throw new OrmClientError('not authenticated — no token available')\n // The delegated token rides its own header; the app-user bearer rides Authorization.\n const auth: Record<string, string> = getDataToken\n ? { [ORM_DATA_TOKEN_HEADER]: token }\n : { Authorization: `Bearer ${token}` }\n\n const response = await fetchImpl(`${root}${path}`, {\n ...init,\n headers: { ...auth, 'Content-Type': 'application/json' },\n })\n const payload: unknown = await response.json().catch(() => null)\n if (!response.ok) {\n const detail =\n payload && typeof payload === 'object' && 'detail' in payload\n ? String((payload as { detail: unknown }).detail)\n : `HTTP ${response.status}`\n throw new OrmClientError(detail, response.status)\n }\n return payload\n }\n\n return {\n get: (path, params) => {\n // Not params.size — that's Node 19.8+/2023-browser surface, newer than\n // the fetch this module documents as its only requirement.\n const serialized = params.toString()\n return request(serialized === '' ? path : `${path}?${serialized}`, {})\n },\n post: (path, body) => request(path, { method: 'POST', body: JSON.stringify(body ?? {}) }),\n }\n}\n","import { OrmClientError, type OrmTransport } from './transport.js'\n\n/**\n * Fluent read query over one table. Serializes to exactly the PostgREST\n * subset the Data API's query parser accepts — the round-trip contract is\n * asserted server-side (builder output → parseReadQuery) so the two ends\n * can't drift apart silently.\n *\n * IMMUTABLE: every method returns a new query, so narrowing `select()` can\n * never leave an alias holding a stale wider row type, and a base query can\n * be safely forked into variants.\n */\n\nexport type FilterValue = string | number | boolean\n\nexport interface ReadResponse<Row> {\n readonly rows: readonly Row[]\n readonly limit: number\n readonly offset: number\n}\n\n/** Characters the in-list grammar cannot carry — there is no escaping, so the builder hard-fails. */\nconst IN_LIST_UNREPRESENTABLE = /[,()]/\n\ninterface QueryState {\n readonly filters: ReadonlyArray<[column: string, expression: string]>\n readonly orderings: readonly string[]\n readonly selection: readonly string[] | null\n readonly limitValue: number | null\n readonly offsetValue: number | null\n}\n\nconst EMPTY_STATE: QueryState = {\n filters: [],\n orderings: [],\n selection: null,\n limitValue: null,\n offsetValue: null,\n}\n\n/**\n * `Row` is the TABLE's row (filters and order always accept every column);\n * `Result` is what rows() yields — narrowed by select(), re-widenable by a\n * later select() since keys always come from Row.\n */\nexport class TableQuery<Row extends Record<string, unknown>, Result = Row> {\n constructor(\n private readonly transport: OrmTransport,\n private readonly namespace: string,\n private readonly table: string,\n private readonly state: QueryState = EMPTY_STATE,\n ) {}\n\n private with(patch: Partial<QueryState>): TableQuery<Row, Result> {\n return new TableQuery(this.transport, this.namespace, this.table, { ...this.state, ...patch })\n }\n\n select<K extends keyof Row & string>(...columns: [K, ...K[]]): TableQuery<Row, Pick<Row, K>> {\n return new TableQuery<Row, Pick<Row, K>>(this.transport, this.namespace, this.table, {\n ...this.state,\n selection: columns,\n })\n }\n\n eq<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'eq', value)\n }\n\n ne<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'ne', value)\n }\n\n gt<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'gt', value)\n }\n\n gte<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'gte', value)\n }\n\n lt<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'lt', value)\n }\n\n lte<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'lte', value)\n }\n\n like<K extends keyof Row & string>(column: K, pattern: string): TableQuery<Row, Result> {\n return this.filter(column, 'like', pattern)\n }\n\n ilike<K extends keyof Row & string>(column: K, pattern: string): TableQuery<Row, Result> {\n return this.filter(column, 'ilike', pattern)\n }\n\n in<K extends keyof Row & string>(column: K, values: readonly FilterValue[]): TableQuery<Row, Result> {\n // An empty list is representable — `in.()` matches nothing, the same\n // semantics the server executes. Blank entries are legitimate values in\n // multi-entry lists (`in.(a,)` carries ['a','']), but a LONE '' renders\n // as `in.()` and silently becomes the empty list — unrepresentable.\n // Beyond that only characters the grammar can't escape, and whitespace\n // padding the server-side split would silently swallow, are refused.\n const rendered = values.map((value) => {\n const text = String(value)\n if (IN_LIST_UNREPRESENTABLE.test(text) || text !== text.trim()) {\n throw new OrmClientError(`in() value '${text}' cannot be represented — the list grammar has no escaping`)\n }\n return text\n })\n if (rendered.length === 1 && rendered[0] === '') {\n throw new OrmClientError(\"in() with a lone '' cannot be represented — it would read as the empty list\")\n }\n return this.with({ filters: [...this.state.filters, [column, `in.(${rendered.join(',')})`]] })\n }\n\n is<K extends keyof Row & string>(column: K, value: null | boolean): TableQuery<Row, Result> {\n return this.with({\n filters: [...this.state.filters, [column, `is.${value === null ? 'null' : value}`]],\n })\n }\n\n order<K extends keyof Row & string>(column: K, direction: 'asc' | 'desc' = 'asc'): TableQuery<Row, Result> {\n return this.with({ orderings: [...this.state.orderings, `${column}.${direction}`] })\n }\n\n limit(value: number): TableQuery<Row, Result> {\n return this.with({ limitValue: value })\n }\n\n offset(value: number): TableQuery<Row, Result> {\n return this.with({ offsetValue: value })\n }\n\n /** The exact query string sent to the Data API — exposed for debugging and the grammar contract test. */\n searchParams(): URLSearchParams {\n const params = new URLSearchParams()\n for (const [column, expression] of this.state.filters) params.append(column, expression)\n if (this.state.orderings.length > 0) params.set('order', this.state.orderings.join(','))\n if (this.state.selection) params.set('select', this.state.selection.join(','))\n if (this.state.limitValue !== null) params.set('limit', String(this.state.limitValue))\n if (this.state.offsetValue !== null) params.set('offset', String(this.state.offsetValue))\n return params\n }\n\n async rows(): Promise<Result[]> {\n const payload = await this.transport.get(\n `/api/data/${this.namespace}/${this.table}`,\n this.searchParams(),\n )\n if (!payload || typeof payload !== 'object' || !Array.isArray((payload as { rows?: unknown }).rows)) {\n throw new OrmClientError('unexpected Data API response shape — missing rows array')\n }\n return (payload as { rows: Result[] }).rows\n }\n\n private filter(column: string, op: string, value: FilterValue): TableQuery<Row, Result> {\n return this.with({ filters: [...this.state.filters, [column, `${op}.${String(value)}`]] })\n }\n}\n","/** Runtime SQL inputs are values, never interpolated into the submitted SQL. */\n// SHA-256 of \"sequence-orm-builtin-sql-read-v1\". This identifies server-owned\n// behavior, independent of a namespace's authored operation manifest.\nexport const BUILTIN_SQL_READ_NAME = 'BuiltinSqlRead'\nexport const BUILTIN_SQL_READ_HASH = 'sha256:a50c477c952a5e0fe68ed158a4530e4aab573c09bcbb1a8ac454dc88a39a6258'\n\nexport type SqlQueryParameter =\n | { type: 'text' | 'uuid' | 'date' | 'timestamptz' | 'numeric' | 'bigint'; value: string | null }\n | { type: 'integer' | 'double'; value: number | null }\n | { type: 'boolean'; value: boolean | null }\n\nexport type SqlQueryVariables = {\n sql: string\n parameters?: Record<string, SqlQueryParameter>\n}\n\ntype SqlQueryCell = string | number | boolean | null | SqlQueryCell[] | { [key: string]: SqlQueryCell }\n\nexport interface SqlQueryResult {\n columns: Array<{ name: string; type: string; nullable: boolean }>\n rows: Array<Array<SqlQueryCell>>\n truncated: boolean\n}\n","import { OrmClientError } from './errors.js'\nimport type { ManifestOperation, OperationReference } from './operations.js'\nimport { BUILTIN_SQL_READ_HASH, BUILTIN_SQL_READ_NAME } from './sql.js'\n\nconst NAME = /^[_A-Za-z][_0-9A-Za-z]{0,254}$/\nexport type OperationSelection = 'name'\ntype Reference = string | OperationReference<Record<string, unknown>, unknown>\ntype Entry = Pick<ManifestOperation, 'hash' | 'kind'>\ntype OperationMap = ReadonlyMap<string, Entry>\n\nfunction selectorForReference(op: Reference): string {\n if (typeof op === 'string') return op\n if (op.name) return op.name\n if (op.hash?.startsWith('sha256:')) return op.hash\n throw new OrmClientError('unknown operation reference — regenerate the client')\n}\nfunction manifestEntry({ selector, operations }: { selector: string; operations: OperationMap }): readonly [string, Entry] | undefined {\n if (selector.startsWith('sha256:')) return [...operations].find(([, entry]) => entry.hash === selector)\n const entry = operations.get(selector)\n return entry ? [selector, entry] : undefined\n}\nfunction referenceKind(op: Reference): 'query' | 'mutation' | undefined {\n return typeof op === 'string' ? undefined : op.kind\n}\n\nfunction assertKnownName({ name, known, operations, selector }: { name: string; known: boolean; operations: OperationMap; selector: string }): void {\n if (!NAME.test(name) || !known || ['__proto__', 'constructor', 'prototype'].includes(name)) {\n throw new OrmClientError(`unknown operation \"${selector}\" — not in the manifest (${operations.size} known); regenerate the typed operation reference`)\n }\n}\n\nfunction assertReferenceKind({ op, kind }: { op: Reference; kind: Entry['kind'] | undefined }): void {\n const declared = referenceKind(op)\n if (declared && kind !== declared) throw new OrmClientError('operation kind differs from the typed reference')\n}\n\n/** Names select the active registered contract; compiled hashes never select requests. */\nexport function selectOperationTarget({ op, operations, selection = 'name', readReceipt = false }: {\n op: Reference\n operations: OperationMap\n selection?: OperationSelection\n readReceipt?: boolean\n}): { op: string; expectedKind?: 'query' | 'mutation' } {\n if (selection !== 'name') throw new OrmClientError('ORM calls use operation names; hash selection is no longer supported')\n const selector = selectorForReference(op)\n if (selector === BUILTIN_SQL_READ_HASH || selector === BUILTIN_SQL_READ_NAME) {\n return { op: `query:${BUILTIN_SQL_READ_NAME}`, expectedKind: 'query' }\n }\n const match = manifestEntry({ selector, operations })\n const name = match?.[0] ?? selector\n const kind = match?.[1].kind ?? referenceKind(op)\n assertKnownName({ name, known: operations.size === 0 || match !== undefined, operations, selector })\n assertReferenceKind({ op, kind })\n if (readReceipt && kind !== 'query') throw new OrmClientError('read receipts require a registered query or the built-in SQL read')\n const guarded = kind ? `${kind}:${name}` : name\n return { op: guarded, ...(kind ? { expectedKind: kind } : {}) }\n}\n","import { OrmOperationError, type OperationErrorEntry } from './errors.js'\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction isOperationError(value: unknown): value is OperationErrorEntry {\n if (!isRecord(value) || typeof value.message !== 'string') return false\n if (value.extensions === undefined) return true\n return isRecord(value.extensions) && (value.extensions.code === undefined || typeof value.extensions.code === 'string')\n}\n\nexport function readOperationResponse<TData>({\n ok, status, body,\n}: { ok: boolean; status: number; body: unknown }): TData {\n const payload = isRecord(body) ? body : null\n const rawErrors = payload?.errors\n if (rawErrors !== undefined && (!Array.isArray(rawErrors) || !rawErrors.every(isOperationError))) {\n throw new OrmOperationError('malformed response: invalid errors', status, null)\n }\n const errors: OperationErrorEntry[] = rawErrors ?? []\n if (!ok || errors.length > 0) {\n const first = errors[0]\n throw new OrmOperationError(first?.message ?? `HTTP ${status}`, status, first?.extensions?.code ?? null, errors)\n }\n if (!payload || payload.data === undefined || payload.data === null) {\n throw new OrmOperationError('malformed response: missing data', status, null)\n }\n if (!isRecord(payload.data)) {\n throw new OrmOperationError('malformed response: data must be an object', status, null)\n }\n // Generated consumer types describe operation data; envelope validation\n // cannot prove an application's selection-specific TData at runtime.\n return payload.data as TData\n}\n\n/** Only expose data together with a validated, opaque source receipt. */\nexport function readOperationResponseWithReceipt<TData>({\n ok, status, body, expectedSourceGeneration,\n}: { ok: boolean; status: number; body: unknown; expectedSourceGeneration?: string }): { data: TData; sourceGeneration: string } {\n const data = readOperationResponse<TData>({ ok, status, body })\n const extensions = isRecord(body) && isRecord(body.extensions) ? body.extensions : null\n const sourceGeneration = extensions?.sourceGeneration\n if (typeof sourceGeneration !== 'string' || !/^[a-f0-9]{64}$/.test(sourceGeneration)\n || (expectedSourceGeneration !== undefined && expectedSourceGeneration !== sourceGeneration)) {\n // Missing and changed receipts are indistinguishable; do not expose either token.\n throw new OrmOperationError('Source generation unavailable', status, 'OBJECT_UNAVAILABLE')\n }\n return { data, sourceGeneration }\n}\n","/**\n * Persisted-operation client for the v2 data plane. The wire carries only\n * `{ op: <name>, variables, idempotencyKey?, expectedSourceGeneration? }`. Runtime SQL contracts accept SQL in variables;\n * GraphQL and fixed SQL operations keep their documents server-side. This runtime\n * is deliberately free of node builtins and third-\n * party deps (no @apollo/client import): Apollo integration happens through a\n * fetch-compatible shim (`createOrmFetch`) handed to `HttpLink({ fetch })`.\n */\nimport { selectOperationTarget, type OperationSelection } from './operation-selection.js'\nimport { OrmClientError } from './errors.js'\nimport { readOperationResponse, readOperationResponseWithReceipt } from './response.js'\nimport { ORM_DATA_TOKEN_HEADER } from '../constants.js'\nimport { BUILTIN_SQL_READ_HASH, type SqlQueryVariables, type SqlQueryResult } from './sql.js'\n\nexport { OrmOperationError, type OperationErrorEntry } from './errors.js'\n\n/** One entry of `operations.manifest.json` (generated by `orm generate`). */\nexport interface ManifestOperation {\n /** Legacy manifests only; requests use the operation name. */\n readonly hash?: string\n readonly kind: 'query' | 'mutation'\n readonly requires: { readonly capability?: string; readonly role?: string } | null\n}\n\nexport interface OperationsManifest {\n /** Legacy manifest metadata; absent from newly generated clients. */\n readonly schemaHash?: string\n readonly opsHash?: string\n readonly operations: Readonly<Record<string, ManifestOperation>>\n}\n\nexport interface OperationExecutorConfig {\n /** Deployment host root, e.g. `https://atlas.seqholdings.com`. */\n baseUrl: string\n namespace: string\n manifest?: OperationsManifest\n /** Optional compatibility setting; only stable name selection is supported. */\n operationSelection?: OperationSelection\n /** App-user / session bearer → `Authorization: Bearer`. */\n getToken?: () => Promise<string | null> | string | null\n /** Delegated, attenuated function token → the `ORM_DATA_TOKEN_HEADER`. */\n getDataToken?: () => Promise<string | null> | string | null\n fetchImpl?: typeof globalThis.fetch\n}\n\nexport interface OperationExecutionOptions {\n /** Reuse only when retrying the same logical mutation. */\n idempotencyKey?: string\n /** Require the same source publication as an earlier read receipt. */\n expectedSourceGeneration?: string\n}\n\nexport function validateIdempotencyKey(key: string | undefined): void {\n if (key !== undefined && !/^[A-Za-z0-9._:-]{1,128}$/.test(key)) {\n throw new OrmClientError('idempotencyKey must be 1–128 letters, digits, dots, underscores, colons or hyphens')\n }\n}\n\nexport function validateExpectedSourceGeneration(value: string | undefined): void {\n if (value !== undefined && (typeof value !== 'string' || !/^[a-f0-9]{64}$/.test(value))) {\n throw new OrmClientError('expectedSourceGeneration must be a lowercase 64-character hexadecimal receipt')\n }\n}\n\nexport interface OperationExecutor {\n /** Execute a registered operation by its stable name. */\n execute<TData = Record<string, unknown>>(\n op: string,\n variables?: Record<string, unknown>,\n options?: OperationExecutionOptions,\n ): Promise<TData>\n}\n\n/** Additive factory result; existing host wrappers implementing OperationExecutor remain valid. */\nexport interface SqlOperationExecutor extends OperationExecutor {\n /** Default read-only ontology SQL; no authored operation or manifest needed. */\n sql(variables: SqlQueryVariables): Promise<SqlQueryResult>\n}\n\nexport interface TypedOperationExecutor extends OperationExecutor {\n execute<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<TData>\n execute<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<TData>\n}\n\n/** Factory result adds SQL without requiring it on existing typed host wrappers. */\nexport type TypedSqlOperationExecutor = TypedOperationExecutor & SqlOperationExecutor\n\nexport interface OperationReadReceipt<TData> {\n readonly data: TData\n /** Opaque source-publication identity; never an authorization credential. */\n readonly sourceGeneration: string\n}\n\nexport interface ReadReceiptOperationExecutor extends OperationExecutor {\n /** Execute a registered query or built-in SQL read; fail closed without a receipt. */\n executeWithReadReceipt<TData = Record<string, unknown>>(\n op: string,\n variables?: Record<string, unknown>,\n options?: OperationExecutionOptions,\n ): Promise<OperationReadReceipt<TData>>\n}\n\n/** Additive factories preserve existing host wrappers without receipt support. */\nexport type ReadReceiptSqlOperationExecutor = SqlOperationExecutor & ReadReceiptOperationExecutor\n\nexport interface TypedReadReceiptOperationExecutor extends TypedOperationExecutor {\n executeWithReadReceipt<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n executeWithReadReceipt<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n}\n\nexport type TypedReadReceiptSqlOperationExecutor = TypedReadReceiptOperationExecutor & ReadReceiptSqlOperationExecutor\n\nconst dataPlanePath = (namespace: string): string => `/_data/v2/${namespace}`\n\n/** Generated handle identifies the registered contract; optional types are phantom. */\nexport type OperationReference<TVariables extends Record<string, unknown>, TData> = {\n readonly namespace: string\n readonly variables?: TVariables\n readonly result?: TData\n readonly kind?: 'query' | 'mutation'\n} & ({ readonly name: string; readonly hash?: string } | { readonly hash: string; readonly name?: string })\n\nexport function createOperationExecutor({\n baseUrl,\n namespace,\n manifest = { operations: {} },\n operationSelection = 'name',\n getToken,\n getDataToken,\n fetchImpl = globalThis.fetch,\n}: OperationExecutorConfig): TypedReadReceiptSqlOperationExecutor {\n if (!fetchImpl) throw new OrmClientError('no fetch implementation available')\n if ((getToken ? 1 : 0) + (getDataToken ? 1 : 0) !== 1) {\n throw new OrmClientError('provide exactly one of getToken (bearer) or getDataToken (delegated)')\n }\n const root = baseUrl.replace(/\\/+$/, '')\n const operations = new Map(Object.entries(manifest.operations).map(([name, entry]) => [name, { ...entry }]))\n\n async function request({ op, variables, options, requireReadReceipt = false }: {\n op: string | OperationReference<Record<string, unknown>, unknown>\n variables: Record<string, unknown>\n options: OperationExecutionOptions\n requireReadReceipt?: boolean\n }): Promise<{ ok: boolean; status: number; body: unknown }> {\n validateIdempotencyKey(options.idempotencyKey)\n validateExpectedSourceGeneration(options.expectedSourceGeneration)\n if (typeof op !== 'string' && op.namespace !== namespace) throw new OrmClientError('operation belongs to a different namespace')\n const target = selectOperationTarget({ op, operations, selection: operationSelection, readReceipt: requireReadReceipt })\n const token = await (getDataToken ?? getToken)!()\n if (!token) throw new OrmClientError('not authenticated — no token available')\n const auth: Record<string, string> = getDataToken\n ? { [ORM_DATA_TOKEN_HEADER]: token }\n : { Authorization: `Bearer ${token}` }\n\n const response = await fetchImpl(`${root}${dataPlanePath(namespace)}`, {\n method: 'POST',\n headers: { ...auth, 'Content-Type': 'application/json' },\n body: JSON.stringify({ ...target, variables, idempotencyKey: options.idempotencyKey,\n expectedSourceGeneration: options.expectedSourceGeneration }),\n })\n return {\n ok: response.ok,\n status: response.status,\n body: await response.json().catch(() => null),\n }\n }\n\n function execute<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<TData>\n function execute<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<TData>\n async function execute<TData = Record<string, unknown>>(op: string | OperationReference<Record<string, unknown>, TData>, variables: Record<string, unknown> = {}, options: OperationExecutionOptions = {}): Promise<TData> {\n const executionOptions = { ...options }\n const response = await request({ op, variables, options: executionOptions })\n return executionOptions.expectedSourceGeneration === undefined\n ? readOperationResponse<TData>(response)\n : readOperationResponseWithReceipt<TData>({ ...response, expectedSourceGeneration: executionOptions.expectedSourceGeneration }).data\n }\n\n function executeWithReadReceipt<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n function executeWithReadReceipt<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n async function executeWithReadReceipt<TData = Record<string, unknown>>(op: string | OperationReference<Record<string, unknown>, TData>, variables: Record<string, unknown> = {}, options: OperationExecutionOptions = {}): Promise<OperationReadReceipt<TData>> {\n const executionOptions = { ...options }\n const response = await request({ op, variables, options: executionOptions, requireReadReceipt: true })\n return readOperationResponseWithReceipt<TData>({ ...response, expectedSourceGeneration: executionOptions.expectedSourceGeneration })\n }\n return { execute, executeWithReadReceipt, sql: variables => execute<SqlQueryResult>(BUILTIN_SQL_READ_HASH, variables) }\n}\n\n// ---------------------------------------------------------------------------\n// Module-level convenience for generated server functions (`db<Name>`)\n// ---------------------------------------------------------------------------\n\nlet configured: OperationExecutor | null = null\n\n/**\n * Configure the process-wide executor the generated `db<Name>` server\n * functions call through. Call once at startup (server-side); browser apps\n * should prefer Apollo + `createOrmFetch` or an explicit executor.\n */\nexport function configureOrmOperations(config: OperationExecutorConfig): OperationExecutor {\n configured = createOperationExecutor(config)\n return configured\n}\n\n/** Used by generated code: `executeOperation({ op: 'getOpenDeals', variables })`. */\nexport async function executeOperation<TData = Record<string, unknown>>({\n op,\n variables,\n idempotencyKey,\n}: {\n op: string\n variables?: Record<string, unknown>\n idempotencyKey?: string\n}): Promise<TData> {\n if (!configured) {\n throw new OrmClientError(\n 'ORM operations client not configured — call configureOrmOperations({ baseUrl, namespace, manifest, getToken }) at startup',\n )\n }\n return configured.execute<TData>(op, variables, idempotencyKey === undefined ? {} : { idempotencyKey })\n}\n\n// ---------------------------------------------------------------------------\n// Apollo integration without an @apollo/client dependency\n// ---------------------------------------------------------------------------\n\n/**\n * A fetch-compatible function for `new HttpLink({ uri: '/unused', fetch: createOrmFetch(...) })`.\n * Intercepts Apollo's GraphQL POST, swaps the body for the persisted-op\n * envelope (`{ op: <name>, variables }`) resolved via the manifest's\n * operationName, rewrites the URL to the data plane, and attaches auth.\n * The GraphQL-spec response body passes through untouched, so InMemoryCache\n * and error links behave exactly as they do against a GraphQL server.\n */\nexport function createOrmFetch({\n baseUrl,\n namespace,\n manifest,\n getToken,\n getDataToken,\n fetchImpl = globalThis.fetch,\n}: OperationExecutorConfig): typeof globalThis.fetch {\n if (!manifest) throw new OrmClientError('createOrmFetch requires an operations manifest')\n if (!fetchImpl) throw new OrmClientError('no fetch implementation available')\n if ((getToken ? 1 : 0) + (getDataToken ? 1 : 0) !== 1) {\n throw new OrmClientError('provide exactly one of getToken (bearer) or getDataToken (delegated)')\n }\n const root = baseUrl.replace(/\\/+$/, '')\n const url = `${root}${dataPlanePath(namespace)}`\n\n // Derived from `globalThis.fetch` rather than naming `RequestInfo` (a DOM-lib\n // global this module compiles without). The input is ignored — Apollo's\n // HttpLink calls the injected fetch with a string URI, and the real target\n // URL is fixed at `url` above.\n return async (_input: Parameters<typeof globalThis.fetch>[0], init?: RequestInit): Promise<Response> => {\n const raw = typeof init?.body === 'string' ? init.body : null\n const parsed = raw\n ? (JSON.parse(raw) as { operationName?: string; variables?: Record<string, unknown> })\n : {}\n const name = parsed.operationName\n if (!name) {\n throw new OrmClientError(\n 'createOrmFetch requires named operations (Apollo sends operationName for named documents)',\n )\n }\n const target = selectOperationTarget({ op: name, operations: new Map(Object.entries(manifest.operations)) })\n const idempotencyKey = new Headers(init?.headers).get('Idempotency-Key') ?? undefined\n validateIdempotencyKey(idempotencyKey)\n const token = await (getDataToken ?? getToken)!()\n if (!token) throw new OrmClientError('not authenticated — no token available')\n const auth: Record<string, string> = getDataToken\n ? { [ORM_DATA_TOKEN_HEADER]: token }\n : { Authorization: `Bearer ${token}` }\n\n return fetchImpl(url, {\n method: 'POST',\n headers: { ...auth, 'Content-Type': 'application/json' },\n body: JSON.stringify({ ...target, variables: parsed.variables ?? {}, idempotencyKey }),\n ...(init?.signal ? { signal: init.signal } : {}),\n })\n }\n}\n","import { selectOperationTarget, type OperationSelection } from './operation-selection.js'\nexport type { OperationSelection } from './operation-selection.js'\nimport { NAMESPACE_PATTERN } from '../constants.js'\nimport { OrmClientError, OrmOperationError } from './errors.js'\nimport {\n validateIdempotencyKey, validateExpectedSourceGeneration,\n type ManifestOperation,\n type TypedReadReceiptSqlOperationExecutor, type OperationReadReceipt, type OperationReference, type OperationExecutionOptions,\n} from './operations.js'\nimport { isRecord, readOperationResponse, readOperationResponseWithReceipt } from './response.js'\nimport { BUILTIN_SQL_READ_HASH, type SqlQueryResult } from './sql.js'\n\nexport interface OperationTransportRequest {\n namespace: string\n op: string\n variables: Record<string, unknown>\n idempotencyKey?: string\n expectedSourceGeneration?: string\n expectedKind?: 'query' | 'mutation'\n}\n\nexport interface OperationTransportResponse {\n ok: boolean\n status: number\n body: unknown\n}\n\nexport type OperationTransport = (request: OperationTransportRequest) => Promise<OperationTransportResponse>\n\nconst operationHash = /^sha256:[a-f0-9]{64}$/\nfunction readManifestOperations(manifest: unknown): ReadonlyMap<string, Pick<ManifestOperation, 'hash' | 'kind'>> {\n if (!isRecord(manifest) || !isRecord(manifest.operations)) {\n throw new OrmClientError('invalid operations manifest — use operations.manifest.json from seq-studio orm generate')\n }\n const operations = new Map<string, Pick<ManifestOperation, 'hash' | 'kind'>>()\n for (const [name, entry] of Object.entries(manifest.operations)) {\n if (!/^[_A-Za-z][_0-9A-Za-z]*$/.test(name) || !isRecord(entry) || (entry.hash !== undefined && (typeof entry.hash !== 'string' || !operationHash.test(entry.hash)))\n || (entry.kind !== 'query' && entry.kind !== 'mutation')) {\n throw new OrmClientError(`invalid operations manifest entry \"${name}\" — regenerate the manifest`)\n }\n operations.set(name, { ...(typeof entry.hash === 'string' ? { hash: entry.hash } : {}), kind: entry.kind })\n }\n return operations\n}\n\n/**\n * Execute generated operations through a host-owned authenticated transport.\n * No credential handling, retries, or global configuration. The manifest is\n * validated once and copied, so later caller mutation cannot alter the target.\n */\nexport function createOperationExecutorWithTransport({ namespace, manifest, transport, operationSelection = 'name' }: {\n namespace: string\n /** Accept generated JSON imports directly; validate them at construction. Optional under `operationSelection: 'name'`. */\n manifest?: unknown\n transport: OperationTransport\n operationSelection?: OperationSelection\n}): TypedReadReceiptSqlOperationExecutor {\n if (operationSelection !== 'name') throw new OrmClientError('ORM calls use operation names; hash selection is no longer supported')\n if (typeof namespace !== 'string' || !NAMESPACE_PATTERN.test(namespace)) throw new OrmClientError('invalid ORM namespace — expected a lowercase identifier of at most 41 characters')\n const operations = manifest === undefined ? new Map<string, Pick<ManifestOperation, 'hash' | 'kind'>>() : readManifestOperations(manifest)\n async function request({ op, variables, options, requireReadReceipt = false }: {\n op: string | OperationReference<Record<string, unknown>, unknown>\n variables: Record<string, unknown>\n options: OperationExecutionOptions\n requireReadReceipt?: boolean\n }): Promise<OperationTransportResponse> {\n validateIdempotencyKey(options.idempotencyKey)\n validateExpectedSourceGeneration(options.expectedSourceGeneration)\n if (typeof op !== 'string' && op.namespace !== namespace) throw new OrmClientError('operation belongs to a different namespace')\n const target = selectOperationTarget({ op, operations, selection: operationSelection, readReceipt: requireReadReceipt })\n if (!isRecord(variables)) throw new OrmClientError('operation variables must be an object')\n const send = () => transport({ namespace, ...target, variables,\n ...(options.idempotencyKey === undefined ? {} : { idempotencyKey: options.idempotencyKey }),\n ...(options.expectedSourceGeneration === undefined ? {} : { expectedSourceGeneration: options.expectedSourceGeneration }),\n })\n const response = await send()\n if (!response || typeof response.ok !== 'boolean' || !Number.isInteger(response.status) || response.status < 100 || response.status > 599\n || response.ok !== (response.status >= 200 && response.status < 300)) {\n throw new OrmOperationError('malformed transport response', null, null)\n }\n return response\n }\n\n function execute<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<TData>\n function execute<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<TData>\n async function execute<TData = Record<string, unknown>>(op: string | OperationReference<Record<string, unknown>, TData>, variables: Record<string, unknown> = {}, options: OperationExecutionOptions = {}): Promise<TData> {\n const executionOptions = { ...options }\n const response = await request({ op, variables, options: executionOptions })\n return executionOptions.expectedSourceGeneration === undefined\n ? readOperationResponse<TData>(response)\n : readOperationResponseWithReceipt<TData>({ ...response, expectedSourceGeneration: executionOptions.expectedSourceGeneration }).data\n }\n\n function executeWithReadReceipt<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n function executeWithReadReceipt<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n async function executeWithReadReceipt<TData = Record<string, unknown>>(op: string | OperationReference<Record<string, unknown>, TData>, variables: Record<string, unknown> = {}, options: OperationExecutionOptions = {}): Promise<OperationReadReceipt<TData>> {\n const executionOptions = { ...options }\n const response = await request({ op, variables, options: executionOptions, requireReadReceipt: true })\n return readOperationResponseWithReceipt<TData>({ ...response, expectedSourceGeneration: executionOptions.expectedSourceGeneration })\n }\n return { execute, executeWithReadReceipt, sql: variables => execute<SqlQueryResult>(BUILTIN_SQL_READ_HASH, variables) }\n}\n","import { OrmClientError, createFetchTransport, type OrmTransport } from './transport.js'\nimport { TableQuery } from './query-builder.js'\n\n/** Bindable scalar for `query()` placeholders ($1, $2, …). */\nexport type QueryParam = string | number | boolean | null\n\n/** Shape of one action in the generated `<Ns>Actions` map — params in, result out. */\nexport interface OrmActionShape {\n readonly params?: Record<string, unknown>\n readonly result: unknown\n}\n\n/** The generated `<Ns>Actions` map: action name → its param and result shapes. */\nexport type OrmActions = Record<string, OrmActionShape>\n\n/**\n * `action()`'s argument list: `params` is required when the action declares a\n * required field, optional otherwise. The empty-object type is assignable to\n * the params shape only when every field is optional, so that assignability is\n * the discriminant.\n */\ntype ActionArgs<Action extends OrmActionShape> =\n Record<string, never> extends NonNullable<Action['params']>\n ? [params?: NonNullable<Action['params']>]\n : [params: NonNullable<Action['params']>]\n\n/**\n * Typed read client for one namespace's Data API. `Tables` comes from\n * `types.gen.ts` (wire types the apply refreshes from the YAML definitions),\n * so column names and row shapes are checked at compile time; the server\n * re-validates everything and Postgres RLS decides row visibility.\n *\n * ```ts\n * const client = createOrmClient<LendingTables>({ namespace: 'lending', baseUrl, getToken })\n * const rows = await client.table('loans').select('id', 'balance').gte('balance', 1000).rows()\n * const top = await client.query<{ officer: string; total: string }>(\n * 'select officer, sum(balance) as total from loans group by officer order by total desc limit $1',\n * [5],\n * )\n * ```\n */\nexport interface OrmClient<\n Tables extends Record<string, Record<string, unknown>>,\n Actions extends OrmActions = OrmActions,\n> {\n table<Name extends keyof Tables & string>(name: Name): TableQuery<Tables[Name]>\n /**\n * Raw read-only SQL for everything the filter grammar can't say —\n * aggregates, joins, OR, expressions, CTEs. The same sandbox as every\n * read: the namespace consumer role (grants stop at the namespace schema),\n * Postgres RLS over the caller's claims, and a READ ONLY transaction —\n * Postgres itself rejects writes, which stay on declared actions. Values\n * bind as $1, $2, … placeholders; never interpolate them into the string.\n */\n query<Row = Record<string, unknown>>(sql: string, params?: readonly QueryParam[]): Promise<Row[]>\n /**\n * Invoke a declared action — the only write path the Data API exposes. The\n * params and result are typed from the namespace's `<Ns>Actions`: an action\n * with `returns:` resolves to `{ rows: Row[] }`, a count action to\n * `{ rowsAffected: number }`.\n */\n action<Name extends keyof Actions & string>(\n name: Name,\n ...args: ActionArgs<Actions[Name]>\n ): Promise<Actions[Name]['result']>\n}\n\nexport function createOrmClient<\n Tables extends Record<string, Record<string, unknown>>,\n Actions extends OrmActions = OrmActions,\n>({\n namespace,\n baseUrl,\n getToken,\n fetchImpl,\n transport,\n dataToken,\n}: {\n namespace: string\n baseUrl?: string\n /** App-user / session bearer (CLI, browser). Mutually exclusive with dataToken. */\n getToken?: () => Promise<string | null> | string | null\n /**\n * Delegated function data token — the inbound `ORM_DATA_TOKEN_HEADER` value a\n * managed function receives. Pass it and the client authenticates as the\n * invoking user, scoped to the function's declared refs; no manual transport.\n */\n dataToken?: string | (() => Promise<string | null> | string | null)\n fetchImpl?: typeof globalThis.fetch\n /** Injected transport (tests, bridges); overrides baseUrl/getToken/dataToken. */\n transport?: OrmTransport\n}): OrmClient<Tables, Actions> {\n const resolved =\n transport ??\n createFetchTransport({\n baseUrl: requireOption(baseUrl, 'baseUrl'),\n ...(dataToken !== undefined\n ? { getDataToken: typeof dataToken === 'function' ? dataToken : () => dataToken }\n : { getToken: requireOption(getToken, 'getToken') }),\n fetchImpl,\n })\n\n return buildOrmClient<Tables, Actions>(resolved, namespace)\n}\n\n/**\n * The ESCALATION path — use only deliberately. A managed function receives a\n * separate *service* data token on `ORM_SERVICE_DATA_TOKEN_HEADER`; pass that\n * value here and the client authenticates as the function's SERVICE IDENTITY,\n * not the invoking user. Reads run with the service identity's grants (clamped\n * to the function's declared refs), NOT the caller's — so the caller's own row\n * visibility does not apply. The invoking user is still recorded for audit.\n *\n * Default to `createOrmClient` (acts as the invoking user, full per-user RLS).\n * Reach for this only when the function must intentionally act beyond the\n * caller — e.g. enforcing per-user rules in code over a coarse upstream that\n * has no granular permissions of its own. The distinct name is the guardrail:\n * choosing the service identity is always explicit and greppable.\n *\n * ```ts\n * const client = createServiceOrmClient<LendingTables>({\n * namespace: 'lending',\n * baseUrl,\n * serviceDataToken: req.headers['x-sequence-data-token-service'],\n * })\n * ```\n */\nexport function createServiceOrmClient<\n Tables extends Record<string, Record<string, unknown>>,\n Actions extends OrmActions = OrmActions,\n>({\n namespace,\n baseUrl,\n serviceDataToken,\n fetchImpl,\n transport,\n}: {\n namespace: string\n baseUrl?: string\n /** The inbound `ORM_SERVICE_DATA_TOKEN_HEADER` value — the function's service token. */\n serviceDataToken?: string | (() => Promise<string | null> | string | null)\n fetchImpl?: typeof globalThis.fetch\n /** Injected transport (tests, bridges); overrides baseUrl/serviceDataToken. */\n transport?: OrmTransport\n}): OrmClient<Tables, Actions> {\n const resolved =\n transport ??\n createFetchTransport({\n baseUrl: requireOption(baseUrl, 'baseUrl'),\n getDataToken:\n typeof serviceDataToken === 'function'\n ? serviceDataToken\n : () => requireOption(serviceDataToken, 'serviceDataToken'),\n fetchImpl,\n })\n\n return buildOrmClient<Tables, Actions>(resolved, namespace)\n}\n\n/** Shared client surface over a resolved transport — the token/identity choice is made by the factory above. */\nfunction buildOrmClient<\n Tables extends Record<string, Record<string, unknown>>,\n Actions extends OrmActions = OrmActions,\n>(resolved: OrmTransport, namespace: string): OrmClient<Tables, Actions> {\n return {\n table(name) {\n return new TableQuery(resolved, namespace, name)\n },\n async query(sql, params) {\n const payload = await resolved.post(`/api/data/${namespace}/query`, {\n sql,\n ...(params ? { params: [...params] } : {}),\n })\n if (!payload || typeof payload !== 'object' || !Array.isArray((payload as { rows?: unknown }).rows)) {\n throw new OrmClientError('unexpected Data API response shape — missing rows array')\n }\n return (payload as { rows: never[] }).rows\n },\n async action(name, ...args) {\n const payload = await resolved.post(`/api/data/${namespace}/actions/${name}`, args[0] ?? {})\n if (payload && typeof payload === 'object') {\n // A returns action responds with `rows`; a count action with\n // `rows_affected` (mapped to `rowsAffected` for the client).\n if (Array.isArray((payload as { rows?: unknown }).rows)) {\n return { rows: (payload as { rows: unknown[] }).rows } as Awaited<ReturnType<OrmClient<Tables, Actions>['action']>>\n }\n if ('rows_affected' in payload) {\n const rowsAffected = Number((payload as { rows_affected: unknown }).rows_affected)\n if (!Number.isNaN(rowsAffected)) {\n return { rowsAffected } as Awaited<ReturnType<OrmClient<Tables, Actions>['action']>>\n }\n }\n }\n throw new OrmClientError('unexpected action response shape — expected rows or rows_affected')\n },\n }\n}\n\nfunction requireOption<T>(value: T | undefined, name: string): T {\n if (value === undefined) throw new Error(`createOrmClient requires ${name} when no transport is injected`)\n return value\n}\n\nexport { TableQuery, type FilterValue, type ReadResponse } from './query-builder.js'\nexport { createFetchTransport, OrmClientError, type OrmTransport } from './transport.js'\n\nexport {\n OrmOperationError,\n configureOrmOperations,\n createOperationExecutor,\n createOrmFetch,\n executeOperation,\n} from './operations.js'\nexport type {\n ManifestOperation,\n OperationErrorEntry,\n OperationExecutor,\n SqlOperationExecutor,\n OperationReference,\n TypedOperationExecutor,\n TypedSqlOperationExecutor,\n ReadReceiptOperationExecutor,\n ReadReceiptSqlOperationExecutor,\n TypedReadReceiptOperationExecutor,\n TypedReadReceiptSqlOperationExecutor,\n OperationReadReceipt,\n OperationExecutionOptions,\n OperationExecutorConfig,\n OperationsManifest,\n} from './operations.js'\n\nexport { NAMESPACE_PATTERN, ORM_DATA_TOKEN_HEADER, ORM_SERVICE_DATA_TOKEN_HEADER } from '../constants.js'\nexport type { SqlQueryParameter, SqlQueryVariables, SqlQueryResult } from './sql.js'\nexport { BUILTIN_SQL_READ_HASH, BUILTIN_SQL_READ_NAME } from './sql.js'\nexport {\n createOperationExecutorWithTransport,\n type OperationSelection, type OperationTransport, type OperationTransportRequest, type OperationTransportResponse,\n} from './transport-executor.js'\n"]}
1
+ {"version":3,"sources":["../src/constants.ts","../src/client/errors.ts","../src/client/transport.ts","../src/client/query-builder.ts","../src/client/sql.ts","../src/client/operation-selection.ts","../src/client/response.ts","../src/client/operations.ts","../src/client/transport-executor.ts","../src/client/index.ts"],"names":["entry"],"mappings":"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","file":"client.js","sourcesContent":["/** Shared grammar for namespace identifiers; never interpolate arbitrary paths.\n * orm_events and orm_native_sources are migration-owned control-plane schemas,\n * not builder namespaces. Exclude their suffixes at every API/authoring entry.\n */\nexport const NAMESPACE_PATTERN = /^(?!(?:events|native_sources)$)[a-z][a-z0-9_]{0,40}$/\n\n/** Caller-scoped delegated data credential, supplied by an authenticated host. */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/** Separate service-identity credential; never used as an implicit fallback. */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\n/** Native source columns may have one leading underscore; relation names may not. */\nexport const COLUMN_IDENTIFIER_PATTERN = /^_?[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, an org pin's `org/<key>`, or an Application\n * capability pin's `app/<application-id>/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/|app\\/[a-z][a-z0-9-]{0,63}\\/)?[a-z0-9-]{1,64}$/\n\n/** Hard ceiling for an explicitly authored flat persisted GraphQL read. */\nexport const MAX_PERSISTED_READ_ROWS = 50_001\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]{0,62}\\.[a-z][a-z0-9_]{0,62}$/\n\n/** Qualified source syntax only; the serving installation controls authorized backing. */\nexport const SYNCED_SOURCE_PATTERN = QUALIFIED_TABLE_PATTERN\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => {\n if (!NAMESPACE_PATTERN.test(namespace)) throw new Error(`invalid or reserved ORM namespace '${namespace}'`)\n return `${ORM_SCHEMA_PREFIX}${namespace}`\n}\nexport const consumerRoleName = (namespace: string): string =>\n `${ormSchemaName(namespace)}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * A per-file byte cap where the loader reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** Generated SDL aggregates every table/view; it is not an individual source file. */\nexport const MAX_GENERATED_SDL_BYTES = 16 * 1024 * 1024\n\n/** Registration and reviewed exports carry SDL, canonical metadata, snapshots and migrations. */\nexport const ORM_REGISTRATION_MAX_BYTES = 64 * 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n\n/**\n * Per-cell metadata (`cellMetadata: true`, and every resolved-table source) is\n * stored as typed system columns beside each tracked column `c`:\n *\n * - `c__at` timestamptz — when the cell was last written (NULL: never / no opinion)\n * - `c__by` text — who wrote it\n * - `c__rev` uuid — a resolved table's manual source only: the edit's\n * identity, so an async writeback confirmation clears\n * only the exact edit it delivered\n *\n * A resolved view additionally exposes, per resolved column, the winner's\n * `c__src` (source name) and `c__lost` (newer candidates that lost, jsonb).\n * None of these are GraphQL columns: they surface through the typed `cells`\n * object and are never client-writable.\n */\nexport const CELL_PARTS = ['at', 'by', 'rev', 'source', 'conflicts'] as const\nexport type CellPart = (typeof CELL_PARTS)[number]\nexport const CELL_PART_SUFFIX: Readonly<Record<CellPart, string>> = {\n at: '__at', by: '__by', rev: '__rev', source: '__src', conflicts: '__lost',\n}\n/** Longest physical column name that can carry cell parts (63 minus the longest suffix). */\nexport const MAX_TRACKED_COLUMN_NAME = MAX_IDENTIFIER_LENGTH - 6\n/** GraphQL field carrying a row's per-cell metadata object. */\nexport const CELLS_FIELD = 'cells'\n\n/** Physical (and logical) name of one cell part of a column. */\nexport function cellColumnName(column: string, part: CellPart): string {\n return `${column}${CELL_PART_SUFFIX[part]}`\n}\n\n/**\n * Actor recorded when the data plane computes a materialized resolved table's\n * rows for every caller. Its claims are what the compute view's synced\n * sources see (materialized ETL sources must be readable by anyone).\n */\nexport const MATERIALIZE_ACTOR = 'orm:materialize'\nexport const MATERIALIZE_CLAIMS_JSON = JSON.stringify({ sub: MATERIALIZE_ACTOR, org: null, roles: [], capabilities: [] })\n\n/**\n * Apply-generated function that reconciles a materialized resolved table with\n * its compute view: `SELECT * FROM orm_<ns>.\"<table>__refresh\"(wait)` returns\n * `(upserted, deleted, locked)`; without `wait` it skips when another refresh\n * holds the table's lock. The one refresh implementation — the Atlas\n * reconcile, the post-ETL hook, and an operator in psql all call it.\n */\nexport function materializedRefreshFunctionName(table: string): string {\n return `${table}__refresh`\n}\n\n/**\n * Advisory-lock key serializing a materialized table's refreshes (hashed with\n * `hashtext`). A full refresh holds it exclusively and every ORM write's\n * per-row refresh holds it shared, both before reading the compute view — so\n * a full refresh never reads a snapshot older than a write it then overwrites.\n */\nexport function materializeLockKey(schema: string, table: string): string {\n return `orm:materialize:${schema}.${table}`\n}\n\n/**\n * Committed copy of the exact operation documents a package registers —\n * GraphQL text and SQL operations already materialized as inert JSON. Atlas\n * recompiles it to check that a registered operation set is what a commit holds.\n */\nexport const OPERATION_DOCUMENTS_FILE = 'operations.documents.json'\nexport const OPERATION_DOCUMENTS_VERSION = 1 as const\n","export class OrmClientError extends Error {\n override readonly name: string = 'OrmClientError'\n\n constructor(message: string, readonly status: number | null = null) {\n super(message)\n }\n}\n\nexport interface OperationErrorEntry {\n readonly message: string\n readonly extensions?: { readonly code?: string }\n}\n\nexport class OrmOperationError extends OrmClientError {\n override readonly name = 'OrmOperationError'\n\n constructor(\n message: string,\n status: number | null,\n readonly code: string | null,\n readonly errors: readonly OperationErrorEntry[] = [],\n ) {\n super(message, status)\n }\n}\n","/**\n * Fetch-based transport for the Data API. Deliberately free of node builtins\n * so the client runs anywhere a `fetch` exists — browsers, artifact bridges,\n * Cloud Functions, `node:vm` sandboxes.\n */\nimport { ORM_DATA_TOKEN_HEADER } from '../constants.js'\n\nimport { OrmClientError } from './errors.js'\nexport { OrmClientError } from './errors.js'\n\nexport interface OrmTransport {\n get(path: string, params: URLSearchParams): Promise<unknown>\n post(path: string, body: unknown): Promise<unknown>\n}\n\nexport function createFetchTransport({\n baseUrl,\n getToken,\n getDataToken,\n fetchImpl = globalThis.fetch,\n}: {\n baseUrl: string\n /** App-user / session bearer → `Authorization: Bearer`. */\n getToken?: () => Promise<string | null> | string | null\n /** Delegated, attenuated function token → the `ORM_DATA_TOKEN_HEADER`. */\n getDataToken?: () => Promise<string | null> | string | null\n fetchImpl?: typeof globalThis.fetch\n}): OrmTransport {\n if (!fetchImpl) throw new OrmClientError('no fetch implementation available')\n if ((getToken ? 1 : 0) + (getDataToken ? 1 : 0) !== 1) {\n throw new OrmClientError('provide exactly one of getToken (bearer) or getDataToken (delegated)')\n }\n const root = baseUrl.replace(/\\/+$/, '')\n\n const request = async (path: string, init: Omit<RequestInit, 'headers'>): Promise<unknown> => {\n const token = await (getDataToken ?? getToken)!()\n if (!token) throw new OrmClientError('not authenticated — no token available')\n // The delegated token rides its own header; the app-user bearer rides Authorization.\n const auth: Record<string, string> = getDataToken\n ? { [ORM_DATA_TOKEN_HEADER]: token }\n : { Authorization: `Bearer ${token}` }\n\n const response = await fetchImpl(`${root}${path}`, {\n ...init,\n headers: { ...auth, 'Content-Type': 'application/json' },\n })\n const payload: unknown = await response.json().catch(() => null)\n if (!response.ok) {\n const detail =\n payload && typeof payload === 'object' && 'detail' in payload\n ? String((payload as { detail: unknown }).detail)\n : `HTTP ${response.status}`\n throw new OrmClientError(detail, response.status)\n }\n return payload\n }\n\n return {\n get: (path, params) => {\n // Not params.size — that's Node 19.8+/2023-browser surface, newer than\n // the fetch this module documents as its only requirement.\n const serialized = params.toString()\n return request(serialized === '' ? path : `${path}?${serialized}`, {})\n },\n post: (path, body) => request(path, { method: 'POST', body: JSON.stringify(body ?? {}) }),\n }\n}\n","import { OrmClientError, type OrmTransport } from './transport.js'\n\n/**\n * Fluent read query over one table. Serializes to exactly the PostgREST\n * subset the Data API's query parser accepts — the round-trip contract is\n * asserted server-side (builder output → parseReadQuery) so the two ends\n * can't drift apart silently.\n *\n * IMMUTABLE: every method returns a new query, so narrowing `select()` can\n * never leave an alias holding a stale wider row type, and a base query can\n * be safely forked into variants.\n */\n\nexport type FilterValue = string | number | boolean\n\nexport interface ReadResponse<Row> {\n readonly rows: readonly Row[]\n readonly limit: number\n readonly offset: number\n}\n\n/** Characters the in-list grammar cannot carry — there is no escaping, so the builder hard-fails. */\nconst IN_LIST_UNREPRESENTABLE = /[,()]/\n\ninterface QueryState {\n readonly filters: ReadonlyArray<[column: string, expression: string]>\n readonly orderings: readonly string[]\n readonly selection: readonly string[] | null\n readonly limitValue: number | null\n readonly offsetValue: number | null\n}\n\nconst EMPTY_STATE: QueryState = {\n filters: [],\n orderings: [],\n selection: null,\n limitValue: null,\n offsetValue: null,\n}\n\n/**\n * `Row` is the TABLE's row (filters and order always accept every column);\n * `Result` is what rows() yields — narrowed by select(), re-widenable by a\n * later select() since keys always come from Row.\n */\nexport class TableQuery<Row extends Record<string, unknown>, Result = Row> {\n constructor(\n private readonly transport: OrmTransport,\n private readonly namespace: string,\n private readonly table: string,\n private readonly state: QueryState = EMPTY_STATE,\n ) {}\n\n private with(patch: Partial<QueryState>): TableQuery<Row, Result> {\n return new TableQuery(this.transport, this.namespace, this.table, { ...this.state, ...patch })\n }\n\n select<K extends keyof Row & string>(...columns: [K, ...K[]]): TableQuery<Row, Pick<Row, K>> {\n return new TableQuery<Row, Pick<Row, K>>(this.transport, this.namespace, this.table, {\n ...this.state,\n selection: columns,\n })\n }\n\n eq<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'eq', value)\n }\n\n ne<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'ne', value)\n }\n\n gt<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'gt', value)\n }\n\n gte<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'gte', value)\n }\n\n lt<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'lt', value)\n }\n\n lte<K extends keyof Row & string>(column: K, value: FilterValue): TableQuery<Row, Result> {\n return this.filter(column, 'lte', value)\n }\n\n like<K extends keyof Row & string>(column: K, pattern: string): TableQuery<Row, Result> {\n return this.filter(column, 'like', pattern)\n }\n\n ilike<K extends keyof Row & string>(column: K, pattern: string): TableQuery<Row, Result> {\n return this.filter(column, 'ilike', pattern)\n }\n\n in<K extends keyof Row & string>(column: K, values: readonly FilterValue[]): TableQuery<Row, Result> {\n // An empty list is representable — `in.()` matches nothing, the same\n // semantics the server executes. Blank entries are legitimate values in\n // multi-entry lists (`in.(a,)` carries ['a','']), but a LONE '' renders\n // as `in.()` and silently becomes the empty list — unrepresentable.\n // Beyond that only characters the grammar can't escape, and whitespace\n // padding the server-side split would silently swallow, are refused.\n const rendered = values.map((value) => {\n const text = String(value)\n if (IN_LIST_UNREPRESENTABLE.test(text) || text !== text.trim()) {\n throw new OrmClientError(`in() value '${text}' cannot be represented — the list grammar has no escaping`)\n }\n return text\n })\n if (rendered.length === 1 && rendered[0] === '') {\n throw new OrmClientError(\"in() with a lone '' cannot be represented — it would read as the empty list\")\n }\n return this.with({ filters: [...this.state.filters, [column, `in.(${rendered.join(',')})`]] })\n }\n\n is<K extends keyof Row & string>(column: K, value: null | boolean): TableQuery<Row, Result> {\n return this.with({\n filters: [...this.state.filters, [column, `is.${value === null ? 'null' : value}`]],\n })\n }\n\n order<K extends keyof Row & string>(column: K, direction: 'asc' | 'desc' = 'asc'): TableQuery<Row, Result> {\n return this.with({ orderings: [...this.state.orderings, `${column}.${direction}`] })\n }\n\n limit(value: number): TableQuery<Row, Result> {\n return this.with({ limitValue: value })\n }\n\n offset(value: number): TableQuery<Row, Result> {\n return this.with({ offsetValue: value })\n }\n\n /** The exact query string sent to the Data API — exposed for debugging and the grammar contract test. */\n searchParams(): URLSearchParams {\n const params = new URLSearchParams()\n for (const [column, expression] of this.state.filters) params.append(column, expression)\n if (this.state.orderings.length > 0) params.set('order', this.state.orderings.join(','))\n if (this.state.selection) params.set('select', this.state.selection.join(','))\n if (this.state.limitValue !== null) params.set('limit', String(this.state.limitValue))\n if (this.state.offsetValue !== null) params.set('offset', String(this.state.offsetValue))\n return params\n }\n\n async rows(): Promise<Result[]> {\n const payload = await this.transport.get(\n `/api/data/${this.namespace}/${this.table}`,\n this.searchParams(),\n )\n if (!payload || typeof payload !== 'object' || !Array.isArray((payload as { rows?: unknown }).rows)) {\n throw new OrmClientError('unexpected Data API response shape — missing rows array')\n }\n return (payload as { rows: Result[] }).rows\n }\n\n private filter(column: string, op: string, value: FilterValue): TableQuery<Row, Result> {\n return this.with({ filters: [...this.state.filters, [column, `${op}.${String(value)}`]] })\n }\n}\n","/** Runtime SQL inputs are values, never interpolated into the submitted SQL. */\n// SHA-256 of \"sequence-orm-builtin-sql-read-v1\". This identifies server-owned\n// behavior, independent of a namespace's authored operation manifest.\nexport const BUILTIN_SQL_READ_NAME = 'BuiltinSqlRead'\nexport const BUILTIN_SQL_READ_HASH = 'sha256:a50c477c952a5e0fe68ed158a4530e4aab573c09bcbb1a8ac454dc88a39a6258'\n\nexport type SqlQueryParameter =\n | { type: 'text' | 'uuid' | 'date' | 'timestamptz' | 'numeric' | 'bigint'; value: string | null }\n | { type: 'integer' | 'double'; value: number | null }\n | { type: 'boolean'; value: boolean | null }\n\nexport type SqlQueryVariables = {\n sql: string\n parameters?: Record<string, SqlQueryParameter>\n}\n\ntype SqlQueryCell = string | number | boolean | null | SqlQueryCell[] | { [key: string]: SqlQueryCell }\n\nexport interface SqlQueryResult {\n columns: Array<{ name: string; type: string; nullable: boolean }>\n rows: Array<Array<SqlQueryCell>>\n truncated: boolean\n}\n","import { OrmClientError } from './errors.js'\nimport type { ManifestOperation, OperationReference } from './operations.js'\nimport { BUILTIN_SQL_READ_HASH, BUILTIN_SQL_READ_NAME } from './sql.js'\n\nconst NAME = /^[_A-Za-z][_0-9A-Za-z]{0,254}$/\nexport type OperationSelection = 'name'\ntype Reference = string | OperationReference<Record<string, unknown>, unknown>\ntype Entry = Pick<ManifestOperation, 'hash' | 'kind'>\ntype OperationMap = ReadonlyMap<string, Entry>\n\nfunction selectorForReference(op: Reference): string {\n if (typeof op === 'string') return op\n if (op.name) return op.name\n if (op.hash?.startsWith('sha256:')) return op.hash\n throw new OrmClientError('unknown operation reference — regenerate the client')\n}\nfunction manifestEntry({ selector, operations }: { selector: string; operations: OperationMap }): readonly [string, Entry] | undefined {\n if (selector.startsWith('sha256:')) return [...operations].find(([, entry]) => entry.hash === selector)\n const entry = operations.get(selector)\n return entry ? [selector, entry] : undefined\n}\nfunction referenceKind(op: Reference): 'query' | 'mutation' | undefined {\n return typeof op === 'string' ? undefined : op.kind\n}\n\nfunction assertKnownName({ name, known, operations, selector }: { name: string; known: boolean; operations: OperationMap; selector: string }): void {\n if (!NAME.test(name) || !known || ['__proto__', 'constructor', 'prototype'].includes(name)) {\n throw new OrmClientError(`unknown operation \"${selector}\" — not in the manifest (${operations.size} known); regenerate the typed operation reference`)\n }\n}\n\nfunction assertReferenceKind({ op, kind }: { op: Reference; kind: Entry['kind'] | undefined }): void {\n const declared = referenceKind(op)\n if (declared && kind !== declared) throw new OrmClientError('operation kind differs from the typed reference')\n}\n\n/** Names select the active registered contract; compiled hashes never select requests. */\nexport function selectOperationTarget({ op, operations, selection = 'name', readReceipt = false }: {\n op: Reference\n operations: OperationMap\n selection?: OperationSelection\n readReceipt?: boolean\n}): { op: string; expectedKind?: 'query' | 'mutation' } {\n if (selection !== 'name') throw new OrmClientError('ORM calls use operation names; hash selection is no longer supported')\n const selector = selectorForReference(op)\n if (selector === BUILTIN_SQL_READ_HASH || selector === BUILTIN_SQL_READ_NAME) {\n return { op: `query:${BUILTIN_SQL_READ_NAME}`, expectedKind: 'query' }\n }\n const match = manifestEntry({ selector, operations })\n const name = match?.[0] ?? selector\n const kind = match?.[1].kind ?? referenceKind(op)\n assertKnownName({ name, known: operations.size === 0 || match !== undefined, operations, selector })\n assertReferenceKind({ op, kind })\n if (readReceipt && kind !== 'query') throw new OrmClientError('read receipts require a registered query or the built-in SQL read')\n const guarded = kind ? `${kind}:${name}` : name\n return { op: guarded, ...(kind ? { expectedKind: kind } : {}) }\n}\n","import { OrmOperationError, type OperationErrorEntry } from './errors.js'\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction isOperationError(value: unknown): value is OperationErrorEntry {\n if (!isRecord(value) || typeof value.message !== 'string') return false\n if (value.extensions === undefined) return true\n return isRecord(value.extensions) && (value.extensions.code === undefined || typeof value.extensions.code === 'string')\n}\n\nexport function readOperationResponse<TData>({\n ok, status, body,\n}: { ok: boolean; status: number; body: unknown }): TData {\n const payload = isRecord(body) ? body : null\n const rawErrors = payload?.errors\n if (rawErrors !== undefined && (!Array.isArray(rawErrors) || !rawErrors.every(isOperationError))) {\n throw new OrmOperationError('malformed response: invalid errors', status, null)\n }\n const errors: OperationErrorEntry[] = rawErrors ?? []\n if (!ok || errors.length > 0) {\n const first = errors[0]\n throw new OrmOperationError(first?.message ?? `HTTP ${status}`, status, first?.extensions?.code ?? null, errors)\n }\n if (!payload || payload.data === undefined || payload.data === null) {\n throw new OrmOperationError('malformed response: missing data', status, null)\n }\n if (!isRecord(payload.data)) {\n throw new OrmOperationError('malformed response: data must be an object', status, null)\n }\n // Generated consumer types describe operation data; envelope validation\n // cannot prove an application's selection-specific TData at runtime.\n return payload.data as TData\n}\n\n/** Only expose data together with a validated, opaque source receipt. */\nexport function readOperationResponseWithReceipt<TData>({\n ok, status, body, expectedSourceGeneration,\n}: { ok: boolean; status: number; body: unknown; expectedSourceGeneration?: string }): { data: TData; sourceGeneration: string } {\n const data = readOperationResponse<TData>({ ok, status, body })\n const extensions = isRecord(body) && isRecord(body.extensions) ? body.extensions : null\n const sourceGeneration = extensions?.sourceGeneration\n if (typeof sourceGeneration !== 'string' || !/^[a-f0-9]{64}$/.test(sourceGeneration)\n || (expectedSourceGeneration !== undefined && expectedSourceGeneration !== sourceGeneration)) {\n // Missing and changed receipts are indistinguishable; do not expose either token.\n throw new OrmOperationError('Source generation unavailable', status, 'OBJECT_UNAVAILABLE')\n }\n return { data, sourceGeneration }\n}\n","/**\n * Persisted-operation client for the v2 data plane. The wire carries only\n * `{ op: <name>, variables, idempotencyKey?, expectedSourceGeneration? }`. Runtime SQL contracts accept SQL in variables;\n * GraphQL and fixed SQL operations keep their documents server-side. This runtime\n * is deliberately free of node builtins and third-\n * party deps (no @apollo/client import): Apollo integration happens through a\n * fetch-compatible shim (`createOrmFetch`) handed to `HttpLink({ fetch })`.\n */\nimport { selectOperationTarget, type OperationSelection } from './operation-selection.js'\nimport { OrmClientError } from './errors.js'\nimport { readOperationResponse, readOperationResponseWithReceipt } from './response.js'\nimport { ORM_DATA_TOKEN_HEADER } from '../constants.js'\nimport { BUILTIN_SQL_READ_HASH, type SqlQueryVariables, type SqlQueryResult } from './sql.js'\n\nexport { OrmOperationError, type OperationErrorEntry } from './errors.js'\n\n/** One entry of `operations.manifest.json` (generated by `orm generate`). */\nexport interface ManifestOperation {\n /** Legacy manifests only; requests use the operation name. */\n readonly hash?: string\n readonly kind: 'query' | 'mutation'\n readonly requires: { readonly capability?: string; readonly role?: string } | null\n}\n\nexport interface OperationsManifest {\n /** Legacy manifest metadata; absent from newly generated clients. */\n readonly schemaHash?: string\n readonly opsHash?: string\n readonly operations: Readonly<Record<string, ManifestOperation>>\n}\n\nexport interface OperationExecutorConfig {\n /** Deployment host root, e.g. `https://atlas.seqholdings.com`. */\n baseUrl: string\n namespace: string\n manifest?: OperationsManifest\n /** Optional compatibility setting; only stable name selection is supported. */\n operationSelection?: OperationSelection\n /** App-user / session bearer → `Authorization: Bearer`. */\n getToken?: () => Promise<string | null> | string | null\n /** Delegated, attenuated function token → the `ORM_DATA_TOKEN_HEADER`. */\n getDataToken?: () => Promise<string | null> | string | null\n fetchImpl?: typeof globalThis.fetch\n}\n\nexport interface OperationExecutionOptions {\n /** Reuse only when retrying the same logical mutation. */\n idempotencyKey?: string\n /** Require the same source publication as an earlier read receipt. */\n expectedSourceGeneration?: string\n}\n\nexport function validateIdempotencyKey(key: string | undefined): void {\n if (key !== undefined && !/^[A-Za-z0-9._:-]{1,128}$/.test(key)) {\n throw new OrmClientError('idempotencyKey must be 1–128 letters, digits, dots, underscores, colons or hyphens')\n }\n}\n\nexport function validateExpectedSourceGeneration(value: string | undefined): void {\n if (value !== undefined && (typeof value !== 'string' || !/^[a-f0-9]{64}$/.test(value))) {\n throw new OrmClientError('expectedSourceGeneration must be a lowercase 64-character hexadecimal receipt')\n }\n}\n\nexport interface OperationExecutor {\n /** Execute a registered operation by its stable name. */\n execute<TData = Record<string, unknown>>(\n op: string,\n variables?: Record<string, unknown>,\n options?: OperationExecutionOptions,\n ): Promise<TData>\n}\n\n/** Additive factory result; existing host wrappers implementing OperationExecutor remain valid. */\nexport interface SqlOperationExecutor extends OperationExecutor {\n /** Default read-only ontology SQL; no authored operation or manifest needed. */\n sql(variables: SqlQueryVariables): Promise<SqlQueryResult>\n}\n\nexport interface TypedOperationExecutor extends OperationExecutor {\n execute<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<TData>\n execute<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<TData>\n}\n\n/** Factory result adds SQL without requiring it on existing typed host wrappers. */\nexport type TypedSqlOperationExecutor = TypedOperationExecutor & SqlOperationExecutor\n\nexport interface OperationReadReceipt<TData> {\n readonly data: TData\n /** Opaque source-publication identity; never an authorization credential. */\n readonly sourceGeneration: string\n}\n\nexport interface ReadReceiptOperationExecutor extends OperationExecutor {\n /** Execute a registered query or built-in SQL read; fail closed without a receipt. */\n executeWithReadReceipt<TData = Record<string, unknown>>(\n op: string,\n variables?: Record<string, unknown>,\n options?: OperationExecutionOptions,\n ): Promise<OperationReadReceipt<TData>>\n}\n\n/** Additive factories preserve existing host wrappers without receipt support. */\nexport type ReadReceiptSqlOperationExecutor = SqlOperationExecutor & ReadReceiptOperationExecutor\n\nexport interface TypedReadReceiptOperationExecutor extends TypedOperationExecutor {\n executeWithReadReceipt<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n executeWithReadReceipt<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n}\n\nexport type TypedReadReceiptSqlOperationExecutor = TypedReadReceiptOperationExecutor & ReadReceiptSqlOperationExecutor\n\nconst dataPlanePath = (namespace: string): string => `/_data/v2/${namespace}`\n\n/** Generated handle identifies the registered contract; optional types are phantom. */\nexport type OperationReference<TVariables extends Record<string, unknown>, TData> = {\n readonly namespace: string\n readonly variables?: TVariables\n readonly result?: TData\n readonly kind?: 'query' | 'mutation'\n} & ({ readonly name: string; readonly hash?: string } | { readonly hash: string; readonly name?: string })\n\nexport function createOperationExecutor({\n baseUrl,\n namespace,\n manifest = { operations: {} },\n operationSelection = 'name',\n getToken,\n getDataToken,\n fetchImpl = globalThis.fetch,\n}: OperationExecutorConfig): TypedReadReceiptSqlOperationExecutor {\n if (!fetchImpl) throw new OrmClientError('no fetch implementation available')\n if ((getToken ? 1 : 0) + (getDataToken ? 1 : 0) !== 1) {\n throw new OrmClientError('provide exactly one of getToken (bearer) or getDataToken (delegated)')\n }\n const root = baseUrl.replace(/\\/+$/, '')\n const operations = new Map(Object.entries(manifest.operations).map(([name, entry]) => [name, { ...entry }]))\n\n async function request({ op, variables, options, requireReadReceipt = false }: {\n op: string | OperationReference<Record<string, unknown>, unknown>\n variables: Record<string, unknown>\n options: OperationExecutionOptions\n requireReadReceipt?: boolean\n }): Promise<{ ok: boolean; status: number; body: unknown }> {\n validateIdempotencyKey(options.idempotencyKey)\n validateExpectedSourceGeneration(options.expectedSourceGeneration)\n if (typeof op !== 'string' && op.namespace !== namespace) throw new OrmClientError('operation belongs to a different namespace')\n const target = selectOperationTarget({ op, operations, selection: operationSelection, readReceipt: requireReadReceipt })\n const token = await (getDataToken ?? getToken)!()\n if (!token) throw new OrmClientError('not authenticated — no token available')\n const auth: Record<string, string> = getDataToken\n ? { [ORM_DATA_TOKEN_HEADER]: token }\n : { Authorization: `Bearer ${token}` }\n\n const response = await fetchImpl(`${root}${dataPlanePath(namespace)}`, {\n method: 'POST',\n headers: { ...auth, 'Content-Type': 'application/json' },\n body: JSON.stringify({ ...target, variables, idempotencyKey: options.idempotencyKey,\n expectedSourceGeneration: options.expectedSourceGeneration }),\n })\n return {\n ok: response.ok,\n status: response.status,\n body: await response.json().catch(() => null),\n }\n }\n\n function execute<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<TData>\n function execute<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<TData>\n async function execute<TData = Record<string, unknown>>(op: string | OperationReference<Record<string, unknown>, TData>, variables: Record<string, unknown> = {}, options: OperationExecutionOptions = {}): Promise<TData> {\n const executionOptions = { ...options }\n const response = await request({ op, variables, options: executionOptions })\n return executionOptions.expectedSourceGeneration === undefined\n ? readOperationResponse<TData>(response)\n : readOperationResponseWithReceipt<TData>({ ...response, expectedSourceGeneration: executionOptions.expectedSourceGeneration }).data\n }\n\n function executeWithReadReceipt<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n function executeWithReadReceipt<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n async function executeWithReadReceipt<TData = Record<string, unknown>>(op: string | OperationReference<Record<string, unknown>, TData>, variables: Record<string, unknown> = {}, options: OperationExecutionOptions = {}): Promise<OperationReadReceipt<TData>> {\n const executionOptions = { ...options }\n const response = await request({ op, variables, options: executionOptions, requireReadReceipt: true })\n return readOperationResponseWithReceipt<TData>({ ...response, expectedSourceGeneration: executionOptions.expectedSourceGeneration })\n }\n return { execute, executeWithReadReceipt, sql: variables => execute<SqlQueryResult>(BUILTIN_SQL_READ_HASH, variables) }\n}\n\n// ---------------------------------------------------------------------------\n// Module-level convenience for generated server functions (`db<Name>`)\n// ---------------------------------------------------------------------------\n\nlet configured: OperationExecutor | null = null\n\n/**\n * Configure the process-wide executor the generated `db<Name>` server\n * functions call through. Call once at startup (server-side); browser apps\n * should prefer Apollo + `createOrmFetch` or an explicit executor.\n */\nexport function configureOrmOperations(config: OperationExecutorConfig): OperationExecutor {\n configured = createOperationExecutor(config)\n return configured\n}\n\n/** Used by generated code: `executeOperation({ op: 'getOpenDeals', variables })`. */\nexport async function executeOperation<TData = Record<string, unknown>>({\n op,\n variables,\n idempotencyKey,\n}: {\n op: string\n variables?: Record<string, unknown>\n idempotencyKey?: string\n}): Promise<TData> {\n if (!configured) {\n throw new OrmClientError(\n 'ORM operations client not configured — call configureOrmOperations({ baseUrl, namespace, manifest, getToken }) at startup',\n )\n }\n return configured.execute<TData>(op, variables, idempotencyKey === undefined ? {} : { idempotencyKey })\n}\n\n// ---------------------------------------------------------------------------\n// Apollo integration without an @apollo/client dependency\n// ---------------------------------------------------------------------------\n\n/**\n * A fetch-compatible function for `new HttpLink({ uri: '/unused', fetch: createOrmFetch(...) })`.\n * Intercepts Apollo's GraphQL POST, swaps the body for the persisted-op\n * envelope (`{ op: <name>, variables }`) resolved via the manifest's\n * operationName, rewrites the URL to the data plane, and attaches auth.\n * The GraphQL-spec response body passes through untouched, so InMemoryCache\n * and error links behave exactly as they do against a GraphQL server.\n */\nexport function createOrmFetch({\n baseUrl,\n namespace,\n manifest,\n getToken,\n getDataToken,\n fetchImpl = globalThis.fetch,\n}: OperationExecutorConfig): typeof globalThis.fetch {\n if (!manifest) throw new OrmClientError('createOrmFetch requires an operations manifest')\n if (!fetchImpl) throw new OrmClientError('no fetch implementation available')\n if ((getToken ? 1 : 0) + (getDataToken ? 1 : 0) !== 1) {\n throw new OrmClientError('provide exactly one of getToken (bearer) or getDataToken (delegated)')\n }\n const root = baseUrl.replace(/\\/+$/, '')\n const url = `${root}${dataPlanePath(namespace)}`\n\n // Derived from `globalThis.fetch` rather than naming `RequestInfo` (a DOM-lib\n // global this module compiles without). The input is ignored — Apollo's\n // HttpLink calls the injected fetch with a string URI, and the real target\n // URL is fixed at `url` above.\n return async (_input: Parameters<typeof globalThis.fetch>[0], init?: RequestInit): Promise<Response> => {\n const raw = typeof init?.body === 'string' ? init.body : null\n const parsed = raw\n ? (JSON.parse(raw) as { operationName?: string; variables?: Record<string, unknown> })\n : {}\n const name = parsed.operationName\n if (!name) {\n throw new OrmClientError(\n 'createOrmFetch requires named operations (Apollo sends operationName for named documents)',\n )\n }\n const target = selectOperationTarget({ op: name, operations: new Map(Object.entries(manifest.operations)) })\n const idempotencyKey = new Headers(init?.headers).get('Idempotency-Key') ?? undefined\n validateIdempotencyKey(idempotencyKey)\n const token = await (getDataToken ?? getToken)!()\n if (!token) throw new OrmClientError('not authenticated — no token available')\n const auth: Record<string, string> = getDataToken\n ? { [ORM_DATA_TOKEN_HEADER]: token }\n : { Authorization: `Bearer ${token}` }\n\n return fetchImpl(url, {\n method: 'POST',\n headers: { ...auth, 'Content-Type': 'application/json' },\n body: JSON.stringify({ ...target, variables: parsed.variables ?? {}, idempotencyKey }),\n ...(init?.signal ? { signal: init.signal } : {}),\n })\n }\n}\n","import { selectOperationTarget, type OperationSelection } from './operation-selection.js'\nexport type { OperationSelection } from './operation-selection.js'\nimport { NAMESPACE_PATTERN } from '../constants.js'\nimport { OrmClientError, OrmOperationError } from './errors.js'\nimport {\n validateIdempotencyKey, validateExpectedSourceGeneration,\n type ManifestOperation,\n type TypedReadReceiptSqlOperationExecutor, type OperationReadReceipt, type OperationReference, type OperationExecutionOptions,\n} from './operations.js'\nimport { isRecord, readOperationResponse, readOperationResponseWithReceipt } from './response.js'\nimport { BUILTIN_SQL_READ_HASH, type SqlQueryResult } from './sql.js'\n\nexport interface OperationTransportRequest {\n namespace: string\n op: string\n variables: Record<string, unknown>\n idempotencyKey?: string\n expectedSourceGeneration?: string\n expectedKind?: 'query' | 'mutation'\n}\n\nexport interface OperationTransportResponse {\n ok: boolean\n status: number\n body: unknown\n}\n\nexport type OperationTransport = (request: OperationTransportRequest) => Promise<OperationTransportResponse>\n\nconst operationHash = /^sha256:[a-f0-9]{64}$/\nfunction readManifestOperations(manifest: unknown): ReadonlyMap<string, Pick<ManifestOperation, 'hash' | 'kind'>> {\n if (!isRecord(manifest) || !isRecord(manifest.operations)) {\n throw new OrmClientError('invalid operations manifest — use operations.manifest.json from seq-studio orm generate')\n }\n const operations = new Map<string, Pick<ManifestOperation, 'hash' | 'kind'>>()\n for (const [name, entry] of Object.entries(manifest.operations)) {\n if (!/^[_A-Za-z][_0-9A-Za-z]*$/.test(name) || !isRecord(entry) || (entry.hash !== undefined && (typeof entry.hash !== 'string' || !operationHash.test(entry.hash)))\n || (entry.kind !== 'query' && entry.kind !== 'mutation')) {\n throw new OrmClientError(`invalid operations manifest entry \"${name}\" — regenerate the manifest`)\n }\n operations.set(name, { ...(typeof entry.hash === 'string' ? { hash: entry.hash } : {}), kind: entry.kind })\n }\n return operations\n}\n\n/**\n * Execute generated operations through a host-owned authenticated transport.\n * No credential handling, retries, or global configuration. The manifest is\n * validated once and copied, so later caller mutation cannot alter the target.\n */\nexport function createOperationExecutorWithTransport({ namespace, manifest, transport, operationSelection = 'name' }: {\n namespace: string\n /** Accept generated JSON imports directly; validate them at construction. Optional under `operationSelection: 'name'`. */\n manifest?: unknown\n transport: OperationTransport\n operationSelection?: OperationSelection\n}): TypedReadReceiptSqlOperationExecutor {\n if (operationSelection !== 'name') throw new OrmClientError('ORM calls use operation names; hash selection is no longer supported')\n if (typeof namespace !== 'string' || !NAMESPACE_PATTERN.test(namespace)) throw new OrmClientError('invalid ORM namespace — expected a lowercase identifier of at most 41 characters')\n const operations = manifest === undefined ? new Map<string, Pick<ManifestOperation, 'hash' | 'kind'>>() : readManifestOperations(manifest)\n async function request({ op, variables, options, requireReadReceipt = false }: {\n op: string | OperationReference<Record<string, unknown>, unknown>\n variables: Record<string, unknown>\n options: OperationExecutionOptions\n requireReadReceipt?: boolean\n }): Promise<OperationTransportResponse> {\n validateIdempotencyKey(options.idempotencyKey)\n validateExpectedSourceGeneration(options.expectedSourceGeneration)\n if (typeof op !== 'string' && op.namespace !== namespace) throw new OrmClientError('operation belongs to a different namespace')\n const target = selectOperationTarget({ op, operations, selection: operationSelection, readReceipt: requireReadReceipt })\n if (!isRecord(variables)) throw new OrmClientError('operation variables must be an object')\n const send = () => transport({ namespace, ...target, variables,\n ...(options.idempotencyKey === undefined ? {} : { idempotencyKey: options.idempotencyKey }),\n ...(options.expectedSourceGeneration === undefined ? {} : { expectedSourceGeneration: options.expectedSourceGeneration }),\n })\n const response = await send()\n if (!response || typeof response.ok !== 'boolean' || !Number.isInteger(response.status) || response.status < 100 || response.status > 599\n || response.ok !== (response.status >= 200 && response.status < 300)) {\n throw new OrmOperationError('malformed transport response', null, null)\n }\n return response\n }\n\n function execute<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<TData>\n function execute<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<TData>\n async function execute<TData = Record<string, unknown>>(op: string | OperationReference<Record<string, unknown>, TData>, variables: Record<string, unknown> = {}, options: OperationExecutionOptions = {}): Promise<TData> {\n const executionOptions = { ...options }\n const response = await request({ op, variables, options: executionOptions })\n return executionOptions.expectedSourceGeneration === undefined\n ? readOperationResponse<TData>(response)\n : readOperationResponseWithReceipt<TData>({ ...response, expectedSourceGeneration: executionOptions.expectedSourceGeneration }).data\n }\n\n function executeWithReadReceipt<TVariables extends Record<string, unknown>, TData>(op: OperationReference<TVariables, TData>, variables: TVariables, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n function executeWithReadReceipt<TData = Record<string, unknown>>(op: string, variables?: Record<string, unknown>, options?: OperationExecutionOptions): Promise<OperationReadReceipt<TData>>\n async function executeWithReadReceipt<TData = Record<string, unknown>>(op: string | OperationReference<Record<string, unknown>, TData>, variables: Record<string, unknown> = {}, options: OperationExecutionOptions = {}): Promise<OperationReadReceipt<TData>> {\n const executionOptions = { ...options }\n const response = await request({ op, variables, options: executionOptions, requireReadReceipt: true })\n return readOperationResponseWithReceipt<TData>({ ...response, expectedSourceGeneration: executionOptions.expectedSourceGeneration })\n }\n return { execute, executeWithReadReceipt, sql: variables => execute<SqlQueryResult>(BUILTIN_SQL_READ_HASH, variables) }\n}\n","import { OrmClientError, createFetchTransport, type OrmTransport } from './transport.js'\nimport { TableQuery } from './query-builder.js'\n\n/** Bindable scalar for `query()` placeholders ($1, $2, …). */\nexport type QueryParam = string | number | boolean | null\n\n/** Shape of one action in the generated `<Ns>Actions` map — params in, result out. */\nexport interface OrmActionShape {\n readonly params?: Record<string, unknown>\n readonly result: unknown\n}\n\n/** The generated `<Ns>Actions` map: action name → its param and result shapes. */\nexport type OrmActions = Record<string, OrmActionShape>\n\n/**\n * `action()`'s argument list: `params` is required when the action declares a\n * required field, optional otherwise. The empty-object type is assignable to\n * the params shape only when every field is optional, so that assignability is\n * the discriminant.\n */\ntype ActionArgs<Action extends OrmActionShape> =\n Record<string, never> extends NonNullable<Action['params']>\n ? [params?: NonNullable<Action['params']>]\n : [params: NonNullable<Action['params']>]\n\n/**\n * Typed read client for one namespace's Data API. `Tables` comes from\n * `types.gen.ts` (wire types the apply refreshes from the YAML definitions),\n * so column names and row shapes are checked at compile time; the server\n * re-validates everything and Postgres RLS decides row visibility.\n *\n * ```ts\n * const client = createOrmClient<LendingTables>({ namespace: 'lending', baseUrl, getToken })\n * const rows = await client.table('loans').select('id', 'balance').gte('balance', 1000).rows()\n * const top = await client.query<{ officer: string; total: string }>(\n * 'select officer, sum(balance) as total from loans group by officer order by total desc limit $1',\n * [5],\n * )\n * ```\n */\nexport interface OrmClient<\n Tables extends Record<string, Record<string, unknown>>,\n Actions extends OrmActions = OrmActions,\n> {\n table<Name extends keyof Tables & string>(name: Name): TableQuery<Tables[Name]>\n /**\n * Raw read-only SQL for everything the filter grammar can't say —\n * aggregates, joins, OR, expressions, CTEs. The same sandbox as every\n * read: the namespace consumer role (grants stop at the namespace schema),\n * Postgres RLS over the caller's claims, and a READ ONLY transaction —\n * Postgres itself rejects writes, which stay on declared actions. Values\n * bind as $1, $2, … placeholders; never interpolate them into the string.\n */\n query<Row = Record<string, unknown>>(sql: string, params?: readonly QueryParam[]): Promise<Row[]>\n /**\n * Invoke a declared action — the only write path the Data API exposes. The\n * params and result are typed from the namespace's `<Ns>Actions`: an action\n * with `returns:` resolves to `{ rows: Row[] }`, a count action to\n * `{ rowsAffected: number }`.\n */\n action<Name extends keyof Actions & string>(\n name: Name,\n ...args: ActionArgs<Actions[Name]>\n ): Promise<Actions[Name]['result']>\n}\n\nexport function createOrmClient<\n Tables extends Record<string, Record<string, unknown>>,\n Actions extends OrmActions = OrmActions,\n>({\n namespace,\n baseUrl,\n getToken,\n fetchImpl,\n transport,\n dataToken,\n}: {\n namespace: string\n baseUrl?: string\n /** App-user / session bearer (CLI, browser). Mutually exclusive with dataToken. */\n getToken?: () => Promise<string | null> | string | null\n /**\n * Delegated function data token — the inbound `ORM_DATA_TOKEN_HEADER` value a\n * managed function receives. Pass it and the client authenticates as the\n * invoking user, scoped to the function's declared refs; no manual transport.\n */\n dataToken?: string | (() => Promise<string | null> | string | null)\n fetchImpl?: typeof globalThis.fetch\n /** Injected transport (tests, bridges); overrides baseUrl/getToken/dataToken. */\n transport?: OrmTransport\n}): OrmClient<Tables, Actions> {\n const resolved =\n transport ??\n createFetchTransport({\n baseUrl: requireOption(baseUrl, 'baseUrl'),\n ...(dataToken !== undefined\n ? { getDataToken: typeof dataToken === 'function' ? dataToken : () => dataToken }\n : { getToken: requireOption(getToken, 'getToken') }),\n fetchImpl,\n })\n\n return buildOrmClient<Tables, Actions>(resolved, namespace)\n}\n\n/**\n * The ESCALATION path — use only deliberately. A managed function receives a\n * separate *service* data token on `ORM_SERVICE_DATA_TOKEN_HEADER`; pass that\n * value here and the client authenticates as the function's SERVICE IDENTITY,\n * not the invoking user. Reads run with the service identity's grants (clamped\n * to the function's declared refs), NOT the caller's — so the caller's own row\n * visibility does not apply. The invoking user is still recorded for audit.\n *\n * Default to `createOrmClient` (acts as the invoking user, full per-user RLS).\n * Reach for this only when the function must intentionally act beyond the\n * caller — e.g. enforcing per-user rules in code over a coarse upstream that\n * has no granular permissions of its own. The distinct name is the guardrail:\n * choosing the service identity is always explicit and greppable.\n *\n * ```ts\n * const client = createServiceOrmClient<LendingTables>({\n * namespace: 'lending',\n * baseUrl,\n * serviceDataToken: req.headers['x-sequence-data-token-service'],\n * })\n * ```\n */\nexport function createServiceOrmClient<\n Tables extends Record<string, Record<string, unknown>>,\n Actions extends OrmActions = OrmActions,\n>({\n namespace,\n baseUrl,\n serviceDataToken,\n fetchImpl,\n transport,\n}: {\n namespace: string\n baseUrl?: string\n /** The inbound `ORM_SERVICE_DATA_TOKEN_HEADER` value — the function's service token. */\n serviceDataToken?: string | (() => Promise<string | null> | string | null)\n fetchImpl?: typeof globalThis.fetch\n /** Injected transport (tests, bridges); overrides baseUrl/serviceDataToken. */\n transport?: OrmTransport\n}): OrmClient<Tables, Actions> {\n const resolved =\n transport ??\n createFetchTransport({\n baseUrl: requireOption(baseUrl, 'baseUrl'),\n getDataToken:\n typeof serviceDataToken === 'function'\n ? serviceDataToken\n : () => requireOption(serviceDataToken, 'serviceDataToken'),\n fetchImpl,\n })\n\n return buildOrmClient<Tables, Actions>(resolved, namespace)\n}\n\n/** Shared client surface over a resolved transport — the token/identity choice is made by the factory above. */\nfunction buildOrmClient<\n Tables extends Record<string, Record<string, unknown>>,\n Actions extends OrmActions = OrmActions,\n>(resolved: OrmTransport, namespace: string): OrmClient<Tables, Actions> {\n return {\n table(name) {\n return new TableQuery(resolved, namespace, name)\n },\n async query(sql, params) {\n const payload = await resolved.post(`/api/data/${namespace}/query`, {\n sql,\n ...(params ? { params: [...params] } : {}),\n })\n if (!payload || typeof payload !== 'object' || !Array.isArray((payload as { rows?: unknown }).rows)) {\n throw new OrmClientError('unexpected Data API response shape — missing rows array')\n }\n return (payload as { rows: never[] }).rows\n },\n async action(name, ...args) {\n const payload = await resolved.post(`/api/data/${namespace}/actions/${name}`, args[0] ?? {})\n if (payload && typeof payload === 'object') {\n // A returns action responds with `rows`; a count action with\n // `rows_affected` (mapped to `rowsAffected` for the client).\n if (Array.isArray((payload as { rows?: unknown }).rows)) {\n return { rows: (payload as { rows: unknown[] }).rows } as Awaited<ReturnType<OrmClient<Tables, Actions>['action']>>\n }\n if ('rows_affected' in payload) {\n const rowsAffected = Number((payload as { rows_affected: unknown }).rows_affected)\n if (!Number.isNaN(rowsAffected)) {\n return { rowsAffected } as Awaited<ReturnType<OrmClient<Tables, Actions>['action']>>\n }\n }\n }\n throw new OrmClientError('unexpected action response shape — expected rows or rows_affected')\n },\n }\n}\n\nfunction requireOption<T>(value: T | undefined, name: string): T {\n if (value === undefined) throw new Error(`createOrmClient requires ${name} when no transport is injected`)\n return value\n}\n\nexport { TableQuery, type FilterValue, type ReadResponse } from './query-builder.js'\nexport { createFetchTransport, OrmClientError, type OrmTransport } from './transport.js'\n\nexport {\n OrmOperationError,\n configureOrmOperations,\n createOperationExecutor,\n createOrmFetch,\n executeOperation,\n} from './operations.js'\nexport type {\n ManifestOperation,\n OperationErrorEntry,\n OperationExecutor,\n SqlOperationExecutor,\n OperationReference,\n TypedOperationExecutor,\n TypedSqlOperationExecutor,\n ReadReceiptOperationExecutor,\n ReadReceiptSqlOperationExecutor,\n TypedReadReceiptOperationExecutor,\n TypedReadReceiptSqlOperationExecutor,\n OperationReadReceipt,\n OperationExecutionOptions,\n OperationExecutorConfig,\n OperationsManifest,\n} from './operations.js'\n\nexport { NAMESPACE_PATTERN, ORM_DATA_TOKEN_HEADER, ORM_SERVICE_DATA_TOKEN_HEADER } from '../constants.js'\nexport type { SqlQueryParameter, SqlQueryVariables, SqlQueryResult } from './sql.js'\nexport { BUILTIN_SQL_READ_HASH, BUILTIN_SQL_READ_NAME } from './sql.js'\nexport {\n createOperationExecutorWithTransport,\n type OperationSelection, type OperationTransport, type OperationTransportRequest, type OperationTransportResponse,\n} from './transport-executor.js'\n"]}
package/dist/compiler.cjs CHANGED
@@ -266,6 +266,48 @@ var policyExpressionSchema = zod.z.union([
266
266
  variants: zod.z.array(policyVariantSchema).max(10).default([])
267
267
  })
268
268
  ]);
269
+
270
+ // src/canonical/resolved-rows.ts
271
+ function logicalKey(table) {
272
+ return (table.primaryKey ?? []).map((columnName) => table.columns.find((c) => c.columnName === columnName)?.name ?? columnName);
273
+ }
274
+ function sameKey(key, expected) {
275
+ return key.length === expected.length && key.every((name2) => expected.includes(name2));
276
+ }
277
+ function validateRowIdentity(input) {
278
+ validateExistsIn(input);
279
+ if (input.keys.length > 1) validateCompositeKey(input);
280
+ }
281
+ function validateExistsIn({ resolved, sourceByName, fail: fail4 }) {
282
+ const name2 = resolved.existsIn?.[0];
283
+ if (name2 === void 0) return;
284
+ if (sourceByName.get(name2)?.kind !== "etl") fail4(`existsIn '${name2}' must be an etl source`);
285
+ if (resolved.policies.insert !== void 0 || resolved.policies.write !== void 0) {
286
+ fail4("existsIn allows only an update policy: rows come from the etl source");
287
+ }
288
+ }
289
+ function validateCompositeKey({ resolved, keys, tableByName, fail: fail4 }) {
290
+ const keyList = `(${keys.join(", ")})`;
291
+ if (resolved.existsIn === void 0) {
292
+ fail4(`requires exactly one primary-key column: composite key ${keyList} requires existsIn`);
293
+ return;
294
+ }
295
+ const writes = ["insert", "update", "write"].filter((kind) => resolved.policies[kind] !== void 0);
296
+ if (writes.length > 0) fail4(`composite key ${keyList} requires a read-only table: remove the ${writes.join("/")} policy`);
297
+ if (resolved.materialized) fail4(`composite key ${keyList} cannot be materialized`);
298
+ for (const source of resolved.sources) {
299
+ if (source.kind === "prefetch") {
300
+ fail4(`composite key ${keyList} cannot have prefetch source '${source.name}'`);
301
+ continue;
302
+ }
303
+ const table = tableByName.get(source.table);
304
+ if (table && !sameKey(logicalKey(table), keys)) {
305
+ fail4(`composite key ${keyList} requires ${source.kind} source '${source.name}' to be keyed by it; table '${source.table}' is keyed by (${logicalKey(table).join(", ")})`);
306
+ }
307
+ }
308
+ }
309
+
310
+ // src/canonical/resolved.ts
269
311
  function parseDurationMs(input) {
270
312
  if (typeof input === "number") return Number.isInteger(input) && input > 0 ? input : void 0;
271
313
  const match = /^(\d+(?:\.\d+)?)(ms|s|m)$/.exec(input);
@@ -342,6 +384,13 @@ var canonicalResolvedSchema = zod.z.object({
342
384
  resolve: zod.z.array(canonicalResolveRuleSchema).max(500),
343
385
  /** Sources whose tombstone hides the resolved row (v1: the manual source only). */
344
386
  deletedBy: zod.z.array(identifier).max(1).default([]),
387
+ /**
388
+ * `rows.existsIn`: the one etl source whose rows are the table's rows (read
389
+ * directly as the row source). Only an update policy may write. It is also
390
+ * what admits a composite primary key: a read-only table keyed exactly like
391
+ * that source.
392
+ */
393
+ existsIn: zod.z.array(identifier).length(1).optional(),
345
394
  /**
346
395
  * Materialized: the view reads an indexed internal table (`table`) that the
347
396
  * data plane keeps in step with `compute`, the internal view holding the
@@ -360,8 +409,8 @@ function validateResolvedView({ view, tables, views = [] }) {
360
409
  if (!resolved) return [];
361
410
  const errors = [];
362
411
  const fail4 = (message) => errors.push(`resolved table '${view.view}': ${message}`);
363
- const pkColumn = view.primaryKey?.length === 1 ? view.columns.find((c) => c.columnName === view.primaryKey?.[0]) : void 0;
364
- if (!pkColumn) {
412
+ const keyColumns = (view.primaryKey ?? []).map((columnName) => view.columns.find((c) => c.columnName === columnName)).filter((column) => column !== void 0);
413
+ if (keyColumns.length === 0 || keyColumns.length !== view.primaryKey?.length) {
365
414
  fail4("requires exactly one primary-key column");
366
415
  return errors;
367
416
  }
@@ -369,7 +418,7 @@ function validateResolvedView({ view, tables, views = [] }) {
369
418
  const scope = {
370
419
  view,
371
420
  resolved,
372
- pkColumn,
421
+ keys: new Map(keyColumns.map((column) => [column.name, column])),
373
422
  dataColumns: new Map(view.columns.filter((c) => !systemNames.has(c.name) && c.cell === void 0).map((c) => [c.name, c])),
374
423
  sourceByName: /* @__PURE__ */ new Map(),
375
424
  fail: fail4
@@ -383,6 +432,7 @@ function validateResolvedView({ view, tables, views = [] }) {
383
432
  if (!table) fail4(`source '${source.name}' references unknown table '${source.table}'`);
384
433
  else validateSource({ scope, source, table });
385
434
  }
435
+ validateRowIdentity({ resolved, keys: [...scope.keys.keys()], sourceByName: scope.sourceByName, tableByName, fail: fail4 });
386
436
  validateRules(scope);
387
437
  validateViewCells(scope);
388
438
  if (resolved.materialized) validateMaterialized({ scope, tableByName, views });
@@ -412,7 +462,7 @@ function validateSource({ scope, source, table }) {
412
462
  validatePrefetchFields({ scope, source });
413
463
  }
414
464
  function validatePrefetchFields({ scope, source }) {
415
- const { fail: fail4, pkColumn } = scope;
465
+ const { fail: fail4, keys } = scope;
416
466
  if (source.kind !== "prefetch") {
417
467
  if (source.key || source.fetch || source.function || source.prefetchDefaults || source.writeback) {
418
468
  fail4(`only prefetch sources may declare key/fetch/function/prefetchDefaults/writeback ('${source.name}')`);
@@ -421,7 +471,7 @@ function validatePrefetchFields({ scope, source }) {
421
471
  }
422
472
  if (!source.key || !source.fetch || !source.function || !source.prefetchDefaults) {
423
473
  fail4(`prefetch source '${source.name}' requires key, fetch, function and prefetchDefaults`);
424
- } else if (source.key !== pkColumn.name && !source.columns.includes(source.key)) {
474
+ } else if (!keys.has(source.key) && !source.columns.includes(source.key)) {
425
475
  fail4(`prefetch source '${source.name}' key '${source.key}' must be the primary key or one of its columns`);
426
476
  }
427
477
  for (const column of source.writeback?.columns ?? []) {
@@ -429,19 +479,19 @@ function validatePrefetchFields({ scope, source }) {
429
479
  }
430
480
  }
431
481
  function validateSourceColumns({ scope, source, byName }) {
432
- const { fail: fail4, pkColumn, dataColumns } = scope;
433
- for (const column of [pkColumn.name, ...source.columns]) {
434
- const own = column === pkColumn.name ? pkColumn : dataColumns.get(column);
482
+ const { fail: fail4, keys, dataColumns } = scope;
483
+ for (const column of [...keys.keys(), ...source.columns]) {
484
+ const own = keys.get(column) ?? dataColumns.get(column);
435
485
  const theirs = byName.get(column);
436
486
  if (!own) fail4(`source '${source.name}' supplies unknown column '${column}'`);
437
487
  else if (!theirs) fail4(`source '${source.name}' table '${source.table}' has no column '${column}'`);
438
488
  else if (JSON.stringify(theirs.type) !== JSON.stringify(own.type)) fail4(`column '${column}' has a different type on source '${source.name}'`);
439
489
  }
440
490
  }
441
- function validateRules({ resolved, pkColumn, dataColumns, sourceByName, fail: fail4 }) {
491
+ function validateRules({ resolved, keys, dataColumns, sourceByName, fail: fail4 }) {
442
492
  const ruled = /* @__PURE__ */ new Set();
443
493
  for (const rule of resolved.resolve) {
444
- if (!dataColumns.has(rule.column) || rule.column === pkColumn.name) {
494
+ if (!dataColumns.has(rule.column) || keys.has(rule.column)) {
445
495
  fail4(`resolve rule targets unknown column '${rule.column}'`);
446
496
  continue;
447
497
  }
@@ -458,7 +508,7 @@ function validateRules({ resolved, pkColumn, dataColumns, sourceByName, fail: fa
458
508
  }
459
509
  }
460
510
  for (const column of dataColumns.keys()) {
461
- if (column !== pkColumn.name && !ruled.has(column)) fail4(`column '${column}' has no resolve rule`);
511
+ if (!keys.has(column) && !ruled.has(column)) fail4(`column '${column}' has no resolve rule`);
462
512
  }
463
513
  }
464
514
  var VIEW_CELL_TYPES = {
@@ -467,10 +517,10 @@ var VIEW_CELL_TYPES = {
467
517
  by: "text",
468
518
  conflicts: "jsonb"
469
519
  };
470
- function validateViewCells({ view, dataColumns, pkColumn, fail: fail4 }) {
520
+ function validateViewCells({ view, dataColumns, keys, fail: fail4 }) {
471
521
  const expected = /* @__PURE__ */ new Map();
472
522
  for (const column of dataColumns.values()) {
473
- if (column.name === pkColumn.name) continue;
523
+ if (keys.has(column.name)) continue;
474
524
  for (const part of RESOLVED_VIEW_CELL_PARTS) {
475
525
  expected.set(cellColumnName(column.name, part), { part, columnName: cellColumnName(column.columnName, part) });
476
526
  }
@@ -1696,8 +1746,13 @@ var resolvedSourceIrSchema = zod.z.object({
1696
1746
  }).optional()
1697
1747
  });
1698
1748
  var resolvedMetaIrSchema = zod.z.object({
1699
- /** Logical pk column of the resolved view (single-column). */
1700
- pk: zod.z.string(),
1749
+ /**
1750
+ * Logical pk column of the resolved view. Absent for a composite key, which
1751
+ * only a read-only `existsIn` table may declare: it has no writes, prefetch
1752
+ * or materialization (the paths that address one key column), and its reads
1753
+ * use the view's `primaryKey` like any keyed view.
1754
+ */
1755
+ pk: zod.z.string().optional(),
1701
1756
  /** Source name of the manual source. */
1702
1757
  manual: zod.z.string(),
1703
1758
  sources: zod.z.array(resolvedSourceIrSchema),
@@ -3153,7 +3208,7 @@ function buildCompileContext(rawCanonical) {
3153
3208
  appendable: readOnly ? [] : active.filter((c) => c.type === "jsonb").map((c) => c.name),
3154
3209
  ...touchOnUpdate.length > 0 ? { touchOnUpdate } : {},
3155
3210
  ...cells ? { cells } : {},
3156
- ...resolved ? { resolved: resolvedMeta({ resolved, pk: primaryKey[0] }) } : {},
3211
+ ...resolved ? { resolved: resolvedMeta({ resolved, primaryKey }) } : {},
3157
3212
  constraints: isView ? [] : constraints,
3158
3213
  dynamicFilterMaxDepth: 6,
3159
3214
  dynamicFilterMaxNodes: 64
@@ -3435,10 +3490,10 @@ function resolvedWritable(entries) {
3435
3490
  const system = new Set(Object.values(RESOLVED_VIEW_SYSTEM_COLUMNS).map((column) => column.name));
3436
3491
  return entries.filter((entry) => !entry.deprecated && !system.has(entry.name)).map((entry) => entry.name);
3437
3492
  }
3438
- function resolvedMeta({ resolved, pk }) {
3493
+ function resolvedMeta({ resolved, primaryKey }) {
3439
3494
  const manual = resolved.sources.find((source) => source.kind === "manual");
3440
3495
  return {
3441
- pk,
3496
+ ...primaryKey.length === 1 ? { pk: primaryKey[0] } : {},
3442
3497
  manual: manual?.name ?? "",
3443
3498
  deletedBy: [...resolved.deletedBy],
3444
3499
  ...resolved.materialized ? { materialized: { ...resolved.materialized } } : {},
@@ -3564,7 +3619,9 @@ function applyPrefetchDirectives({ node, root, meta }) {
3564
3619
  if (directive.maxStaleness !== void 0 && maxStalenessMs === void 0) {
3565
3620
  fail(`@prefetch(maxStaleness: "${directive.maxStaleness}") must look like '500ms', '30s' or '5m'`, "invalid-source-directive");
3566
3621
  }
3567
- const key = root.kind === "byPk" ? { one: root.pk[0].value } : selectKey({ where: root.where, pk: meta.resolved.pk, source, alias: root.alias });
3622
+ const pk = meta.resolved?.pk;
3623
+ if (pk === void 0) return fail(`@prefetch on '${root.alias}' needs a single-column primary key`, "invalid-source-directive");
3624
+ const key = root.kind === "byPk" ? { one: root.pk[0].value } : selectKey({ where: root.where, pk, source, alias: root.alias });
3568
3625
  return { source: source.name, ...maxStalenessMs !== void 0 ? { maxStalenessMs } : {}, key };
3569
3626
  });
3570
3627
  return { ...root, prefetch: plans };
@@ -7178,7 +7235,7 @@ function compileBuiltinSqlArtifact({ namespace, definitions, read, unbackedObjec
7178
7235
  definitions.map((definition) => [definition.namespace, computeSchemaHash(definition)]).sort()
7179
7236
  ])) };
7180
7237
  return normalizeIr({
7181
- irVersion: RUNTIME_SQL_IR_VERSION,
7238
+ irVersion: usesServicePrincipal(policies) ? SERVICE_PRINCIPAL_IR_VERSION : RUNTIME_SQL_IR_VERSION,
7182
7239
  namespace,
7183
7240
  schemaHash: catalog.identity,
7184
7241
  ownSchemaHash: localHash(anchor),