@sequenceholdings/orm 2.11.0 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -4
- package/dist/authoring.d.cts +1 -1
- package/dist/authoring.d.ts +1 -1
- package/dist/canonical.d.cts +43 -43
- package/dist/canonical.d.ts +43 -43
- package/dist/cli.cjs +147 -195
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +148 -196
- package/dist/cli.js.map +1 -1
- package/dist/client.cjs +5 -10
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +2 -13
- package/dist/client.d.ts +2 -13
- package/dist/client.js +6 -10
- package/dist/client.js.map +1 -1
- package/dist/compiler.cjs +14 -67
- package/dist/compiler.cjs.map +1 -1
- package/dist/compiler.d.cts +6 -17
- package/dist/compiler.d.ts +6 -17
- package/dist/compiler.js +16 -66
- package/dist/compiler.js.map +1 -1
- package/dist/index.cjs +242 -189
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +541 -36
- package/dist/index.d.ts +541 -36
- package/dist/index.js +237 -189
- package/dist/index.js.map +1 -1
- package/dist/ir.cjs +6 -11
- package/dist/ir.cjs.map +1 -1
- package/dist/ir.d.cts +61 -64
- package/dist/ir.d.ts +61 -64
- package/dist/ir.js +6 -11
- package/dist/ir.js.map +1 -1
- package/dist/predicate-v2.cjs +3 -8
- package/dist/predicate-v2.cjs.map +1 -1
- package/dist/predicate-v2.js +3 -8
- package/dist/predicate-v2.js.map +1 -1
- package/dist/sdl.cjs +4 -11
- package/dist/sdl.cjs.map +1 -1
- package/dist/sdl.d.cts +1 -5
- package/dist/sdl.d.ts +1 -5
- package/dist/sdl.js +4 -11
- package/dist/sdl.js.map +1 -1
- package/package.json +1 -1
- package/src/codegen-gql/server-fns.cjs +1 -1
- package/dist/{definition-CevES7lM.d.cts → definition-B99BsOAO.d.cts} +2 -2
- package/dist/{definition-CevES7lM.d.ts → definition-B99BsOAO.d.ts} +2 -2
package/dist/client.js
CHANGED
|
@@ -161,18 +161,15 @@ var TableQuery = class _TableQuery {
|
|
|
161
161
|
|
|
162
162
|
// src/client/sql.ts
|
|
163
163
|
var BUILTIN_SQL_READ_NAME = "BuiltinSqlRead";
|
|
164
|
-
var BUILTIN_SQL_READ_HASH = "sha256:a50c477c952a5e0fe68ed158a4530e4aab573c09bcbb1a8ac454dc88a39a6258";
|
|
165
164
|
|
|
166
165
|
// src/client/operation-selection.ts
|
|
167
166
|
var NAME = /^[_A-Za-z][_0-9A-Za-z]{0,254}$/;
|
|
168
167
|
function selectorForReference(op) {
|
|
169
168
|
if (typeof op === "string") return op;
|
|
170
169
|
if (op.name) return op.name;
|
|
171
|
-
if (op.hash?.startsWith("sha256:")) return op.hash;
|
|
172
170
|
throw new OrmClientError("unknown operation reference \u2014 regenerate the client");
|
|
173
171
|
}
|
|
174
172
|
function manifestEntry({ selector, operations }) {
|
|
175
|
-
if (selector.startsWith("sha256:")) return [...operations].find(([, entry2]) => entry2.hash === selector);
|
|
176
173
|
const entry = operations.get(selector);
|
|
177
174
|
return entry ? [selector, entry] : void 0;
|
|
178
175
|
}
|
|
@@ -191,7 +188,7 @@ function assertReferenceKind({ op, kind }) {
|
|
|
191
188
|
function selectOperationTarget({ op, operations, selection = "name", readReceipt = false }) {
|
|
192
189
|
if (selection !== "name") throw new OrmClientError("ORM calls use operation names; hash selection is no longer supported");
|
|
193
190
|
const selector = selectorForReference(op);
|
|
194
|
-
if (selector ===
|
|
191
|
+
if (selector === BUILTIN_SQL_READ_NAME) {
|
|
195
192
|
return { op: `query:${BUILTIN_SQL_READ_NAME}`, expectedKind: "query" };
|
|
196
193
|
}
|
|
197
194
|
const match = manifestEntry({ selector, operations });
|
|
@@ -312,7 +309,7 @@ function createOperationExecutor({
|
|
|
312
309
|
const response = await request({ op, variables, options: executionOptions, requireReadReceipt: true });
|
|
313
310
|
return readOperationResponseWithReceipt({ ...response, expectedSourceGeneration: executionOptions.expectedSourceGeneration });
|
|
314
311
|
}
|
|
315
|
-
return { execute, executeWithReadReceipt, sql: (variables) => execute(
|
|
312
|
+
return { execute, executeWithReadReceipt, sql: (variables) => execute(BUILTIN_SQL_READ_NAME, variables) };
|
|
316
313
|
}
|
|
317
314
|
var configured = null;
|
|
318
315
|
function configureOrmOperations(config) {
|
|
@@ -371,17 +368,16 @@ function createOrmFetch({
|
|
|
371
368
|
}
|
|
372
369
|
|
|
373
370
|
// src/client/transport-executor.ts
|
|
374
|
-
var operationHash = /^sha256:[a-f0-9]{64}$/;
|
|
375
371
|
function readManifestOperations(manifest) {
|
|
376
372
|
if (!isRecord(manifest) || !isRecord(manifest.operations)) {
|
|
377
373
|
throw new OrmClientError("invalid operations manifest \u2014 use operations.manifest.json from seq-studio orm generate");
|
|
378
374
|
}
|
|
379
375
|
const operations = /* @__PURE__ */ new Map();
|
|
380
376
|
for (const [name, entry] of Object.entries(manifest.operations)) {
|
|
381
|
-
if (!/^[_A-Za-z][_0-9A-Za-z]*$/.test(name) || !isRecord(entry) || entry.
|
|
377
|
+
if (!/^[_A-Za-z][_0-9A-Za-z]*$/.test(name) || !isRecord(entry) || entry.kind !== "query" && entry.kind !== "mutation") {
|
|
382
378
|
throw new OrmClientError(`invalid operations manifest entry "${name}" \u2014 regenerate the manifest`);
|
|
383
379
|
}
|
|
384
|
-
operations.set(name, {
|
|
380
|
+
operations.set(name, { kind: entry.kind });
|
|
385
381
|
}
|
|
386
382
|
return operations;
|
|
387
383
|
}
|
|
@@ -418,7 +414,7 @@ function createOperationExecutorWithTransport({ namespace, manifest, transport,
|
|
|
418
414
|
const response = await request({ op, variables, options: executionOptions, requireReadReceipt: true });
|
|
419
415
|
return readOperationResponseWithReceipt({ ...response, expectedSourceGeneration: executionOptions.expectedSourceGeneration });
|
|
420
416
|
}
|
|
421
|
-
return { execute, executeWithReadReceipt, sql: (variables) => execute(
|
|
417
|
+
return { execute, executeWithReadReceipt, sql: (variables) => execute(BUILTIN_SQL_READ_NAME, variables) };
|
|
422
418
|
}
|
|
423
419
|
|
|
424
420
|
// src/client/index.ts
|
|
@@ -488,6 +484,6 @@ function requireOption(value, name) {
|
|
|
488
484
|
return value;
|
|
489
485
|
}
|
|
490
486
|
|
|
491
|
-
export {
|
|
487
|
+
export { BUILTIN_SQL_READ_NAME, NAMESPACE_PATTERN, ORM_DATA_TOKEN_HEADER, ORM_SERVICE_DATA_TOKEN_HEADER, OrmClientError, OrmOperationError, TableQuery, configureOrmOperations, createFetchTransport, createOperationExecutor, createOperationExecutorWithTransport, createOrmClient, createOrmFetch, createServiceOrmClient, executeOperation };
|
|
492
488
|
//# sourceMappingURL=client.js.map
|
|
493
489
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -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\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"]}
|
|
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":[],"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. */\nexport const BUILTIN_SQL_READ_NAME = 'BuiltinSqlRead'\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_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, '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 throw new OrmClientError('unknown operation reference — regenerate the client')\n}\nfunction manifestEntry({ selector, operations }: { selector: string; operations: OperationMap }): readonly [string, Entry] | undefined {\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_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_NAME, 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 readonly kind: 'query' | 'mutation'\n readonly requires: { readonly capability?: string; readonly role?: string } | null\n}\n\nexport interface OperationsManifest {\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\n}\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_NAME, 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_NAME, 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\nfunction readManifestOperations(manifest: unknown): ReadonlyMap<string, Pick<ManifestOperation, '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, 'kind'>>()\n for (const [name, entry] of Object.entries(manifest.operations)) {\n if (!/^[_A-Za-z][_0-9A-Za-z]*$/.test(name) || !isRecord(entry)\n || (entry.kind !== 'query' && entry.kind !== 'mutation')) {\n throw new OrmClientError(`invalid operations manifest entry \"${name}\" — regenerate the manifest`)\n }\n operations.set(name, { 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, '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_NAME, 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_NAME } from './sql.js'\nexport {\n createOperationExecutorWithTransport,\n type OperationSelection, type OperationTransport, type OperationTransportRequest, type OperationTransportResponse,\n} from './transport-executor.js'\n"]}
|