@secondlayer/subgraphs 3.26.0 → 3.26.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/dist/src/index.js +29 -9
- package/dist/src/index.js.map +3 -3
- package/dist/src/runtime/block-processor.js +29 -9
- package/dist/src/runtime/block-processor.js.map +3 -3
- package/dist/src/runtime/catchup.js +29 -9
- package/dist/src/runtime/catchup.js.map +3 -3
- package/dist/src/runtime/context.d.ts +20 -0
- package/dist/src/runtime/context.js +29 -9
- package/dist/src/runtime/context.js.map +3 -3
- package/dist/src/runtime/processor.js +29 -9
- package/dist/src/runtime/processor.js.map +3 -3
- package/dist/src/runtime/reindex.js +29 -9
- package/dist/src/runtime/reindex.js.map +3 -3
- package/dist/src/runtime/reorg.js +29 -9
- package/dist/src/runtime/reorg.js.map +3 -3
- package/dist/src/runtime/runner.d.ts +20 -0
- package/dist/src/service.js +29 -9
- package/dist/src/service.js.map +3 -3
- package/dist/src/testing/index.js +29 -9
- package/dist/src/testing/index.js.map +3 -3
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/runtime/context.ts", "../src/schema/generator.ts", "../src/schema/utils.ts", "../src/runtime/chain-read.ts", "../src/runtime/clarity.ts", "../src/runtime/runner.ts", "../src/runtime/print-validate.ts", "../src/runtime/source-matcher.ts", "../src/runtime/block-processor.ts", "../src/runtime/block-source.ts", "../src/runtime/batch-loader.ts", "../src/runtime/reconstruct.ts", "../src/runtime/outbox-emit.ts", "../src/runtime/sandbox/flag.ts", "../src/runtime/sandbox/host.ts", "../src/runtime/sandbox/bundle.ts", "../src/runtime/subscription-state.ts", "../src/runtime/emitter-matcher.ts", "../src/runtime/stats.ts", "../src/runtime/catchup.ts", "../src/runtime/catchup-leader.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type { Database } from \"@secondlayer/shared/db\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport { formatUnits } from \"@secondlayer/stacks/utils\";\nimport { type Kysely, type Transaction, sql } from \"kysely\";\nimport { TYPE_MAP, emitJournalDDL } from \"../schema/generator.ts\";\nimport type { ComputedValue, 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\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 * Aggregate reads (count/sum/min/max) remain pre-flush DB state.\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 * BYO data plane: handler writes land in a user-owned DB whose flush can't\n\t * share the managed block transaction, so a crash replays the block. When\n\t * set, flush() prepends a replace-per-height DELETE for every inserted table\n\t * (`_block_height = N` → re-INSERT), making block reprocessing idempotent.\n\t * Non-idempotent `update` handlers are rejected at deploy, not here.\n\t */\n\tprivate readonly byo: boolean;\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\tbyo = false,\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.byo = byo;\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/** Partial update — sets only specified fields, preserves everything else */\n\tpatch(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tset: Record<string, unknown>,\n\t): void {\n\t\tthis.update(table, where, set);\n\t}\n\n\t/**\n\t * Find-then-merge-or-insert. Values can be functions: (existing) => newValue.\n\t * Async because it reads existing row first.\n\t */\n\tasync patchOrInsert(\n\t\ttable: string,\n\t\tkey: Record<string, unknown>,\n\t\trow: Record<string, ComputedValue>,\n\t): Promise<void> {\n\t\tconst existing = await this.findOne(table, key);\n\t\tconst resolved: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(row)) {\n\t\t\tresolved[k] = typeof v === \"function\" ? v(existing) : v;\n\t\t}\n\t\tthis.upsert(table, key, resolved);\n\t}\n\n\t/** Format a bigint amount with decimal places */\n\tformatUnits(value: bigint, decimals: number): string {\n\t\treturn formatUnits(value, decimals);\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\tconst query = `SELECT * FROM ${qualifiedTable} WHERE ${clause}${\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-meta 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) && !k.startsWith(\"_\")) 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// --- Aggregate reads ---\n\n\tasync count(table: string, where?: Record<string, unknown>): Promise<number> {\n\t\tthis.validateTable(table);\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst whereClause = where ? `WHERE ${buildWhereClause(where).clause}` : \"\";\n\t\tconst { rows } = await sql\n\t\t\t.raw(\n\t\t\t\t`SELECT COUNT(*)::int AS count FROM ${qualifiedTable} ${whereClause}`,\n\t\t\t)\n\t\t\t.execute(this.db);\n\t\treturn Number((rows as Record<string, unknown>[])[0]?.count ?? 0);\n\t}\n\n\tasync sum(\n\t\ttable: string,\n\t\tcolumn: string,\n\t\twhere?: Record<string, unknown>,\n\t): Promise<bigint> {\n\t\tthis.validateTable(table);\n\t\tvalidateColumnName(column);\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst whereClause = where ? `WHERE ${buildWhereClause(where).clause}` : \"\";\n\t\tconst { rows } = await sql\n\t\t\t.raw(\n\t\t\t\t`SELECT COALESCE(SUM(\"${column}\"), 0) AS total FROM ${qualifiedTable} ${whereClause}`,\n\t\t\t)\n\t\t\t.execute(this.db);\n\t\treturn BigInt(\n\t\t\t(rows as Record<string, unknown>[])[0]?.total?.toString() ?? \"0\",\n\t\t);\n\t}\n\n\tasync min(\n\t\ttable: string,\n\t\tcolumn: string,\n\t\twhere?: Record<string, unknown>,\n\t): Promise<bigint | null> {\n\t\tthis.validateTable(table);\n\t\tvalidateColumnName(column);\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst whereClause = where ? `WHERE ${buildWhereClause(where).clause}` : \"\";\n\t\tconst { rows } = await sql\n\t\t\t.raw(\n\t\t\t\t`SELECT MIN(\"${column}\") AS val FROM ${qualifiedTable} ${whereClause}`,\n\t\t\t)\n\t\t\t.execute(this.db);\n\t\tconst val = (rows as Record<string, unknown>[])[0]?.val;\n\t\treturn val != null ? BigInt(val.toString()) : null;\n\t}\n\n\tasync max(\n\t\ttable: string,\n\t\tcolumn: string,\n\t\twhere?: Record<string, unknown>,\n\t): Promise<bigint | null> {\n\t\tthis.validateTable(table);\n\t\tvalidateColumnName(column);\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst whereClause = where ? `WHERE ${buildWhereClause(where).clause}` : \"\";\n\t\tconst { rows } = await sql\n\t\t\t.raw(\n\t\t\t\t`SELECT MAX(\"${column}\") AS val FROM ${qualifiedTable} ${whereClause}`,\n\t\t\t)\n\t\t\t.execute(this.db);\n\t\tconst val = (rows as Record<string, unknown>[])[0]?.val;\n\t\treturn val != null ? BigInt(val.toString()) : null;\n\t}\n\n\tasync countDistinct(\n\t\ttable: string,\n\t\tcolumn: string,\n\t\twhere?: Record<string, unknown>,\n\t): Promise<number> {\n\t\tthis.validateTable(table);\n\t\tvalidateColumnName(column);\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst whereClause = where ? `WHERE ${buildWhereClause(where).clause}` : \"\";\n\t\tconst { rows } = await sql\n\t\t\t.raw(\n\t\t\t\t`SELECT COUNT(DISTINCT \"${column}\")::int AS count FROM ${qualifiedTable} ${whereClause}`,\n\t\t\t)\n\t\t\t.execute(this.db);\n\t\treturn Number((rows as Record<string, unknown>[])[0]?.count ?? 0);\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 so downstream\n\t * consumers (subscription emitter) can fan out outbox rows atomically\n\t * with the flush itself.\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\tfor (const stmt of statements) {\n\t\t\t\tawait sql.raw(stmt).execute(this.db);\n\t\t\t}\n\t\t} else {\n\t\t\tawait (this.db as Kysely<Database>).transaction().execute(async (tx) => {\n\t\t\t\tfor (const stmt of statements) {\n\t\t\t\t\tawait sql.raw(stmt).execute(tx);\n\t\t\t\t}\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/** 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[]): string[] {\n\t\tconst statements: string[] = [];\n\n\t\t// BYO replace-per-height: clear this block's prior inserts before\n\t\t// re-inserting so a replayed block (no cross-DB tx) stays idempotent.\n\t\t// One DELETE per distinct inserted table; upserts/updates self-heal.\n\t\tif (this.byo) {\n\t\t\tconst insertTables = new Set<string>();\n\t\t\tfor (const op of ops)\n\t\t\t\tif (op.kind === \"insert\") insertTables.add(op.table);\n\t\t\tfor (const table of insertTables) {\n\t\t\t\tstatements.push(\n\t\t\t\t\t`DELETE FROM \"${this.pgSchemaName}\".\"${table}\" WHERE \"_block_height\" = ${this.block.height}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\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\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\tstatements.push(\n\t\t\t\t\t`UPDATE ${qualifiedTable} SET ${updSet} WHERE ${keyPred}`,\n\t\t\t\t);\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\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// Deduplicate by upsert key — last row wins (Postgres rejects duplicate keys in one INSERT)\n\t\t\tlet rows = batch.rows;\n\t\t\tif (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\tconst seen = new Map<string, number>();\n\t\t\t\tfor (let i = 0; i < rows.length; i++) {\n\t\t\t\t\tconst key = keyIndices.map((ki) => rows[i][ki]).join(\"\\0\");\n\t\t\t\t\tseen.set(key, i);\n\t\t\t\t}\n\t\t\t\tif (seen.size < rows.length) {\n\t\t\t\t\trows = Array.from(seen.values()).map((i) => rows[i]);\n\t\t\t\t}\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) && !c.startsWith(\"_\"),\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/** 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",
|
|
5
|
+
"import type { Database } from \"@secondlayer/shared/db\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport { formatUnits } from \"@secondlayer/stacks/utils\";\nimport { type Kysely, type Transaction, sql } from \"kysely\";\nimport { TYPE_MAP, emitJournalDDL } from \"../schema/generator.ts\";\nimport type { ComputedValue, 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 * Aggregate reads (count/sum/min/max) remain pre-flush DB state.\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 * BYO data plane: handler writes land in a user-owned DB whose flush can't\n\t * share the managed block transaction, so a crash replays the block. When\n\t * set, flush() prepends a replace-per-height DELETE for every inserted table\n\t * (`_block_height = N` → re-INSERT), making block reprocessing idempotent.\n\t * Non-idempotent `update` handlers are rejected at deploy, not here.\n\t */\n\tprivate readonly byo: boolean;\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\tbyo = false,\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.byo = byo;\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/** Partial update — sets only specified fields, preserves everything else */\n\tpatch(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tset: Record<string, unknown>,\n\t): void {\n\t\tthis.update(table, where, set);\n\t}\n\n\t/**\n\t * Find-then-merge-or-insert. Values can be functions: (existing) => newValue.\n\t * Async because it reads existing row first.\n\t */\n\tasync patchOrInsert(\n\t\ttable: string,\n\t\tkey: Record<string, unknown>,\n\t\trow: Record<string, ComputedValue>,\n\t): Promise<void> {\n\t\tconst existing = await this.findOne(table, key);\n\t\tconst resolved: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(row)) {\n\t\t\tresolved[k] = typeof v === \"function\" ? v(existing) : v;\n\t\t}\n\t\tthis.upsert(table, key, resolved);\n\t}\n\n\t/** Format a bigint amount with decimal places */\n\tformatUnits(value: bigint, decimals: number): string {\n\t\treturn formatUnits(value, decimals);\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\tconst query = `SELECT * FROM ${qualifiedTable} WHERE ${clause}${\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-meta 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) && !k.startsWith(\"_\")) 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// --- Aggregate reads ---\n\n\tasync count(table: string, where?: Record<string, unknown>): Promise<number> {\n\t\tthis.validateTable(table);\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst whereClause = where ? `WHERE ${buildWhereClause(where).clause}` : \"\";\n\t\tconst { rows } = await sql\n\t\t\t.raw(\n\t\t\t\t`SELECT COUNT(*)::int AS count FROM ${qualifiedTable} ${whereClause}`,\n\t\t\t)\n\t\t\t.execute(this.db);\n\t\treturn Number((rows as Record<string, unknown>[])[0]?.count ?? 0);\n\t}\n\n\tasync sum(\n\t\ttable: string,\n\t\tcolumn: string,\n\t\twhere?: Record<string, unknown>,\n\t): Promise<bigint> {\n\t\tthis.validateTable(table);\n\t\tvalidateColumnName(column);\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst whereClause = where ? `WHERE ${buildWhereClause(where).clause}` : \"\";\n\t\tconst { rows } = await sql\n\t\t\t.raw(\n\t\t\t\t`SELECT COALESCE(SUM(\"${column}\"), 0) AS total FROM ${qualifiedTable} ${whereClause}`,\n\t\t\t)\n\t\t\t.execute(this.db);\n\t\treturn BigInt(\n\t\t\t(rows as Record<string, unknown>[])[0]?.total?.toString() ?? \"0\",\n\t\t);\n\t}\n\n\tasync min(\n\t\ttable: string,\n\t\tcolumn: string,\n\t\twhere?: Record<string, unknown>,\n\t): Promise<bigint | null> {\n\t\tthis.validateTable(table);\n\t\tvalidateColumnName(column);\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst whereClause = where ? `WHERE ${buildWhereClause(where).clause}` : \"\";\n\t\tconst { rows } = await sql\n\t\t\t.raw(\n\t\t\t\t`SELECT MIN(\"${column}\") AS val FROM ${qualifiedTable} ${whereClause}`,\n\t\t\t)\n\t\t\t.execute(this.db);\n\t\tconst val = (rows as Record<string, unknown>[])[0]?.val;\n\t\treturn val != null ? BigInt(val.toString()) : null;\n\t}\n\n\tasync max(\n\t\ttable: string,\n\t\tcolumn: string,\n\t\twhere?: Record<string, unknown>,\n\t): Promise<bigint | null> {\n\t\tthis.validateTable(table);\n\t\tvalidateColumnName(column);\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst whereClause = where ? `WHERE ${buildWhereClause(where).clause}` : \"\";\n\t\tconst { rows } = await sql\n\t\t\t.raw(\n\t\t\t\t`SELECT MAX(\"${column}\") AS val FROM ${qualifiedTable} ${whereClause}`,\n\t\t\t)\n\t\t\t.execute(this.db);\n\t\tconst val = (rows as Record<string, unknown>[])[0]?.val;\n\t\treturn val != null ? BigInt(val.toString()) : null;\n\t}\n\n\tasync countDistinct(\n\t\ttable: string,\n\t\tcolumn: string,\n\t\twhere?: Record<string, unknown>,\n\t): Promise<number> {\n\t\tthis.validateTable(table);\n\t\tvalidateColumnName(column);\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst whereClause = where ? `WHERE ${buildWhereClause(where).clause}` : \"\";\n\t\tconst { rows } = await sql\n\t\t\t.raw(\n\t\t\t\t`SELECT COUNT(DISTINCT \"${column}\")::int AS count FROM ${qualifiedTable} ${whereClause}`,\n\t\t\t)\n\t\t\t.execute(this.db);\n\t\treturn Number((rows as Record<string, unknown>[])[0]?.count ?? 0);\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 so downstream\n\t * consumers (subscription emitter) can fan out outbox rows atomically\n\t * with the flush itself.\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// BYO replace-per-height: clear this block's prior inserts before\n\t\t// re-inserting so a replayed block (no cross-DB tx) stays idempotent.\n\t\t// One DELETE per distinct inserted table; upserts/updates self-heal.\n\t\tif (this.byo) {\n\t\t\tconst insertTables = new Set<string>();\n\t\t\tfor (const op of ops)\n\t\t\t\tif (op.kind === \"insert\") insertTables.add(op.table);\n\t\t\tfor (const table of insertTables) {\n\t\t\t\tstatements.push(\n\t\t\t\t\t`DELETE FROM \"${this.pgSchemaName}\".\"${table}\" WHERE \"_block_height\" = ${this.block.height}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\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// Deduplicate by upsert key — last row wins (Postgres rejects duplicate keys in one INSERT)\n\t\t\tlet rows = batch.rows;\n\t\t\tif (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\tconst seen = new Map<string, number>();\n\t\t\t\tfor (let i = 0; i < rows.length; i++) {\n\t\t\t\t\tconst key = keyIndices.map((ki) => rows[i][ki]).join(\"\\0\");\n\t\t\t\t\tseen.set(key, i);\n\t\t\t\t}\n\t\t\t\tif (seen.size < rows.length) {\n\t\t\t\t\trows = Array.from(seen.values()).map((i) => rows[i]);\n\t\t\t\t}\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) && !c.startsWith(\"_\"),\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/** 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\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\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 (NOT foreign keys; see {@link emitForeignKeyDDL}, emitted in a\n * second pass once every referenced table exists). 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`CREATE INDEX IF NOT EXISTS ${quotePgIdent(`idx_${schemaName}_${tableName}_${colName}`)} ON ${qualifiedName} (${quotePgIdent(colName)})`,\n\t\t\t);\n\t\t\tstatements.push(\n\t\t\t\t`CREATE INDEX IF NOT EXISTS ${quotePgIdent(safeIndexName(`idx_${schemaName}_${tableName}_${colName}_id`))} ON ${qualifiedName} (${quotePgIdent(colName)}, ${quotePgIdent(\"_id\")})`,\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/** Foreign-key DDL for one table's relations. Emit AFTER every referenced table\n * exists; references require the target columns to be a UNIQUE key. */\nexport function emitForeignKeyDDL(\n\tschemaName: string,\n\ttableName: string,\n\ttableDef: SubgraphTable,\n): string[] {\n\treturn (tableDef.relations ?? []).map((rel) => {\n\t\tconst constraintName = quotePgIdent(\n\t\t\t`fk_${schemaName}_${tableName}_${rel.name}`,\n\t\t);\n\t\treturn (\n\t\t\t`ALTER TABLE ${quotePgIdent(schemaName)}.${quotePgIdent(tableName)} ADD CONSTRAINT ${constraintName} ` +\n\t\t\t`FOREIGN KEY (${rel.fields.map(quotePgIdent).join(\", \")}) ` +\n\t\t\t`REFERENCES ${quotePgIdent(schemaName)}.${quotePgIdent(rel.references)} (${rel.referencedColumns.map(quotePgIdent).join(\", \")})`\n\t\t);\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// Foreign keys are added in a second pass so every referenced table exists.\n\t// These mirror the ORM relations emitted by the codegen (no drift) and require\n\t// the referenced columns to be a UNIQUE key on the target table.\n\tfor (const [tableName, tableDef] of Object.entries(def.schema)) {\n\t\tstatements.push(...emitForeignKeyDDL(schemaName, tableName, tableDef));\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",
|
|
8
8
|
"import { getSourceDb } from \"@secondlayer/shared/db\";\nimport type { Database } from \"@secondlayer/shared/db/schema\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport { http, createPublicClient } 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\";\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\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 * 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>]: (\n\t\targs: ExtractFunctionArgs<C, N>,\n\t) => Promise<UnwrapResponse<ExtractFunctionOutput<C, N>>>;\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\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 * Typed read methods for one contract, from a handler.\n *\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\nexport class ChainReadError extends Error {\n\toverride name = \"ChainReadError\";\n}\n\n/**\n * Node transport for handler reads. Deliberately its own client rather than a\n * shared singleton: `retryCount: 0` keeps a slow node from multiplying into the\n * block's retry budget (`processBlockWithRetry` already owns retries), and the\n * concurrency gate below bounds how much of a backfill can hit the node at once.\n */\nfunction nodeClient(rpcUrl: string) {\n\treturn createPublicClient({\n\t\ttransport: http(rpcUrl, { retryCount: 0, timeout: 10_000 }),\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. */\nfunction hashArgs(args: readonly ClarityValue[]): string {\n\tconst serialized = args.map((arg) => serializeCV(arg)).join(\",\");\n\treturn Bun.hash(serialized).toString(16);\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 rpcUrl = ctx.rpcUrl ?? process.env.STACKS_NODE_RPC_URL;\n\t\tif (!rpcUrl) {\n\t\t\tthrow new ChainReadError(\n\t\t\t\t\"ctx.client needs a Stacks node: set STACKS_NODE_RPC_URL on the subgraph processor.\",\n\t\t\t);\n\t\t}\n\n\t\tconst constant = options.cache === \"contract-constant\";\n\t\tif (!constant && !ctx.indexBlockHash) {\n\t\t\tthrow new ChainReadError(\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 db = ctx.db ?? getSourceDb();\n\t\tconst argsHash = hashArgs(clarityArgs);\n\t\tconst pinnedTo = constant ? null : (ctx.indexBlockHash as string);\n\n\t\tconst cached = await db\n\t\t\t.selectFrom(\"chain_read_cache\")\n\t\t\t.select(\"result_hex\")\n\t\t\t.where(\"contract_id\", \"=\", contractId)\n\t\t\t.where(\"function_name\", \"=\", fn.name)\n\t\t\t.where(\"args_hash\", \"=\", argsHash)\n\t\t\t.where((eb) =>\n\t\t\t\tpinnedTo === null\n\t\t\t\t\t? eb(\"index_block_hash\", \"is\", null)\n\t\t\t\t\t: eb(\"index_block_hash\", \"=\", pinnedTo),\n\t\t\t)\n\t\t\t.executeTakeFirst();\n\n\t\tconst resultHex =\n\t\t\tcached?.result_hex ??\n\t\t\t(await gate.run(async () => {\n\t\t\t\t// A constant read still pins to this block where it can: \"cannot\n\t\t\t\t// change\" is a claim about future blocks, not a license to read\n\t\t\t\t// a tip that may be ahead of the one being processed.\n\t\t\t\tif (!ctx.indexBlockHash) {\n\t\t\t\t\t// The one path where an UNPINNED read happens. Reachable only\n\t\t\t\t\t// in constant mode on a block with no persisted id — which is\n\t\t\t\t\t// exactly what the pinning error tells you to do — so it is\n\t\t\t\t\t// allowed, but never silently.\n\t\t\t\t\tlogger.warn(\n\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{\n\t\t\t\t\t\t\tcontractId,\n\t\t\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\t\t\tblockHeight: ctx.blockHeight,\n\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},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst value = await readContract(nodeClient(rpcUrl), {\n\t\t\t\t\tcontract: contractId,\n\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\targs: clarityArgs,\n\t\t\t\t\ttip: ctx.indexBlockHash ?? undefined,\n\t\t\t\t});\n\t\t\t\treturn serializeCV(value);\n\t\t\t}));\n\n\t\tif (!cached) {\n\t\t\tawait db\n\t\t\t\t.insertInto(\"chain_read_cache\")\n\t\t\t\t.values({\n\t\t\t\t\tcontract_id: contractId,\n\t\t\t\t\tfunction_name: fn.name,\n\t\t\t\t\targs_hash: argsHash,\n\t\t\t\t\tindex_block_hash: pinnedTo,\n\t\t\t\t\tblock_height: constant ? null : ctx.blockHeight,\n\t\t\t\t\tresult_hex: resultHex,\n\t\t\t\t})\n\t\t\t\t// Two handlers in the same batch can race to the same key; the\n\t\t\t\t// value is identical either way, so the loser keeps its own.\n\t\t\t\t.onConflict((oc) => oc.doNothing())\n\t\t\t\t.execute();\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",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"import { getTargetDb } from \"@secondlayer/shared/db\";\nimport { getSubgraph } from \"@secondlayer/shared/db/queries/subgraphs\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport type { SubgraphDefinition } from \"../types.ts\";\nimport { type BlockData, avgEventsPerBlock } from \"./batch-loader.ts\";\nimport {\n\ttype ProcessBlockResult,\n\tprocessBlockWithRetry,\n} from \"./block-processor.ts\";\nimport { resolveBlockSource } from \"./block-source.ts\";\nimport { isCatchUpLeader } from \"./catchup-leader.ts\";\nimport { StatsAccumulator } from \"./stats.ts\";\n\nconst LOG_INTERVAL = 1000;\nconst STANDARD_CATCHUP_BATCH_CONFIG = {\n\tdefaultBatchSize: 500,\n\tminBatchSize: 100,\n\tmaxBatchSize: 1000,\n\tprefetch: true,\n};\n\nconst catchingUp = new Set<string>();\n\n/**\n * f057 guard: `recordLiveProgress` (subgraphs.ts) writes `last_processed_block`\n * unconditionally — no monotonic guard — because the reorg rewind MUST be able\n * to move the cursor backward. That means a catch-up walk's forward writes and\n * a reorg's backward rewind must never interleave for the same subgraph, or\n * whichever commits last wins regardless of correctness. `catchingUp` (above)\n * only excludes concurrent catch-ups; it does nothing against a reorg.\n *\n * Both writers can only ever race within the SAME process: catch-up only ever\n * runs on the catch-up leader (processor.ts `runCatchUp`), and the reorg\n * NOTIFY listener runs on every process including that leader — so an\n * in-process guard is sufficient; no cross-process DB lock is needed.\n *\n * Two pieces, used together by catchUpSubgraph (below) and handleSubgraphReorg\n * (reorg.ts):\n *\n * - `withSubgraphBlockLock` is a per-subgraph mutex held for the duration of\n * ONE block's write — catch-up acquires it around each individual block it\n * commits (not around the whole walk), and the reorg handler acquires it\n * around its entire delete+reprocess+rewind sequence for a subgraph. So a\n * reorg only ever waits out a single in-flight block commit, never an\n * entire remaining catch-up walk — and since the lock is per-subgraph name,\n * a slow catch-up on one subgraph never stalls reorg handling for another\n * (handleSubgraphReorg processes subgraphs sequentially).\n * - `reorgEpoch` is a monotonic per-subgraph counter, bumped by\n * handleSubgraphReorg BEFORE it acquires the lock (so the bump is visible\n * immediately, independent of how long the lock wait takes, and is never\n * \"cleared\" — there's no race in un-setting a flag too early). catchUpSubgraph\n * snapshots the epoch once at the start of its walk and, after acquiring the\n * lock for each block, checks it again: a changed epoch means a reorg\n * touched this subgraph's cursor at some point during the walk, so the\n * walk's local progress state can no longer be trusted — it aborts the\n * whole tick without writing anything further. The next catch-up tick\n * re-reads `last_processed_block` fresh from the DB (line ~108) and resumes\n * correctly from the post-reorg cursor.\n */\nconst subgraphBlockLockHeld = new Set<string>();\nconst subgraphBlockLockWaiters = new Map<string, Array<() => void>>();\nconst reorgEpoch = new Map<string, number>();\n\nasync function acquireSubgraphBlockLock(name: string): Promise<() => void> {\n\tif (!subgraphBlockLockHeld.has(name)) {\n\t\tsubgraphBlockLockHeld.add(name);\n\t\treturn () => releaseSubgraphBlockLock(name);\n\t}\n\treturn new Promise<() => void>((resolve) => {\n\t\tconst waiters = subgraphBlockLockWaiters.get(name) ?? [];\n\t\twaiters.push(() => resolve(() => releaseSubgraphBlockLock(name)));\n\t\tsubgraphBlockLockWaiters.set(name, waiters);\n\t});\n}\n\nfunction releaseSubgraphBlockLock(name: string): void {\n\tconst waiters = subgraphBlockLockWaiters.get(name);\n\tif (waiters && waiters.length > 0) {\n\t\tconst next = waiters.shift() as () => void;\n\t\tif (waiters.length === 0) subgraphBlockLockWaiters.delete(name);\n\t\tnext(); // hand the lock straight to the next waiter (FIFO), stays held\n\t\treturn;\n\t}\n\tsubgraphBlockLockHeld.delete(name);\n}\n\n/** Run `fn` (a single block's write, or a reorg's whole rewind) holding the\n * per-subgraph block lock. Exported for reorg.ts. */\nexport async function withSubgraphBlockLock<T>(\n\tname: string,\n\tfn: () => Promise<T>,\n): Promise<T> {\n\tconst release = await acquireSubgraphBlockLock(name);\n\ttry {\n\t\treturn await fn();\n\t} finally {\n\t\trelease();\n\t}\n}\n\n/** Bump a subgraph's reorg epoch. Call BEFORE acquiring the block lock so the\n * bump is visible to any concurrent catch-up immediately. Exported for\n * reorg.ts. */\nexport function bumpReorgEpoch(name: string): void {\n\treorgEpoch.set(name, (reorgEpoch.get(name) ?? 0) + 1);\n}\n\nfunction getReorgEpoch(name: string): number {\n\treturn reorgEpoch.get(name) ?? 0;\n}\n\n/** Thrown inside the lock to unwind a catch-up walk when a reorg's epoch bump\n * is observed mid-walk — distinct from a real processing failure so the\n * caller aborts silently instead of marking the subgraph \"error\". */\nclass ReorgEpochChangedError extends Error {\n\tconstructor(name: string) {\n\t\tsuper(`reorg epoch changed for ${name} mid catch-up`);\n\t\tthis.name = \"ReorgEpochChangedError\";\n\t}\n}\n\ntype CatchupBatchConfig = {\n\tdefaultBatchSize: number;\n\tminBatchSize: number;\n\tmaxBatchSize: number;\n\tprefetch: boolean;\n};\n\ntype CatchupBatchEnv = {\n\tSUBGRAPH_CATCHUP_BATCH_SIZE?: string;\n\tSUBGRAPH_CATCHUP_MIN_BATCH_SIZE?: string;\n\tSUBGRAPH_CATCHUP_MAX_BATCH_SIZE?: string;\n\tSUBGRAPH_CATCHUP_PREFETCH?: string;\n};\n\nfunction parsePositiveInt(value: string | undefined): number | undefined {\n\tif (value == null || value.trim() === \"\") return undefined;\n\tconst parsed = Number.parseInt(value, 10);\n\treturn Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;\n}\n\nfunction parseBoolean(value: string | undefined): boolean | undefined {\n\tif (value == null || value.trim() === \"\") return undefined;\n\tconst normalized = value.trim().toLowerCase();\n\tif (normalized === \"true\") return true;\n\tif (normalized === \"false\") return false;\n\treturn undefined;\n}\n\nexport function resolveCatchupBatchConfig(\n\tenv: CatchupBatchEnv = process.env as CatchupBatchEnv,\n): CatchupBatchConfig {\n\tconst base = STANDARD_CATCHUP_BATCH_CONFIG;\n\tconst minBatchSize =\n\t\tparsePositiveInt(env.SUBGRAPH_CATCHUP_MIN_BATCH_SIZE) ?? base.minBatchSize;\n\tconst maxBatchSize =\n\t\tparsePositiveInt(env.SUBGRAPH_CATCHUP_MAX_BATCH_SIZE) ?? base.maxBatchSize;\n\tconst defaultBatchSize =\n\t\tparsePositiveInt(env.SUBGRAPH_CATCHUP_BATCH_SIZE) ?? base.defaultBatchSize;\n\n\treturn {\n\t\tminBatchSize,\n\t\tmaxBatchSize,\n\t\tdefaultBatchSize: Math.min(\n\t\t\tMath.max(defaultBatchSize, minBatchSize),\n\t\t\tmaxBatchSize,\n\t\t),\n\t\tprefetch: parseBoolean(env.SUBGRAPH_CATCHUP_PREFETCH) ?? base.prefetch,\n\t};\n}\n\n/**\n * Adjust batch size based on event density.\n * Sparse blocks (early chain) → larger batches. Dense blocks → smaller batches.\n */\nfunction adjustBatchSize(\n\tcurrent: number,\n\tavgEvents: number,\n\tconfig: CatchupBatchConfig,\n): number {\n\tif (avgEvents > 50)\n\t\treturn Math.max(Math.round(current * 0.5), config.minBatchSize);\n\tif (avgEvents < 10)\n\t\treturn Math.min(Math.round(current * 1.5), config.maxBatchSize);\n\treturn current;\n}\n\n/**\n * Catch a subgraph up from its last_processed_block to the chain tip.\n * Uses batch loading (3 queries per batch instead of 3 per block) and\n * plan-aware pipeline prefetching.\n */\nexport async function catchUpSubgraph(\n\tsubgraph: SubgraphDefinition,\n\tsubgraphName: string,\n): Promise<number> {\n\tif (catchingUp.has(subgraphName)) return 0;\n\tcatchingUp.add(subgraphName);\n\n\ttry {\n\t\tconst source = resolveBlockSource(subgraph);\n\t\tconst targetDb = getTargetDb();\n\n\t\t// Re-read from DB to avoid stale lastProcessedBlock\n\t\tconst subgraphRow = await getSubgraph(targetDb, subgraphName);\n\t\tif (!subgraphRow) return 0;\n\t\tconst lastProcessedBlock = Number(subgraphRow.last_processed_block);\n\n\t\t// Chain tip comes from the block source (indexer DB today; Streams clock\n\t\t// once re-pointed).\n\t\tconst chainTip = await source.getTip();\n\t\tif (chainTip <= 0 || lastProcessedBlock >= chainTip) return 0;\n\n\t\tconst subgraphStart = Number(subgraphRow.start_block) || 1;\n\t\tconst startBlock = Math.max(lastProcessedBlock + 1, subgraphStart);\n\t\tconst totalBlocks = chainTip - lastProcessedBlock;\n\n\t\tlogger.info(\"Subgraph catch-up starting\", {\n\t\t\tsubgraph: subgraphName,\n\t\t\tfrom: startBlock,\n\t\t\tto: chainTip,\n\t\t\tblocks: totalBlocks,\n\t\t});\n\n\t\tconst stats = new StatsAccumulator(subgraphName, true);\n\t\tlet processed = 0;\n\t\tconst batchConfig = resolveCatchupBatchConfig();\n\t\tlet batchSize = batchConfig.defaultBatchSize;\n\t\tlet currentHeight = startBlock;\n\t\t// f057: snapshot the epoch once — see the guard comment above\n\t\t// `subgraphBlockLockHeld` for the invariant this protects.\n\t\tconst walkEpoch = getReorgEpoch(subgraphName);\n\n\t\t// Pipeline: start loading first batch and track the prefetched range.\n\t\t// batchEnd must match what was actually loaded — not recalculated from a\n\t\t// potentially resized batchSize (adaptive sizing can change it between iterations).\n\t\tlet prefetchedBatchEnd = Math.min(currentHeight + batchSize - 1, chainTip);\n\t\tlet nextBatchPromise = batchConfig.prefetch\n\t\t\t? source.loadBlockRange(currentHeight, prefetchedBatchEnd)\n\t\t\t: undefined;\n\n\t\twhile (currentHeight <= chainTip) {\n\t\t\t// f069: per-iteration leadership check. `isCatchUpLeader()` reads this\n\t\t\t// process's own in-memory lease state (catchup-leader.ts) — no DB\n\t\t\t// query, so it's cheap enough to check every batch. Pre-f069, only\n\t\t\t// `runCatchUp`'s entry gate (processor.ts) checked leadership, so a\n\t\t\t// process that lost its advisory-lock connection mid-walk (driver\n\t\t\t// auto-reconnect silently drops the session lock — leader.ts:84-99)\n\t\t\t// kept committing blocks indefinitely while a new leader walked the\n\t\t\t// same range: the two writers' overlapping commits, combined with\n\t\t\t// `recordLiveProgress` regressing the cursor on every laggard write,\n\t\t\t// is the mechanism the f068 investigation traced to the July burst.\n\t\t\t// The conditional cursor advance (block-processor.ts) now makes an\n\t\t\t// overlap safe even if this check somehow missed a beat, but ending\n\t\t\t// the laggard's walk promptly is still the right behavior — it stops\n\t\t\t// wasted work and the log noise of every write losing its race.\n\t\t\tif (!isCatchUpLeader()) {\n\t\t\t\tlogger.info(\"Lost catch-up leadership, stopping catch-up\", {\n\t\t\t\t\tsubgraph: subgraphName,\n\t\t\t\t\tprocessed,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Check if subgraph status changed (e.g. reindex started) — bail if so\n\t\t\tconst currentRow = await getSubgraph(targetDb, subgraphName);\n\t\t\tif (!currentRow || currentRow.status !== \"active\") {\n\t\t\t\tlogger.info(\"Subgraph status changed, stopping catch-up\", {\n\t\t\t\t\tsubgraph: subgraphName,\n\t\t\t\t\tstatus: currentRow?.status ?? \"deleted\",\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tlet batchEnd: number;\n\t\t\tlet batch: Map<number, BlockData>;\n\t\t\tif (nextBatchPromise) {\n\t\t\t\tbatch = await nextBatchPromise;\n\t\t\t\tbatchEnd = prefetchedBatchEnd;\n\n\t\t\t\t// Start prefetching next batch while we process this one.\n\t\t\t\tconst nextStart = batchEnd + 1;\n\t\t\t\tif (nextStart <= chainTip) {\n\t\t\t\t\tprefetchedBatchEnd = Math.min(nextStart + batchSize - 1, chainTip);\n\t\t\t\t\tnextBatchPromise = source.loadBlockRange(\n\t\t\t\t\t\tnextStart,\n\t\t\t\t\t\tprefetchedBatchEnd,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tnextBatchPromise = undefined;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Low-memory mode: load only the current batch, process it, then size\n\t\t\t\t// and load the next batch after this iteration completes.\n\t\t\t\tbatchEnd = Math.min(currentHeight + batchSize - 1, chainTip);\n\t\t\t\tbatch = await source.loadBlockRange(currentHeight, batchEnd);\n\t\t\t}\n\n\t\t\t// Process each block from pre-loaded data\n\t\t\tlet stopCatchup = false;\n\n\t\t\tfor (let height = currentHeight; height <= batchEnd; height++) {\n\t\t\t\tlet blockData = batch.get(height);\n\t\t\t\tif (!blockData) {\n\t\t\t\t\t// Refetch once — distinguishes a transient source hiccup from a\n\t\t\t\t\t// genuinely absent block.\n\t\t\t\t\tblockData = (await source.loadBlockRange(height, height)).get(height);\n\t\t\t\t}\n\t\t\t\tif (!blockData) {\n\t\t\t\t\t// Near the tip this is usually a reorg race (the height briefly\n\t\t\t\t\t// has no canonical block). Stop the tick with the cursor BEFORE\n\t\t\t\t\t// this height — the next catch-up re-attempts it. Skipping it\n\t\t\t\t\t// instead would silently drop its events (fix-f040 B5).\n\t\t\t\t\tlogger.warn(\"Block missing during catch-up, deferring to next tick\", {\n\t\t\t\t\t\tsubgraph: subgraphName,\n\t\t\t\t\t\tblockHeight: height,\n\t\t\t\t\t});\n\t\t\t\t\tstopCatchup = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst preloaded = blockData;\n\n\t\t\t\tlet result: ProcessBlockResult;\n\t\t\t\ttry {\n\t\t\t\t\t// f057: hold the per-subgraph block lock for this one block's\n\t\t\t\t\t// write, and bail without writing if a reorg's epoch bump landed\n\t\t\t\t\t// mid-walk — see the guard comment near subgraphBlockLockHeld.\n\t\t\t\t\tresult = await withSubgraphBlockLock(subgraphName, async () => {\n\t\t\t\t\t\tif (getReorgEpoch(subgraphName) !== walkEpoch) {\n\t\t\t\t\t\t\tthrow new ReorgEpochChangedError(subgraphName);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn processBlockWithRetry(subgraph, subgraphName, height, {\n\t\t\t\t\t\t\tpreloaded,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (err instanceof ReorgEpochChangedError) {\n\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t\"Reorg detected mid catch-up, aborting walk without writing further progress\",\n\t\t\t\t\t\t\t{ subgraph: subgraphName, blockHeight: height },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstopCatchup = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// Persistent failure: halt with the cursor before this block.\n\t\t\t\t\t// Advancing past it would bake the missing events into every\n\t\t\t\t\t// downstream row (fix-f040 B5).\n\t\t\t\t\tconst errorMsg = err instanceof Error ? err.message : String(err);\n\t\t\t\t\tlogger.error(\"Block processing failed persistently during catch-up\", {\n\t\t\t\t\t\tsubgraph: subgraphName,\n\t\t\t\t\t\tblockHeight: height,\n\t\t\t\t\t\terror: errorMsg,\n\t\t\t\t\t});\n\t\t\t\t\tconst { updateSubgraphStatus, recordSubgraphProcessed } =\n\t\t\t\t\t\tawait import(\"@secondlayer/shared/db/queries/subgraphs\");\n\t\t\t\t\tawait recordSubgraphProcessed(\n\t\t\t\t\t\ttargetDb,\n\t\t\t\t\t\tsubgraphName,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t`catch-up halted at block ${height}: ${errorMsg}`,\n\t\t\t\t\t).catch(() => {});\n\t\t\t\t\tawait updateSubgraphStatus(targetDb, subgraphName, \"error\").catch(\n\t\t\t\t\t\t() => {},\n\t\t\t\t\t);\n\t\t\t\t\tstopCatchup = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tprocessed++;\n\n\t\t\t\tif (result.timing) {\n\t\t\t\t\tstats.record(result.timing, result.processed);\n\t\t\t\t\tif (stats.shouldFlush()) {\n\t\t\t\t\t\tawait stats.flush(targetDb);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (processed % LOG_INTERVAL === 0) {\n\t\t\t\t\tlogger.info(\"Subgraph catch-up progress\", {\n\t\t\t\t\t\tsubgraph: subgraphName,\n\t\t\t\t\t\tprocessed,\n\t\t\t\t\t\ttotal: totalBlocks,\n\t\t\t\t\t\tcurrentBlock: height,\n\t\t\t\t\t\tpct: Math.round((processed / totalBlocks) * 100),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// A missing block or persistent failure stops the walk with the\n\t\t\t// cursor before the problem height — never record-and-skip.\n\t\t\tif (stopCatchup) break;\n\n\t\t\t// Adaptive batch sizing based on event density\n\t\t\tconst avg = avgEventsPerBlock(batch);\n\t\t\tbatchSize = adjustBatchSize(batchSize, avg, batchConfig);\n\n\t\t\tcurrentHeight = batchEnd + 1;\n\t\t}\n\n\t\t// Flush remaining stats\n\t\tawait stats.flush(targetDb);\n\n\t\tlogger.info(\"Subgraph catch-up complete\", {\n\t\t\tsubgraph: subgraphName,\n\t\t\tprocessed,\n\t\t});\n\n\t\treturn processed;\n\t} finally {\n\t\tcatchingUp.delete(subgraphName);\n\t}\n}\n",
|
|
25
25
|
"import {\n\ttype LeaderBackend,\n\tSUBGRAPH_CATCHUP_LOCK_KEY,\n\tcreatePostgresLeaderBackend,\n\twithLeaderLock,\n} from \"@secondlayer/shared/leader\";\nimport { targetListenerUrl } from \"@secondlayer/shared/queue/listener\";\n\n/**\n * Leader-gating for the subgraph catch-up driver.\n *\n * Catch-up runs on every NOTIFY/poll guarded only by an in-process Set, so 2+\n * processors would otherwise double-process every block. That is NOT safe by\n * default: handler writes go through `ctx.increment` (additive), which is\n * replay-sensitive, not idempotent — two processors committing the same\n * block's deltas corrupts an accumulator table exactly the way the f068\n * investigation found in production\n * (`docs/internal/audits/asset-holdings-unreproducible-balances-f068.md`).\n * Electing a single catch-up leader is still the right design (it avoids the\n * wasted CPU/DB of redundant walks), but the actual overlap-safety net is the\n * live path's conditional cursor advance (`block-processor.ts`,\n * `recordLiveProgress` in `packages/shared/src/db/queries/subgraphs.ts`;\n * f069) plus the per-iteration leadership check in `catchup.ts`'s walk loop —\n * a walker that loses its lease now stops promptly, and even if it didn't,\n * its writes could no longer win a same-height race against a newer leader's\n * commit. The in-process Set stays as the within-process guard; this lock is\n * the cross-process guard; the conditional advance is the correctness\n * guarantee that holds even if both of those are ever bypassed.\n *\n * The lock lives on the target DB — the `subgraphs` table and per-subgraph\n * cursors are control-plane state homed there by the source/target split.\n */\n\nlet catchUpLeader = false;\n\n/** True only on the process currently holding the catch-up leader lock. */\nexport function isCatchUpLeader(): boolean {\n\treturn catchUpLeader;\n}\n\nexport type StartCatchUpLeaderOptions = {\n\tpollMs?: number;\n\theartbeatMs?: number;\n\t/** Injectable for tests; defaults to the real Postgres backend on target. */\n\tcreateBackend?: () => LeaderBackend;\n\t/** Run once when leadership is acquired — e.g. an immediate catch-up so the\n\t * new leader doesn't wait a poll interval to start. */\n\tonAcquire?: () => void | Promise<void>;\n};\n\n/**\n * Acquire and hold the catch-up leader lock. Returns a stop function that ends\n * election and releases the lock. While held, `isCatchUpLeader()` is true so the\n * NOTIFY/poll/startup catch-up paths actually run work.\n */\nexport function startCatchUpLeader(\n\topts: StartCatchUpLeaderOptions = {},\n): () => Promise<void> {\n\treturn withLeaderLock(\n\t\tSUBGRAPH_CATCHUP_LOCK_KEY,\n\t\tasync () => {\n\t\t\tcatchUpLeader = true;\n\t\t\tawait opts.onAcquire?.();\n\t\t\treturn () => {\n\t\t\t\tcatchUpLeader = false;\n\t\t\t};\n\t\t},\n\t\t{\n\t\t\tpollMs: opts.pollMs,\n\t\t\theartbeatMs: opts.heartbeatMs,\n\t\t\tcreateBackend:\n\t\t\t\topts.createBackend ??\n\t\t\t\t(() => createPostgresLeaderBackend(targetListenerUrl())),\n\t\t},\n\t);\n}\n"
|
|
26
26
|
],
|
|
27
|
-
"mappings": "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",
|
|
28
|
-
"debugId": "
|
|
27
|
+
"mappings": "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",
|
|
28
|
+
"debugId": "1544B1119237E68264756E2164756E21",
|
|
29
29
|
"names": []
|
|
30
30
|
}
|