@secondlayer/subgraphs 7.7.4 → 8.0.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 +0 -4
- package/dist/index.d.ts +1 -3
- package/dist/index.js +5 -20
- package/dist/index.js.map +5 -6
- package/dist/runtime/emitter.js.map +1 -1
- package/dist/runtime/replay.js +3 -12
- package/dist/runtime/replay.js.map +4 -5
- package/dist/schema/index.js +3 -7
- package/dist/schema/index.js.map +2 -2
- package/dist/testing/index.js +5 -14
- package/dist/testing/index.js.map +3 -3
- package/dist/verification.js +3 -7
- package/dist/verification.js.map +2 -2
- package/dist/verify/index.js +5 -14
- package/dist/verify/index.js.map +3 -3
- package/package.json +2 -6
- package/dist/types.d.ts +0 -424
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -9
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"import type { Database } from \"@secondlayer/shared/db\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport { type Kysely, type Transaction, sql } from \"kysely\";\nimport { TYPE_MAP, emitJournalDDL } from \"../schema/generator.ts\";\nimport type { SubgraphSchema } from \"../types.ts\";\n\ntype AnyDb = Kysely<Database> | Transaction<Database>;\n\n/** Reorg journal entries older than this many blocks are prunable — far past\n * Stacks finality (observed reorg depth is single digits). */\nexport const JOURNAL_RETENTION_BLOCKS = 300;\n\n/** Schemas whose `_journal` table existence has been ensured this process.\n * Populated only after a successful flush (a rolled-back CREATE must retry). */\nconst journalEnsured = new Set<string>();\n\ninterface WriteOp {\n\tkind: \"insert\" | \"update\" | \"delete\" | \"increment\";\n\ttable: string;\n\tdata: Record<string, unknown>;\n\t/** For update: SET clause. For increment: column → signed delta. */\n\tset?: Record<string, unknown>;\n}\n\n/**\n * One step of a flush. Most writes are a plain SQL string executed in order.\n * An increment is a PAIR the executor branches on, because closing its\n * lost-update race needs a per-statement rowcount — see\n * {@link SubgraphContext.execStatements} and the rationale on the increment\n * batch in `buildStatements`.\n */\ntype FlushStatement =\n\t| string\n\t| {\n\t\t\tkind: \"increment\";\n\t\t\t/** `UPDATE … SET c = COALESCE(c,0) + δ WHERE <key>` */\n\t\t\tupdate: string;\n\t\t\t/** `INSERT … SELECT … WHERE NOT EXISTS (<key>)` */\n\t\t\tinsert: string;\n\t\t\t/** Key predicate, for the (unreachable-by-design) error message. */\n\t\t\tkeyPred: string;\n\t\t\ttable: string;\n\t };\n\nexport interface FlushWrite {\n\top: \"insert\" | \"update\" | \"delete\";\n\ttable: string;\n\t/** Full row data (for inserts) or where+set merged (for updates). Bigints stringified. */\n\trow: Record<string, unknown>;\n\t/** Stable identifier for dedup — `{blockHeight, txId, rowIndex}` */\n\tpk: { blockHeight: number; txId: string; rowIndex: number };\n}\n\nexport interface FlushManifest {\n\tcount: number;\n\twrites: FlushWrite[];\n}\n\nimport { type ChainReadClient, createChainReadClient } from \"./chain-read.ts\";\n\nexport interface BlockMeta {\n\theight: number;\n\thash: string;\n\ttimestamp: number;\n\tburnBlockHeight: number;\n\t/**\n\t * Nakamoto StacksBlockId — the identifier `?tip=` accepts, and the only way\n\t * to pin a read-only call to THIS block. Null on rows ingested before it\n\t * was persisted; `ctx.client.readOnly` refuses to run rather than silently\n\t * reading at the node's tip.\n\t */\n\tindexBlockHash?: string | null;\n}\n\nexport interface TxMeta {\n\ttxId: string;\n\tsender: string;\n\ttype: string;\n\tstatus: string;\n\tcontractId?: string | null;\n\tfunctionName?: string | null;\n}\n\n/** Validate that a column name is safe for SQL identifiers */\nfunction validateColumnName(name: string): void {\n\tif (!/^[a-z_][a-z0-9_]*$/i.test(name)) {\n\t\tthrow new Error(`Invalid column name: ${name}`);\n\t}\n}\n\n/**\n * Runtime context passed to subgraph handlers.\n * Batches writes and flushes them atomically at the end of a block.\n *\n * Row reads (findOne/findMany) are read-your-writes: they overlay the pending\n * ops queue on the DB state, so a handler observes every write queued earlier\n * in the same block. Without this, accumulator patterns (balance = f(existing))\n * silently lose all but the last same-block delta per row (fix-f040 B1).\n */\nexport class SubgraphContext {\n\treadonly block: BlockMeta;\n\tprivate _tx: TxMeta;\n\tprivate readonly db: AnyDb;\n\tprivate readonly pgSchemaName: string;\n\tprivate readonly subgraphSchema: SubgraphSchema;\n\t/** Pending writes for this block. `protected` so the in-memory test\n\t * context (`@secondlayer/subgraphs/testing`) can materialize them through\n\t * the SAME overlay this class uses — never a second implementation. */\n\tprotected readonly ops: WriteOp[] = [];\n\t/**\n\t * Record pre-images of keyed mutations into the schema's `_journal` so a\n\t * reorg can restore prior row states (fix-f040 B2). Enabled on the live\n\t * path only — deep reindex/backfill heights are past finality, and the\n\t * journal would just be churn the pruner deletes.\n\t */\n\tprivate readonly journal: boolean;\n\n\t/** Memoized per block; see the `client` getter. */\n\tprotected _client?: ChainReadClient;\n\n\tconstructor(\n\t\tdb: AnyDb,\n\t\tpgSchemaName: string,\n\t\tsubgraphSchema: SubgraphSchema,\n\t\tblock: BlockMeta,\n\t\ttx: TxMeta,\n\t\tjournal = false,\n\t) {\n\t\tthis.db = db;\n\t\tthis.pgSchemaName = pgSchemaName;\n\t\tthis.subgraphSchema = subgraphSchema;\n\t\tthis.block = block;\n\t\tthis._tx = tx;\n\t\tthis.journal = journal;\n\t}\n\n\t/**\n\t * Chain reads pinned to THIS block. Lazily built so a handler that never\n\t * reads never touches the node config, and so the in-memory test context\n\t * can override it without a node.\n\t */\n\tget client(): ChainReadClient {\n\t\tthis._client ??= createChainReadClient({\n\t\t\tblockHeight: this.block.height,\n\t\t\tindexBlockHash: this.block.indexBlockHash,\n\t\t});\n\t\treturn this._client;\n\t}\n\n\tget tx(): TxMeta {\n\t\treturn this._tx;\n\t}\n\n\t/** Update the current transaction context (used by runner between events) */\n\tsetTx(tx: TxMeta): void {\n\t\tthis._tx = tx;\n\t}\n\n\t// --- Write operations (batched) ---\n\n\tinsert(table: string, row: Record<string, unknown>): void {\n\t\tthis.validateTable(table);\n\t\tthis.ops.push({\n\t\t\tkind: \"insert\",\n\t\t\ttable,\n\t\t\tdata: { ...row, _block_height: this.block.height, _tx_id: this._tx.txId },\n\t\t});\n\t}\n\n\tupdate(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tset: Record<string, unknown>,\n\t): void {\n\t\tthis.validateTable(table);\n\t\tthis.ops.push({ kind: \"update\", table, data: where, set });\n\t}\n\n\tupsert(\n\t\ttable: string,\n\t\tkey: Record<string, unknown>,\n\t\trow: Record<string, unknown>,\n\t): void {\n\t\tthis.validateTable(table);\n\t\tconst tableDef = this.subgraphSchema[table];\n\t\tif (!tableDef) return;\n\t\tconst keyColumns = Object.keys(key);\n\n\t\t// Check if there's a matching uniqueKeys constraint\n\t\tconst hasUniqueConstraint = tableDef.uniqueKeys?.some(\n\t\t\t(uk) =>\n\t\t\t\tuk.length === keyColumns.length &&\n\t\t\t\tuk.every((c) => keyColumns.includes(c)),\n\t\t);\n\n\t\tconst meta = { _block_height: this.block.height, _tx_id: this._tx.txId };\n\n\t\tif (hasUniqueConstraint) {\n\t\t\t// Use ON CONFLICT for proper upsert\n\t\t\tthis.ops.push({\n\t\t\t\tkind: \"insert\",\n\t\t\t\ttable,\n\t\t\t\tdata: { ...key, ...row, ...meta, _upsert_keys: keyColumns },\n\t\t\t});\n\t\t} else {\n\t\t\t// Fallback: log warning, use findOne + conditional insert/update\n\t\t\tlogger.warn(\n\t\t\t\t\"upsert called without matching uniqueKeys constraint, using fallback\",\n\t\t\t\t{\n\t\t\t\t\ttable,\n\t\t\t\t\tkeys: keyColumns,\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.ops.push({\n\t\t\t\tkind: \"insert\",\n\t\t\t\ttable,\n\t\t\t\tdata: {\n\t\t\t\t\t...key,\n\t\t\t\t\t...row,\n\t\t\t\t\t...meta,\n\t\t\t\t\t_upsert_fallback_keys: keyColumns,\n\t\t\t\t\t_upsert_fallback_set: row,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tdelete(table: string, where: Record<string, unknown>): void {\n\t\tthis.validateTable(table);\n\t\tthis.ops.push({ kind: \"delete\", table, data: where });\n\t}\n\n\t/**\n\t * Atomic counter update — the blessed accumulator primitive. Compiles to\n\t * `INSERT ... ON CONFLICT (key) DO UPDATE SET col = COALESCE(t.col,0) + delta`,\n\t * so deltas commute: same-block, replayed-in-order, and concurrent updates\n\t * all land correctly without read-modify-write. Missing row inserts the\n\t * delta as the initial value. Requires a uniqueKeys constraint matching\n\t * `key`; deltas may be negative.\n\t */\n\tincrement(\n\t\ttable: string,\n\t\tkey: Record<string, unknown>,\n\t\tdeltas: Record<string, bigint | number>,\n\t): void {\n\t\tthis.validateTable(table);\n\t\tconst tableDef = this.subgraphSchema[table];\n\t\tconst keyColumns = Object.keys(key);\n\t\tconst hasUniqueConstraint = tableDef?.uniqueKeys?.some(\n\t\t\t(uk) =>\n\t\t\t\tuk.length === keyColumns.length &&\n\t\t\t\tuk.every((c) => keyColumns.includes(c)),\n\t\t);\n\t\tif (!hasUniqueConstraint) {\n\t\t\tthrow new Error(\n\t\t\t\t`increment(\"${table}\") requires a uniqueKeys constraint on [${keyColumns.join(\", \")}]`,\n\t\t\t);\n\t\t}\n\t\tfor (const [col, v] of Object.entries(deltas)) {\n\t\t\tvalidateColumnName(col);\n\t\t\tif (keyColumns.includes(col)) {\n\t\t\t\tthrow new Error(`increment(\"${table}\"): \"${col}\" is a key column`);\n\t\t\t}\n\t\t\tif (typeof v !== \"bigint\" && typeof v !== \"number\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`increment(\"${table}\"): delta for \"${col}\" must be bigint or number`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tthis.ops.push({\n\t\t\tkind: \"increment\",\n\t\t\ttable,\n\t\t\tdata: {\n\t\t\t\t...key,\n\t\t\t\t_block_height: this.block.height,\n\t\t\t\t_tx_id: this._tx.txId,\n\t\t\t\t_upsert_keys: keyColumns,\n\t\t\t},\n\t\t\tset: { ...deltas },\n\t\t});\n\t}\n\n\t// --- Ops checkpoint (per-event atomicity) ---\n\n\t/** Current length of the pending-ops queue. Pair with {@link rollbackTo}. */\n\topsCheckpoint(): number {\n\t\treturn this.ops.length;\n\t}\n\n\t/**\n\t * Discard ops queued after a checkpoint. The runner wraps each handler\n\t * invocation so a thrown handler contributes nothing — without this, a\n\t * transfer handler that debited then threw flushes a one-sided debit\n\t * (fix-f040 B6).\n\t */\n\trollbackTo(checkpoint: number): void {\n\t\tif (checkpoint < 0 || checkpoint > this.ops.length) return;\n\t\tthis.ops.length = checkpoint;\n\t}\n\n\t// --- Read operations (immediate) ---\n\n\t/**\n\t * Committed rows matching `where`, BEFORE the pending-ops overlay. The one\n\t * seam a different backing store replaces (the in-memory test context);\n\t * everything above it — validation, overlay, op queueing, flush semantics\n\t * — stays here so the two can't diverge.\n\t */\n\tprotected async readRows(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tlimit?: number,\n\t): Promise<Record<string, unknown>[]> {\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst { clause } = buildWhereClause(where);\n\t\t// Insertion order (`_id`, every table's primary key), which the memory\n\t\t// store also returns. Without it Postgres picks any matching row for\n\t\t// findOne and any order for findMany, so the same handler over the same\n\t\t// blocks could write different rows.\n\t\tconst query = `SELECT * FROM ${qualifiedTable} WHERE ${clause} ORDER BY \"_id\"${\n\t\t\tlimit !== undefined ? ` LIMIT ${limit}` : \"\"\n\t\t}`;\n\t\tconst { rows } = await sql.raw(query).execute(this.db);\n\t\treturn (rows as Record<string, unknown>[]).map((r) =>\n\t\t\tthis.coerceRow(table, r),\n\t\t);\n\t}\n\n\tasync findOne(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t): Promise<Record<string, unknown> | null> {\n\t\tthis.validateTable(table);\n\t\tconst row = (await this.readRows(table, where, 1))[0] ?? null;\n\t\treturn this.overlayOne(table, where, row);\n\t}\n\n\tasync findMany(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t): Promise<Record<string, unknown>[]> {\n\t\tthis.validateTable(table);\n\t\treturn this.overlayMany(table, where, await this.readRows(table, where));\n\t}\n\n\t// --- Pending-ops overlay (read-your-writes) ---\n\n\t/**\n\t * Replay pending ops for `table` over a single DB-read result so reads\n\t * observe earlier same-block writes. Mirrors flush semantics: upserts\n\t * merge non-key/non-meta columns, increments add deltas, updates/deletes\n\t * apply by where-match. Overlaid rows synthesized from pending inserts\n\t * lack DB-generated columns (_id, _created_at).\n\t */\n\tprotected overlayOne(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tdbRow: Record<string, unknown> | null,\n\t): Record<string, unknown> | null {\n\t\tif (this.ops.length === 0) return dbRow;\n\t\tlet row = dbRow;\n\t\tfor (const op of this.ops) {\n\t\t\tif (op.table !== table) continue;\n\t\t\trow = this.applyOpToRow(op, row, where);\n\t\t}\n\t\treturn row;\n\t}\n\n\tprotected overlayMany(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tdbRows: Record<string, unknown>[],\n\t): Record<string, unknown>[] {\n\t\tif (this.ops.length === 0) return [...dbRows];\n\t\tlet result = [...dbRows];\n\t\tfor (const op of this.ops) {\n\t\t\tif (op.table !== table) continue;\n\t\t\tif (op.kind === \"update\") {\n\t\t\t\tfor (let i = 0; i < result.length; i++) {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: idx bounds-checked by loop condition\n\t\t\t\t\tif (rowMatches(result[i]!, op.data))\n\t\t\t\t\t\tresult[i] = { ...result[i], ...(op.set ?? {}) };\n\t\t\t\t}\n\t\t\t} else if (op.kind === \"delete\") {\n\t\t\t\tresult = result.filter((r) => !rowMatches(r, op.data));\n\t\t\t} else {\n\t\t\t\t// insert / increment — merge into the keyed row, or append if the\n\t\t\t\t// new row satisfies the filter.\n\t\t\t\tconst upsertKeys = op.data._upsert_keys as string[] | undefined;\n\t\t\t\tconst clean = stripControlKeys(op.data);\n\t\t\t\tconst idx = upsertKeys\n\t\t\t\t\t? result.findIndex((r) =>\n\t\t\t\t\t\t\tupsertKeys.every((k) => valEq(r[k], clean[k])),\n\t\t\t\t\t\t)\n\t\t\t\t\t: -1;\n\t\t\t\tif (idx >= 0) {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: idx bounds-checked above\n\t\t\t\t\tconst existing = result[idx]!;\n\t\t\t\t\tresult[idx] = this.applyOpToRow(op, existing, where) ?? existing;\n\t\t\t\t} else {\n\t\t\t\t\tconst created = this.applyOpToRow(op, null, where);\n\t\t\t\t\tif (created) result.push(created);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/** Apply one pending op to a candidate row state (null = row absent). */\n\tprotected applyOpToRow(\n\t\top: WriteOp,\n\t\trow: Record<string, unknown> | null,\n\t\twhere: Record<string, unknown>,\n\t): Record<string, unknown> | null {\n\t\tconst upsertKeys = op.data._upsert_keys as string[] | undefined;\n\t\tconst clean = stripControlKeys(op.data);\n\n\t\tswitch (op.kind) {\n\t\t\tcase \"insert\": {\n\t\t\t\tif (row) {\n\t\t\t\t\t// Same entity? Compare on the upsert key — a plain insert (no\n\t\t\t\t\t// key) can never target an existing row.\n\t\t\t\t\tif (upsertKeys?.every((k) => valEq(row[k], clean[k]))) {\n\t\t\t\t\t\t// Mirror ON CONFLICT DO UPDATE: non-key, non-system cols only.\n\t\t\t\t\t\tconst merged = { ...row };\n\t\t\t\t\t\tfor (const [k, v] of Object.entries(clean)) {\n\t\t\t\t\t\t\tif (!upsertKeys.includes(k) && !isSystemColumn(k)) merged[k] = v;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn merged;\n\t\t\t\t\t}\n\t\t\t\t\treturn row;\n\t\t\t\t}\n\t\t\t\treturn rowMatches(clean, where) ? { ...clean } : null;\n\t\t\t}\n\t\t\tcase \"increment\": {\n\t\t\t\tconst deltas = op.set ?? {};\n\t\t\t\tif (row) {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: increment always carries _upsert_keys\n\t\t\t\t\tif (upsertKeys!.every((k) => valEq(row[k], clean[k]))) {\n\t\t\t\t\t\tconst merged = { ...row };\n\t\t\t\t\t\tfor (const [col, d] of Object.entries(deltas)) {\n\t\t\t\t\t\t\tmerged[col] = toBigIntOr0(merged[col]) + toBigIntOr0(d);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn merged;\n\t\t\t\t\t}\n\t\t\t\t\treturn row;\n\t\t\t\t}\n\t\t\t\tif (!rowMatches(clean, where)) return null;\n\t\t\t\tconst created: Record<string, unknown> = { ...clean };\n\t\t\t\tfor (const [col, d] of Object.entries(deltas)) {\n\t\t\t\t\tcreated[col] = toBigIntOr0(d);\n\t\t\t\t}\n\t\t\t\treturn created;\n\t\t\t}\n\t\t\tcase \"update\":\n\t\t\t\treturn row && rowMatches(row, op.data)\n\t\t\t\t\t? { ...row, ...(op.set ?? {}) }\n\t\t\t\t\t: row;\n\t\t\tcase \"delete\":\n\t\t\t\treturn row && rowMatches(row, op.data) ? null : row;\n\t\t}\n\t}\n\n\t/** Coerce string values from Postgres back to BigInt for uint/int columns */\n\tprivate coerceRow(\n\t\ttable: string,\n\t\trow: Record<string, unknown>,\n\t): Record<string, unknown> {\n\t\tconst tableDef = this.subgraphSchema[table];\n\t\tif (!tableDef) return row;\n\t\tconst result = { ...row };\n\t\tfor (const [col, def] of Object.entries(tableDef.columns)) {\n\t\t\tif (\n\t\t\t\t(def.type === \"uint\" || def.type === \"int\") &&\n\t\t\t\ttypeof result[col] === \"string\"\n\t\t\t) {\n\t\t\t\tresult[col] = BigInt(result[col] as string);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t// --- Flush ---\n\n\t/** Number of pending write operations */\n\tget pendingOps(): number {\n\t\treturn this.ops.length;\n\t}\n\n\t/**\n\t * Execute all batched writes in a single transaction.\n\t * Auto-populates _block_height, _tx_id, _created_at on inserts.\n\t *\n\t * Returns a {@link FlushManifest} describing every write.\n\t */\n\tasync flush(): Promise<FlushManifest> {\n\t\tif (this.ops.length === 0) return { count: 0, writes: [] };\n\n\t\tawait this.ensureJournalTable();\n\n\t\tconst opsToFlush = [...this.ops];\n\t\tthis.ops.length = 0;\n\n\t\tconst statements = this.buildStatements(opsToFlush);\n\n\t\tif (\"isTransaction\" in this.db) {\n\t\t\tawait this.execStatements(this.db, statements);\n\t\t} else {\n\t\t\tawait (this.db as Kysely<Database>).transaction().execute(async (tx) => {\n\t\t\t\tawait this.execStatements(tx, statements);\n\t\t\t});\n\t\t}\n\n\t\tconst writes: FlushWrite[] = opsToFlush.map((op, rowIndex) => {\n\t\t\tconst blockHeight =\n\t\t\t\t(op.data._block_height as number | undefined) ?? this.block.height;\n\t\t\tconst txId = (op.data._tx_id as string | undefined) ?? this._tx.txId;\n\t\t\tconst baseRow =\n\t\t\t\top.kind === \"update\" || op.kind === \"increment\"\n\t\t\t\t\t? { ...op.data, ...(op.set ?? {}) }\n\t\t\t\t\t: { ...op.data };\n\t\t\t// Strip upsert control keys — not part of the row shape\n\t\t\t(baseRow as Record<string, unknown>)._upsert_keys = undefined;\n\t\t\t(baseRow as Record<string, unknown>)._upsert_fallback_keys = undefined;\n\t\t\t(baseRow as Record<string, unknown>)._upsert_fallback_set = undefined;\n\t\t\treturn {\n\t\t\t\t// Increments surface as \"updated\" to subscribers — the row payload\n\t\t\t\t// carries the key + the applied delta, not the absolute value.\n\t\t\t\top: op.kind === \"increment\" ? \"update\" : op.kind,\n\t\t\t\ttable: op.table,\n\t\t\t\trow: jsonSafe(baseRow),\n\t\t\t\tpk: { blockHeight, txId, rowIndex },\n\t\t\t};\n\t\t});\n\n\t\treturn { count: opsToFlush.length, writes };\n\t}\n\n\t/**\n\t * Run a built statement list on an open transaction.\n\t *\n\t * Plain statements run in order. An increment runs UPDATE-first and then,\n\t * ONLY if that matched nothing, the guarded INSERT — and if the INSERT also\n\t * wrote nothing, the UPDATE again.\n\t *\n\t * That last step is the whole point. Under READ COMMITTED, two block\n\t * transactions flushing the same key while the row is absent both see\n\t * `UPDATE → 0 rows`; the first commits its INSERT, and the second's\n\t * `WHERE NOT EXISTS` then sees that committed row and inserts nothing. No\n\t * error, no constraint violation — the second delta was simply dropped.\n\t * Re-running the UPDATE takes a fresh snapshot that DOES see the winner's\n\t * row and applies the delta onto it.\n\t *\n\t * It cannot double-apply: the retry is reached only when the first UPDATE\n\t * matched no row AND the INSERT wrote no row, so the delta has not been\n\t * applied by either.\n\t */\n\tprivate async execStatements(\n\t\texecutor: AnyDb,\n\t\tstatements: FlushStatement[],\n\t): Promise<void> {\n\t\tconst affected = (r: { numAffectedRows?: bigint }): bigint =>\n\t\t\tr.numAffectedRows ?? 0n;\n\n\t\tfor (const stmt of statements) {\n\t\t\tif (typeof stmt === \"string\") {\n\t\t\t\tawait sql.raw(stmt).execute(executor);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst updated = await sql.raw(stmt.update).execute(executor);\n\t\t\tif (affected(updated) > 0n) continue;\n\n\t\t\tconst inserted = await sql.raw(stmt.insert).execute(executor);\n\t\t\tif (affected(inserted) > 0n) continue;\n\n\t\t\tconst retried = await sql.raw(stmt.update).execute(executor);\n\t\t\tif (affected(retried) === 0n) {\n\t\t\t\t// Neither wrote: the row a concurrent writer created was gone again\n\t\t\t\t// by the retry (a delete raced in). Fail loudly — silently dropping\n\t\t\t\t// the delta is the bug this whole path exists to prevent. The block\n\t\t\t\t// transaction rolls back and the walk re-processes it.\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`increment could not be applied to ${this.pgSchemaName}.${stmt.table} where ${stmt.keyPred}: row neither updated nor inserted`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Prepare a single insert row, returning its data, columns, upsert key for batching. */\n\tprivate prepareInsert(op: WriteOp): {\n\t\tdata: Record<string, unknown>;\n\t\tcols: string[];\n\t\tvals: string[];\n\t\tupsertKeys: string[] | undefined;\n\t\tbatchKey: string;\n\t} {\n\t\tconst upsertKeys = op.data._upsert_keys as string[] | undefined;\n\t\tconst data = { ...op.data };\n\t\t// biome-ignore lint/performance/noDelete: must remove key, not set undefined — Object.keys must not include these\n\t\tdelete data._upsert_keys;\n\t\t// biome-ignore lint/performance/noDelete: same as above\n\t\tdelete data._upsert_fallback_keys;\n\t\t// biome-ignore lint/performance/noDelete: same as above\n\t\tdelete data._upsert_fallback_set;\n\n\t\t// _block_height and _tx_id are captured at insert/upsert time (not flush time)\n\t\t// to ensure correct tx attribution when multiple txs are batched per block\n\t\tif (!data._block_height) data._block_height = this.block.height;\n\t\tif (!data._tx_id) data._tx_id = this._tx.txId;\n\t\tdata._created_at = \"NOW()\";\n\n\t\tconst cols = Object.keys(data);\n\t\tcols.forEach(validateColumnName);\n\t\tconst vals = cols.map((c) =>\n\t\t\tdata[c] === \"NOW()\" ? \"NOW()\" : escapeLiteral(data[c]),\n\t\t);\n\n\t\t// Batch key: table + sorted columns + upsert key signature (spread to avoid mutating cols)\n\t\tconst batchKey = `${op.table}:${[...cols].sort().join(\",\")}:${upsertKeys ? [...upsertKeys].sort().join(\",\") : \"\"}`;\n\n\t\treturn { data, cols, vals, upsertKeys, batchKey };\n\t}\n\n\t/**\n\t * Lazily create `_journal` for schemas deployed before it existed. Cached\n\t * per process only once CONFIRMED present (to_regclass) — a CREATE issued\n\t * inside a block tx could roll back with it, so self-created tables are\n\t * re-verified on the next flush instead of trusted.\n\t */\n\tprivate async ensureJournalTable(): Promise<void> {\n\t\tif (!this.journal || journalEnsured.has(this.pgSchemaName)) return;\n\t\tconst { rows } = await sql\n\t\t\t.raw(`SELECT to_regclass('\"${this.pgSchemaName}\".\"_journal\"') AS r`)\n\t\t\t.execute(this.db);\n\t\tif ((rows as { r: unknown }[])[0]?.r) {\n\t\t\tjournalEnsured.add(this.pgSchemaName);\n\t\t\treturn;\n\t\t}\n\t\t// Schema names are generator-produced lowercase identifiers, so the\n\t\t// unquoted form emitJournalDDL emits is safe.\n\t\tfor (const stmt of emitJournalDDL(this.pgSchemaName)) {\n\t\t\tawait sql.raw(stmt).execute(this.db);\n\t\t}\n\t}\n\n\t/** SQL type of a user column (for casting journal key VALUES), if known. */\n\tprivate columnSqlType(table: string, col: string): string | undefined {\n\t\tconst def = this.subgraphSchema[table]?.columns?.[col];\n\t\treturn def ? TYPE_MAP[def.type] : undefined;\n\t}\n\n\t/**\n\t * Journal pre-images for a keyed batch: one `_journal` row per key with the\n\t * row's current state (`prev_row`), or NULL when the key doesn't exist yet\n\t * (the mutation will create it — a revert deletes it). Emitted BEFORE the\n\t * mutation statement, same transaction.\n\t */\n\tprivate journalCaptureSQL(\n\t\ttable: string,\n\t\tkeyCols: string[],\n\t\t/** One escaped-literal tuple per key, ordered like keyCols. */\n\t\tkeyLiteralRows: string[][],\n\t): string {\n\t\tconst cast = (col: string, expr: string) => {\n\t\t\tconst t = this.columnSqlType(table, col);\n\t\t\treturn t ? `CAST(${expr} AS ${t})` : expr;\n\t\t};\n\t\tconst keyObj = keyCols\n\t\t\t.map((k) => `'${k}', ${cast(k, `v.\"${k}\"`)}`)\n\t\t\t.join(\", \");\n\t\tconst joinCond = keyCols\n\t\t\t.map((k) => `t.\"${k}\" = ${cast(k, `v.\"${k}\"`)}`)\n\t\t\t.join(\" AND \");\n\t\tconst valuesList = keyLiteralRows\n\t\t\t.map((r) => `(${r.join(\", \")})`)\n\t\t\t.join(\", \");\n\t\treturn (\n\t\t\t`INSERT INTO \"${this.pgSchemaName}\".\"_journal\" (\"block_height\", \"table_name\", \"row_key\", \"prev_row\") ` +\n\t\t\t`SELECT ${this.block.height}, '${table}', jsonb_build_object(${keyObj}), to_jsonb(t.*) ` +\n\t\t\t`FROM (VALUES ${valuesList}) AS v(${keyCols.map((k) => `\"${k}\"`).join(\", \")}) ` +\n\t\t\t`LEFT JOIN \"${this.pgSchemaName}\".\"${table}\" t ON ${joinCond}`\n\t\t);\n\t}\n\n\t/** Journal pre-images of rows a where-clause mutation will touch, keyed by `_id`. */\n\tprivate journalCaptureByWhereSQL(table: string, clause: string): string {\n\t\treturn (\n\t\t\t`INSERT INTO \"${this.pgSchemaName}\".\"_journal\" (\"block_height\", \"table_name\", \"row_key\", \"prev_row\") ` +\n\t\t\t`SELECT ${this.block.height}, '${table}', jsonb_build_object('_id', t.\"_id\"), to_jsonb(t.*) ` +\n\t\t\t`FROM \"${this.pgSchemaName}\".\"${table}\" t WHERE ${clause}`\n\t\t);\n\t}\n\n\t/** Build SQL statements from write ops, batching compatible INSERTs. */\n\tprivate buildStatements(ops: WriteOp[]): FlushStatement[] {\n\t\tconst statements: FlushStatement[] = [];\n\n\t\t// Group consecutive inserts by batch key\n\t\ttype InsertBatch = {\n\t\t\ttable: string;\n\t\t\tcols: string[];\n\t\t\trows: string[][];\n\t\t\tupsertKeys: string[] | undefined;\n\t\t};\n\n\t\t// Consecutive increments on the same (table, key cols, delta cols)\n\t\t// coalesce: same-key deltas SUM (they commute), then compile to one\n\t\t// multi-row INSERT ... ON CONFLICT DO UPDATE SET c = COALESCE(c,0)+EXCLUDED.c.\n\t\ttype IncrementBatch = {\n\t\t\ttable: string;\n\t\t\tkeyCols: string[];\n\t\t\tdeltaCols: string[];\n\t\t\t/** key signature → { key values, summed deltas, insert-time meta } */\n\t\t\trows: Map<\n\t\t\t\tstring,\n\t\t\t\t{\n\t\t\t\t\tkeys: Record<string, unknown>;\n\t\t\t\t\tdeltas: Record<string, bigint>;\n\t\t\t\t\tmeta: { blockHeight: unknown; txId: unknown };\n\t\t\t\t}\n\t\t\t>;\n\t\t};\n\n\t\tlet currentBatch: InsertBatch | null = null;\n\t\tlet currentBatchKey = \"\";\n\t\tlet incBatch: IncrementBatch | null = null;\n\t\tlet incBatchKey = \"\";\n\n\t\tconst flushIncrementBatch = () => {\n\t\t\tif (!incBatch) return;\n\t\t\tconst batch = incBatch;\n\t\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${batch.table}\"`;\n\t\t\tconst cols = [\n\t\t\t\t...batch.keyCols,\n\t\t\t\t...batch.deltaCols,\n\t\t\t\t\"_block_height\",\n\t\t\t\t\"_tx_id\",\n\t\t\t\t\"_created_at\",\n\t\t\t];\n\t\t\tif (this.journal) {\n\t\t\t\tstatements.push(\n\t\t\t\t\tthis.journalCaptureSQL(\n\t\t\t\t\t\tbatch.table,\n\t\t\t\t\t\tbatch.keyCols,\n\t\t\t\t\t\tArray.from(batch.rows.values()).map((r) =>\n\t\t\t\t\t\t\tbatch.keyCols.map((k) => escapeLiteral(r.keys[k])),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\t// NOT insert-on-conflict: Postgres validates the PROPOSED insert\n\t\t\t// tuple against CHECK constraints BEFORE conflict arbitration, so a\n\t\t\t// negative delta against an EXISTING row (every debit on a uint\n\t\t\t// balance) errors even though DO UPDATE would produce a legal value\n\t\t\t// (prod halts at sbtc 341445 / usdcx 5269728; empirically verified).\n\t\t\t// UPDATE-first lets the CHECK see the FINAL value; the guarded\n\t\t\t// INSERT covers missing rows — where a negative delta is a GENUINE\n\t\t\t// violation and must still fail loudly.\n\t\t\t//\n\t\t\t// The pair is emitted as ONE step rather than two statements because\n\t\t\t// the executor must branch on their rowcounts: an INSERT that wrote\n\t\t\t// nothing means a concurrent transaction created the row after our\n\t\t\t// UPDATE missed it, and the delta has to be re-applied instead of\n\t\t\t// silently dropped. See `execStatements`.\n\t\t\tfor (const r of batch.rows.values()) {\n\t\t\t\tconst keyPred = batch.keyCols\n\t\t\t\t\t.map((k) => `\"${k}\" = ${escapeLiteral(r.keys[k])}`)\n\t\t\t\t\t.join(\" AND \");\n\t\t\t\tconst updSet = batch.deltaCols\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(c) =>\n\t\t\t\t\t\t\t`\"${c}\" = COALESCE(\"${c}\", 0) + (${String(r.deltas[c] ?? 0n)})`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\", \");\n\t\t\t\tconst insertVals = [\n\t\t\t\t\t...batch.keyCols.map((k) => escapeLiteral(r.keys[k])),\n\t\t\t\t\t...batch.deltaCols.map((c) => String(r.deltas[c] ?? 0n)),\n\t\t\t\t\tescapeLiteral(r.meta.blockHeight),\n\t\t\t\t\tescapeLiteral(r.meta.txId),\n\t\t\t\t\t\"NOW()\",\n\t\t\t\t];\n\t\t\t\tstatements.push({\n\t\t\t\t\tkind: \"increment\",\n\t\t\t\t\ttable: batch.table,\n\t\t\t\t\tkeyPred,\n\t\t\t\t\tupdate: `UPDATE ${qualifiedTable} SET ${updSet} WHERE ${keyPred}`,\n\t\t\t\t\tinsert:\n\t\t\t\t\t\t`INSERT INTO ${qualifiedTable} (${cols.map((c) => `\"${c}\"`).join(\", \")}) ` +\n\t\t\t\t\t\t`SELECT ${insertVals.join(\", \")} ` +\n\t\t\t\t\t\t`WHERE NOT EXISTS (SELECT 1 FROM ${qualifiedTable} WHERE ${keyPred})`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tincBatch = null;\n\t\t\tincBatchKey = \"\";\n\t\t};\n\n\t\tconst flushInsertBatch = () => {\n\t\t\tif (!currentBatch) return;\n\t\t\tconst batch = currentBatch;\n\t\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${batch.table}\"`;\n\t\t\tconst colList = batch.cols.map((c) => `\"${c}\"`).join(\", \");\n\n\t\t\t// Collapse same-key rows (Postgres rejects duplicate keys in one\n\t\t\t// INSERT) the way separate statements' ON CONFLICT would: user\n\t\t\t// columns take the last write, system columns keep the first.\n\t\t\tlet rows = batch.rows;\n\t\t\tif (batch.upsertKeys && batch.upsertKeys.length > 0) {\n\t\t\t\tconst keyIndices = batch.upsertKeys.map((k) => batch.cols.indexOf(k));\n\t\t\t\tconst byKey = new Map<string, string[]>();\n\t\t\t\tfor (const row of rows) {\n\t\t\t\t\tconst key = keyIndices.map((ki) => row[ki]).join(\"\\0\");\n\t\t\t\t\tconst first = byKey.get(key);\n\t\t\t\t\tif (!first) {\n\t\t\t\t\t\tbyKey.set(key, [...row]);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbatch.cols.forEach((c, ci) => {\n\t\t\t\t\t\tif (!isSystemColumn(c)) first[ci] = row[ci] as string;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\trows = [...byKey.values()];\n\t\t\t}\n\n\t\t\tconst valuesList = rows.map((r) => `(${r.join(\", \")})`).join(\", \");\n\t\t\tlet stmt = `INSERT INTO ${qualifiedTable} (${colList}) VALUES ${valuesList}`;\n\n\t\t\t// Plain inserts are append-only (revert = delete by _block_height);\n\t\t\t// only keyed upserts can overwrite state worth journaling.\n\t\t\tif (this.journal && batch.upsertKeys && batch.upsertKeys.length > 0) {\n\t\t\t\tconst uKeys = batch.upsertKeys;\n\t\t\t\tconst keyIndices = uKeys.map((k) => batch.cols.indexOf(k));\n\t\t\t\tstatements.push(\n\t\t\t\t\tthis.journalCaptureSQL(\n\t\t\t\t\t\tbatch.table,\n\t\t\t\t\t\tuKeys,\n\t\t\t\t\t\trows.map((r) => keyIndices.map((ki) => r[ki])),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (batch.upsertKeys && batch.upsertKeys.length > 0) {\n\t\t\t\tconst batchKeys = batch.upsertKeys;\n\t\t\t\tconst updateCols = batch.cols.filter(\n\t\t\t\t\t(c) => !batchKeys.includes(c) && !isSystemColumn(c),\n\t\t\t\t);\n\t\t\t\tif (updateCols.length > 0) {\n\t\t\t\t\tconst setClauses = updateCols.map((c) => `\"${c}\" = EXCLUDED.\"${c}\"`);\n\t\t\t\t\tstmt += ` ON CONFLICT (${batchKeys.map((k) => `\"${k}\"`).join(\", \")}) DO UPDATE SET ${setClauses.join(\", \")}`;\n\t\t\t\t} else {\n\t\t\t\t\tstmt += ` ON CONFLICT (${batchKeys.map((k) => `\"${k}\"`).join(\", \")}) DO NOTHING`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstatements.push(stmt);\n\t\t\tcurrentBatch = null;\n\t\t\tcurrentBatchKey = \"\";\n\t\t};\n\n\t\tfor (const op of ops) {\n\t\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${op.table}\"`;\n\n\t\t\tif (op.kind === \"insert\") {\n\t\t\t\tflushIncrementBatch();\n\t\t\t\tconst { cols, vals, upsertKeys, batchKey } = this.prepareInsert(op);\n\n\t\t\t\tif (batchKey === currentBatchKey && currentBatch) {\n\t\t\t\t\t// Same table + columns + upsert key — append to batch\n\t\t\t\t\tcurrentBatch.rows.push(vals);\n\t\t\t\t} else {\n\t\t\t\t\t// Different batch — flush previous and start new\n\t\t\t\t\tflushInsertBatch();\n\t\t\t\t\tcurrentBatch = { table: op.table, cols, rows: [vals], upsertKeys };\n\t\t\t\t\tcurrentBatchKey = batchKey;\n\t\t\t\t}\n\t\t\t} else if (op.kind === \"increment\") {\n\t\t\t\tflushInsertBatch();\n\t\t\t\tconst keyCols = [...(op.data._upsert_keys as string[])].sort();\n\t\t\t\tconst deltaCols = Object.keys(op.set ?? {}).sort();\n\t\t\t\tconst batchKey = `inc:${op.table}:${keyCols.join(\",\")}:${deltaCols.join(\",\")}`;\n\t\t\t\tif (batchKey !== incBatchKey || !incBatch) {\n\t\t\t\t\tflushIncrementBatch();\n\t\t\t\t\tincBatch = { table: op.table, keyCols, deltaCols, rows: new Map() };\n\t\t\t\t\tincBatchKey = batchKey;\n\t\t\t\t}\n\t\t\t\tconst clean = stripControlKeys(op.data);\n\t\t\t\tconst keySig = keyCols.map((k) => escapeLiteral(clean[k])).join(\"\\0\");\n\t\t\t\tconst existing = incBatch.rows.get(keySig);\n\t\t\t\tif (existing) {\n\t\t\t\t\tfor (const c of deltaCols) {\n\t\t\t\t\t\texisting.deltas[c] =\n\t\t\t\t\t\t\t(existing.deltas[c] ?? 0n) + toBigIntOr0(op.set?.[c]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst deltas: Record<string, bigint> = {};\n\t\t\t\t\tfor (const c of deltaCols) deltas[c] = toBigIntOr0(op.set?.[c]);\n\t\t\t\t\tincBatch.rows.set(keySig, {\n\t\t\t\t\t\tkeys: clean,\n\t\t\t\t\t\tdeltas,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tblockHeight: op.data._block_height ?? this.block.height,\n\t\t\t\t\t\t\ttxId: op.data._tx_id ?? this._tx.txId,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Non-insert — flush any pending batches first\n\t\t\t\tflushInsertBatch();\n\t\t\t\tflushIncrementBatch();\n\n\t\t\t\tif (op.kind === \"update\") {\n\t\t\t\t\tconst setEntries = Object.entries(op.set ?? {});\n\t\t\t\t\tfor (const [k] of setEntries) validateColumnName(k);\n\t\t\t\t\tconst setClauses = setEntries.map(\n\t\t\t\t\t\t([k, v]) => `\"${k}\" = ${escapeLiteral(v)}`,\n\t\t\t\t\t);\n\t\t\t\t\tconst { clause } = buildWhereClause(op.data);\n\t\t\t\t\tif (this.journal) {\n\t\t\t\t\t\tstatements.push(this.journalCaptureByWhereSQL(op.table, clause));\n\t\t\t\t\t}\n\t\t\t\t\tstatements.push(\n\t\t\t\t\t\t`UPDATE ${qualifiedTable} SET ${setClauses.join(\", \")} WHERE ${clause}`,\n\t\t\t\t\t);\n\t\t\t\t} else if (op.kind === \"delete\") {\n\t\t\t\t\tconst { clause } = buildWhereClause(op.data);\n\t\t\t\t\tif (this.journal) {\n\t\t\t\t\t\tstatements.push(this.journalCaptureByWhereSQL(op.table, clause));\n\t\t\t\t\t}\n\t\t\t\t\tstatements.push(`DELETE FROM ${qualifiedTable} WHERE ${clause}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flush any remaining batches\n\t\tflushInsertBatch();\n\t\tflushIncrementBatch();\n\n\t\treturn statements;\n\t}\n\n\tprivate validateTable(table: string): void {\n\t\tif (!this.subgraphSchema[table]) {\n\t\t\tthrow new Error(\n\t\t\t\t`Table \"${table}\" not found in subgraph schema. Available: [${Object.keys(this.subgraphSchema).join(\", \")}]`,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// --- Helpers ---\n\n/**\n * System columns (`_block_height`, `_tx_id`, `_created_at`, `_id`) record a\n * row's creation. The write that creates a key sets them; a later upsert or\n * increment on that key, earlier in the same block or in any later block,\n * changes only user columns (last write wins) and never moves them. A key\n * deleted and written again is a new row, so its new writer sets them.\n */\nfunction isSystemColumn(col: string): boolean {\n\treturn col.startsWith(\"_\");\n}\n\n/** Drop internal upsert control keys from an op's data. */\nfunction stripControlKeys(\n\tdata: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst {\n\t\t_upsert_keys: _a,\n\t\t_upsert_fallback_keys: _b,\n\t\t_upsert_fallback_set: _c,\n\t\t...clean\n\t} = data;\n\treturn clean;\n}\n\n/** Loose value equality across bigint/number/string representations. */\nfunction valEq(a: unknown, b: unknown): boolean {\n\tif (a === b) return true;\n\tif (a == null || b == null) return false;\n\treturn String(a) === String(b);\n}\n\n/** Does `row` satisfy every column constraint in `where`? */\nfunction rowMatches(\n\trow: Record<string, unknown>,\n\twhere: Record<string, unknown>,\n): boolean {\n\treturn Object.entries(where).every(([k, v]) => valEq(row[k], v));\n}\n\nfunction toBigIntOr0(v: unknown): bigint {\n\tif (typeof v === \"bigint\") return v;\n\tif (v == null) return 0n;\n\ttry {\n\t\treturn BigInt(String(v));\n\t} catch {\n\t\treturn 0n;\n\t}\n}\n\n/** Coerce a row for JSON serialization — bigints become strings. */\nfunction jsonSafe(row: Record<string, unknown>): Record<string, unknown> {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(row)) {\n\t\tout[k] = typeof v === \"bigint\" ? v.toString() : v;\n\t}\n\treturn out;\n}\n\nfunction escapeLiteral(value: unknown): string {\n\tif (value === null || value === undefined) return \"NULL\";\n\tif (typeof value === \"number\" || typeof value === \"bigint\")\n\t\treturn String(value);\n\tif (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n\tif (typeof value === \"object\")\n\t\treturn `'${JSON.stringify(value, (_k, v) => (typeof v === \"bigint\" ? v.toString() : v)).replace(/'/g, \"''\")}'::jsonb`;\n\t// String — escape single quotes\n\treturn `'${String(value).replace(/'/g, \"''\")}'`;\n}\n\nfunction buildWhereClause(where: Record<string, unknown>): {\n\tclause: string;\n\tvalues: unknown[];\n} {\n\tconst entries = Object.entries(where);\n\tif (entries.length === 0) return { clause: \"TRUE\", values: [] };\n\n\tfor (const [k] of entries) validateColumnName(k);\n\tconst parts = entries.map(([k, v]) => `\"${k}\" = ${escapeLiteral(v)}`);\n\treturn { clause: parts.join(\" AND \"), values: [] };\n}\n",
|
|
6
6
|
"import { createHash } from \"node:crypto\";\nimport type {\n\tColumnType,\n\tSubgraphDefinition,\n\tSubgraphTable,\n} from \"../types.ts\";\nimport { pgSchemaName, quotePgIdent } from \"./utils.ts\";\n\nexport const TYPE_MAP: Record<ColumnType, string> = {\n\ttext: \"TEXT\",\n\tuint: \"NUMERIC\",\n\tint: \"NUMERIC\",\n\tprincipal: \"TEXT\",\n\tboolean: \"BOOLEAN\",\n\ttimestamp: \"TIMESTAMPTZ\",\n\tjsonb: \"JSONB\",\n};\n\n/** The SQL statements for a subgraph's tables and their hash. */\nexport interface GeneratedSQL {\n\tstatements: string[];\n\thash: string;\n}\n\n// Postgres truncates identifiers over 63 bytes. schema/table/column names are\n// each individually capped at 63 (SqlIdentifierSchema / SubgraphNameSchema),\n// but concatenated (`idx_<schema>_<table>_<col>_id`, plus an optional\n// account-scoped schema prefix) they can exceed that — two different columns\n// could then truncate to the same name and silently collide on CREATE INDEX.\n// Route the sort-composite name through here: short names pass through\n// unchanged (human-readable, matches the single-column naming style); an\n// oversized name is truncated and given a content hash suffix so it can't\n// collide with a different oversized name that happens to share a prefix.\nconst MAX_IDENT_BYTES = 63;\nfunction safeIndexName(name: string): string {\n\tif (name.length <= MAX_IDENT_BYTES) return name;\n\tconst hash = createHash(\"sha256\").update(name).digest(\"hex\").slice(0, 8);\n\treturn `${name.slice(0, MAX_IDENT_BYTES - hash.length - 1)}_${hash}`;\n}\n\n/**\n * Plain equality index + `/v1` keyset composite `(col, _id)` for one\n * `indexed` column. Single source for {@link emitTableDDL} and additive\n * deploy — a missing composite on the add/flag-flip path made deep\n * `?_sort=` pages Filter/re-sort instead of an index-only scan.\n */\nexport function emitIndexedColumnIndexDDL(\n\tschemaName: string,\n\ttableName: string,\n\tcolName: string,\n\topts?: { concurrently?: boolean },\n): { create: string[]; drop: string[] } {\n\tconst concurrently = opts?.concurrently ? \" CONCURRENTLY\" : \"\";\n\tconst qualified = `${quotePgIdent(schemaName)}.${quotePgIdent(tableName)}`;\n\tconst plain = `idx_${schemaName}_${tableName}_${colName}`;\n\tconst composite = safeIndexName(\n\t\t`idx_${schemaName}_${tableName}_${colName}_id`,\n\t);\n\tconst col = quotePgIdent(colName);\n\tconst id = quotePgIdent(\"_id\");\n\treturn {\n\t\tcreate: [\n\t\t\t`CREATE INDEX${concurrently} IF NOT EXISTS ${quotePgIdent(plain)} ON ${qualified} (${col})`,\n\t\t\t`CREATE INDEX${concurrently} IF NOT EXISTS ${quotePgIdent(composite)} ON ${qualified} (${col}, ${id})`,\n\t\t],\n\t\tdrop: [\n\t\t\t`DROP INDEX${concurrently} IF EXISTS ${quotePgIdent(schemaName)}.${quotePgIdent(plain)}`,\n\t\t\t`DROP INDEX${concurrently} IF EXISTS ${quotePgIdent(schemaName)}.${quotePgIdent(composite)}`,\n\t\t],\n\t};\n}\n\nfunction escapeLiteralDefault(value: unknown): string {\n\tif (value === null || value === undefined) return \"NULL\";\n\tif (typeof value === \"number\" || typeof value === \"bigint\")\n\t\treturn String(value);\n\tif (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n\treturn `'${String(value).replace(/'/g, \"''\")}'`;\n}\n\n/** True if any column on the table uses full-text `search` (needs the pg_trgm\n * extension before its GIN index can be created). */\nexport function tableNeedsTrgm(tableDef: SubgraphTable): boolean {\n\treturn Object.values(tableDef.columns).some((col) => col.search);\n}\n\n/**\n * All per-table DDL for ONE table — create + meta/user/composite indexes + UNIQUE\n * constraints. Single-sourced so the full\n * generator and the deployer's additive-create path can't drift — a missing\n * UNIQUE or DEFAULT here would make a handler `upsert ON CONFLICT` fail at runtime.\n */\nexport function emitTableDDL(\n\tschemaName: string,\n\ttableName: string,\n\ttableDef: SubgraphTable,\n): string[] {\n\tconst qualifiedName = `${quotePgIdent(schemaName)}.${quotePgIdent(tableName)}`;\n\tconst statements: string[] = [];\n\n\tconst columnDefs: string[] = [\n\t\t\"_id BIGSERIAL PRIMARY KEY\",\n\t\t\"_block_height BIGINT NOT NULL\",\n\t\t\"_tx_id TEXT NOT NULL\",\n\t\t\"_created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\",\n\t];\n\tfor (const [colName, col] of Object.entries(tableDef.columns)) {\n\t\tconst sqlType = TYPE_MAP[col.type];\n\t\tconst nullable = col.nullable ? \"\" : \" NOT NULL\";\n\t\tlet colDef = `${quotePgIdent(colName)} ${sqlType}${nullable}`;\n\t\tif (col.default !== undefined) {\n\t\t\tcolDef += ` DEFAULT ${escapeLiteralDefault(col.default)}`;\n\t\t}\n\t\t// uint is unsigned by definition — fail loudly instead of silently\n\t\t// storing a negative (fix-f040 B4). Handlers run in chain order, so a\n\t\t// legitimate same-block receive-then-spend never trips this.\n\t\tif (col.type === \"uint\") {\n\t\t\tcolDef += ` CHECK (${quotePgIdent(colName)} >= 0)`;\n\t\t}\n\t\tcolumnDefs.push(colDef);\n\t}\n\tstatements.push(\n\t\t`CREATE TABLE IF NOT EXISTS ${qualifiedName} (\\n ${columnDefs.join(\",\\n \")}\\n)`,\n\t);\n\n\t// Auto-indexes on meta columns.\n\tstatements.push(\n\t\t`CREATE INDEX IF NOT EXISTS ${quotePgIdent(`idx_${schemaName}_${tableName}_block_height`)} ON ${qualifiedName} (_block_height)`,\n\t);\n\tstatements.push(\n\t\t`CREATE INDEX IF NOT EXISTS ${quotePgIdent(`idx_${schemaName}_${tableName}_tx_id`)} ON ${qualifiedName} (_tx_id)`,\n\t);\n\n\t// Single-column indexes, plus a composite `(col, \"_id\")` sort index.\n\t// `/v1`'s `?_sort=<col>&_order=` keyset predicate compares `(col, \"_id\")`\n\t// and orders by `col, \"_id\"` — a composite index matches that exactly, so\n\t// deep pages on a low-cardinality column become an index-only scan instead\n\t// of a Filter/re-sort within each value group. The single-column index\n\t// stays too: it still serves plain equality filters (`?col=value`).\n\tfor (const [colName, col] of Object.entries(tableDef.columns)) {\n\t\tif (col.indexed) {\n\t\t\tstatements.push(\n\t\t\t\t...emitIndexedColumnIndexDDL(schemaName, tableName, colName).create,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Trigram GIN indexes for search columns.\n\tfor (const [colName, col] of Object.entries(tableDef.columns)) {\n\t\tif (col.search) {\n\t\t\tstatements.push(\n\t\t\t\t`CREATE INDEX IF NOT EXISTS ${quotePgIdent(`idx_${schemaName}_${tableName}_${colName}_trgm`)} ON ${qualifiedName} USING gin (${quotePgIdent(colName)} gin_trgm_ops)`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Composite indexes.\n\tif (tableDef.indexes) {\n\t\tfor (let i = 0; i < tableDef.indexes.length; i++) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\tconst cols = tableDef.indexes[i]!;\n\t\t\tconst idxName = quotePgIdent(\n\t\t\t\t`idx_${schemaName}_${tableName}_composite_${i}`,\n\t\t\t);\n\t\t\tstatements.push(\n\t\t\t\t`CREATE INDEX IF NOT EXISTS ${idxName} ON ${qualifiedName} (${cols.map(quotePgIdent).join(\", \")})`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Unique constraints (required for upsert ON CONFLICT).\n\tif (tableDef.uniqueKeys) {\n\t\tfor (let i = 0; i < tableDef.uniqueKeys.length; i++) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\tconst cols = tableDef.uniqueKeys[i]!;\n\t\t\tconst constraintName = quotePgIdent(\n\t\t\t\t`uq_${schemaName}_${tableName}_${cols.join(\"_\")}`,\n\t\t\t);\n\t\t\tstatements.push(\n\t\t\t\t`ALTER TABLE ${qualifiedName} ADD CONSTRAINT ${constraintName} UNIQUE (${cols.map(quotePgIdent).join(\", \")})`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn statements;\n}\n\n/**\n * Per-schema revert journal. Before every keyed mutation (upsert / increment /\n * update / delete) the flush records the row's prior state; a reorg restores\n * those states instead of deleting whole rows by `_block_height` — which is\n * only correct for append-only tables, not accumulators (fix-f040 B2).\n * `prev_row IS NULL` marks a row first created by the journaled op.\n */\nexport function emitJournalDDL(schemaName: string): string[] {\n\treturn [\n\t\t`CREATE TABLE IF NOT EXISTS ${schemaName}._journal (\n _jid BIGSERIAL PRIMARY KEY,\n block_height BIGINT NOT NULL,\n table_name TEXT NOT NULL,\n row_key JSONB NOT NULL,\n prev_row JSONB,\n _created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n)`,\n\t\t`CREATE INDEX IF NOT EXISTS idx_${schemaName}_journal_height ON ${schemaName}._journal (block_height)`,\n\t];\n}\n\n/**\n * Storage for factory-discovered addresses.\n *\n * `block_height` is what makes the set reorg-scoped: the reorg handler\n * deletes rows at or above the fork alongside the data tables, so an address\n * revealed on an orphaned chain does not linger in the matcher forever\n * (the failure mode a set kept outside the rollback model would have).\n */\nexport function emitFactoryDDL(schemaName: string): string[] {\n\treturn [\n\t\t`CREATE TABLE IF NOT EXISTS ${schemaName}._factory_addresses (\n source_name TEXT NOT NULL,\n address TEXT NOT NULL,\n block_height BIGINT NOT NULL,\n _created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n PRIMARY KEY (source_name, address)\n)`,\n\t\t`CREATE INDEX IF NOT EXISTS idx_${schemaName}_factory_height ON ${schemaName}._factory_addresses (block_height)`,\n\t];\n}\n\n/**\n * Generates PostgreSQL DDL statements for a subgraph definition.\n * Creates a dedicated schema `subgraph_<name>` with one table per schema entry,\n * each with auto-columns and indexes.\n */\nexport function generateSubgraphSQL(\n\tdef: SubgraphDefinition,\n\tschemaNameOverride?: string,\n): GeneratedSQL {\n\tconst schemaName = schemaNameOverride ?? pgSchemaName(def.name);\n\tconst statements: string[] = [];\n\n\t// Check if any column uses search (trigram)\n\tconst needsTrgm = Object.values(def.schema).some((table) =>\n\t\tObject.values(table.columns).some((col) => col.search),\n\t);\n\n\tif (needsTrgm) {\n\t\tstatements.push(\"CREATE EXTENSION IF NOT EXISTS pg_trgm\");\n\t}\n\n\t// Schema namespace\n\tstatements.push(`CREATE SCHEMA IF NOT EXISTS ${schemaName}`);\n\n\t// One table per schema entry (single-sourced per-table DDL).\n\tfor (const [tableName, tableDef] of Object.entries(def.schema)) {\n\t\tstatements.push(...emitTableDDL(schemaName, tableName, tableDef));\n\t}\n\n\t// Revert journal (one per schema) — see emitJournalDDL.\n\tstatements.push(...emitJournalDDL(schemaName));\n\t// Only when a source actually uses a factory — no dead table otherwise.\n\tif (\n\t\tObject.values(def.sources ?? {}).some(\n\t\t\t(src) => (src as { factory?: unknown }).factory !== undefined,\n\t\t)\n\t) {\n\t\tstatements.push(...emitFactoryDDL(schemaName));\n\t}\n\n\t// Hash based on schema structure only — version intentionally excluded\n\t// so server-managed version bumps don't look like schema changes\n\tconst hashInput = JSON.stringify(\n\t\t{\n\t\t\tname: def.name,\n\t\t\tschema: def.schema,\n\t\t\tsources: def.sources,\n\t\t},\n\t\t(_key, value) => (typeof value === \"bigint\" ? value.toString() : value),\n\t);\n\t// node crypto (not Bun.hash) so the published node-runtime `sl` CLI can\n\t// compute schema hashes too (e.g. `sl subgraphs spec`).\n\tconst hash = createHash(\"sha256\").update(hashInput).digest(\"hex\");\n\n\treturn { statements, hash };\n}\n",
|
|
7
7
|
"// Re-export canonical pgSchemaName from shared\nexport { pgSchemaName } from \"@secondlayer/shared/db/queries/subgraphs\";\n\n/**\n * Double-quotes a Postgres identifier unless it's already a safe bare\n * identifier, escaping any embedded double quotes. Defense-in-depth for the\n * DDL emitters: every name reaching them (schema/table/column names, and the\n * composite names generator.ts builds from them) is validated upstream\n * (`SqlIdentifierSchema` / `SubgraphNameSchema`), so this is a no-op for every\n * currently-valid name — output stays byte-identical. It only changes\n * anything if a hostile name (embedded quote, semicolon, whitespace, ...)\n * somehow reached this far, turning it into an inert quoted identifier\n * instead of raw SQL.\n */\nexport function quotePgIdent(name: string): string {\n\tif (/^[a-z_][a-z0-9_]*$/i.test(name)) return name;\n\treturn `\"${name.replace(/\"/g, '\"\"')}\"`;\n}\n\n/** `user_account` → `userAccount`. Column and variable names in every emitted\n * ORM surface go through this. */\nexport function snakeToCamel(name: string): string {\n\treturn name.replace(/_([a-z0-9])/g, (_, c: string) => c.toUpperCase());\n}\n\n/** `user_account` → `UserAccount`. Type/model names for one table must agree\n * across the Prisma, Drizzle, Kysely, and index-codegen emitters — a user can\n * import from more than one, so this lives here rather than per-generator. */\nexport function pascalCase(name: string): string {\n\tconst camel = snakeToCamel(name);\n\treturn camel.charAt(0).toUpperCase() + camel.slice(1);\n}\n",
|
|
8
|
-
"import { getErrorMessage } from \"@secondlayer/shared\";\nimport { chainReadArgsHash } from \"@secondlayer/shared/chain-read\";\nimport { getSourceDb } from \"@secondlayer/shared/db\";\nimport { hasNoLocalChain } from \"@secondlayer/shared/db/queries/instance\";\nimport type { Database } from \"@secondlayer/shared/db/schema\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport {\n\thttp,\n\tHttpRequestError,\n\tReadContractError,\n\tcreatePublicClient,\n} from \"@secondlayer/stacks\";\nimport {\n\tContractResponseError,\n\ttype UnwrapResponse,\n\tbuildFunctionArgs,\n\tisResponseOutput,\n\treadContract,\n} from \"@secondlayer/stacks/actions\";\nimport type { ClarityValue } from \"@secondlayer/stacks/clarity\";\nimport type {\n\tAbiContract,\n\tAbiFunction,\n\tAbiType,\n\tExtractFunctionArgs,\n\tExtractFunctionOutput,\n\tExtractReadOnlyFunctions,\n\tToCamelCase,\n} from \"@secondlayer/stacks/clarity\";\nimport {\n\tclarityValueToJSUntyped,\n\tdeserializeCV,\n\tnormalizeAbi,\n\tserializeCV,\n\ttoCamelCase,\n} from \"@secondlayer/stacks/clarity\";\nimport type { Kysely } from \"kysely\";\nimport { HandlerReadError } from \"./realm.ts\";\n\n/**\n * How long a read stays valid.\n *\n * - `per-block` (default): pinned to the block being processed, cached under\n * its `index_block_hash`. Sound for any read-only function — reindexing the\n * same block always returns the same value, and a reorg-replaced block has a\n * different id so it can't inherit the orphaned answer.\n * - `contract-constant`: the caller asserts the value cannot change for this\n * contract and these args (SIP-010 `get-decimals`/`get-symbol`), so it is\n * resolved ONCE instead of once per block. This is the mode that makes a\n * backfill affordable — under `per-block` every block is a distinct key and\n * therefore a distinct RPC. Declaring it on a value that does change pins the\n * first answer forever, so it is opt-in and never inferred.\n */\nexport type ChainReadCacheMode = \"per-block\" | \"contract-constant\";\n\n/** Options for a contract read, such as cache mode. */\nexport type ChainReadOptions = { cache?: ChainReadCacheMode };\n\n/**\n * The chain-read surface, fully typed by an ABI.\n *\n * Shaped like `getContract` from `@secondlayer/stacks` — the same ABI in, the\n * same camelCased read methods out — minus `call`/`buildCall`: a handler\n * indexes the chain, it never writes to it.\n *\n * Reached through {@link readContractAt} rather than off `ctx.client`\n * directly: an ABI-generic method living on the context interface makes every\n * structural comparison of a subgraph definition instantiate it, which exceeds\n * TS's depth budget. At a call site the ABI is already concrete and it costs\n * nothing.\n */\nexport interface ChainReadClient {\n\t/**\n\t * Read-only methods of a contract, evaluated against the exact block being\n\t * processed.\n\t *\n\t * Every call is pinned to the block's `index_block_hash`, so a handler is a\n\t * pure function of its block: reindexing a range produces byte-identical\n\t * rows. Reading at the node's tip instead would make the same reindex\n\t * return different values — that is the corruption this refuses to allow,\n\t * so a block whose id was never persisted throws rather than falling back.\n\t *\n\t * Results are memoized in Postgres, so a value is fetched once per block\n\t * rather than once per event (or once per contract with\n\t * `cache: \"contract-constant\"`).\n\t */\n\tcontract<const C extends AbiContract>(\n\t\tcontractId: string,\n\t\tabi: C,\n\t\toptions?: ChainReadOptions,\n\t): { read: ChainReadMethods<C> };\n}\n\n/**\n * True for a structural empty mapped type (`{}`) and for codegen's\n * `Record<string, never>`. `keyof Record<string, never>` is `string`, so the\n * first check alone is not enough. Local copy of the `getContract` helper —\n * importing `ContractInstance<C>[\"read\"]` would re-enter the codegen-brand\n * conditional this type exists to avoid.\n */\ntype IsEmptyArgs<A> = [keyof A & string] extends [never]\n\t? true\n\t: Record<string, never> extends A\n\t\t? true\n\t\t: false;\n\ntype ChainReadMethod<A, R> = IsEmptyArgs<A> extends true\n\t? (args?: A) => R\n\t: (args: A) => R;\n\n/**\n * The camelCased read methods of an ABI. Spelled out rather than reused from\n * `ContractInstance<C>[\"read\"]`: that type is a conditional over the codegen\n * brand, and evaluating it wherever a subgraph definition is structurally\n * compared pushes TS past its instantiation depth.\n */\nexport type ChainReadMethods<C extends AbiContract> = {\n\t[N in ExtractReadOnlyFunctions<C> as ToCamelCase<N>]: ChainReadMethod<\n\t\tExtractFunctionArgs<C, N>,\n\t\tPromise<UnwrapResponse<ExtractFunctionOutput<C, N>>>\n\t>;\n};\n\n/**\n * `ChainReadClient` with the ABI generic erased. Structurally cheap, so the\n * base `SubgraphContext` can carry it; `TypedSubgraphContext` uses the real\n * one and handlers get full inference.\n */\nexport interface ErasedChainReadClient {\n\t// `abi: unknown`, not `AbiContract`: naming the ABI type here drags its\n\t// (deeply recursive) definition into every structural comparison of a\n\t// subgraph definition. `readContractAt` constrains it properly.\n\t/**\n\t * Reads a contract's read-only functions at the block being processed.\n\t *\n\t * Results are untyped here. Call it through `readContractAt` to get typed\n\t * results from the contract's ABI.\n\t */\n\tcontract(\n\t\tcontractId: string,\n\t\tabi: unknown,\n\t\toptions?: ChainReadOptions,\n\t): {\n\t\tread: Record<string, (args?: Record<string, unknown>) => Promise<unknown>>;\n\t};\n}\n\n/**\n * Reads a contract's read-only functions from a handler, with typed results.\n *\n * Pass `ctx`, the contract id and its ABI. Every call is pinned to the block\n * being processed. Set `options.cache` to `\"contract-constant\"` to fetch a\n * value once per contract instead of once per block.\n *\n * @example\n * ```ts\n * const token = readContractAt(ctx, contractId, SIP010_ABI, {\n * cache: \"contract-constant\",\n * });\n * const decimals = await token.read.getDecimals(); // bigint\n * ```\n */\nexport function readContractAt<const C extends AbiContract>(\n\tctx: { client: ErasedChainReadClient },\n\tcontractId: string,\n\tabi: C,\n\toptions?: ChainReadOptions,\n): { read: ChainReadMethods<C> } {\n\treturn ctx.client.contract(contractId, abi, options) as unknown as {\n\t\tread: ChainReadMethods<C>;\n\t};\n}\n\n/**\n * A handler asked for something no node can answer: a function missing from\n * the ABI, or one that isn't read-only. Deterministic, so it fails only the\n * event. A read the processor couldn't complete (no node, node down, cache\n * error) throws {@link HandlerReadError} instead and aborts the block.\n */\nexport class ChainReadError extends Error {\n\toverride name = \"ChainReadError\";\n}\n\nconst NO_NODE_MESSAGE =\n\t\"ctx.client needs a Stacks node: set STACKS_NODE_RPC_URL on the subgraph processor.\";\n\n/**\n * Where a cache miss is read from.\n *\n * - `node`: the processor's own node (`ctx.rpcUrl` / `STACKS_NODE_RPC_URL`).\n * An explicit node always wins.\n * - `hosted`: a hosted tenant has no node, so it reads through the hosted\n * api's `/v1/chain-read` route with its tenant key. Same `call-read` path\n * and body as a node, so `readContract` runs unchanged.\n */\ntype ReadTarget =\n\t| { kind: \"node\"; rpcUrl: string }\n\t| { kind: \"hosted\"; apiUrl: string; apiKey: string };\n\nasync function resolveReadTarget(\n\trpcUrl: string | undefined,\n\tdb: Kysely<Database>,\n): Promise<ReadTarget> {\n\tif (rpcUrl) return { kind: \"node\", rpcUrl };\n\tconst apiUrl = process.env.SUBGRAPH_INDEX_API_URL;\n\tif (!apiUrl || !(await hasNoLocalChain(db))) {\n\t\tthrow new HandlerReadError(NO_NODE_MESSAGE);\n\t}\n\tconst apiKey = process.env.INDEX_INTERNAL_API_KEY?.trim();\n\tif (!apiKey) {\n\t\tthrow new HandlerReadError(\n\t\t\t\"Hosted contract reads need the processor's key (INDEX_INTERNAL_API_KEY), and none is set. Set STACKS_NODE_RPC_URL to read a node directly instead.\",\n\t\t);\n\t}\n\treturn { kind: \"hosted\", apiUrl, apiKey };\n}\n\n/**\n * Turn a hosted route refusal into the right failure. A `400` is the\n * handler's own request (too many args, a bad name): deterministic, so it\n * fails only the event. A `403` means the key isn't a hosted tenant's: a\n * self-hosted processor pointed at the hosted api with its own key, which\n * must read its own node. Anything else aborts the block like a node outage.\n */\nfunction hostedReadError(err: unknown, label: string): Error | undefined {\n\tif (!(err instanceof HttpRequestError)) return undefined;\n\tif (err.status === 400) {\n\t\treturn new ChainReadError(\n\t\t\t`${label} was refused as invalid: ${err.details ?? err.message}`,\n\t\t);\n\t}\n\tif (err.status === 403) {\n\t\treturn new HandlerReadError(\n\t\t\t`${label}: hosted contract reads serve hosted subgraphs only. ${NO_NODE_MESSAGE}`,\n\t\t\t{ cause: err },\n\t\t);\n\t}\n\treturn undefined;\n}\n\n/**\n * True when the node answered for the pinned block. The answer is a fact of\n * the chain, so the handler owns it: `err` responses and contract runtime\n * errors fail only the event, like any other handler error.\n */\nfunction isChainAnswer(err: unknown): boolean {\n\treturn (\n\t\terr instanceof ContractResponseError || err instanceof ReadContractError\n\t);\n}\n\n/**\n * Transport for handler reads. Deliberately its own client rather than a\n * shared singleton: against a node, `retryCount: 0` keeps a slow node from\n * multiplying into the block's retry budget (`processBlockWithRetry` already\n * owns retries), and the concurrency gate below bounds how much of a backfill\n * can hit the node at once. Against the hosted route, the transport retries a\n * `429` (honoring `Retry-After`) and `5xx` a few times first: the route's rate\n * limit is a normal part of a backfill, not an outage.\n */\nfunction readClient(target: ReadTarget) {\n\tif (target.kind === \"node\") {\n\t\treturn createPublicClient({\n\t\t\ttransport: http(target.rpcUrl, { retryCount: 0, timeout: 10_000 }),\n\t\t});\n\t}\n\treturn createPublicClient({\n\t\ttransport: http(`${target.apiUrl.replace(/\\/+$/, \"\")}/v1/chain-read`, {\n\t\t\tretryCount: 3,\n\t\t\ttimeout: 10_000,\n\t\t\t// Bearer, like every hosted read plane; the transport's `apiKey`\n\t\t\t// option sends `x-api-key`, which hosted planes refuse.\n\t\t\tfetchOptions: {\n\t\t\t\theaders: { authorization: `Bearer ${target.apiKey}` },\n\t\t\t},\n\t\t}),\n\t});\n}\n\n/**\n * Cap concurrent node reads across all handlers in this process. A handler that\n * reads on every event turns a 100-block batch into thousands of in-flight\n * requests otherwise — enough to knock over the node the indexer depends on.\n */\nclass ConcurrencyGate {\n\tprivate active = 0;\n\tprivate queue: Array<() => void> = [];\n\n\tconstructor(private readonly limit: number) {}\n\n\tasync run<T>(fn: () => Promise<T>): Promise<T> {\n\t\tif (this.active >= this.limit) {\n\t\t\tawait new Promise<void>((resolve) => this.queue.push(resolve));\n\t\t}\n\t\tthis.active++;\n\t\ttry {\n\t\t\treturn await fn();\n\t\t} finally {\n\t\t\tthis.active--;\n\t\t\tthis.queue.shift()?.();\n\t\t}\n\t}\n}\n\nconst DEFAULT_MAX_CONCURRENT_READS = 4;\n\nfunction maxConcurrentReads(): number {\n\tconst raw = process.env.SUBGRAPH_CHAIN_READ_CONCURRENCY;\n\tconst parsed = raw ? Number.parseInt(raw, 10) : Number.NaN;\n\treturn Number.isFinite(parsed) && parsed > 0\n\t\t? parsed\n\t\t: DEFAULT_MAX_CONCURRENT_READS;\n}\n\nconst gate = new ConcurrencyGate(maxConcurrentReads());\n\n/** Stable key for an arg set — property order must not fork a cache entry.\n * The same hash the hosted chain-read route keys its cache with. */\nfunction hashArgs(args: readonly ClarityValue[]): string {\n\treturn chainReadArgsHash(args.map((arg) => serializeCV(arg)));\n}\n\nfunction findFunction(abi: AbiContract, name: string): AbiFunction {\n\tconst fn = abi.functions.find((f) => f.name === name) as\n\t\t| AbiFunction\n\t\t| undefined;\n\tif (!fn) {\n\t\tthrow new ChainReadError(`No function \"${name}\" in the supplied ABI.`);\n\t}\n\tif (fn.access !== \"read-only\") {\n\t\tthrow new ChainReadError(\n\t\t\t`\"${name}\" is ${fn.access}, not read-only — a handler cannot call it.`,\n\t\t);\n\t}\n\treturn fn;\n}\n\nexport type ChainReadContext = {\n\tblockHeight: number;\n\tindexBlockHash: string | null | undefined;\n\trpcUrl?: string;\n\tdb?: Kysely<Database>;\n};\n\n/**\n * Build the `ctx.client` surface for one block. Generic lives on the METHOD,\n * not here, so a handler's ABI narrows per call without infecting\n * `SubgraphContext` with a type parameter.\n */\n/**\n * Build the `ctx.client` surface for one block. The ABI generic lives on\n * `contract()`, not here, so a handler's types narrow per contract without\n * `SubgraphContext` carrying a type parameter.\n */\nexport function createChainReadClient(ctx: ChainReadContext): ChainReadClient {\n\t// The ABI generic is erased inside the implementation on purpose:\n\t// re-resolving `ExtractFunctionArgs` against an unfixed type parameter is\n\t// what pushes TS past its instantiation depth on a real-sized ABI.\n\tconst readValue = async (\n\t\tcontractId: string,\n\t\tabi: AbiContract,\n\t\tfunctionName: string,\n\t\targs: Record<string, unknown>,\n\t\toptions: ChainReadOptions,\n\t): Promise<unknown> => {\n\t\tconst db = ctx.db ?? getSourceDb();\n\t\tconst rpcUrl = ctx.rpcUrl || process.env.STACKS_NODE_RPC_URL || undefined;\n\t\t// No node and no hosted api to fall back to: say so before any I/O.\n\t\tif (!rpcUrl && !process.env.SUBGRAPH_INDEX_API_URL) {\n\t\t\tthrow new HandlerReadError(NO_NODE_MESSAGE);\n\t\t}\n\n\t\tconst constant = options.cache === \"contract-constant\";\n\t\tif (!constant && !ctx.indexBlockHash) {\n\t\t\tthrow new HandlerReadError(\n\t\t\t\t`Block ${ctx.blockHeight} has no index_block_hash, so a read cannot be pinned to it. Reading at the node's tip would make this handler non-deterministic (the same reindex would produce different rows). Re-ingest the block, or pass cache: \"contract-constant\" if the value genuinely cannot change.`,\n\t\t\t);\n\t\t}\n\n\t\tconst fn = findFunction(abi, functionName);\n\t\tconst clarityArgs = buildFunctionArgs(fn, args);\n\t\tconst argsHash = hashArgs(clarityArgs);\n\t\tconst pinnedTo = constant ? null : (ctx.indexBlockHash as string);\n\n\t\t// Everything from here to the cache write is the processor's I/O, not\n\t\t// the handler's logic: a failure aborts the block so it retries, rather\n\t\t// than committing the block without this event's rows.\n\t\tlet resultHex: string;\n\t\ttry {\n\t\t\tconst cached = await db\n\t\t\t\t.selectFrom(\"chain_read_cache\")\n\t\t\t\t.select(\"result_hex\")\n\t\t\t\t.where(\"contract_id\", \"=\", contractId)\n\t\t\t\t.where(\"function_name\", \"=\", fn.name)\n\t\t\t\t.where(\"args_hash\", \"=\", argsHash)\n\t\t\t\t.where((eb) =>\n\t\t\t\t\tpinnedTo === null\n\t\t\t\t\t\t? eb(\"index_block_hash\", \"is\", null)\n\t\t\t\t\t\t: eb(\"index_block_hash\", \"=\", pinnedTo),\n\t\t\t\t)\n\t\t\t\t.executeTakeFirst();\n\n\t\t\tresultHex =\n\t\t\t\tcached?.result_hex ??\n\t\t\t\t(await gate.run(async () => {\n\t\t\t\t\tconst target = await resolveReadTarget(rpcUrl, db);\n\t\t\t\t\t// A constant read still pins to this block where it can: \"cannot\n\t\t\t\t\t// change\" is a claim about future blocks, not a license to read\n\t\t\t\t\t// a tip that may be ahead of the one being processed.\n\t\t\t\t\tif (!ctx.indexBlockHash && target.kind === \"hosted\") {\n\t\t\t\t\t\t// The hosted route only ever answers pinned reads.\n\t\t\t\t\t\tthrow new HandlerReadError(\n\t\t\t\t\t\t\t`Block ${ctx.blockHeight} has no index_block_hash, so a hosted contract read cannot be pinned to it. Reindex the subgraph from this block once the block is re-ingested.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!ctx.indexBlockHash) {\n\t\t\t\t\t\t// The one path where an UNPINNED read happens. Reachable only\n\t\t\t\t\t\t// in constant mode on a block with no persisted id — which is\n\t\t\t\t\t\t// exactly what the pinning error tells you to do — so it is\n\t\t\t\t\t\t// allowed, but never silently.\n\t\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t\t\"Chain read is not pinned to a block (no index_block_hash)\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcontractId,\n\t\t\t\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\t\t\t\tblockHeight: ctx.blockHeight,\n\t\t\t\t\t\t\t\tnote: 'cache: \"contract-constant\" asserts this value cannot change; the node answered at its own tip',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst value = await readContract(readClient(target), {\n\t\t\t\t\t\t\tcontract: contractId,\n\t\t\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\t\t\targs: clarityArgs,\n\t\t\t\t\t\t\ttip: ctx.indexBlockHash ?? undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn serializeCV(value);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tthrow (\n\t\t\t\t\t\t\t(target.kind === \"hosted\" &&\n\t\t\t\t\t\t\t\thostedReadError(err, `Chain read ${contractId}::${fn.name}`)) ||\n\t\t\t\t\t\t\terr\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\tif (!cached) {\n\t\t\t\tawait db\n\t\t\t\t\t.insertInto(\"chain_read_cache\")\n\t\t\t\t\t.values({\n\t\t\t\t\t\tcontract_id: contractId,\n\t\t\t\t\t\tfunction_name: fn.name,\n\t\t\t\t\t\targs_hash: argsHash,\n\t\t\t\t\t\tindex_block_hash: pinnedTo,\n\t\t\t\t\t\tblock_height: constant ? null : ctx.blockHeight,\n\t\t\t\t\t\tresult_hex: resultHex,\n\t\t\t\t\t})\n\t\t\t\t\t// Two handlers in the same batch can race to the same key; the\n\t\t\t\t\t// value is identical either way, so the loser keeps its own.\n\t\t\t\t\t.onConflict((oc) => oc.doNothing())\n\t\t\t\t\t.execute();\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (\n\t\t\t\tisChainAnswer(err) ||\n\t\t\t\terr instanceof ChainReadError ||\n\t\t\t\terr instanceof HandlerReadError\n\t\t\t) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tthrow new HandlerReadError(\n\t\t\t\t`Chain read ${contractId}::${fn.name} at block ${ctx.blockHeight} failed: ${getErrorMessage(err)}`,\n\t\t\t\t{ cause: err },\n\t\t\t);\n\t\t}\n\n\t\tconst value = deserializeCV(resultHex);\n\t\tconst js = clarityValueToJSUntyped(fn.outputs as AbiType, value);\n\n\t\tif (isResponseOutput(fn.outputs as AbiType)) {\n\t\t\tconst response = js as { ok?: unknown; err?: unknown };\n\t\t\tif (\"ok\" in response) return response.ok;\n\t\t\tthrow new ContractResponseError(\n\t\t\t\t`${contractId}::${fn.name} returned an err response.`,\n\t\t\t\tresponse.err,\n\t\t\t);\n\t\t}\n\t\treturn js;\n\t};\n\n\treturn {\n\t\tcontract(contractId: string, rawAbi: AbiContract, options = {}) {\n\t\t\t// Accept a raw Hiro/Clarinet ABI as well as a normalized one — raw\n\t\t\t// ABIs wrap `outputs` as `{ type: … }`, which the JS bridge can't read.\n\t\t\tconst abi = normalizeAbi(rawAbi);\n\t\t\tconst camelToKebab = new Map<string, string>();\n\t\t\tfor (const fn of abi.functions) {\n\t\t\t\tcamelToKebab.set(toCamelCase(fn.name), fn.name);\n\t\t\t}\n\n\t\t\tconst read = new Proxy(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tget(_target, prop: string) {\n\t\t\t\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\t\t\t\treturn (args: Record<string, unknown> = {}) =>\n\t\t\t\t\t\t\treadValue(contractId, abi, fnName, args, options);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn { read } as never;\n\t\t},\n\t};\n}\n",
|
|
8
|
+
"import { getErrorMessage } from \"@secondlayer/shared\";\nimport { chainReadArgsHash } from \"@secondlayer/shared/chain-read\";\nimport { getSourceDb } from \"@secondlayer/shared/db\";\nimport { hasNoLocalChain } from \"@secondlayer/shared/db/queries/instance\";\nimport type { Database } from \"@secondlayer/shared/db/schema\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport {\n\thttp,\n\tHttpRequestError,\n\tReadContractError,\n\tcreatePublicClient,\n} from \"@secondlayer/stacks\";\nimport {\n\tContractResponseError,\n\ttype UnwrapResponse,\n\tbuildFunctionArgs,\n\tisResponseOutput,\n\treadContract,\n} from \"@secondlayer/stacks/actions\";\nimport type { ClarityValue } from \"@secondlayer/stacks/clarity\";\nimport type {\n\tAbiContract,\n\tAbiFunction,\n\tAbiType,\n\tExtractFunctionArgs,\n\tExtractFunctionOutput,\n\tExtractReadOnlyFunctions,\n\tToCamelCase,\n} from \"@secondlayer/stacks/clarity\";\nimport {\n\tclarityValueToJSUntyped,\n\tdeserializeCV,\n\tnormalizeAbi,\n\tserializeCV,\n\ttoCamelCase,\n} from \"@secondlayer/stacks/clarity\";\nimport type { Kysely } from \"kysely\";\nimport { HandlerReadError } from \"./realm.ts\";\n\n/**\n * How long a read stays valid.\n *\n * - `per-block` (default): pinned to the block being processed, cached under\n * its `index_block_hash`. Sound for any read-only function — reindexing the\n * same block always returns the same value, and a reorg-replaced block has a\n * different id so it can't inherit the orphaned answer.\n * - `contract-constant`: the caller asserts the value cannot change for this\n * contract and these args (SIP-010 `get-decimals`/`get-symbol`), so it is\n * resolved ONCE instead of once per block. This is the mode that makes a\n * backfill affordable — under `per-block` every block is a distinct key and\n * therefore a distinct RPC. Declaring it on a value that does change pins the\n * first answer forever, so it is opt-in and never inferred.\n */\nexport type ChainReadCacheMode = \"per-block\" | \"contract-constant\";\n\n/** Options for a contract read, such as cache mode. */\nexport type ChainReadOptions = { cache?: ChainReadCacheMode };\n\n/**\n * The chain-read surface, fully typed by an ABI.\n *\n * Shaped like `getContract` from `@secondlayer/stacks` — the same ABI in, the\n * same camelCased read methods out — minus `call`/`buildCall`: a handler\n * indexes the chain, it never writes to it.\n *\n * Reached through {@link readContractAt} rather than off `ctx.client`\n * directly: an ABI-generic method living on the context interface makes every\n * structural comparison of a subgraph definition instantiate it, which exceeds\n * TS's depth budget. At a call site the ABI is already concrete and it costs\n * nothing.\n */\nexport interface ChainReadClient {\n\t/**\n\t * Read-only methods of a contract, evaluated against the exact block being\n\t * processed.\n\t *\n\t * Every call is pinned to the block's `index_block_hash`, so a handler is a\n\t * pure function of its block: reindexing a range produces byte-identical\n\t * rows. Reading at the node's tip instead would make the same reindex\n\t * return different values — that is the corruption this refuses to allow,\n\t * so a block whose id was never persisted throws rather than falling back.\n\t *\n\t * Results are memoized in Postgres, so a value is fetched once per block\n\t * rather than once per event (or once per contract with\n\t * `cache: \"contract-constant\"`).\n\t */\n\tcontract<const C extends AbiContract>(\n\t\tcontractId: string,\n\t\tabi: C,\n\t\toptions?: ChainReadOptions,\n\t): { read: ChainReadMethods<C> };\n}\n\n/**\n * True for a structural empty mapped type (`{}`) and for codegen's\n * `Record<string, never>`. `keyof Record<string, never>` is `string`, so the\n * first check alone is not enough. Local copy of the `getContract` helper —\n * importing `ContractInstance<C>[\"read\"]` would re-enter the codegen-brand\n * conditional this type exists to avoid.\n */\ntype IsEmptyArgs<A> = [keyof A & string] extends [never]\n\t? true\n\t: Record<string, never> extends A\n\t\t? true\n\t\t: false;\n\ntype ChainReadMethod<A, R> = IsEmptyArgs<A> extends true\n\t? (args?: A) => R\n\t: (args: A) => R;\n\n/**\n * The camelCased read methods of an ABI. Spelled out rather than reused from\n * `ContractInstance<C>[\"read\"]`: that type is a conditional over the codegen\n * brand, and evaluating it wherever a subgraph definition is structurally\n * compared pushes TS past its instantiation depth.\n */\nexport type ChainReadMethods<C extends AbiContract> = {\n\t[N in ExtractReadOnlyFunctions<C> as ToCamelCase<N>]: ChainReadMethod<\n\t\tExtractFunctionArgs<C, N>,\n\t\tPromise<UnwrapResponse<ExtractFunctionOutput<C, N>>>\n\t>;\n};\n\n/**\n * `ChainReadClient` with the ABI generic erased. Structurally cheap, so the\n * base `SubgraphContext` can carry it; `TypedSubgraphContext` uses the real\n * one and handlers get full inference.\n */\nexport interface ErasedChainReadClient {\n\t// `abi: unknown`, not `AbiContract`: naming the ABI type here drags its\n\t// (deeply recursive) definition into every structural comparison of a\n\t// subgraph definition. `readContractAt` constrains it properly.\n\t/**\n\t * Reads a contract's read-only functions at the block being processed.\n\t *\n\t * Results are untyped here. Call it through `readContractAt` to get typed\n\t * results from the contract's ABI.\n\t */\n\tcontract(\n\t\tcontractId: string,\n\t\tabi: unknown,\n\t\toptions?: ChainReadOptions,\n\t): {\n\t\tread: Record<string, (args?: Record<string, unknown>) => Promise<unknown>>;\n\t};\n}\n\n/**\n * Reads a contract's read-only functions from a handler, with typed results.\n *\n * Pass `ctx`, the contract id and its ABI. Every call is pinned to the block\n * being processed. Set `options.cache` to `\"contract-constant\"` to fetch a\n * value once per contract instead of once per block.\n *\n * @example\n * ```ts\n * const token = readContractAt(ctx, contractId, SIP010_ABI, {\n * cache: \"contract-constant\",\n * });\n * const decimals = await token.read.getDecimals(); // bigint\n * ```\n */\nexport function readContractAt<const C extends AbiContract>(\n\tctx: { client: ErasedChainReadClient },\n\tcontractId: string,\n\tabi: C,\n\toptions?: ChainReadOptions,\n): { read: ChainReadMethods<C> } {\n\treturn ctx.client.contract(contractId, abi, options) as unknown as {\n\t\tread: ChainReadMethods<C>;\n\t};\n}\n\n/**\n * A handler asked for something no node can answer: a function missing from\n * the ABI, or one that isn't read-only. Deterministic, so it fails only the\n * event. A read the processor couldn't complete (no node, node down, cache\n * error) throws {@link HandlerReadError} instead and aborts the block.\n */\nexport class ChainReadError extends Error {\n\toverride name = \"ChainReadError\";\n}\n\nconst NO_NODE_MESSAGE =\n\t\"ctx.client needs a Stacks node: set STACKS_NODE_RPC_URL on the subgraph processor.\";\n\n/**\n * Where a cache miss is read from.\n *\n * - `node`: the processor's own node (`ctx.rpcUrl` / `STACKS_NODE_RPC_URL`).\n * An explicit node always wins.\n * - `hosted`: a hosted tenant has no node, so it reads through the hosted\n * api's `/v1/chain-read` route with its tenant key. Same `call-read` path\n * and body as a node, so `readContract` runs unchanged.\n */\ntype ReadTarget =\n\t| { kind: \"node\"; rpcUrl: string }\n\t| { kind: \"hosted\"; apiUrl: string; apiKey: string };\n\nasync function resolveReadTarget(\n\trpcUrl: string | undefined,\n\tdb: Kysely<Database>,\n): Promise<ReadTarget> {\n\tif (rpcUrl) return { kind: \"node\", rpcUrl };\n\tconst apiUrl = process.env.SUBGRAPH_INDEX_API_URL;\n\tif (!apiUrl || !(await hasNoLocalChain(db))) {\n\t\tthrow new HandlerReadError(NO_NODE_MESSAGE);\n\t}\n\tconst apiKey = process.env.INDEX_INTERNAL_API_KEY?.trim();\n\tif (!apiKey) {\n\t\tthrow new HandlerReadError(\n\t\t\t\"Hosted contract reads need the processor's key (INDEX_INTERNAL_API_KEY), and none is set. Set STACKS_NODE_RPC_URL to read a node directly instead.\",\n\t\t);\n\t}\n\treturn { kind: \"hosted\", apiUrl, apiKey };\n}\n\n/**\n * Turn a hosted route refusal into the right failure. A `400` is the\n * handler's own request (too many args, a bad name): deterministic, so it\n * fails only the event. A `403` means the key isn't a hosted tenant's: a\n * self-hosted processor pointed at the hosted api with its own key, which\n * must read its own node. Anything else aborts the block like a node outage.\n */\nfunction hostedReadError(err: unknown, label: string): Error | undefined {\n\tif (!(err instanceof HttpRequestError)) return undefined;\n\tif (err.status === 400) {\n\t\treturn new ChainReadError(\n\t\t\t`${label} was refused as invalid: ${err.details ?? err.message}`,\n\t\t);\n\t}\n\tif (err.status === 403) {\n\t\treturn new HandlerReadError(\n\t\t\t`${label}: hosted contract reads serve hosted subgraphs only. ${NO_NODE_MESSAGE}`,\n\t\t\t{ cause: err },\n\t\t);\n\t}\n\treturn undefined;\n}\n\n/**\n * True when the node answered for the pinned block. The answer is a fact of\n * the chain, so the handler owns it: `err` responses and contract runtime\n * errors fail only the event, like any other handler error.\n */\nfunction isChainAnswer(err: unknown): boolean {\n\treturn (\n\t\terr instanceof ContractResponseError || err instanceof ReadContractError\n\t);\n}\n\n/**\n * Transport for handler reads. Deliberately its own client rather than a\n * shared singleton: against a node, `retryCount: 0` keeps a slow node from\n * multiplying into the block's retry budget (`processBlockWithRetry` already\n * owns retries), and the concurrency gate below bounds how much of a backfill\n * can hit the node at once. Against the hosted route, the transport retries a\n * `429` (honoring `Retry-After`) and `5xx` a few times first: the route's rate\n * limit is a normal part of a backfill, not an outage.\n */\nfunction readClient(target: ReadTarget) {\n\tif (target.kind === \"node\") {\n\t\treturn createPublicClient({\n\t\t\ttransport: http(target.rpcUrl, { retryCount: 0, timeout: 10_000 }),\n\t\t});\n\t}\n\treturn createPublicClient({\n\t\ttransport: http(`${target.apiUrl.replace(/\\/+$/, \"\")}/v1/chain-read`, {\n\t\t\tretryCount: 3,\n\t\t\ttimeout: 10_000,\n\t\t\t// Bearer, like every hosted read plane; the transport's `apiKey`\n\t\t\t// option sends `x-api-key`, which hosted planes refuse.\n\t\t\tfetchOptions: {\n\t\t\t\theaders: { authorization: `Bearer ${target.apiKey}` },\n\t\t\t},\n\t\t}),\n\t});\n}\n\n/**\n * Cap concurrent node reads across all handlers in this process. A handler that\n * reads on every event turns a 100-block batch into thousands of in-flight\n * requests otherwise — enough to knock over the node the indexer depends on.\n */\nclass ConcurrencyGate {\n\tprivate active = 0;\n\tprivate queue: Array<() => void> = [];\n\n\tconstructor(private readonly limit: number) {}\n\n\tasync run<T>(fn: () => Promise<T>): Promise<T> {\n\t\tif (this.active >= this.limit) {\n\t\t\tawait new Promise<void>((resolve) => this.queue.push(resolve));\n\t\t}\n\t\tthis.active++;\n\t\ttry {\n\t\t\treturn await fn();\n\t\t} finally {\n\t\t\tthis.active--;\n\t\t\tthis.queue.shift()?.();\n\t\t}\n\t}\n}\n\nconst MAX_CONCURRENT_READS = 4;\n\nconst gate = new ConcurrencyGate(MAX_CONCURRENT_READS);\n\n/** Stable key for an arg set — property order must not fork a cache entry.\n * The same hash the hosted chain-read route keys its cache with. */\nfunction hashArgs(args: readonly ClarityValue[]): string {\n\treturn chainReadArgsHash(args.map((arg) => serializeCV(arg)));\n}\n\nfunction findFunction(abi: AbiContract, name: string): AbiFunction {\n\tconst fn = abi.functions.find((f) => f.name === name) as\n\t\t| AbiFunction\n\t\t| undefined;\n\tif (!fn) {\n\t\tthrow new ChainReadError(`No function \"${name}\" in the supplied ABI.`);\n\t}\n\tif (fn.access !== \"read-only\") {\n\t\tthrow new ChainReadError(\n\t\t\t`\"${name}\" is ${fn.access}, not read-only — a handler cannot call it.`,\n\t\t);\n\t}\n\treturn fn;\n}\n\nexport type ChainReadContext = {\n\tblockHeight: number;\n\tindexBlockHash: string | null | undefined;\n\trpcUrl?: string;\n\tdb?: Kysely<Database>;\n};\n\n/**\n * Build the `ctx.client` surface for one block. Generic lives on the METHOD,\n * not here, so a handler's ABI narrows per call without infecting\n * `SubgraphContext` with a type parameter.\n */\n/**\n * Build the `ctx.client` surface for one block. The ABI generic lives on\n * `contract()`, not here, so a handler's types narrow per contract without\n * `SubgraphContext` carrying a type parameter.\n */\nexport function createChainReadClient(ctx: ChainReadContext): ChainReadClient {\n\t// The ABI generic is erased inside the implementation on purpose:\n\t// re-resolving `ExtractFunctionArgs` against an unfixed type parameter is\n\t// what pushes TS past its instantiation depth on a real-sized ABI.\n\tconst readValue = async (\n\t\tcontractId: string,\n\t\tabi: AbiContract,\n\t\tfunctionName: string,\n\t\targs: Record<string, unknown>,\n\t\toptions: ChainReadOptions,\n\t): Promise<unknown> => {\n\t\tconst db = ctx.db ?? getSourceDb();\n\t\tconst rpcUrl = ctx.rpcUrl || process.env.STACKS_NODE_RPC_URL || undefined;\n\t\t// No node and no hosted api to fall back to: say so before any I/O.\n\t\tif (!rpcUrl && !process.env.SUBGRAPH_INDEX_API_URL) {\n\t\t\tthrow new HandlerReadError(NO_NODE_MESSAGE);\n\t\t}\n\n\t\tconst constant = options.cache === \"contract-constant\";\n\t\tif (!constant && !ctx.indexBlockHash) {\n\t\t\tthrow new HandlerReadError(\n\t\t\t\t`Block ${ctx.blockHeight} has no index_block_hash, so a read cannot be pinned to it. Reading at the node's tip would make this handler non-deterministic (the same reindex would produce different rows). Re-ingest the block, or pass cache: \"contract-constant\" if the value genuinely cannot change.`,\n\t\t\t);\n\t\t}\n\n\t\tconst fn = findFunction(abi, functionName);\n\t\tconst clarityArgs = buildFunctionArgs(fn, args);\n\t\tconst argsHash = hashArgs(clarityArgs);\n\t\tconst pinnedTo = constant ? null : (ctx.indexBlockHash as string);\n\n\t\t// Everything from here to the cache write is the processor's I/O, not\n\t\t// the handler's logic: a failure aborts the block so it retries, rather\n\t\t// than committing the block without this event's rows.\n\t\tlet resultHex: string;\n\t\ttry {\n\t\t\tconst cached = await db\n\t\t\t\t.selectFrom(\"chain_read_cache\")\n\t\t\t\t.select(\"result_hex\")\n\t\t\t\t.where(\"contract_id\", \"=\", contractId)\n\t\t\t\t.where(\"function_name\", \"=\", fn.name)\n\t\t\t\t.where(\"args_hash\", \"=\", argsHash)\n\t\t\t\t.where((eb) =>\n\t\t\t\t\tpinnedTo === null\n\t\t\t\t\t\t? eb(\"index_block_hash\", \"is\", null)\n\t\t\t\t\t\t: eb(\"index_block_hash\", \"=\", pinnedTo),\n\t\t\t\t)\n\t\t\t\t.executeTakeFirst();\n\n\t\t\tresultHex =\n\t\t\t\tcached?.result_hex ??\n\t\t\t\t(await gate.run(async () => {\n\t\t\t\t\tconst target = await resolveReadTarget(rpcUrl, db);\n\t\t\t\t\t// A constant read still pins to this block where it can: \"cannot\n\t\t\t\t\t// change\" is a claim about future blocks, not a license to read\n\t\t\t\t\t// a tip that may be ahead of the one being processed.\n\t\t\t\t\tif (!ctx.indexBlockHash && target.kind === \"hosted\") {\n\t\t\t\t\t\t// The hosted route only ever answers pinned reads.\n\t\t\t\t\t\tthrow new HandlerReadError(\n\t\t\t\t\t\t\t`Block ${ctx.blockHeight} has no index_block_hash, so a hosted contract read cannot be pinned to it. Reindex the subgraph from this block once the block is re-ingested.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!ctx.indexBlockHash) {\n\t\t\t\t\t\t// The one path where an UNPINNED read happens. Reachable only\n\t\t\t\t\t\t// in constant mode on a block with no persisted id — which is\n\t\t\t\t\t\t// exactly what the pinning error tells you to do — so it is\n\t\t\t\t\t\t// allowed, but never silently.\n\t\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t\t\"Chain read is not pinned to a block (no index_block_hash)\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcontractId,\n\t\t\t\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\t\t\t\tblockHeight: ctx.blockHeight,\n\t\t\t\t\t\t\t\tnote: 'cache: \"contract-constant\" asserts this value cannot change; the node answered at its own tip',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst value = await readContract(readClient(target), {\n\t\t\t\t\t\t\tcontract: contractId,\n\t\t\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\t\t\targs: clarityArgs,\n\t\t\t\t\t\t\ttip: ctx.indexBlockHash ?? undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn serializeCV(value);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tthrow (\n\t\t\t\t\t\t\t(target.kind === \"hosted\" &&\n\t\t\t\t\t\t\t\thostedReadError(err, `Chain read ${contractId}::${fn.name}`)) ||\n\t\t\t\t\t\t\terr\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\tif (!cached) {\n\t\t\t\tawait db\n\t\t\t\t\t.insertInto(\"chain_read_cache\")\n\t\t\t\t\t.values({\n\t\t\t\t\t\tcontract_id: contractId,\n\t\t\t\t\t\tfunction_name: fn.name,\n\t\t\t\t\t\targs_hash: argsHash,\n\t\t\t\t\t\tindex_block_hash: pinnedTo,\n\t\t\t\t\t\tblock_height: constant ? null : ctx.blockHeight,\n\t\t\t\t\t\tresult_hex: resultHex,\n\t\t\t\t\t})\n\t\t\t\t\t// Two handlers in the same batch can race to the same key; the\n\t\t\t\t\t// value is identical either way, so the loser keeps its own.\n\t\t\t\t\t.onConflict((oc) => oc.doNothing())\n\t\t\t\t\t.execute();\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (\n\t\t\t\tisChainAnswer(err) ||\n\t\t\t\terr instanceof ChainReadError ||\n\t\t\t\terr instanceof HandlerReadError\n\t\t\t) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tthrow new HandlerReadError(\n\t\t\t\t`Chain read ${contractId}::${fn.name} at block ${ctx.blockHeight} failed: ${getErrorMessage(err)}`,\n\t\t\t\t{ cause: err },\n\t\t\t);\n\t\t}\n\n\t\tconst value = deserializeCV(resultHex);\n\t\tconst js = clarityValueToJSUntyped(fn.outputs as AbiType, value);\n\n\t\tif (isResponseOutput(fn.outputs as AbiType)) {\n\t\t\tconst response = js as { ok?: unknown; err?: unknown };\n\t\t\tif (\"ok\" in response) return response.ok;\n\t\t\tthrow new ContractResponseError(\n\t\t\t\t`${contractId}::${fn.name} returned an err response.`,\n\t\t\t\tresponse.err,\n\t\t\t);\n\t\t}\n\t\treturn js;\n\t};\n\n\treturn {\n\t\tcontract(contractId: string, rawAbi: AbiContract, options = {}) {\n\t\t\t// Accept a raw Hiro/Clarinet ABI as well as a normalized one — raw\n\t\t\t// ABIs wrap `outputs` as `{ type: … }`, which the JS bridge can't read.\n\t\t\tconst abi = normalizeAbi(rawAbi);\n\t\t\tconst camelToKebab = new Map<string, string>();\n\t\t\tfor (const fn of abi.functions) {\n\t\t\t\tcamelToKebab.set(toCamelCase(fn.name), fn.name);\n\t\t\t}\n\n\t\t\tconst read = new Proxy(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tget(_target, prop: string) {\n\t\t\t\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\t\t\t\treturn (args: Record<string, unknown> = {}) =>\n\t\t\t\t\t\t\treadValue(contractId, abi, fnName, args, options);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn { read } as never;\n\t\t},\n\t};\n}\n",
|
|
9
9
|
"/**\n * Deterministic realm for verifiable (state-level) subgraphs.\n *\n * Handlers run in a `node:vm` context whose global object is a frozen\n * allow-list: every forbidden global ({@link FORBIDDEN_GLOBALS}) is a getter\n * that throws {@link NondeterminismError}, `Math` keeps only exact members,\n * locale-sensitive methods throw, and code generation from strings is off.\n * The handler sees a `ctx` facade that rejects non-integer numbers in rows,\n * refuses concurrent ctx calls, and turns read failures into block aborts.\n *\n * This is a determinism guard, not a security boundary: a handler can still\n * reach host intrinsics through the objects it is handed. The deploy scan\n * and this realm together catch accidental nondeterminism; hostile code is\n * gVisor's job.\n *\n * Only subgraphs whose stored verification level is `state` load here.\n * Everything else keeps the plain `import()` path, unchanged.\n */\nimport vm from \"node:vm\";\nimport type {\n\tSubgraphContext,\n\tSubgraphDefinition,\n\tSubgraphSchema,\n} from \"../types.ts\";\nimport {\n\tALLOWED_GLOBALS,\n\tALLOWED_MATH,\n\tFORBIDDEN_GLOBALS,\n\tLOCALE_METHODS,\n} from \"../verification.ts\";\n\n/**\n * A handler broke the determinism contract at runtime. Infra-class: the\n * block aborts (rollback + retry) instead of skipping the event, because a\n * skip would commit output that depends on the run.\n */\nexport class NondeterminismError extends Error {\n\toverride name = \"NondeterminismError\";\n}\n\n/**\n * A ctx read failed for a reason outside the handler: the database under a\n * verifiable subgraph, or a chain read (`ctx.client`) on any subgraph that\n * had no node, a node that didn't answer, or a cache error. Infra-class like\n * {@link NondeterminismError}: skipping the event would make its rows depend\n * on whether the database or node was reachable.\n */\nexport class HandlerReadError extends Error {\n\toverride name = \"HandlerReadError\";\n}\n\n/** Errors that abort the whole block rather than skip one event. */\nexport function abortsBlock(err: unknown): boolean {\n\treturn err instanceof NondeterminismError || err instanceof HandlerReadError;\n}\n\n/** Host constructors handed to the realm so `x instanceof Uint8Array` holds\n * for decoded event payloads, which are built in the host realm. */\nconst HOST_GLOBALS = [\n\t\"ArrayBuffer\",\n\t\"DataView\",\n\t\"Int8Array\",\n\t\"Uint8Array\",\n\t\"Uint8ClampedArray\",\n\t\"Int16Array\",\n\t\"Uint16Array\",\n\t\"Int32Array\",\n\t\"Uint32Array\",\n\t\"Float16Array\",\n\t\"Float32Array\",\n\t\"Float64Array\",\n\t\"BigInt64Array\",\n\t\"BigUint64Array\",\n\t\"TextEncoder\",\n\t\"TextDecoder\",\n\t\"atob\",\n\t\"btoa\",\n] as const;\n\nfunction forbid(name: string, reason: string): () => never {\n\treturn () => {\n\t\tthrow new NondeterminismError(`${name}: ${reason}`);\n\t};\n}\n\nfunction createRealm(): vm.Context {\n\tconst host = globalThis as unknown as Record<string, unknown>;\n\tconst sandbox: Record<string, unknown> = Object.create(null);\n\tfor (const name of HOST_GLOBALS) {\n\t\tif (host[name] !== undefined) sandbox[name] = host[name];\n\t}\n\tconst context = vm.createContext(sandbox, {\n\t\tname: \"subgraph-handler\",\n\t\tcodeGeneration: { strings: false, wasm: false },\n\t});\n\tconst g = vm.runInContext(\"globalThis\", context) as Record<string, unknown>;\n\n\tconst allowed = new Set(ALLOWED_GLOBALS);\n\tfor (const name of Object.getOwnPropertyNames(g)) {\n\t\tif (!allowed.has(name)) delete g[name];\n\t}\n\tfor (const [name, reason] of Object.entries(FORBIDDEN_GLOBALS)) {\n\t\tObject.defineProperty(g, name, { get: forbid(name, reason) });\n\t}\n\n\tconst realmMath = g.Math as Record<string, unknown>;\n\tconst safeMath: Record<string, unknown> = {};\n\tconst allowedMath = new Set(ALLOWED_MATH);\n\tfor (const key of Object.getOwnPropertyNames(realmMath)) {\n\t\tif (allowedMath.has(key)) safeMath[key] = realmMath[key];\n\t\telse\n\t\t\tObject.defineProperty(safeMath, key, {\n\t\t\t\tget: forbid(\n\t\t\t\t\t`Math.${key}`,\n\t\t\t\t\tkey === \"random\"\n\t\t\t\t\t\t? \"randomness differs per run\"\n\t\t\t\t\t\t: \"result is engine-approximated\",\n\t\t\t\t),\n\t\t\t});\n\t}\n\tObject.defineProperty(g, \"Math\", { value: Object.freeze(safeMath) });\n\n\tfor (const ctor of [\"String\", \"Number\", \"BigInt\", \"Array\", \"Object\"]) {\n\t\tconst proto = (g[ctor] as { prototype: object }).prototype;\n\t\tfor (const method of LOCALE_METHODS) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(proto, method)) {\n\t\t\t\tObject.defineProperty(proto, method, {\n\t\t\t\t\tvalue: forbid(method, \"output depends on the host's locale data\"),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// No new globals. Not Object.freeze: under Bun, freezing (or redefining\n\t// every binding of) a vm global breaks lookups of its built-ins. Forbidden\n\t// getters and Math are already non-configurable, so they stay locked.\n\tObject.preventExtensions(g);\n\treturn context;\n}\n\n// ── ctx facade ──────────────────────────────────────────────────────────\n\n/** Reject row values whose stored form can differ across engines or runs. */\nexport function checkRowValues(\n\twhere: string,\n\tvalues: Record<string, unknown>,\n): void {\n\tfor (const [col, value] of Object.entries(values)) {\n\t\tcheckValue(value, `${where}.${col}`);\n\t}\n}\n\nfunction checkValue(value: unknown, path: string): void {\n\tswitch (typeof value) {\n\t\tcase \"number\":\n\t\t\tif (!Number.isSafeInteger(value)) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`${path}: ${value} is not a safe integer; verifiable subgraphs store bigint or integers only`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"function\":\n\t\tcase \"symbol\":\n\t\t\tthrow new TypeError(`${path}: a ${typeof value} is not a row value`);\n\t\tcase \"object\":\n\t\t\tif (value === null || ArrayBuffer.isView(value)) return;\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tvalue.forEach((v, i) => checkValue(v, `${path}[${i}]`));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (const [k, v] of Object.entries(value)) checkValue(v, `${path}.${k}`);\n\t\t\treturn;\n\t\tdefault:\n\t\t\treturn;\n\t}\n}\n\n/**\n * Wrap the runtime ctx for one block. Reads must be awaited one at a time:\n * a second ctx call while a read is pending would order writes by database\n * latency.\n */\nexport function deterministicContext(\n\tctx: SubgraphContext,\n\tschema: SubgraphSchema,\n): SubgraphContext {\n\tlet pendingReads = 0;\n\t// An unknown table is the handler's bug, identical on every run: keep it\n\t// handler-origin (event skipped) rather than a read failure (block abort).\n\tconst knownTable = (table: string) => {\n\t\tif (!Object.prototype.hasOwnProperty.call(schema, table)) {\n\t\t\tthrow new Error(`Table \"${table}\" not found in subgraph schema`);\n\t\t}\n\t};\n\tconst guard = (op: string) => {\n\t\tif (pendingReads > 0) {\n\t\t\tthrow new NondeterminismError(\n\t\t\t\t`ctx.${op} while a ctx read is pending: concurrent ctx calls order writes by database latency; await each read before the next call`,\n\t\t\t);\n\t\t}\n\t};\n\tconst read = async <T>(op: string, run: () => Promise<T>): Promise<T> => {\n\t\tguard(op);\n\t\tpendingReads++;\n\t\ttry {\n\t\t\treturn await run();\n\t\t} catch (err) {\n\t\t\tif (err instanceof NondeterminismError) throw err;\n\t\t\tthrow new HandlerReadError(\n\t\t\t\t`ctx.${op} failed: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t{ cause: err },\n\t\t\t);\n\t\t} finally {\n\t\t\tpendingReads--;\n\t\t}\n\t};\n\ttype FindMany = (...args: unknown[]) => Promise<Record<string, unknown>[]>;\n\treturn {\n\t\tget block() {\n\t\t\treturn ctx.block;\n\t\t},\n\t\tget tx() {\n\t\t\treturn ctx.tx;\n\t\t},\n\t\tget client(): never {\n\t\t\tthrow new NondeterminismError(\n\t\t\t\t\"ctx.client: contract reads need re-execution proofs\",\n\t\t\t);\n\t\t},\n\t\tinsert(table, row) {\n\t\t\tguard(\"insert\");\n\t\t\tcheckRowValues(`insert ${table}`, row);\n\t\t\tctx.insert(table, row);\n\t\t},\n\t\tupdate(table, where, set) {\n\t\t\tguard(\"update\");\n\t\t\tcheckRowValues(`update ${table}`, where);\n\t\t\tcheckRowValues(`update ${table}`, set);\n\t\t\tctx.update(table, where, set);\n\t\t},\n\t\tupsert(table, key, row) {\n\t\t\tguard(\"upsert\");\n\t\t\tcheckRowValues(`upsert ${table}`, key);\n\t\t\tcheckRowValues(`upsert ${table}`, row);\n\t\t\tctx.upsert(table, key, row);\n\t\t},\n\t\tdelete(table, where) {\n\t\t\tguard(\"delete\");\n\t\t\tctx.delete(table, where);\n\t\t},\n\t\tincrement(table, key, deltas) {\n\t\t\tguard(\"increment\");\n\t\t\tcheckRowValues(`increment ${table}`, key);\n\t\t\tcheckRowValues(`increment ${table}`, deltas);\n\t\t\tctx.increment(table, key, deltas);\n\t\t},\n\t\tfindOne: (table, where) => {\n\t\t\tknownTable(table);\n\t\t\treturn read(\"findOne\", () => ctx.findOne(table, where));\n\t\t},\n\t\tfindMany: (table, ...rest: unknown[]) => {\n\t\t\tknownTable(table);\n\t\t\treturn read(\"findMany\", () => (ctx.findMany as FindMany)(table, ...rest));\n\t\t},\n\t};\n}\n\n// ── Loading ─────────────────────────────────────────────────────────────\n\n/** Definitions this module loaded into a realm. */\nconst realmDefinitions = new WeakSet<SubgraphDefinition>();\n\n/** True for a definition {@link loadDeterministicDefinition} produced: a\n * stored `state` subgraph, whose inputs follow the realm (`state_writes`). */\nexport function runsInRealm(def: SubgraphDefinition): boolean {\n\treturn realmDefinitions.has(def);\n}\n\n/**\n * Loads a bundled handler into a fresh deterministic realm.\n *\n * The bundle is ESM, as stored in `handler_code`. The returned definition has\n * every handler wrapped to receive the {@link deterministicContext} facade.\n */\nexport async function loadDeterministicDefinition(\n\thandlerCode: string,\n): Promise<SubgraphDefinition> {\n\t// The realm runs scripts, not modules: lower the bundle's single\n\t// `export default` to CommonJS. Bundles have no imports left to resolve.\n\t// Loaded lazily so importing the runner never pulls esbuild.\n\tconst { transform } = await import(\"esbuild\");\n\tconst { code } = await transform(handlerCode, {\n\t\tformat: \"cjs\",\n\t\tloader: \"js\",\n\t\tlogLevel: \"silent\",\n\t});\n\tconst context = createRealm();\n\tconst evaluate = vm.runInContext(\n\t\t`(function (module, exports) {\\n${code}\\n})`,\n\t\tcontext,\n\t\t{ filename: \"handler.js\" },\n\t) as (module: { exports: unknown }, exports: unknown) => void;\n\tconst mod: { exports: Record<string, unknown> } = { exports: {} };\n\tevaluate(mod, mod.exports);\n\tconst def = (mod.exports.default ?? mod.exports) as SubgraphDefinition;\n\t// Declarative parts cross back as host objects, so runtime code never\n\t// sees realm prototypes.\n\tconst sources = structuredClone(def.sources);\n\tconst schema = structuredClone(def.schema);\n\n\t// One facade per block context (the runner builds a fresh ctx per block).\n\tconst facades = new WeakMap<SubgraphContext, SubgraphContext>();\n\tconst handlers: SubgraphDefinition[\"handlers\"] = {};\n\tfor (const [name, handler] of Object.entries(def.handlers ?? {})) {\n\t\thandlers[name] = (event, ctx) => {\n\t\t\tlet facade = facades.get(ctx);\n\t\t\tif (!facade) {\n\t\t\t\tfacade = deterministicContext(ctx, schema);\n\t\t\t\tfacades.set(ctx, facade);\n\t\t\t}\n\t\t\treturn handler(event, facade);\n\t\t};\n\t}\n\tconst loaded = { ...def, sources, schema, handlers };\n\trealmDefinitions.add(loaded);\n\treturn loaded;\n}\n",
|
|
10
10
|
"/**\n * Verifiable subgraphs: the determinism contract, the derived level and the\n * pin. Pure (node:crypto only) so the bundler's deploy scan, the API and the\n * runtime realm all read the same rules.\n *\n * A subgraph is never configured as verifiable. Its level is derived from\n * its sources plus a scan of the bundled handler, and only a subgraph whose\n * every input is provable today (`state`: named state writes) has the contract\n * enforced. Everything else gets the same findings as advice.\n */\nimport { createHash } from \"node:crypto\";\nimport type { SubgraphVerification } from \"@secondlayer/shared/schemas/subgraphs\";\nimport pkg from \"../package.json\" with { type: \"json\" };\nimport type { SubgraphDefinition, SubgraphFilter } from \"./types.ts\";\n\nexport type { SubgraphVerification };\n\n/** Runtime identity baked into every pin: matcher, decode and flush semantics. */\nexport const SUBGRAPHS_RUNTIME: string = `@secondlayer/subgraphs@${pkg.version}`;\n\n// ── Determinism contract ────────────────────────────────────────────────\n\n/**\n * Globals a handler may not touch, with the reason shown to the developer.\n * The deploy scan reports them; the realm replaces each with a getter that\n * throws `NondeterminismError`.\n */\nexport const FORBIDDEN_GLOBALS: Readonly<Record<string, string>> = {\n\tDate: \"wall-clock time differs per run\",\n\tperformance: \"timers differ per run\",\n\tprocess: \"host environment differs per run\",\n\tfetch: \"network reads are not chain inputs\",\n\tcrypto: \"randomness differs per run\",\n\tsetTimeout: \"scheduling order differs per run\",\n\tsetInterval: \"scheduling order differs per run\",\n\tsetImmediate: \"scheduling order differs per run\",\n\tclearTimeout: \"scheduling order differs per run\",\n\tclearInterval: \"scheduling order differs per run\",\n\tqueueMicrotask: \"scheduling order differs per run\",\n\tWeakRef: \"garbage collection timing differs per run\",\n\tFinalizationRegistry: \"garbage collection timing differs per run\",\n\tAtomics: \"shared memory is not single-threaded\",\n\tSharedArrayBuffer: \"shared memory is not single-threaded\",\n\tIntl: \"locale and time zone data differ per host\",\n\tTemporal: \"locale and time zone data differ per host\",\n\teval: \"generated code hides inputs from the scan\",\n\tWebAssembly: \"compiled code hides inputs from the scan\",\n\tShadowRealm: \"a nested realm escapes the allow-list\",\n\trequire: \"imports must be bundled into the handler\",\n};\n\n/**\n * Globals a handler may use: ECMAScript built-ins whose results are fully\n * specified, plus deterministic host encoders. `Math` is narrowed separately\n * ({@link ALLOWED_MATH}).\n */\nexport const ALLOWED_GLOBALS: readonly string[] = [\n\t\"undefined\",\n\t\"NaN\",\n\t\"Infinity\",\n\t\"globalThis\",\n\t\"isNaN\",\n\t\"isFinite\",\n\t\"parseInt\",\n\t\"parseFloat\",\n\t\"decodeURI\",\n\t\"decodeURIComponent\",\n\t\"encodeURI\",\n\t\"encodeURIComponent\",\n\t\"escape\",\n\t\"unescape\",\n\t\"Object\",\n\t\"Function\",\n\t\"Array\",\n\t\"Number\",\n\t\"Boolean\",\n\t\"String\",\n\t\"Symbol\",\n\t\"BigInt\",\n\t\"Math\",\n\t\"JSON\",\n\t\"Reflect\",\n\t\"Proxy\",\n\t\"Promise\",\n\t\"Map\",\n\t\"Set\",\n\t\"WeakMap\",\n\t\"WeakSet\",\n\t\"RegExp\",\n\t\"Iterator\",\n\t\"DisposableStack\",\n\t\"AsyncDisposableStack\",\n\t\"Error\",\n\t\"AggregateError\",\n\t\"SuppressedError\",\n\t\"EvalError\",\n\t\"RangeError\",\n\t\"ReferenceError\",\n\t\"SyntaxError\",\n\t\"TypeError\",\n\t\"URIError\",\n\t\"ArrayBuffer\",\n\t\"DataView\",\n\t\"Int8Array\",\n\t\"Uint8Array\",\n\t\"Uint8ClampedArray\",\n\t\"Int16Array\",\n\t\"Uint16Array\",\n\t\"Int32Array\",\n\t\"Uint32Array\",\n\t\"Float16Array\",\n\t\"Float32Array\",\n\t\"Float64Array\",\n\t\"BigInt64Array\",\n\t\"BigUint64Array\",\n\t\"TextEncoder\",\n\t\"TextDecoder\",\n\t\"atob\",\n\t\"btoa\",\n\t\"console\",\n];\n\n/** `Math` members whose results are exact on every engine. The rest\n * (`sin`, `pow`, `log`, …) are implementation-approximated. */\nexport const ALLOWED_MATH: readonly string[] = [\n\t\"abs\",\n\t\"min\",\n\t\"max\",\n\t\"floor\",\n\t\"ceil\",\n\t\"trunc\",\n\t\"sign\",\n\t\"round\",\n\t\"E\",\n\t\"LN10\",\n\t\"LN2\",\n\t\"LOG10E\",\n\t\"LOG2E\",\n\t\"PI\",\n\t\"SQRT1_2\",\n\t\"SQRT2\",\n];\n\n/** Methods whose output depends on the host's locale data. */\nexport const LOCALE_METHODS: readonly string[] = [\n\t\"toLocaleString\",\n\t\"toLocaleDateString\",\n\t\"toLocaleTimeString\",\n\t\"toLocaleUpperCase\",\n\t\"toLocaleLowerCase\",\n\t\"localeCompare\",\n];\n\n/**\n * One thing the deploy scan found in a bundled handler.\n *\n * - `nondeterministic`: breaks the determinism contract. Fails the deploy of\n * a state subgraph; advice for everything else.\n * - `needs-events`: deterministic, but reads something only re-execution proofs cover\n * (`ctx.client`). Raises the level instead of failing.\n */\nexport interface HandlerFinding {\n\tkind: \"nondeterministic\" | \"needs-events\";\n\t/** What was used, e.g. `Date`, `Math.random`, `import()`, `ctx.client`. */\n\tname: string;\n\treason: string;\n\t/** Original source file when a sourcemap was available, else the bundle. */\n\tfile: string;\n\t/** 1-based. */\n\tline: number;\n\t/** 1-based. */\n\tcolumn: number;\n}\n\n/** Formats a handler finding as `file:line:column name: reason`. */\nexport function formatFinding(f: HandlerFinding): string {\n\treturn `${f.file}:${f.line}:${f.column} ${f.name}: ${f.reason}`;\n}\n\n// ── Derived level ───────────────────────────────────────────────────────\n\n/**\n * Sources whose every field is a named state write: provable per block from\n * the header-backed witness plus `state_writes`. Not `map_insert`: storage\n * holds `(some v)` for an insert and a set alike, so telling them apart takes\n * re-execution (event proofs).\n */\nconst STATE_SOURCE_TYPES: ReadonlySet<string> = new Set([\n\t\"var_set\",\n\t\"map_set\",\n\t\"map_delete\",\n]);\n\nconst LEVEL_RANK = { state: 0, events: 1, none: 2 } as const;\n\n/** Handler findings listed in `reasons`; the rest are counted. */\nconst MAX_LISTED_FINDINGS = 10;\n\n/**\n * Derive how far a subgraph's rows can be checked. Level = the highest any\n * source or handler read needs. `reasons` lists everything standing between\n * the subgraph and checkable rows; a `state` subgraph with any reason is\n * refused at deploy, so every stored `state` row has none. Never configured,\n * never a flag.\n */\nexport function deriveVerification(\n\tdef: Pick<SubgraphDefinition, \"sources\" | \"backfillMode\">,\n\tfindings: readonly HandlerFinding[] = [],\n): SubgraphVerification {\n\tlet level: keyof typeof LEVEL_RANK = \"state\";\n\tconst raise = (to: keyof typeof LEVEL_RANK) => {\n\t\tif (LEVEL_RANK[to] > LEVEL_RANK[level]) level = to;\n\t};\n\tconst reasons: string[] = [];\n\n\tfor (const [name, source] of Object.entries(def.sources ?? {})) {\n\t\tconst filter = source as SubgraphFilter & { trait?: string };\n\t\tif (filter.trait) {\n\t\t\traise(\"none\");\n\t\t\treasons.push(\n\t\t\t\t`source \"${name}\": trait scope needs a proven contract registry`,\n\t\t\t);\n\t\t} else if (filter.type === \"map_insert\") {\n\t\t\traise(\"events\");\n\t\t\treasons.push(\n\t\t\t\t`map_insert source \"${name}\": map_insert vs map_set needs event proofs`,\n\t\t\t);\n\t\t} else if (!STATE_SOURCE_TYPES.has(filter.type)) {\n\t\t\traise(\"events\");\n\t\t\treasons.push(`${filter.type} source \"${name}\" needs event proofs`);\n\t\t}\n\t}\n\tif (def.backfillMode === \"concurrent\") {\n\t\traise(\"none\");\n\t\treasons.push(\"backfillMode concurrent: tip-first order is not chain order\");\n\t}\n\tif (findings.some((f) => f.kind === \"needs-events\")) raise(\"events\");\n\t// A large bundled library can trip dozens of findings; list a few.\n\tfor (const f of findings.slice(0, MAX_LISTED_FINDINGS)) {\n\t\treasons.push(\n\t\t\tf.kind === \"needs-events\"\n\t\t\t\t? `${formatFinding(f)} (needs event proofs)`\n\t\t\t\t: formatFinding(f),\n\t\t);\n\t}\n\tif (findings.length > MAX_LISTED_FINDINGS) {\n\t\treasons.push(\n\t\t\t`…and ${findings.length - MAX_LISTED_FINDINGS} more handler findings`,\n\t\t);\n\t}\n\n\treturn {\n\t\tlevel,\n\t\treasons,\n\t\tunproven:\n\t\t\treasons.length === 0\n\t\t\t\t? [\n\t\t\t\t\t\t\"tx attribution of writes: event.tx, _tx_id (needs event proofs)\",\n\t\t\t\t\t\t\"intermediate writes within a block (needs event proofs)\",\n\t\t\t\t\t]\n\t\t\t\t: [],\n\t};\n}\n\n/**\n * Tells whether a deploy must be refused for breaking determinism.\n *\n * It is refused when the sources are provable (`state`), so the determinism\n * contract is enforced, and the scan broke it.\n */\nexport function isDeterminismViolation(v: SubgraphVerification): boolean {\n\treturn v.level === \"state\" && v.reasons.length > 0;\n}\n\n// ── Pin ─────────────────────────────────────────────────────────────────\n\n/** What a pin is computed from: schema hash, handler code, network. */\nexport interface PinInput {\n\t/** Existing `schema_hash` (name + schema + sources). */\n\tschemaHash: string;\n\t/** Bundled ESM exactly as stored in `subgraphs.handler_code`. */\n\thandlerCode: string;\n\tstartBlock?: number | null;\n\tnetwork: string;\n\t/** Defaults to {@link SUBGRAPHS_RUNTIME}. */\n\truntime?: string;\n}\n\nfunction sha256(input: string): string {\n\treturn createHash(\"sha256\").update(input).digest(\"hex\");\n}\n\n/** What a pin commits to, as stored in `pin_preimage`. */\nexport interface PinFields {\n\t/** sha256 of the bundled handler, hex. */\n\thandlerHash: string;\n\tnetwork: string;\n\truntime: string;\n\tschemaHash: string;\n\tstartBlock: number | null;\n}\n\n/**\n * The canonical JSON a pin is the sha256 of: fixed key order, primitives\n * only. Stored beside the pin so anyone can recompute it from the served\n * handler code.\n */\nexport function pinPreimage(input: PinInput): string {\n\tconst fields: PinFields = {\n\t\thandlerHash: sha256(input.handlerCode),\n\t\tnetwork: input.network,\n\t\truntime: input.runtime ?? SUBGRAPHS_RUNTIME,\n\t\tschemaHash: input.schemaHash,\n\t\tstartBlock: input.startBlock ?? null,\n\t};\n\treturn JSON.stringify(fields);\n}\n\n/**\n * Content hash over everything that shapes a subgraph's rows. Unlike\n * `schema_hash`, it changes with the handler, `startBlock` and runtime, so\n * two deploys with the same pin produce the same rows from the same chain.\n */\nexport function computePin(input: PinInput): string {\n\treturn sha256(pinPreimage(input));\n}\n",
|
|
11
11
|
"import type { AbiContract } from \"@secondlayer/stacks/clarity\";\nimport { normalizeAbi, toCamelCase } from \"@secondlayer/stacks/clarity\";\nimport type { SubgraphSchema } from \"../types.ts\";\nimport type { ChainReadClient } from \"./chain-read.ts\";\nimport { type BlockMeta, SubgraphContext, type TxMeta } from \"./context.ts\";\n\n/**\n * Committed subgraph rows held in memory: what a flush would have persisted,\n * per table, in insertion order. Shared across the per-block contexts of a\n * multi-block run (replay), or owned by one context (handler unit tests).\n */\nexport class MemoryStore {\n\treadonly tables: Map<string, Record<string, unknown>[]> = new Map();\n}\n\n/**\n * The real {@link SubgraphContext} with its row store swapped for memory.\n * Read-your-writes, upsert merging, increment deltas, where-matching and\n * control-key handling all come from the one implementation, so the memory\n * model and the Postgres flush cannot drift apart in two copies.\n */\nexport class MemorySubgraphContext extends SubgraphContext {\n\tprivate readonly store: MemoryStore;\n\tprivate readonly tables: SubgraphSchema;\n\n\tconstructor(\n\t\tstore: MemoryStore,\n\t\tschema: SubgraphSchema,\n\t\tblock: BlockMeta,\n\t\ttx: TxMeta,\n\t) {\n\t\t// `db` is never touched: `readRows` is overridden below, and a memory\n\t\t// context never flushes SQL.\n\t\tsuper(undefined as never, \"memory\", schema, block, tx, false);\n\t\tthis.store = store;\n\t\tthis.tables = schema;\n\t}\n\n\t/** The one seam: committed rows come from memory, not Postgres. */\n\tprotected override async readRows(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tlimit?: number,\n\t): Promise<Record<string, unknown>[]> {\n\t\tconst rows = (this.store.tables.get(table) ?? []).filter((row) =>\n\t\t\tObject.entries(where).every(([k, v]) => sameValue(row[k], v)),\n\t\t);\n\t\treturn limit === undefined ? rows : rows.slice(0, limit);\n\t}\n\n\t/**\n\t * The first call whose outcome depends on rows committed before this\n\t * store began (a read, an update/delete/increment, or an upsert that\n\t * leaves a declared column to its prior value). Replay from mid-history\n\t * is inconclusive once one runs: the store lacks those earlier rows.\n\t */\n\treadDependent: string | null = null;\n\n\tprivate dependsOnPrior(what: string): void {\n\t\tthis.readDependent ??= what;\n\t}\n\n\toverride findOne(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t): Promise<Record<string, unknown> | null> {\n\t\tthis.dependsOnPrior(`findOne(\"${table}\")`);\n\t\treturn super.findOne(table, where);\n\t}\n\n\toverride findMany(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t): Promise<Record<string, unknown>[]> {\n\t\tthis.dependsOnPrior(`findMany(\"${table}\")`);\n\t\treturn super.findMany(table, where);\n\t}\n\n\toverride update(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tset: Record<string, unknown>,\n\t): void {\n\t\tthis.dependsOnPrior(`update(\"${table}\")`);\n\t\tsuper.update(table, where, set);\n\t}\n\n\toverride delete(table: string, where: Record<string, unknown>): void {\n\t\tthis.dependsOnPrior(`delete(\"${table}\")`);\n\t\tsuper.delete(table, where);\n\t}\n\n\toverride increment(\n\t\ttable: string,\n\t\tkey: Record<string, unknown>,\n\t\tdeltas: Record<string, bigint | number>,\n\t): void {\n\t\tthis.dependsOnPrior(`increment(\"${table}\")`);\n\t\tsuper.increment(table, key, deltas);\n\t}\n\n\toverride upsert(\n\t\ttable: string,\n\t\tkey: Record<string, unknown>,\n\t\trow: Record<string, unknown>,\n\t): void {\n\t\tconst def = this.tables[table];\n\t\tif (def) {\n\t\t\tconst keyCols = Object.keys(key);\n\t\t\tconst keyed = def.uniqueKeys?.some(\n\t\t\t\t(uk) =>\n\t\t\t\t\tuk.length === keyCols.length && uk.every((c) => keyCols.includes(c)),\n\t\t\t);\n\t\t\tconst omitted = Object.keys(def.columns).find(\n\t\t\t\t(c) => !(c in key) && !(c in row),\n\t\t\t);\n\t\t\t// Without a matching unique key the runtime reads to decide; with one,\n\t\t\t// an omitted column keeps whatever the existing row held.\n\t\t\tif (!keyed)\n\t\t\t\tthis.dependsOnPrior(`upsert(\"${table}\") without a unique key`);\n\t\t\telse if (omitted)\n\t\t\t\tthis.dependsOnPrior(`upsert(\"${table}\") leaves \"${omitted}\" as it was`);\n\t\t}\n\t\tsuper.upsert(table, key, row);\n\t}\n\n\t/** Current rows of `table`, pending ops overlaid exactly as a read would. */\n\tasync rowsOf(table: string): Promise<Record<string, unknown>[]> {\n\t\treturn this.overlayMany(table, {}, await this.readRows(table, {}));\n\t}\n\n\t/**\n\t * Offline `ctx.client`. There is no node, so reads are stubbed by\n\t * `<contractId>.<function-name>`; an unstubbed read throws naming the key,\n\t * rather than silently returning undefined and failing somewhere else.\n\t */\n\tsetReads(reads: Record<string, unknown>): void {\n\t\tthis._client = {\n\t\t\tcontract(contractId: string, abi: AbiContract) {\n\t\t\t\tconst camelToKebab = new Map<string, string>();\n\t\t\t\tfor (const fn of normalizeAbi(abi).functions) {\n\t\t\t\t\tcamelToKebab.set(toCamelCase(fn.name), fn.name);\n\t\t\t\t}\n\t\t\t\tconst read = new Proxy(\n\t\t\t\t\t{},\n\t\t\t\t\t{\n\t\t\t\t\t\tget(_target, prop: string) {\n\t\t\t\t\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\t\t\t\t\tconst key = `${contractId}.${fnName}`;\n\t\t\t\t\t\t\treturn async () => {\n\t\t\t\t\t\t\t\tif (!(key in reads)) {\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`No stubbed chain read for \"${key}\" — pass it via createTestContext(schema, { reads: { \"${key}\": … } }).`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn reads[key];\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn { read } as never;\n\t\t\t},\n\t\t} as ChainReadClient;\n\t}\n\n\t/** Materialize pending ops into the store (an end-of-block flush). */\n\tasync commitOps(): Promise<void> {\n\t\tconst tables = new Set<string>();\n\t\tfor (const op of this.ops) tables.add(op.table);\n\t\tfor (const table of tables) {\n\t\t\tthis.store.tables.set(table, await this.rowsOf(table));\n\t\t}\n\t\tthis.ops.length = 0;\n\t}\n\n\t/** Insert ops queued since `checkpoint`, for preview IN/OUT traces. */\n\tinsertsSince(\n\t\tcheckpoint: number,\n\t): Array<{ table: string; keys: string[]; row: Record<string, unknown> }> {\n\t\tconst out: Array<{\n\t\t\ttable: string;\n\t\t\tkeys: string[];\n\t\t\trow: Record<string, unknown>;\n\t\t}> = [];\n\t\tfor (const op of this.ops.slice(Math.max(0, checkpoint))) {\n\t\t\tif (op.kind !== \"insert\") continue;\n\t\t\tconst row = { ...op.data };\n\t\t\tout.push({\n\t\t\t\ttable: op.table,\n\t\t\t\tkeys: Object.keys(row).filter((k) => !k.startsWith(\"_\")),\n\t\t\t\trow,\n\t\t\t});\n\t\t}\n\t\treturn out;\n\t}\n}\n\n/** Loose value equality across the bigint/number/string boundary decoded\n * Clarity values straddle. */\nfunction sameValue(a: unknown, b: unknown): boolean {\n\tif (a === b) return true;\n\tif (\n\t\t(typeof a === \"bigint\" || typeof a === \"number\") &&\n\t\t(typeof b === \"bigint\" || typeof b === \"number\")\n\t) {\n\t\treturn BigInt(a) === BigInt(b);\n\t}\n\treturn String(a) === String(b);\n}\n",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"import type { EventForFilter } from \"../events.ts\";\nimport type { TypedSubgraphContext } from \"../infer.ts\";\nimport { SubgraphContext } from \"../runtime/context.ts\";\nimport type { BlockMeta, TxMeta } from \"../runtime/context.ts\";\nimport { MemoryStore, MemorySubgraphContext } from \"../runtime/memory-store.ts\";\nimport { buildEventPayload } from \"../runtime/runner.ts\";\nimport type { SubgraphFilter, SubgraphSchema } from \"../types.ts\";\n\n/**\n * `@secondlayer/subgraphs/testing` — run a handler without deploying.\n *\n * There was no way to execute a handler outside production: seventeen `sl\n * subgraphs` subcommands and none ran one, `dev` deployed DDL and printed\n * handler keys, `--dry-run` validated schema only. The cost was measurable —\n * three of four production subgraphs shipped broken, including one that held\n * 0 rows chain-wide for a whole release because of a 3-line field-mapping bug\n * that a single fixture event would have caught.\n *\n * The context here is the REAL {@link SubgraphContext} with its row store\n * swapped for memory. Read-your-writes, upsert merging, increment deltas,\n * where-matching, and control-key handling all come from the one\n * implementation, so there is no second copy to drift.\n */\n\nfunction defaultBlock(overrides: Partial<BlockMeta> = {}): BlockMeta {\n\treturn {\n\t\theight: 1,\n\t\thash: \"0xtest\",\n\t\ttimestamp: 0,\n\t\tburnBlockHeight: 1,\n\t\t...overrides,\n\t};\n}\n\nexport function defaultTx(overrides: Partial<TxMeta> = {}): TxMeta {\n\treturn {\n\t\ttxId: \"0xtest-tx\",\n\t\tsender: \"SP000000000000000000002Q6VF78\",\n\t\ttype: \"contract_call\",\n\t\tstatus: \"success\",\n\t\tcontractId: null,\n\t\tfunctionName: null,\n\t\t...overrides,\n\t};\n}\n\n/** An in-memory subgraph context for tests. */\nexport interface TestSubgraphContext<S extends SubgraphSchema>\n\textends Omit<TypedSubgraphContext<S>, never> {\n\t/**\n\t * Current rows of `table`, INCLUDING writes queued by the handler you just\n\t * ran (the same read-your-writes overlay the runtime uses). Drop straight\n\t * into `toMatchInlineSnapshot()`.\n\t */\n\trows(table: keyof S & string): Promise<Record<string, unknown>[]>;\n\t/** Commit pending writes into the in-memory store, as an end-of-block flush\n\t * would — call between blocks when a test spans several. */\n\tcommit(): Promise<void>;\n\t/** Swap the transaction metadata handlers see (`ctx.tx`). */\n\tsetTx(tx: Partial<TxMeta>): void;\n\t/** Insert ops queued since `opsCheckpoint()`, for preview IN/OUT traces. */\n\tpendingInsertsSince(\n\t\tcheckpoint: number,\n\t): Array<{ table: string; keys: string[]; row: Record<string, unknown> }>;\n\t/** Length of the pending-ops queue (same as runtime `opsCheckpoint`). */\n\topsCheckpoint(): number;\n}\n\n/**\n * Builds an in-memory context for a subgraph's schema.\n *\n * It is the real handler context with its row store swapped for memory, so\n * reads see earlier writes. Use `ctx.rows(table)` to inspect what a handler\n * wrote.\n *\n * @example\n * ```ts\n * const ctx = createTestContext(bns.schema, { block: { height: 167_484 } });\n * await bns.handlers.bns!(buildEvent(bns.sources.bns, { … }), ctx);\n * expect(await ctx.rows(\"names\")).toMatchInlineSnapshot();\n * ```\n */\nexport function createTestContext<const S extends SubgraphSchema>(\n\tschema: S,\n\toptions: {\n\t\tblock?: Partial<BlockMeta>;\n\t\ttx?: Partial<TxMeta>;\n\t\t/** Stubbed `ctx.client.readOnly` results, keyed\n\t\t * `\"<contractId>.<function-name>\"`. */\n\t\treads?: Record<string, unknown>;\n\t} = {},\n): TestSubgraphContext<S> {\n\tconst impl = new MemorySubgraphContext(\n\t\tnew MemoryStore(),\n\t\tschema,\n\t\tdefaultBlock(options.block),\n\t\tdefaultTx(options.tx),\n\t);\n\timpl.setReads(options.reads ?? {});\n\tconst ctx = impl as unknown as TestSubgraphContext<S>;\n\tctx.rows = (table) => impl.rowsOf(table);\n\tctx.commit = () => impl.commitOps();\n\t// Call through the prototype: assigning `ctx.setTx = () => impl.setTx(...)`\n\t// would recurse because ctx === impl and the own property shadows the method.\n\tctx.setTx = (tx) => {\n\t\tSubgraphContext.prototype.setTx.call(impl, defaultTx(tx));\n\t};\n\tctx.pendingInsertsSince = (checkpoint) => impl.insertsSince(checkpoint);\n\t// opsCheckpoint stays on the SubgraphContext prototype — do not overwrite.\n\treturn ctx;\n}\n\n/**\n * Builds a handler-shaped event for a source, typed by that source's filter.\n *\n * `data` supplies the decoded, camelCased fields the runtime would have\n * produced. Transaction metadata is filled in.\n *\n * @example\n * ```ts\n * buildEvent(bns.sources.bns, {\n * topic: \"name-register\",\n * data: { name: { name: \"0x616c696365\", namespace: \"0x627463\" } },\n * })\n * ```\n */\nexport function buildEvent<const F extends SubgraphFilter>(\n\tsource: F,\n\t// Loose on the way IN, exact on the way OUT. `Partial<EventForFilter<F>>`\n\t// would be nicer, but for a contract_call source carrying an `abi` it\n\t// instantiates the deep `ExtractFunctionArgs`/`AbiToTS` conditional and\n\t// TS gives up (TS2589) — the same hazard `runtime/runner.ts` documents at\n\t// its `clarityValueToJS` call. The RETURN type is exact, which is what\n\t// makes the event assignable to the handler.\n\tpayload: Record<string, unknown>,\n\toptions: { tx?: Partial<TxMeta> } = {},\n): EventForFilter<F> {\n\tconst tx = defaultTx(options.tx);\n\tconst base: Record<string, unknown> = { type: source.type, tx };\n\tif (source.type === \"print_event\") {\n\t\tbase.contractId = source.contractId ?? \"\";\n\t\tbase.topic = \"\";\n\t\tbase.data = {};\n\t} else if (source.type === \"contract_call\") {\n\t\tbase.contractId = source.contractId ?? \"\";\n\t\tbase.functionName = source.functionName ?? \"\";\n\t\tbase.sender = tx.sender;\n\t\tbase.args = [];\n\t\tbase.result = null;\n\t\tbase.resultHex = null;\n\t}\n\t// Double cast: the exact return type is the point, but TS cannot check\n\t// the assignment through the deep ABI conditional (see above).\n\treturn { ...base, ...payload } as unknown as EventForFilter<F>;\n}\n\nexport { buildEventPayload };\nexport type { BlockMeta, TxMeta };\n",
|
|
20
20
|
"import { camelizeKeys } from \"../print-schema.ts\";\nimport { printFieldEquals } from \"../runtime/source-matcher.ts\";\nimport type { SubgraphSchema } from \"../types.ts\";\nimport {\n\ttype TxMeta,\n\tbuildEvent,\n\tcreateTestContext,\n\tdefaultTx,\n} from \"./harness.ts\";\n\n/**\n * Shared subgraph test run — payload map + in-memory handlers + fail-closed\n * EMPTY_MAPPING. CLI and MCP both call this; cassette/fetch/print stay in the\n * CLI, Index fetch stays in each caller.\n */\n\n/** Structural Index event row (avoids an SDK dep on this package). */\nexport interface IndexEventRow {\n\tevent_type: string;\n\tcontract_id?: string | null;\n\t/** Print events carry `{ topic, value }`; other types vary. */\n\tpayload?: unknown;\n\tsender?: unknown;\n\trecipient?: unknown;\n\tamount?: unknown;\n\tasset_identifier?: unknown;\n\tvalue?: unknown;\n\tcursor?: string;\n\t[key: string]: unknown;\n}\n\n/** Structural Index contract-call row. */\nexport interface IndexContractCallRow {\n\tsender: string;\n\tcontract_id?: string | null;\n\tfunction_name?: string | null;\n\targs?: unknown;\n\tresult?: unknown;\n\tresult_hex?: unknown;\n\ttx_id: string;\n\tstatus: string;\n\tcursor?: string;\n\t[key: string]: unknown;\n}\n\nexport type IndexTestRow = IndexEventRow | IndexContractCallRow;\n\nexport interface SubgraphTestSource {\n\ttype: string;\n\tcontractId?: string | string[];\n\ttopic?: string;\n\twhere?: Record<string, string | readonly string[]>;\n\tfunctionName?: string;\n}\n\n/** Per-event IN/OUT trace for `subgraphs preview`. */\nexport interface EventTrace {\n\tsource: string;\n\tblockHeight?: number;\n\ttxId?: string;\n\t/** Camelized event.data keys (or contract-call field names). */\n\tinKeys: string[];\n\t/** Tables written by this event; empty when the mapping wrote nothing. */\n\touts: Array<{ table: string; keys: string[] }>;\n}\n\n/** The outcome of a test run: matches, writes, and table rows. */\nexport interface SubgraphTestResult {\n\tok: boolean;\n\tcode?: \"EMPTY_MAPPING\" | \"NO_EVENTS\" | \"NO_SOURCES\";\n\tmatched: number;\n\twritten: number;\n\ttables: Array<{\n\t\tname: string;\n\t\trows: number;\n\t\tsampleRow?: Record<string, unknown>;\n\t}>;\n\tfirstEvent?: { source: string; data?: unknown };\n\thint?: string;\n\t/** Present when `trace: true`. */\n\ttraces?: EventTrace[];\n\t/** Keys present on every matched IN and never written to any OUT column. */\n\tunusedInKeys?: string[];\n}\n\n/** A subgraph's schema, handlers, sources, and the events to run. */\nexport interface RunSubgraphTestInput {\n\tschema: SubgraphSchema;\n\thandlers: Record<string, unknown>;\n\tsources: Record<string, SubgraphTestSource>;\n\tevents: Record<string, IndexTestRow[]>;\n\t/** Collect per-event IN/OUT traces (preview). */\n\ttrace?: boolean;\n}\n\n/** Tx fields the live runner copies onto `ctx.tx` / `event.tx` from an Index row. */\nfunction txFromRow(row: IndexTestRow): Partial<TxMeta> {\n\tconst r = row as Record<string, unknown>;\n\treturn {\n\t\t...(typeof r.tx_id === \"string\" ? { txId: r.tx_id } : {}),\n\t\t...(typeof r.sender === \"string\" ? { sender: r.sender } : {}),\n\t\t...(typeof r.status === \"string\" ? { status: r.status } : {}),\n\t\t...(typeof r.contract_id === \"string\" ? { contractId: r.contract_id } : {}),\n\t\t...(typeof r.function_name === \"string\"\n\t\t\t? { functionName: r.function_name }\n\t\t\t: {}),\n\t};\n}\n\n/** A print source's `where` against an Index print row's decoded tuple —\n * the same equality the live matcher applies. */\nfunction indexPrintWhereAllows(\n\twhere: Record<string, string | readonly string[]> | undefined,\n\trow: IndexEventRow,\n): boolean {\n\tif (!where) return true;\n\tconst value = (row.payload as { value?: unknown } | null)?.value;\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\treturn Object.entries(where).every(([key, expected]) =>\n\t\tprintFieldEquals(value as Record<string, unknown>, key, expected),\n\t);\n}\n\n/** Map an Index event row onto the payload shape a handler expects. */\nexport function toHandlerPayload(\n\t_filter: { type: string } | undefined,\n\trow: IndexEventRow,\n): Record<string, unknown> {\n\tconst tx = defaultTx(txFromRow(row));\n\tif (row.event_type === \"print\") {\n\t\tconst payload = row.payload as { topic?: string | null; value?: unknown };\n\t\t// Mirrors runtime/runner.ts print_event: a tuple's own `topic` wins over\n\t\t// the row's generic top-level \"print\".\n\t\tconst value = payload?.value;\n\t\tconst tupleTopic =\n\t\t\tvalue && typeof value === \"object\" && !Array.isArray(value)\n\t\t\t\t? (value as Record<string, unknown>).topic\n\t\t\t\t: undefined;\n\t\treturn {\n\t\t\tcontractId: row.contract_id ?? \"\",\n\t\t\ttopic: tupleTopic ? String(tupleTopic) : (payload?.topic ?? \"\"),\n\t\t\tdata: (camelizeKeys(payload?.value) as Record<string, unknown>) ?? {},\n\t\t\ttx,\n\t\t};\n\t}\n\tconst r = row as Record<string, unknown>;\n\tif (row.event_type === \"var_set\") {\n\t\tconst rawValue = typeof r.raw_value === \"string\" ? r.raw_value : \"\";\n\t\treturn {\n\t\t\tcontractId: row.contract_id ?? \"\",\n\t\t\tvarName: typeof r.var_name === \"string\" ? r.var_name : \"\",\n\t\t\trawValue,\n\t\t\tvalue: rawValue,\n\t\t\ttx,\n\t\t};\n\t}\n\tif (row.event_type === \"nested_contract_call\") {\n\t\tconst argsHex = Array.isArray(r.function_args)\n\t\t\t? r.function_args.filter((a): a is string => typeof a === \"string\")\n\t\t\t: [];\n\t\treturn {\n\t\t\tcontractId: row.contract_id ?? \"\",\n\t\t\tsender: typeof r.sender === \"string\" ? r.sender : null,\n\t\t\tcaller: typeof r.caller === \"string\" ? r.caller : \"\",\n\t\t\tfunctionName: typeof r.function_name === \"string\" ? r.function_name : \"\",\n\t\t\targs: argsHex,\n\t\t\targuments: argsHex,\n\t\t\trawResult: typeof r.raw_result === \"string\" ? r.raw_result : \"\",\n\t\t\tresult: null,\n\t\t\ttx,\n\t\t};\n\t}\n\tif (\n\t\trow.event_type === \"map_set\" ||\n\t\trow.event_type === \"map_insert\" ||\n\t\trow.event_type === \"map_delete\"\n\t) {\n\t\tconst rawKey = typeof r.raw_key === \"string\" ? r.raw_key : \"\";\n\t\tconst rawValue = typeof r.raw_value === \"string\" ? r.raw_value : \"\";\n\t\treturn {\n\t\t\tcontractId: row.contract_id ?? \"\",\n\t\t\tmap: typeof r.map === \"string\" ? r.map : \"\",\n\t\t\trawKey,\n\t\t\tkey: rawKey,\n\t\t\t...(row.event_type === \"map_delete\" ? {} : { rawValue, value: rawValue }),\n\t\t\ttx,\n\t\t};\n\t}\n\t// Token/STX events: the Index row is already flat and camel-free; map the\n\t// snake_case wire names onto the handler payload names.\n\treturn {\n\t\t...(r.sender !== undefined ? { sender: r.sender } : {}),\n\t\t...(r.recipient !== undefined ? { recipient: r.recipient } : {}),\n\t\t...(r.amount !== undefined ? { amount: BigInt(String(r.amount)) } : {}),\n\t\t...(r.asset_identifier !== undefined\n\t\t\t? { assetIdentifier: r.asset_identifier }\n\t\t\t: {}),\n\t\t...(r.value !== undefined ? { tokenId: r.value } : {}),\n\t\ttx,\n\t};\n}\n\n/** Map an Index contract-call row onto the ContractCallEvent handler shape. */\nexport function toContractCallPayload(\n\trow: IndexContractCallRow,\n): Record<string, unknown> {\n\treturn {\n\t\ttype: \"contract_call\",\n\t\tsender: row.sender,\n\t\tcontractId: row.contract_id ?? \"\",\n\t\tfunctionName: row.function_name ?? \"\",\n\t\targs: Array.isArray(row.args) ? row.args : [],\n\t\tresult: row.result ?? null,\n\t\tresultHex: row.result_hex ?? null,\n\t\ttx: {\n\t\t\ttxId: row.tx_id,\n\t\t\tsender: row.sender,\n\t\t\ttype: \"contract_call\",\n\t\t\tstatus: row.status,\n\t\t\tcontractId: row.contract_id ?? null,\n\t\t\tfunctionName: row.function_name ?? null,\n\t\t},\n\t};\n}\n\nfunction jsonSafe(value: unknown): unknown {\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (value === null || value === undefined) return value;\n\tif (Array.isArray(value)) return value.map(jsonSafe);\n\tif (typeof value === \"object\") {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n\t\t\tout[k] = jsonSafe(v);\n\t\t}\n\t\treturn out;\n\t}\n\treturn value;\n}\n\nfunction dataKeysOf(data: unknown): string[] {\n\tif (data && typeof data === \"object\" && !Array.isArray(data)) {\n\t\treturn Object.keys(data as Record<string, unknown>);\n\t}\n\treturn [];\n}\n\nfunction rowMeta(row: IndexTestRow): {\n\tblockHeight?: number;\n\ttxId?: string;\n} {\n\tconst r = row as Record<string, unknown>;\n\treturn {\n\t\t...(typeof r.block_height === \"number\"\n\t\t\t? { blockHeight: r.block_height }\n\t\t\t: {}),\n\t\t...(typeof r.tx_id === \"string\" ? { txId: r.tx_id } : {}),\n\t};\n}\n\nfunction inKeysOf(\n\tfilter: SubgraphTestSource | undefined,\n\tpayload: Record<string, unknown>,\n): string[] {\n\tif (filter?.type === \"contract_call\") {\n\t\treturn [\"functionName\", \"args\", \"sender\", \"contractId\"].filter(\n\t\t\t(k) => payload[k] !== undefined,\n\t\t);\n\t}\n\treturn dataKeysOf(payload.data);\n}\n\nfunction unusedInKeysAcross(traces: EventTrace[]): string[] | undefined {\n\tif (traces.length === 0) return undefined;\n\tconst alwaysIn = new Set(traces[0]?.inKeys ?? []);\n\tfor (const t of traces.slice(1)) {\n\t\tconst keys = new Set(t.inKeys);\n\t\tfor (const k of [...alwaysIn]) {\n\t\t\tif (!keys.has(k)) alwaysIn.delete(k);\n\t\t}\n\t}\n\tconst outKeys = new Set<string>();\n\tfor (const t of traces) {\n\t\tfor (const o of t.outs) {\n\t\t\tfor (const k of o.keys) outKeys.add(k);\n\t\t}\n\t}\n\t// Compare camel IN keys to snake OUT columns loosely: tokenX ↔ token_x.\n\tconst outNormalized = new Set(\n\t\t[...outKeys].map((k) => k.replace(/_/g, \"\").toLowerCase()),\n\t);\n\tconst unused = [...alwaysIn].filter(\n\t\t(k) => !outNormalized.has(k.replace(/_/g, \"\").toLowerCase()),\n\t);\n\treturn unused.length > 0 ? unused : undefined;\n}\n\n/**\n * Apply local handlers to Index rows in memory. Fail-closed: matched events\n * with zero written rows is EMPTY_MAPPING (the bns-names field-mapping shape).\n */\nexport async function runSubgraphTest(\n\tinput: RunSubgraphTestInput,\n): Promise<SubgraphTestResult> {\n\tconst { schema, handlers, sources, events, trace } = input;\n\tconst sourceNames = Object.keys(sources);\n\tif (sourceNames.length === 0) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tcode: \"NO_SOURCES\",\n\t\t\tmatched: 0,\n\t\t\twritten: 0,\n\t\t\ttables: [],\n\t\t\thint: \"No sources to test.\",\n\t\t};\n\t}\n\n\tconst ctx = createTestContext(schema);\n\tlet matched = 0;\n\tlet firstEvent: SubgraphTestResult[\"firstEvent\"];\n\tconst traces: EventTrace[] = [];\n\n\tfor (const [name, rows] of Object.entries(events)) {\n\t\tconst filter = sources[name];\n\t\tconst handler = handlers[name];\n\t\tif (typeof handler !== \"function\") continue;\n\n\t\tfor (const row of rows) {\n\t\t\tconst payload =\n\t\t\t\tfilter?.type === \"contract_call\"\n\t\t\t\t\t? toContractCallPayload(row as IndexContractCallRow)\n\t\t\t\t\t: toHandlerPayload(filter, row as IndexEventRow);\n\t\t\tif (\n\t\t\t\tfilter?.type === \"print_event\" &&\n\t\t\t\t((filter.topic &&\n\t\t\t\t\t(payload as { topic?: string }).topic !== filter.topic) ||\n\t\t\t\t\t!indexPrintWhereAllows(filter.where, row as IndexEventRow))\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!firstEvent) {\n\t\t\t\tfirstEvent = {\n\t\t\t\t\tsource: name,\n\t\t\t\t\tdata:\n\t\t\t\t\t\tfilter?.type === \"contract_call\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tfunctionName: (payload as { functionName?: string })\n\t\t\t\t\t\t\t\t\t\t.functionName,\n\t\t\t\t\t\t\t\t\targs: (payload as { args?: unknown }).args,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: (payload as { data?: unknown }).data,\n\t\t\t\t};\n\t\t\t}\n\t\t\tmatched++;\n\t\t\tconst checkpoint = ctx.opsCheckpoint();\n\t\t\ttry {\n\t\t\t\tctx.setTx(txFromRow(row));\n\t\t\t\tconst event = buildEvent(\n\t\t\t\t\tfilter as Parameters<typeof buildEvent>[0],\n\t\t\t\t\tpayload as Record<string, unknown>,\n\t\t\t\t\t{ tx: ctx.tx },\n\t\t\t\t);\n\t\t\t\tawait (handler as (e: unknown, c: unknown) => unknown)(event, ctx);\n\t\t\t} catch {\n\t\t\t\t// Counted as matched; rows may still be empty → EMPTY_MAPPING.\n\t\t\t}\n\t\t\tif (trace) {\n\t\t\t\tconst inserts = ctx.pendingInsertsSince(checkpoint);\n\t\t\t\ttraces.push({\n\t\t\t\t\tsource: name,\n\t\t\t\t\t...rowMeta(row),\n\t\t\t\t\tinKeys: inKeysOf(filter, payload),\n\t\t\t\t\touts: inserts.map((i) => ({ table: i.table, keys: i.keys })),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tconst tableNames = Object.keys(schema);\n\tconst tables: SubgraphTestResult[\"tables\"] = [];\n\tlet written = 0;\n\tfor (const table of tableNames) {\n\t\tconst tableRows = await ctx.rows(table as never);\n\t\twritten += tableRows.length;\n\t\tconst sample = tableRows[0];\n\t\ttables.push({\n\t\t\tname: table,\n\t\t\trows: tableRows.length,\n\t\t\t...(sample\n\t\t\t\t? { sampleRow: jsonSafe(sample) as Record<string, unknown> }\n\t\t\t\t: {}),\n\t\t});\n\t}\n\n\tconst fetched = Object.values(events).reduce((n, r) => n + r.length, 0);\n\tconst unusedInKeys = trace ? unusedInKeysAcross(traces) : undefined;\n\tconst traceFields = {\n\t\t...(trace ? { traces } : {}),\n\t\t...(unusedInKeys ? { unusedInKeys } : {}),\n\t};\n\n\tif (fetched === 0) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tcode: \"NO_EVENTS\",\n\t\t\tmatched: 0,\n\t\t\twritten,\n\t\t\ttables,\n\t\t\thint: \"No events matched these sources in the given range. Widen the range or check the source filters.\",\n\t\t\t...traceFields,\n\t\t};\n\t}\n\n\tif (written === 0) {\n\t\tconst keys = dataKeysOf(firstEvent?.data);\n\t\tconst keyPart =\n\t\t\tkeys.length > 0\n\t\t\t\t? ` Observed event.data keys on first event (${firstEvent?.source}): ${keys.join(\", \")}.`\n\t\t\t\t: firstEvent\n\t\t\t\t\t? ` First event source: ${firstEvent.source}.`\n\t\t\t\t\t: \"\";\n\t\treturn {\n\t\t\tok: false,\n\t\t\tcode: \"EMPTY_MAPPING\",\n\t\t\tmatched,\n\t\t\twritten: 0,\n\t\t\ttables,\n\t\t\tfirstEvent: firstEvent\n\t\t\t\t? { ...firstEvent, data: jsonSafe(firstEvent.data) }\n\t\t\t\t: undefined,\n\t\t\thint: `${matched} event${matched === 1 ? \"\" : \"s\"} matched, but NO rows were written — the shape of the field-mapping bug that ships a 0-row subgraph.${keyPart} Map only observed keys; do not invent fields.`,\n\t\t\t...traceFields,\n\t\t};\n\t}\n\n\t// Preview fail-closed: any matched event with 0 OUT rows is EMPTY_MAPPING\n\t// even when other events wrote (per-event empty mapping).\n\tif (trace && traces.some((t) => t.outs.length === 0)) {\n\t\tconst empty = traces.find((t) => t.outs.length === 0);\n\t\tconst keyPart =\n\t\t\tempty && empty.inKeys.length > 0\n\t\t\t\t? ` Empty event (${empty.source}) IN keys: ${empty.inKeys.join(\", \")}.`\n\t\t\t\t: \"\";\n\t\treturn {\n\t\t\tok: false,\n\t\t\tcode: \"EMPTY_MAPPING\",\n\t\t\tmatched,\n\t\t\twritten,\n\t\t\ttables,\n\t\t\tfirstEvent: firstEvent\n\t\t\t\t? { ...firstEvent, data: jsonSafe(firstEvent.data) }\n\t\t\t\t: undefined,\n\t\t\thint: `At least one matched event wrote 0 rows.${keyPart}`,\n\t\t\t...traceFields,\n\t\t};\n\t}\n\n\treturn {\n\t\tok: true,\n\t\tmatched,\n\t\twritten,\n\t\ttables,\n\t\tfirstEvent: firstEvent\n\t\t\t? { ...firstEvent, data: jsonSafe(firstEvent.data) }\n\t\t\t: undefined,\n\t\t...traceFields,\n\t};\n}\n\n/** A subgraph's schema, sources, and handlers, for a probe run. */\nexport interface ProbeHandlersDef {\n\tschema: SubgraphSchema;\n\tsources: Record<string, { type: string; [key: string]: unknown }>;\n\thandlers: Record<string, unknown>;\n}\n\n/** How many events matched and rows a probe wrote. */\nexport interface ProbeHandlersResult {\n\tmatched: number;\n\twritten: number;\n\ttables: string[];\n\tfirstEventKeys?: string[];\n}\n\n/**\n * Run handlers against pre-built sample payloads in memory (no Index, no\n * Postgres). Deploy uses this with print-schema dummy events to refuse\n * EMPTY_MAPPING before DDL apply.\n */\nexport async function probeHandlers(\n\tdef: ProbeHandlersDef,\n\tsamples: Array<{ source: string; event: Record<string, unknown> }>,\n): Promise<ProbeHandlersResult> {\n\tconst ctx = createTestContext(def.schema);\n\tlet matched = 0;\n\tlet firstEventKeys: string[] | undefined;\n\n\tfor (const sample of samples) {\n\t\tconst filter = def.sources[sample.source];\n\t\tif (!filter) continue;\n\t\tconst handler = def.handlers[sample.source];\n\t\tif (typeof handler !== \"function\") continue;\n\n\t\tif (firstEventKeys === undefined) {\n\t\t\tfirstEventKeys = dataKeysOf(sample.event.data);\n\t\t}\n\n\t\tmatched++;\n\t\ttry {\n\t\t\tconst event = buildEvent(\n\t\t\t\tfilter as Parameters<typeof buildEvent>[0],\n\t\t\t\tsample.event,\n\t\t\t);\n\t\t\tawait (handler as (e: unknown, c: unknown) => unknown)(event, ctx);\n\t\t} catch {\n\t\t\t// Counted as matched; rows may still be empty → EMPTY_MAPPING.\n\t\t}\n\t}\n\n\tconst tables = Object.keys(def.schema);\n\tlet written = 0;\n\tfor (const table of tables) {\n\t\twritten += (await ctx.rows(table as never)).length;\n\t}\n\n\treturn {\n\t\tmatched,\n\t\twritten,\n\t\ttables,\n\t\t...(firstEventKeys !== undefined ? { firstEventKeys } : {}),\n\t};\n}\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "D74EC8C19449619B64756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|