@secondlayer/subgraphs 8.0.3 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +8 -7
- package/dist/index.js.map +4 -4
- package/dist/runtime/emitter.js +35 -10
- package/dist/runtime/emitter.js.map +3 -3
- package/dist/runtime/replay.js +29 -14
- package/dist/runtime/replay.js.map +6 -6
- package/dist/schema/index.js +6 -5
- package/dist/schema/index.js.map +3 -3
- package/dist/testing/index.js +4 -4
- package/dist/testing/index.js.map +1 -1
- package/dist/verification.js +4 -4
- package/dist/verification.js.map +1 -1
- package/dist/verify/index.js +4 -4
- package/dist/verify/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
"import type {\n\tColumnType,\n\tSubgraphDefinition,\n\tSubgraphTable,\n} from \"../types.ts\";\nimport { pascalCase, pgSchemaName, snakeToCamel } from \"./utils.ts\";\n\n/**\n * Generate a Drizzle schema from a subgraph definition — the Drizzle arm of the\n * \"Prisma wrapper for Stacks\" story. Emits `pgSchema().table()` defs and\n * `$inferSelect` row types. Like the Prisma generator, output mirrors the deployed\n * DDL — these tables are processor-written and owned by the BYO deploy, so treat\n * them read-only and never `drizzle-kit push`.\n */\n\n/** Subgraph column type → Drizzle pg-core builder. */\nconst DRIZZLE_BUILDER: Record<ColumnType, (col: string) => string> = {\n\t// numeric() returns string in Drizzle — lossless for Clarity uint128/int128.\n\tuint: (c) => `numeric(\"${c}\")`,\n\tint: (c) => `numeric(\"${c}\")`,\n\ttext: (c) => `text(\"${c}\")`,\n\tprincipal: (c) => `text(\"${c}\")`,\n\tboolean: (c) => `boolean(\"${c}\")`,\n\ttimestamp: (c) => `timestamp(\"${c}\", { withTimezone: true })`,\n\tjsonb: (c) => `jsonb(\"${c}\")`,\n};\n\nconst BUILDERS_USED: Record<ColumnType, string> = {\n\tuint: \"numeric\",\n\tint: \"numeric\",\n\ttext: \"text\",\n\tprincipal: \"text\",\n\tboolean: \"boolean\",\n\ttimestamp: \"timestamp\",\n\tjsonb: \"jsonb\",\n};\n\nfunction literalDefault(value: string | number | boolean): string {\n\treturn typeof value === \"string\"\n\t\t? `\"${value.replace(/\"/g, '\\\\\"')}\"`\n\t\t: `${value}`;\n}\n\nfunction renderTable(\n\tvarName: string,\n\ttableName: string,\n\ttable: SubgraphTable,\n): string {\n\tconst cols: string[] = [\n\t\t` id: bigserial(\"_id\", { mode: \"bigint\" }).primaryKey(),`,\n\t\t` blockHeight: bigint(\"_block_height\", { mode: \"bigint\" }).notNull(),`,\n\t\t` txId: text(\"_tx_id\").notNull(),`,\n\t\t` createdAt: timestamp(\"_created_at\", { withTimezone: true }).notNull().defaultNow(),`,\n\t];\n\tfor (const [colName, col] of Object.entries(table.columns)) {\n\t\tlet line = ` ${snakeToCamel(colName)}: ${DRIZZLE_BUILDER[col.type](colName)}`;\n\t\tif (!col.nullable) line += \".notNull()\";\n\t\tif (col.default !== undefined)\n\t\t\tline += `.default(${literalDefault(col.default)})`;\n\t\tcols.push(`${line},`);\n\t}\n\n\t// Third-arg table extras: indexes + unique constraints.\n\tconst extras: string[] = [];\n\tfor (const [colName, col] of Object.entries(table.columns)) {\n\t\tif (col.indexed) {\n\t\t\tconst f = snakeToCamel(colName);\n\t\t\textras.push(\n\t\t\t\t` ${f}Idx: index(\"idx_${tableName}_${colName}\").on(t.${f})`,\n\t\t\t);\n\t\t}\n\t}\n\ttable.indexes?.forEach((idxCols, i) => {\n\t\tconst on = idxCols.map((c) => `t.${snakeToCamel(c)}`).join(\", \");\n\t\textras.push(` idx${i}: index(\"idx_${tableName}_${i}\").on(${on})`);\n\t});\n\ttable.uniqueKeys?.forEach((uqCols, i) => {\n\t\tconst on = uqCols.map((c) => `t.${snakeToCamel(c)}`).join(\", \");\n\t\textras.push(` uq${i}: uniqueIndex(\"uq_${tableName}_${i}\").on(${on})`);\n\t});\n\n\tconst extrasBlock = extras.length\n\t\t? `, (t) => ({\\n${extras.join(\",\\n\")},\\n })`\n\t\t: \"\";\n\treturn `export const ${varName} = sg.table(\"${tableName}\", {\\n${cols.join(\"\\n\")}\\n}${extrasBlock});`;\n}\n\n/** Options for generating Drizzle table definitions. */\nexport interface DrizzleGenOptions {\n\tschemaName?: string;\n}\n\n/** Generates Drizzle table definitions for a subgraph's tables. */\nexport function generateDrizzleSchema(\n\tdef: SubgraphDefinition,\n\topts: DrizzleGenOptions = {},\n): string {\n\tconst schemaName = opts.schemaName ?? pgSchemaName(def.name);\n\n\t// Only import the column builders actually used (+ always-used system ones).\n\tconst used = new Set<string>([\"bigserial\", \"bigint\", \"text\", \"timestamp\"]);\n\tlet needsIndex = false;\n\tlet needsUnique = false;\n\tfor (const table of Object.values(def.schema)) {\n\t\tfor (const col of Object.values(table.columns))\n\t\t\tused.add(BUILDERS_USED[col.type]);\n\t\tif (\n\t\t\tObject.values(table.columns).some((c) => c.indexed) ||\n\t\t\ttable.indexes?.length\n\t\t)\n\t\t\tneedsIndex = true;\n\t\tif (table.uniqueKeys?.length) needsUnique = true;\n\t}\n\tif (needsIndex) used.add(\"index\");\n\tif (needsUnique) used.add(\"uniqueIndex\");\n\tused.add(\"pgSchema\");\n\n\tconst imports = `import { ${[...used].sort().join(\", \")} } from \"drizzle-orm/pg-core\";`;\n\n\tconst tables = Object.entries(def.schema).map(([name, table]) =>\n\t\trenderTable(snakeToCamel(name), name, table),\n\t);\n\tconst typeExports = Object.keys(def.schema).map(\n\t\t(name) =>\n\t\t\t`export type ${pascalCase(name)} = typeof ${snakeToCamel(name)}.$inferSelect;`,\n\t);\n\n\treturn [\n\t\t`// Generated by \\`sl codegen subgraph --target drizzle\\` from subgraph \"${def.name}\". Do not edit by hand.`,\n\t\timports,\n\t\t\"\",\n\t\t`export const sg = pgSchema(\"${schemaName}\");`,\n\t\t\"\",\n\t\ttables.join(\"\\n\\n\"),\n\t\t\"\",\n\t\ttypeExports.join(\"\\n\"),\n\t\t\"\",\n\t].join(\"\\n\");\n}\n",
|
|
15
15
|
"import type {\n\tColumnType,\n\tSubgraphDefinition,\n\tSubgraphTable,\n} from \"../types.ts\";\nimport { pascalCase, pgSchemaName } from \"./utils.ts\";\n\n/**\n * Generate Kysely table interfaces from a subgraph definition — the Kysely arm of\n * the \"Prisma wrapper for Stacks\" story (alongside prisma.ts/drizzle.ts). Emits a\n * per-table interface plus a `DB` registry keyed by schema-qualified table name,\n * so `new Kysely<DB>()` gives fully-typed query building over BYO decoded rows.\n * Output mirrors the deployed DDL in generator.ts — tables are processor-written,\n * so treat them read-only. Column keys stay as the real DB names (Kysely maps to\n * physical columns, unlike the camel-cased Prisma/Drizzle models).\n */\n\n/** Subgraph column type → Kysely TS type. numeric/bigint serialize as string (lossless for Clarity uint128/int128). */\nconst KYSELY_TYPE: Record<ColumnType, string> = {\n\tuint: \"string\",\n\tint: \"string\",\n\ttext: \"string\",\n\tprincipal: \"string\",\n\tboolean: \"boolean\",\n\ttimestamp: \"Date\",\n\tjsonb: \"unknown\",\n};\n\n/** System columns every subgraph table gets (kept in sync with generator.ts). */\nconst SYSTEM_FIELDS: Array<{ col: string; type: string }> = [\n\t{ col: \"_id\", type: \"Generated<string>\" },\n\t{ col: \"_block_height\", type: \"string\" },\n\t{ col: \"_tx_id\", type: \"string\" },\n\t{ col: \"_created_at\", type: \"Generated<Date>\" },\n];\n\nfunction renderTable(tableName: string, table: SubgraphTable): string {\n\tconst lines = SYSTEM_FIELDS.map((f) => ` ${f.col}: ${f.type};`);\n\tfor (const [colName, col] of Object.entries(table.columns)) {\n\t\tlet type = KYSELY_TYPE[col.type];\n\t\tif (col.nullable) type = `${type} | null`;\n\t\t// A DB-side default makes the column optional on insert — Generated<> models that.\n\t\tif (col.default !== undefined) type = `Generated<${type}>`;\n\t\tlines.push(` ${colName}: ${type};`);\n\t}\n\treturn `export interface ${pascalCase(tableName)} {\\n${lines.join(\"\\n\")}\\n}`;\n}\n\n/** Options for generating Kysely table interfaces. */\nexport interface KyselyGenOptions {\n\t/** Postgres schema the tables live in (account-scoped). */\n\tschemaName?: string;\n}\n\n/** Generates Kysely table interfaces for a subgraph's tables. */\nexport function generateKyselySchema(\n\tdef: SubgraphDefinition,\n\topts: KyselyGenOptions = {},\n): string {\n\tconst schemaName = opts.schemaName ?? pgSchemaName(def.name);\n\n\tconst interfaces = Object.entries(def.schema).map(([name, table]) =>\n\t\trenderTable(name, table),\n\t);\n\n\t// DB registry — schema-qualified keys so `db.selectFrom(\"schema.table\")` resolves.\n\tconst dbEntries = Object.keys(def.schema).map(\n\t\t(name) => ` \"${schemaName}.${name}\": ${pascalCase(name)};`,\n\t);\n\tconst dbRegistry = `export interface DB {\\n${dbEntries.join(\"\\n\")}\\n}`;\n\n\t// Selectable row aliases for ergonomic typed reads.\n\tconst rowExports = Object.keys(def.schema).map(\n\t\t(name) =>\n\t\t\t`export type ${pascalCase(name)}Row = Selectable<${pascalCase(name)}>;`,\n\t);\n\n\treturn [\n\t\t`// Generated by \\`sl codegen subgraph --target kysely\\` from subgraph \"${def.name}\". Do not edit by hand.`,\n\t\t`import type { Generated, Selectable } from \"kysely\";`,\n\t\t\"\",\n\t\tinterfaces.join(\"\\n\\n\"),\n\t\t\"\",\n\t\tdbRegistry,\n\t\t\"\",\n\t\trowExports.join(\"\\n\"),\n\t\t\"\",\n\t].join(\"\\n\");\n}\n",
|
|
16
16
|
"import {\n\ttype IndexColumn,\n\ttype IndexColumnType,\n\ttype IndexPrimaryKey,\n\tSOURCE_READ_PKS,\n\tSOURCE_READ_TYPES,\n} from \"@secondlayer/shared/db\";\nimport { pascalCase, snakeToCamel } from \"./utils.ts\";\n\n/**\n * Emit a portable, typed schema for the public Index read domain (blocks,\n * decoded events, transactions, stacking, sBTC, BNS, …) from the single-sourced\n * `SOURCE_READ_TYPES` registry. This is the Index arm of the \"typed Stacks data in\n * your own stack\" story: a BYO-database consumer mirrors Index rows and gets a\n * fully-typed ORM / JSON-Schema that can't drift from the API (the registry is\n * drift-tested against the producer's read contract).\n *\n * Prisma uses the `SOURCE_READ_PKS` registry for model identity. Tables whose only\n * physical PK is a synthetic id excluded from the read contract (chain_reorgs) have\n * no read-set key and are omitted from Prisma output (other targets still emit them).\n */\n\n/** A portable, typed schema target for the public Index read domain. */\nexport type IndexCodegenTarget =\n\t| \"prisma\"\n\t| \"kysely\"\n\t| \"drizzle\"\n\t| \"json-schema\";\n\n/** Options for generating the Index schema: tables, schema name. */\nexport interface IndexCodegenOptions {\n\t/** Restrict output to these Index tables (default: all). */\n\ttables?: string[];\n\t/** Postgres schema to qualify table names with (default: bare names). */\n\tschemaName?: string;\n\t/** Prisma only: datasource url env var (default DATABASE_URL). */\n\tdatasourceEnv?: string;\n}\n\ntype IndexTables = typeof SOURCE_READ_TYPES;\n\n/** Resolve the requested tables (validated) → ordered [table, columns] entries. */\nfunction selectTables(\n\topts: IndexCodegenOptions,\n): Array<[string, Record<string, IndexColumn>]> {\n\tconst all = SOURCE_READ_TYPES as Record<string, Record<string, IndexColumn>>;\n\tconst names = opts.tables ?? Object.keys(all);\n\treturn names.map((name) => {\n\t\tconst cols = all[name];\n\t\tif (!cols) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown Index table \"${name}\". Known: ${Object.keys(all).sort().join(\", \")}`,\n\t\t\t);\n\t\t}\n\t\treturn [name, cols];\n\t});\n}\n\nconst KYSELY_TYPE: Record<IndexColumnType, string> = {\n\ttext: \"string\",\n\tint: \"number\",\n\tboolean: \"boolean\",\n\ttimestamp: \"Date\",\n\tjsonb: \"unknown\",\n};\n\nfunction generateKysely(\n\tentries: Array<[string, Record<string, IndexColumn>]>,\n\tschemaName?: string,\n): string {\n\tconst interfaces = entries.map(([table, cols]) => {\n\t\tconst lines = Object.entries(cols).map(([col, def]) => {\n\t\t\tconst type = def.nullable\n\t\t\t\t? `${KYSELY_TYPE[def.type]} | null`\n\t\t\t\t: KYSELY_TYPE[def.type];\n\t\t\treturn ` ${col}: ${type};`;\n\t\t});\n\t\treturn `export interface ${pascalCase(table)} {\\n${lines.join(\"\\n\")}\\n}`;\n\t});\n\tconst dbEntries = entries.map(([table]) => {\n\t\tconst key = schemaName ? `${schemaName}.${table}` : table;\n\t\treturn ` \"${key}\": ${pascalCase(table)};`;\n\t});\n\tconst rows = entries.map(\n\t\t([table]) =>\n\t\t\t`export type ${pascalCase(table)}Row = Selectable<${pascalCase(table)}>;`,\n\t);\n\treturn [\n\t\t\"// Generated by `sl codegen index --target kysely`. Do not edit by hand.\",\n\t\t`import type { Selectable } from \"kysely\";`,\n\t\t\"\",\n\t\tinterfaces.join(\"\\n\\n\"),\n\t\t\"\",\n\t\t`export interface IndexDB {\\n${dbEntries.join(\"\\n\")}\\n}`,\n\t\t\"\",\n\t\trows.join(\"\\n\"),\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\nconst DRIZZLE_BUILDER: Record<IndexColumnType, (col: string) => string> = {\n\ttext: (c) => `text(\"${c}\")`,\n\tint: (c) => `integer(\"${c}\")`,\n\tboolean: (c) => `boolean(\"${c}\")`,\n\ttimestamp: (c) => `timestamp(\"${c}\", { withTimezone: true })`,\n\tjsonb: (c) => `jsonb(\"${c}\")`,\n};\n\nconst DRIZZLE_BUILDER_NAME: Record<IndexColumnType, string> = {\n\ttext: \"text\",\n\tint: \"integer\",\n\tboolean: \"boolean\",\n\ttimestamp: \"timestamp\",\n\tjsonb: \"jsonb\",\n};\n\nfunction generateDrizzle(\n\tentries: Array<[string, Record<string, IndexColumn>]>,\n\tschemaName?: string,\n): string {\n\tconst used = new Set<string>();\n\tfor (const [, cols] of entries)\n\t\tfor (const def of Object.values(cols))\n\t\t\tused.add(DRIZZLE_BUILDER_NAME[def.type]);\n\tif (schemaName) used.add(\"pgSchema\");\n\telse used.add(\"pgTable\");\n\n\tconst tableFn = schemaName ? \"sg.table\" : \"pgTable\";\n\tconst tables = entries.map(([table, cols]) => {\n\t\tconst lines = Object.entries(cols).map(([col, def]) => {\n\t\t\tlet line = ` ${snakeToCamel(col)}: ${DRIZZLE_BUILDER[def.type](col)}`;\n\t\t\tif (!def.nullable) line += \".notNull()\";\n\t\t\treturn `${line},`;\n\t\t});\n\t\treturn `export const ${snakeToCamel(table)} = ${tableFn}(\"${table}\", {\\n${lines.join(\"\\n\")}\\n});`;\n\t});\n\tconst rows = entries.map(\n\t\t([table]) =>\n\t\t\t`export type ${pascalCase(table)} = typeof ${snakeToCamel(table)}.$inferSelect;`,\n\t);\n\treturn [\n\t\t\"// Generated by `sl codegen index --target drizzle`. Do not edit by hand.\",\n\t\t`import { ${[...used].sort().join(\", \")} } from \"drizzle-orm/pg-core\";`,\n\t\t\"\",\n\t\t...(schemaName ? [`export const sg = pgSchema(\"${schemaName}\");`, \"\"] : []),\n\t\ttables.join(\"\\n\\n\"),\n\t\t\"\",\n\t\trows.join(\"\\n\"),\n\t\t\"\",\n\t].join(\"\\n\");\n}\n\nconst JSON_SCHEMA_TYPE: Record<IndexColumnType, Record<string, unknown>> = {\n\ttext: { type: \"string\" },\n\tint: { type: \"integer\" },\n\tboolean: { type: \"boolean\" },\n\ttimestamp: { type: \"string\", format: \"date-time\" },\n\tjsonb: {},\n};\n\nfunction generateJsonSchema(\n\tentries: Array<[string, Record<string, IndexColumn>]>,\n): string {\n\tconst defs: Record<string, unknown> = {};\n\tfor (const [table, cols] of entries) {\n\t\tconst properties: Record<string, unknown> = {};\n\t\tconst required: string[] = [];\n\t\tfor (const [col, def] of Object.entries(cols)) {\n\t\t\tconst base = JSON_SCHEMA_TYPE[def.type];\n\t\t\tif (def.nullable && \"type\" in base) {\n\t\t\t\tproperties[col] = { ...base, type: [base.type, \"null\"] };\n\t\t\t} else {\n\t\t\t\tproperties[col] = { ...base };\n\t\t\t\tif (!def.nullable) required.push(col);\n\t\t\t}\n\t\t}\n\t\tdefs[pascalCase(table)] = {\n\t\t\ttype: \"object\",\n\t\t\tproperties,\n\t\t\trequired,\n\t\t\tadditionalProperties: false,\n\t\t};\n\t}\n\treturn `${JSON.stringify(\n\t\t{\n\t\t\t$schema: \"https://json-schema.org/draft/2020-12/schema\",\n\t\t\ttitle: \"Secondlayer Index domain\",\n\t\t\t$defs: defs,\n\t\t},\n\t\tnull,\n\t\t2,\n\t)}\\n`;\n}\n\nconst PRISMA_TYPE: Record<IndexColumnType, { type: string; db?: string }> = {\n\ttext: { type: \"String\" },\n\tint: { type: \"Int\" },\n\tboolean: { type: \"Boolean\" },\n\ttimestamp: { type: \"DateTime\", db: \"@db.Timestamptz\" },\n\tjsonb: { type: \"Json\" },\n};\n\nfunction generatePrisma(\n\tentries: Array<[string, Record<string, IndexColumn>]>,\n\tschemaName: string | undefined,\n\tdatasourceEnv: string,\n): string {\n\tconst pks = SOURCE_READ_PKS as Record<string, IndexPrimaryKey>;\n\tconst skipped: string[] = [];\n\n\tconst models: string[] = [];\n\tfor (const [table, cols] of entries) {\n\t\tconst pk = pks[table];\n\t\tif (!pk) {\n\t\t\tskipped.push(table);\n\t\t\tcontinue;\n\t\t}\n\t\tconst single = pk.length === 1 ? pk[0] : null;\n\t\tconst lines = Object.entries(cols).map(([col, def]) => {\n\t\t\tconst field = snakeToCamel(col);\n\t\t\tconst mapped = PRISMA_TYPE[def.type];\n\t\t\tconst attrs: string[] = [];\n\t\t\tif (single === col) attrs.push(\"@id\");\n\t\t\tif (field !== col) attrs.push(`@map(\"${col}\")`);\n\t\t\tif (mapped.db) attrs.push(mapped.db);\n\t\t\tconst optional = def.nullable ? \"?\" : \"\";\n\t\t\treturn ` ${field} ${mapped.type}${optional}${attrs.length ? ` ${attrs.join(\" \")}` : \"\"}`;\n\t\t});\n\t\tconst block: string[] = [];\n\t\tif (!single) {\n\t\t\tblock.push(` @@id([${pk.map(snakeToCamel).join(\", \")}])`);\n\t\t}\n\t\tblock.push(` @@map(\"${table}\")`);\n\t\tif (schemaName) block.push(` @@schema(\"${schemaName}\")`);\n\t\tmodels.push(\n\t\t\t`model ${pascalCase(table)} {\\n${lines.join(\"\\n\")}\\n\\n${block.join(\"\\n\")}\\n}`,\n\t\t);\n\t}\n\n\tconst header = [\n\t\t\"// Generated by `sl codegen index --target prisma`. Do not edit by hand.\",\n\t\t...(skipped.length\n\t\t\t? [\n\t\t\t\t\t`// Omitted (no read-set primary key, query via another target): ${skipped.join(\", \")}`,\n\t\t\t\t]\n\t\t\t: []),\n\t\t\"\",\n\t\t\"datasource db {\",\n\t\t' provider = \"postgresql\"',\n\t\t` url = env(\"${datasourceEnv}\")`,\n\t\t...(schemaName ? [` schemas = [\"${schemaName}\"]`] : []),\n\t\t\"}\",\n\t\t\"\",\n\t\t\"generator client {\",\n\t\t' provider = \"prisma-client-js\"',\n\t\t...(schemaName ? [' previewFeatures = [\"multiSchema\"]'] : []),\n\t\t\"}\",\n\t].join(\"\\n\");\n\n\treturn `${header}\\n\\n${models.join(\"\\n\\n\")}\\n`;\n}\n\n/**\n * Generates a typed schema for Index tables.\n *\n * `target` picks Prisma, Kysely, Drizzle or JSON Schema. Use `tables` to limit\n * the output. Prisma omits tables with no read-set key.\n */\nexport function generateIndexSchema(\n\ttarget: IndexCodegenTarget,\n\topts: IndexCodegenOptions = {},\n): string {\n\tconst entries = selectTables(opts);\n\tswitch (target) {\n\t\tcase \"prisma\":\n\t\t\treturn generatePrisma(\n\t\t\t\tentries,\n\t\t\t\topts.schemaName,\n\t\t\t\topts.datasourceEnv ?? \"DATABASE_URL\",\n\t\t\t);\n\t\tcase \"kysely\":\n\t\t\treturn generateKysely(entries, opts.schemaName);\n\t\tcase \"drizzle\":\n\t\t\treturn generateDrizzle(entries, opts.schemaName);\n\t\tcase \"json-schema\":\n\t\t\treturn generateJsonSchema(entries);\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported Index codegen target \"${target}\".`);\n\t}\n}\n\n/** Index tables available to codegen, for help text and validation. */\nexport const INDEX_CODEGEN_TABLES: readonly string[] = Object.keys(\n\tSOURCE_READ_TYPES,\n) as Array<keyof IndexTables>;\n",
|
|
17
|
-
"import type { Database } from \"@secondlayer/shared/db\";\nimport { type Kysely, sql } from \"kysely\";\nimport type {\n\tSubgraphDefinition,\n\tSubgraphSchema,\n\tSubgraphTable,\n} from \"../types.ts\";\nimport { validateSubgraphDefinition } from \"../validate.ts\";\nimport {\n\ttype SubgraphVerification,\n\tcomputePin,\n\tpinPreimage,\n} from \"../verification.ts\";\nimport {\n\tTYPE_MAP,\n\temitIndexedColumnIndexDDL,\n\temitTableDDL,\n\tgenerateSubgraphSQL,\n\ttableNeedsTrgm,\n} from \"./generator.ts\";\nimport { pgSchemaName } from \"./utils.ts\";\n\ntype AnyDb = Kysely<Database>;\n\n/** Deep-clone an object, converting BigInts to strings for JSON serialization. */\nfunction toJsonSafe(obj: unknown): unknown {\n\treturn JSON.parse(\n\t\tJSON.stringify(obj, (_key, value) =>\n\t\t\ttypeof value === \"bigint\" ? value.toString() : value,\n\t\t),\n\t);\n}\n\n/** Tables added, removed, or changed between two schemas. */\nexport interface TableDiff {\n\t/** Tables added to the schema */\n\taddedTables: string[];\n\t/** Tables removed from the schema */\n\tremovedTables: string[];\n\t/** Per-table column diffs (only for tables present in both) */\n\ttables: Record<string, ColumnDiff>;\n\t/** Per-table uniqueKeys / composite-index diffs (tables present in both) */\n\tconstraints: Record<string, ConstraintDiff>;\n}\n\nexport interface ColumnDiff {\n\tadded: string[];\n\tremoved: string[];\n\t/** Data-shape changes (type/nullable/default) — breaking. */\n\tchanged: string[];\n\t/** Only the `indexed`/`search` flags differ — index DDL, never a rebuild. */\n\tindexChanged: string[];\n}\n\nexport interface ConstraintDiff {\n\t/** New uniqueKeys entries → `ALTER TABLE … ADD CONSTRAINT` (additive). */\n\taddedUniqueKeys: string[][];\n\t/** Removed uniqueKeys entries — breaking: handler upserts may target them. */\n\tremovedUniqueKeys: string[][];\n\t/** New composite `indexes` entries → CREATE INDEX (additive). */\n\taddedIndexes: string[][];\n\t/** Removed composite `indexes` entries → DROP INDEX (additive). */\n\tremovedIndexes: string[][];\n}\n\n/** Column identity minus the index flags: what actually shapes stored data. */\nfunction columnDataShape(col: unknown): string {\n\tconst { indexed, search, ...rest } = (col ?? {}) as Record<string, unknown>;\n\treturn JSON.stringify(rest, Object.keys(rest).sort());\n}\n\n/** Diff two `string[][]` lists (uniqueKeys / indexes) by column-list value. */\nfunction diffKeyLists(\n\texisting: readonly (readonly string[])[] | undefined,\n\tincoming: readonly (readonly string[])[] | undefined,\n): { added: string[][]; removed: string[][] } {\n\tconst key = (cols: readonly string[]) => JSON.stringify(cols);\n\tconst existingSet = new Set((existing ?? []).map(key));\n\tconst incomingSet = new Set((incoming ?? []).map(key));\n\treturn {\n\t\tadded: (incoming ?? [])\n\t\t\t.filter((cols) => !existingSet.has(key(cols)))\n\t\t\t.map((cols) => [...cols]),\n\t\tremoved: (existing ?? [])\n\t\t\t.filter((cols) => !incomingSet.has(key(cols)))\n\t\t\t.map((cols) => [...cols]),\n\t};\n}\n\n/**\n * Compare two multi-table subgraph schemas and return differences.\n *\n * Index-only changes (`indexed`/`search` flags, composite `indexes`) are\n * reported separately from data-shape changes: an index never requires a\n * rebuild, so it must never land in `changed`/breaking — flipping\n * `indexed: true` on a populated column used to cost a full reindex.\n */\nexport function diffSchema(\n\texisting: SubgraphSchema,\n\tincoming: SubgraphSchema,\n): TableDiff {\n\tconst existingTables = new Set(Object.keys(existing));\n\tconst incomingTables = new Set(Object.keys(incoming));\n\n\tconst addedTables = [...incomingTables].filter((t) => !existingTables.has(t));\n\tconst removedTables = [...existingTables].filter(\n\t\t(t) => !incomingTables.has(t),\n\t);\n\n\tconst tables: Record<string, ColumnDiff> = {};\n\tconst constraints: Record<string, ConstraintDiff> = {};\n\tfor (const tableName of incomingTables) {\n\t\tif (!existingTables.has(tableName)) continue;\n\t\tconst existingTable = existing[tableName];\n\t\tconst incomingTable = incoming[tableName];\n\t\tconst existingCols = existingTable?.columns;\n\t\tconst incomingCols = incomingTable?.columns;\n\n\t\tconst existingKeys = new Set(Object.keys(existingCols));\n\t\tconst incomingKeys = new Set(Object.keys(incomingCols));\n\t\tconst common = [...incomingKeys].filter((k) => existingKeys.has(k));\n\n\t\tconst sortedStringify = (o: unknown) =>\n\t\t\tJSON.stringify(o, Object.keys(o as object).sort());\n\n\t\ttables[tableName] = {\n\t\t\tadded: [...incomingKeys].filter((k) => !existingKeys.has(k)),\n\t\t\tremoved: [...existingKeys].filter((k) => !incomingKeys.has(k)),\n\t\t\tchanged: common.filter(\n\t\t\t\t(k) =>\n\t\t\t\t\tcolumnDataShape(existingCols[k]) !== columnDataShape(incomingCols[k]),\n\t\t\t),\n\t\t\tindexChanged: common.filter(\n\t\t\t\t(k) =>\n\t\t\t\t\tcolumnDataShape(existingCols[k]) ===\n\t\t\t\t\t\tcolumnDataShape(incomingCols[k]) &&\n\t\t\t\t\tsortedStringify(existingCols[k]) !== sortedStringify(incomingCols[k]),\n\t\t\t),\n\t\t};\n\n\t\tconst uq = diffKeyLists(\n\t\t\texistingTable?.uniqueKeys,\n\t\t\tincomingTable?.uniqueKeys,\n\t\t);\n\t\tconst ix = diffKeyLists(existingTable?.indexes, incomingTable?.indexes);\n\t\tconstraints[tableName] = {\n\t\t\taddedUniqueKeys: uq.added,\n\t\t\tremovedUniqueKeys: uq.removed,\n\t\t\taddedIndexes: ix.added,\n\t\t\tremovedIndexes: ix.removed,\n\t\t};\n\t}\n\n\treturn { addedTables, removedTables, tables, constraints };\n}\n\n/**\n * Tells whether a schema diff is breaking, with the reasons.\n *\n * Breaking means removed tables, removed columns, changed column types or\n * removed `uniqueKeys`, which handler upserts conflict on. Index-flag and\n * composite-index changes are never breaking.\n */\nexport function hasBreakingChanges(diff: TableDiff): {\n\tbreaking: boolean;\n\treasons: string[];\n} {\n\tconst reasons: string[] = [];\n\tif (diff.removedTables.length > 0) {\n\t\treasons.push(`removed tables: [${diff.removedTables.join(\", \")}]`);\n\t}\n\tfor (const [table, colDiff] of Object.entries(diff.tables)) {\n\t\tif (colDiff.removed.length > 0) {\n\t\t\treasons.push(`${table}: removed columns [${colDiff.removed.join(\", \")}]`);\n\t\t}\n\t\tif (colDiff.changed.length > 0) {\n\t\t\treasons.push(`${table}: changed columns [${colDiff.changed.join(\", \")}]`);\n\t\t}\n\t}\n\tfor (const [table, conDiff] of Object.entries(diff.constraints ?? {})) {\n\t\tif (conDiff.removedUniqueKeys.length > 0) {\n\t\t\treasons.push(\n\t\t\t\t`${table}: removed uniqueKeys [${conDiff.removedUniqueKeys\n\t\t\t\t\t.map((cols) => `(${cols.join(\", \")})`)\n\t\t\t\t\t.join(\", \")}]`,\n\t\t\t);\n\t\t}\n\t}\n\treturn { breaking: reasons.length > 0, reasons };\n}\n\n/** Increment the patch segment of a semver string. \"1.0.2\" → \"1.0.3\" */\nfunction bumpPatch(version: string): string {\n\tconst parts = version.split(\".\");\n\tif (parts.length !== 3) return \"1.0.1\";\n\tconst patch = Number.parseInt(parts[2] ?? \"0\", 10);\n\treturn `${parts[0]}.${parts[1]}.${Number.isNaN(patch) ? 1 : patch + 1}`;\n}\n\n/** The tables and columns a deploy adds, removes, or breaks. */\nexport interface DeployDiff {\n\taddedTables: string[];\n\tremovedTables: string[];\n\taddedColumns: Record<string, string[]>;\n\tbreakingChanges: string[];\n\t/** Columns whose only change was the `indexed`/`search` flag (index DDL applied in place). */\n\tindexChanges?: Record<string, string[]>;\n\t/** uniqueKeys added in place via ALTER TABLE … ADD CONSTRAINT. */\n\taddedUniqueKeys?: Record<string, string[][]>;\n}\n\n/**\n * Map a raw `TableDiff` (+ breaking reasons) into the wire `DeployDiff`. `null`\n * diff (e.g. same-hash force reindex, where no schema diff exists) → empty\n * added/removed/columns with reasons preserved. Single source for both the\n * non-refuse \"reindexed\" result and the refuse-path error payload.\n */\nfunction toDeployDiff(diff: TableDiff | null, reasons: string[]): DeployDiff {\n\treturn {\n\t\taddedTables: diff?.addedTables ?? [],\n\t\tremovedTables: diff?.removedTables ?? [],\n\t\taddedColumns: diff\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries(diff.tables)\n\t\t\t\t\t\t.filter(([, c]) => c.added.length > 0)\n\t\t\t\t\t\t.map(([t, c]) => [t, c.added]),\n\t\t\t\t)\n\t\t\t: {},\n\t\tbreakingChanges: reasons,\n\t};\n}\n\n/** The schema name and SQL a deploy will run. */\nexport interface DeployPlan {\n\tschemaName: string;\n\t/** `DROP SCHEMA … CASCADE` a destructive rebuild would run first. */\n\tdropStatement: string;\n\t/** DDL the deploy will run. */\n\tstatements: string[];\n}\n\n/**\n * Render the DDL a deploy would run, without executing.\n * Powers `--dry-run`: the user reviews exactly what a deploy does first.\n */\nexport function renderDeployPlan(\n\tdef: SubgraphDefinition,\n\tschemaName?: string,\n): DeployPlan {\n\tvalidateSubgraphDefinition(def);\n\tconst { statements } = generateSubgraphSQL(def, schemaName);\n\tconst schema = schemaName ?? pgSchemaName(def.name);\n\tconst dropStatement = `DROP SCHEMA IF EXISTS \"${schema}\" CASCADE;`;\n\treturn { schemaName: schema, dropStatement, statements };\n}\n\n/**\n * Deploys a subgraph schema to the database.\n *\n * A new subgraph gets its schema and tables created and registered. The same\n * schema hash only updates the handler path. An additive change adds columns\n * and tables in place, and a breaking change reindexes by dropping and\n * recreating the tables.\n */\nexport async function deploySchema(\n\tdb: AnyDb,\n\tdef: SubgraphDefinition,\n\thandlerPath: string,\n\topts?: {\n\t\tforceReindex?: boolean;\n\t\tapiKeyId?: string;\n\t\taccountId?: string;\n\t\tschemaName?: string;\n\t\thandlerCode?: string;\n\t\tsourceCode?: string;\n\t\t/** Derived level to store (see `deriveVerification`). */\n\t\tverification?: SubgraphVerification;\n\t\t/** Network baked into the pin. Defaults to `NETWORK`, then mainnet. */\n\t\tnetwork?: string;\n\t},\n): Promise<{\n\taction: \"created\" | \"unchanged\" | \"handler_updated\" | \"updated\" | \"reindexed\";\n\tsubgraphId: string;\n\tversion: string;\n\t/** Present when the deploy carried a bundled handler. */\n\tpin?: string;\n\tdiff?: DeployDiff;\n\t/** Non-fatal caveats the caller should surface (e.g. handler grafts at tip). */\n\twarnings?: string[];\n}> {\n\tvalidateSubgraphDefinition(def);\n\n\tconst { statements, hash } = generateSubgraphSQL(def, opts?.schemaName);\n\t// Only a bundled handler is pinnable: a local deploy runs the source file\n\t// in place, so there are no stored bytes for anyone to rebuild and compare.\n\tconst pinInput =\n\t\topts?.handlerCode != null\n\t\t\t? {\n\t\t\t\t\tschemaHash: hash,\n\t\t\t\t\thandlerCode: opts.handlerCode,\n\t\t\t\t\tstartBlock: def.startBlock,\n\t\t\t\t\tnetwork: opts.network ?? process.env.NETWORK ?? \"mainnet\",\n\t\t\t\t}\n\t\t\t: null;\n\tconst pin = pinInput ? computePin(pinInput) : null;\n\t// Stored beside the pin so a client can recompute it: network and runtime\n\t// are recorded nowhere else.\n\tconst preimage = pinInput ? pinPreimage(pinInput) : null;\n\tconst identity = pin ? { pin } : {};\n\tconst { getSubgraph, registerSubgraph } = await import(\n\t\t\"@secondlayer/shared/db/queries/subgraphs\"\n\t);\n\n\tconst ddlDb = db;\n\n\tconst existing = await getSubgraph(db, def.name, opts?.accountId);\n\n\tconst schemaName = opts?.schemaName ?? pgSchemaName(def.name);\n\n\t// Server owns versioning: bump patch from existing, or start at 1.0.0\n\tconst newVersion = existing ? bumpPatch(existing.version) : \"1.0.0\";\n\n\tconst regData = {\n\t\tname: def.name,\n\t\tversion: newVersion,\n\t\tdefinition: toJsonSafe({\n\t\t\tname: def.name,\n\t\t\tdescription: def.description,\n\t\t\tstartBlock: def.startBlock,\n\t\t\tsources: def.sources,\n\t\t\tschema: def.schema,\n\t\t}) as Record<string, unknown>,\n\t\tschemaHash: hash,\n\t\thandlerPath,\n\t\tapiKeyId: opts?.apiKeyId,\n\t\taccountId: opts?.accountId,\n\t\thandlerCode: opts?.handlerCode,\n\t\tsourceCode: opts?.sourceCode,\n\t\tschemaName,\n\t\tstartBlock: def.startBlock,\n\t\tpin,\n\t\tpinPreimage: preimage,\n\t\tverification: opts?.verification ?? null,\n\t};\n\n\tif (existing) {\n\t\t// Guard against zombie rows: registry entry exists but PG schema was dropped\n\t\t// (e.g. partial delete or manual cleanup). Treat as a new subgraph.\n\t\tconst schemaExists = await sql<{ exists: boolean }>`\n\t\t\tSELECT EXISTS (\n\t\t\t\tSELECT 1 FROM information_schema.schemata\n\t\t\t\tWHERE schema_name = ${schemaName}\n\t\t\t) AS \"exists\"\n\t\t`\n\t\t\t.execute(ddlDb)\n\t\t\t.then((r) => r.rows[0]?.exists ?? false);\n\n\t\tif (!schemaExists) {\n\t\t\tfor (const stmt of statements) {\n\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t}\n\t\t\tconst sg = await registerSubgraph(db, regData);\n\t\t\treturn {\n\t\t\t\taction: \"reindexed\",\n\t\t\t\tsubgraphId: sg.id,\n\t\t\t\tversion: newVersion,\n\t\t\t\t...identity,\n\t\t\t};\n\t\t}\n\n\t\tif (existing.schema_hash === hash && !opts?.forceReindex) {\n\t\t\t// Update handler path and code in case file moved or handler changed.\n\t\t\tconst handlerChanged =\n\t\t\t\topts?.handlerCode != null && opts.handlerCode !== existing.handler_code;\n\t\t\tconst { updateSubgraphHandlerPath } = await import(\n\t\t\t\t\"@secondlayer/shared/db/queries/subgraphs\"\n\t\t\t);\n\t\t\tawait updateSubgraphHandlerPath(db, def.name, handlerPath, {\n\t\t\t\thandlerCode: opts?.handlerCode,\n\t\t\t\tsourceCode: opts?.sourceCode,\n\t\t\t\tpin,\n\t\t\t\tpinPreimage: preimage,\n\t\t\t\tverification: opts?.verification ?? null,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\taction: handlerChanged ? \"handler_updated\" : \"unchanged\",\n\t\t\t\tsubgraphId: existing.id,\n\t\t\t\tversion: existing.version,\n\t\t\t\t...identity,\n\t\t\t\t// A handler-only change takes effect from the CURRENT tip: rows\n\t\t\t\t// already indexed keep the old handler's output. Silent until now —\n\t\t\t\t// say it, and name the fix.\n\t\t\t\t...(handlerChanged\n\t\t\t\t\t? {\n\t\t\t\t\t\t\twarnings: [\n\t\t\t\t\t\t\t\t\"handler changed but schema did not: new logic applies from the current tip only. \" +\n\t\t\t\t\t\t\t\t\t\"Rows already indexed were computed by the previous handler. \" +\n\t\t\t\t\t\t\t\t\t\"To recompute history, redeploy with --reindex (or backfill a range).\",\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t}\n\n\t\tif (existing.schema_hash === hash && opts?.forceReindex) {\n\t\t\t// Same schema but force reindex requested — drop and recreate.\n\t\t\tawait sql\n\t\t\t\t.raw(`DROP SCHEMA IF EXISTS \"${schemaName}\" CASCADE`)\n\t\t\t\t.execute(ddlDb);\n\t\t\tfor (const stmt of statements) {\n\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t}\n\t\t\tconst sg = await registerSubgraph(db, regData);\n\t\t\treturn {\n\t\t\t\taction: \"reindexed\",\n\t\t\t\tsubgraphId: sg.id,\n\t\t\t\tversion: newVersion,\n\t\t\t\t...identity,\n\t\t\t};\n\t\t}\n\n\t\tif (existing.definition.schema) {\n\t\t\tconst diff = diffSchema(\n\t\t\t\texisting.definition.schema as SubgraphSchema,\n\t\t\t\tdef.schema,\n\t\t\t);\n\t\t\tconst { breaking, reasons } = hasBreakingChanges(diff);\n\n\t\t\tif (breaking || opts?.forceReindex) {\n\t\t\t\t// Breaking change or forced: drop schema, recreate, register\n\t\t\t\tawait sql\n\t\t\t\t\t.raw(`DROP SCHEMA IF EXISTS \"${schemaName}\" CASCADE`)\n\t\t\t\t\t.execute(ddlDb);\n\t\t\t\tfor (const stmt of statements) {\n\t\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t\t}\n\t\t\t\tconst sg = await registerSubgraph(db, regData);\n\t\t\t\tconst deployDiff = toDeployDiff(diff, reasons);\n\t\t\t\treturn {\n\t\t\t\t\taction: \"reindexed\",\n\t\t\t\t\tsubgraphId: sg.id,\n\t\t\t\t\tversion: newVersion,\n\t\t\t\t\t...identity,\n\t\t\t\t\tdiff: deployDiff,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Create new tables using the SAME per-table emitter as the full\n\t\t\t// generator, so an additively-created table gets its UNIQUE constraints,\n\t\t\t// composite indexes, column defaults, and FKs — not just the bare columns.\n\t\t\t// (A missing UNIQUE here previously made a handler upsert ON CONFLICT fail\n\t\t\t// at runtime on additively-added tables.)\n\t\t\tconst addedDefs = diff.addedTables\n\t\t\t\t.map((tableName) => ({ tableName, tableDef: def.schema[tableName] }))\n\t\t\t\t.filter(\n\t\t\t\t\t(t): t is { tableName: string; tableDef: SubgraphTable } =>\n\t\t\t\t\t\tt.tableDef !== undefined,\n\t\t\t\t);\n\n\t\t\t// pg_trgm must exist before any search-column GIN index on the new tables.\n\t\t\tif (addedDefs.some(({ tableDef }) => tableNeedsTrgm(tableDef))) {\n\t\t\t\tawait sql.raw(\"CREATE EXTENSION IF NOT EXISTS pg_trgm\").execute(ddlDb);\n\t\t\t}\n\t\t\tfor (const { tableName, tableDef } of addedDefs) {\n\t\t\t\tfor (const stmt of emitTableDDL(schemaName, tableName, tableDef)) {\n\t\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Add columns to existing tables\n\t\t\tfor (const [tableName, colDiff] of Object.entries(diff.tables)) {\n\t\t\t\tif (colDiff.added.length === 0) continue;\n\t\t\t\tconst qualifiedName = `${schemaName}.${tableName}`;\n\t\t\t\tconst tableDef = def.schema[tableName];\n\t\t\t\tif (!tableDef) continue;\n\t\t\t\tfor (const colName of colDiff.added) {\n\t\t\t\t\tconst col = tableDef.columns[colName];\n\t\t\t\t\tif (!col) continue;\n\t\t\t\t\tconst sqlType = TYPE_MAP[col.type];\n\t\t\t\t\tif (!sqlType) continue;\n\t\t\t\t\tconst nullable = col.nullable\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: ` NOT NULL DEFAULT ${getDefault(col.type)}`;\n\t\t\t\t\tawait sql\n\t\t\t\t\t\t.raw(\n\t\t\t\t\t\t\t`ALTER TABLE ${qualifiedName} ADD COLUMN ${colName} ${sqlType}${nullable}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t\tif (col.indexed) {\n\t\t\t\t\t\tfor (const stmt of emitIndexedColumnIndexDDL(\n\t\t\t\t\t\t\tschemaName,\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\tcolName,\n\t\t\t\t\t\t).create) {\n\t\t\t\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (col.search) {\n\t\t\t\t\t\tawait sql\n\t\t\t\t\t\t\t.raw(\n\t\t\t\t\t\t\t\t`CREATE INDEX IF NOT EXISTS idx_${schemaName}_${tableName}_${colName}_trgm ON ${qualifiedName} USING gin (${colName} gin_trgm_ops)`,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Index-flag flips on EXISTING (populated) columns: pure index DDL,\n\t\t\t// applied in place. CONCURRENTLY because the table has data and this\n\t\t\t// runs outside a transaction (autocommit per statement) — a plain\n\t\t\t// CREATE INDEX would take a write lock for the whole build.\n\t\t\tconst existingSchema = existing.definition.schema as SubgraphSchema;\n\t\t\tconst flagFlips: Record<string, string[]> = {};\n\t\t\tconst needsTrgmForFlips = Object.entries(diff.tables).some(\n\t\t\t\t([tableName, colDiff]) =>\n\t\t\t\t\tcolDiff.indexChanged.some(\n\t\t\t\t\t\t(colName) =>\n\t\t\t\t\t\t\tdef.schema[tableName]?.columns[colName]?.search &&\n\t\t\t\t\t\t\t!existingSchema[tableName]?.columns[colName]?.search,\n\t\t\t\t\t),\n\t\t\t);\n\t\t\tif (needsTrgmForFlips) {\n\t\t\t\tawait sql.raw(\"CREATE EXTENSION IF NOT EXISTS pg_trgm\").execute(ddlDb);\n\t\t\t}\n\t\t\tfor (const [tableName, colDiff] of Object.entries(diff.tables)) {\n\t\t\t\tif (colDiff.indexChanged.length === 0) continue;\n\t\t\t\tflagFlips[tableName] = colDiff.indexChanged;\n\t\t\t\tconst qualifiedName = `${schemaName}.${tableName}`;\n\t\t\t\tfor (const colName of colDiff.indexChanged) {\n\t\t\t\t\tconst was = existingSchema[tableName]?.columns[colName];\n\t\t\t\t\tconst now = def.schema[tableName]?.columns[colName];\n\t\t\t\t\tif (!now) continue;\n\t\t\t\t\tconst trgmIdx = `idx_${schemaName}_${tableName}_${colName}_trgm`;\n\t\t\t\t\tconst indexedIdx = emitIndexedColumnIndexDDL(\n\t\t\t\t\t\tschemaName,\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tcolName,\n\t\t\t\t\t\t{ concurrently: true },\n\t\t\t\t\t);\n\t\t\t\t\tif (now.indexed && !was?.indexed) {\n\t\t\t\t\t\tfor (const stmt of indexedIdx.create) {\n\t\t\t\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!now.indexed && was?.indexed) {\n\t\t\t\t\t\tfor (const stmt of indexedIdx.drop) {\n\t\t\t\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (now.search && !was?.search) {\n\t\t\t\t\t\tawait sql\n\t\t\t\t\t\t\t.raw(\n\t\t\t\t\t\t\t\t`CREATE INDEX CONCURRENTLY IF NOT EXISTS ${trgmIdx} ON ${qualifiedName} USING gin (${colName} gin_trgm_ops)`,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t\t} else if (!now.search && was?.search) {\n\t\t\t\t\t\tawait sql\n\t\t\t\t\t\t\t.raw(`DROP INDEX CONCURRENTLY IF EXISTS ${schemaName}.${trgmIdx}`)\n\t\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// uniqueKeys additions: ADD CONSTRAINT in place (idempotent via\n\t\t\t// pg_constraint check — Postgres has no ADD CONSTRAINT IF NOT EXISTS).\n\t\t\t// Removals never reach here: hasBreakingChanges classifies them\n\t\t\t// breaking, which lands in the reindex branch above.\n\t\t\tconst addedUq: Record<string, string[][]> = {};\n\t\t\tfor (const [tableName, conDiff] of Object.entries(diff.constraints)) {\n\t\t\t\tconst qualifiedName = `${schemaName}.${tableName}`;\n\t\t\t\tfor (const cols of conDiff.addedUniqueKeys) {\n\t\t\t\t\tconst constraintName = `uq_${schemaName}_${tableName}_${cols.join(\"_\")}`;\n\t\t\t\t\tconst exists = await sql<{ exists: boolean }>`\n\t\t\t\t\t\tSELECT EXISTS (\n\t\t\t\t\t\t\tSELECT 1 FROM pg_constraint\n\t\t\t\t\t\t\tWHERE conname = ${constraintName}\n\t\t\t\t\t\t) AS \"exists\"\n\t\t\t\t\t`\n\t\t\t\t\t\t.execute(ddlDb)\n\t\t\t\t\t\t.then((r) => r.rows[0]?.exists ?? false);\n\t\t\t\t\tif (!exists) {\n\t\t\t\t\t\tawait sql\n\t\t\t\t\t\t\t.raw(\n\t\t\t\t\t\t\t\t`ALTER TABLE ${qualifiedName} ADD CONSTRAINT ${constraintName} UNIQUE (${cols.join(\", \")})`,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t\t}\n\t\t\t\t\taddedUq[tableName] = [...(addedUq[tableName] ?? []), cols];\n\t\t\t\t}\n\t\t\t\t// Composite indexes: additive both ways. Names are positional in the\n\t\t\t\t// incoming schema; a reordered (unchanged-value) entry keeps its old\n\t\t\t\t// positionally-derived name, which is harmless.\n\t\t\t\tfor (const cols of conDiff.addedIndexes) {\n\t\t\t\t\tconst i = (def.schema[tableName]?.indexes ?? []).findIndex(\n\t\t\t\t\t\t(entry) => JSON.stringify(entry) === JSON.stringify(cols),\n\t\t\t\t\t);\n\t\t\t\t\tconst idxName = `idx_${schemaName}_${tableName}_composite_${i}`;\n\t\t\t\t\tawait sql\n\t\t\t\t\t\t.raw(\n\t\t\t\t\t\t\t`CREATE INDEX CONCURRENTLY IF NOT EXISTS ${idxName} ON ${qualifiedName} (${cols.join(\", \")})`,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t}\n\t\t\t\tfor (const cols of conDiff.removedIndexes) {\n\t\t\t\t\tconst i = (existingSchema[tableName]?.indexes ?? []).findIndex(\n\t\t\t\t\t\t(entry) => JSON.stringify(entry) === JSON.stringify(cols),\n\t\t\t\t\t);\n\t\t\t\t\tif (i < 0) continue;\n\t\t\t\t\tconst idxName = `idx_${schemaName}_${tableName}_composite_${i}`;\n\t\t\t\t\tawait sql\n\t\t\t\t\t\t.raw(`DROP INDEX CONCURRENTLY IF EXISTS ${schemaName}.${idxName}`)\n\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst sg = await registerSubgraph(db, regData);\n\t\t\tconst addedCols: Record<string, string[]> = {};\n\t\t\tfor (const [t, colDiff] of Object.entries(diff.tables)) {\n\t\t\t\tif ((colDiff as ColumnDiff).added.length > 0)\n\t\t\t\t\taddedCols[t] = (colDiff as ColumnDiff).added;\n\t\t\t}\n\t\t\tconst deployDiff: DeployDiff = {\n\t\t\t\taddedTables: diff.addedTables,\n\t\t\t\tremovedTables: [],\n\t\t\t\taddedColumns: addedCols,\n\t\t\t\tbreakingChanges: [],\n\t\t\t\t...(Object.keys(flagFlips).length > 0\n\t\t\t\t\t? { indexChanges: flagFlips }\n\t\t\t\t\t: {}),\n\t\t\t\t...(Object.keys(addedUq).length > 0\n\t\t\t\t\t? { addedUniqueKeys: addedUq }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t\treturn {\n\t\t\t\taction: \"updated\",\n\t\t\t\tsubgraphId: sg.id,\n\t\t\t\tversion: newVersion,\n\t\t\t\t...identity,\n\t\t\t\tdiff: deployDiff,\n\t\t\t};\n\t\t}\n\t}\n\n\t// New subgraph — execute all DDL\n\tfor (const stmt of statements) {\n\t\tawait sql.raw(stmt).execute(ddlDb);\n\t}\n\n\tconst sg = await registerSubgraph(db, regData);\n\treturn {\n\t\taction: \"created\",\n\t\tsubgraphId: sg.id,\n\t\tversion: newVersion,\n\t\t...identity,\n\t};\n}\n\nfunction getDefault(type: string): string {\n\tswitch (type) {\n\t\tcase \"text\":\n\t\tcase \"principal\":\n\t\t\treturn \"''\";\n\t\tcase \"uint\":\n\t\tcase \"int\":\n\t\t\treturn \"0\";\n\t\tcase \"boolean\":\n\t\t\treturn \"false\";\n\t\tcase \"timestamp\":\n\t\t\treturn \"NOW()\";\n\t\tcase \"jsonb\":\n\t\t\treturn \"'{}'\";\n\t\tdefault:\n\t\t\treturn \"''\";\n\t}\n}\n",
|
|
18
|
-
"import { getSourceDb } from \"@secondlayer/shared/db\";\nimport type { Transaction } from \"@secondlayer/shared/db\";\nimport {\n\tBillingPausedError,\n\ttype IndexEventRow,\n\ttype IndexHttpClient,\n\ttype IndexStateWriteRow,\n\ttype IndexTransactionRow,\n\tcreateInternalIndexHttpClient,\n} from \"@secondlayer/shared/index-http\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport type { SubgraphDefinition, SubgraphFilter } from \"../types.ts\";\nimport { deriveVerification } from \"../verification.ts\";\nimport {\n\ttype BlockData,\n\ttype StateWriteFeed,\n\tloadBlockRange,\n\tstateWriteBlocks,\n} from \"./batch-loader.ts\";\nimport { runsInRealm } from \"./realm.ts\";\nimport {\n\treconstructBlock,\n\treconstructEvent,\n\treconstructTransaction,\n\treconstructTxFromEventRow,\n} from \"./reconstruct.ts\";\nimport type { TxRecord } from \"./source-matcher.ts\";\nimport type { StateWriteRow } from \"./state-writes.ts\";\n\n/**\n * Where the subgraph runtime reads canonical chain data. Today it taps the\n * indexer Postgres directly (`PostgresBlockSource`); the re-point adds a\n * `PublicApiBlockSource` that consumes the Streams clock + Index data over\n * HTTP. `matchSources` / handlers / flush are unchanged — only the\n * loader + tip swap behind this seam.\n */\nexport interface BlockSource {\n\t/**\n\t * Highest canonical block height available to process.\n\t *\n\t * `opts` is an HTTP-plane long-poll hint, ignored by any\n\t * source with no such notion (the Postgres tap: a local DB read is already\n\t * instant, nothing to wait on). `knownHeight` is the last tip THIS caller\n\t * observed; passing `wait` without it is a no-op — the server needs a\n\t * baseline to decide whether anything has changed.\n\t */\n\tgetTip(opts?: { wait?: number; knownHeight?: number }): Promise<number>;\n\t/** Canonical block data for [fromHeight, toHeight], keyed by height. */\n\tloadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>>;\n\t/** Sparse-scan probe: lowest height in (afterHeight, untilHeight] holding\n\t * an event this source's subgraph could match, or null when the rest of\n\t * the range is empty. Optional — only event-scoped sources support it. */\n\tnextDataHeight?(\n\t\tafterHeight: number,\n\t\tuntilHeight: number,\n\t): Promise<number | null>;\n\t/**\n\t * Per-decoder committed heights from the SAME response `getTip()` just\n\t * fetched (no extra request) — undefined for a source with no such notion\n\t * (the Postgres tap: local mode reads `decoder_checkpoints` directly and\n\t * never needs this). Lets a caller (the chain evaluator) narrow its own\n\t * bound to the decoders it actually reads instead of `getTip()`'s\n\t * conservative cross-decoder floor. Call AFTER `getTip()`.\n\t */\n\tgetDecodedHeights?(): Record<string, number | null> | undefined;\n}\n\n/** A (decoded event type, optional contract scope) pair the sparse probe\n * checks. Contract scoping is what makes token-subgraph reindexes leap over\n * everything that isn't their token. */\nexport type SparseProbeTarget = { eventType: string; contractId?: string };\n\n/**\n * Tells whether a subgraph can skip blocks without its events.\n *\n * Sparse scanning is sound only when every source is an event-type filter. A\n * `contract_call` or `contract_deploy` source matches transactions, which the\n * event probe cannot see.\n */\nexport function canSparseScan(subgraph: SubgraphDefinition): boolean {\n\tif (Array.isArray(subgraph.sources)) return false;\n\tconst filters = sourceFilters(subgraph);\n\tif (filters.length === 0) return false;\n\treturn filters.every((f) => Boolean(EVENT_FILTER_TO_INDEX_TYPE[f.type]));\n}\n\n/** Most contracts one filter may pin before it is treated as unscoped (the\n * Index list-filter ceiling; beyond it a per-contract walk fan-out costs more\n * than it saves). */\nconst MAX_PINNED_CONTRACTS = 20;\n\n/**\n * Concrete contract ids a filter pins, or null when it pins none the Index can\n * be asked for. Wildcards, trait scope and factory scope resolve per block\n * against registry state the Index cannot see, so they stay unscoped: scoping\n * them would change which events a handler receives.\n */\nfunction pinnedContracts(filter: SubgraphFilter): string[] | null {\n\tconst f = filter as {\n\t\tcontractId?: string | readonly string[];\n\t\tassetIdentifier?: string;\n\t\ttrait?: unknown;\n\t\tfactory?: unknown;\n\t};\n\tif (f.trait || f.factory) return null;\n\tconst ids = Array.isArray(f.contractId)\n\t\t? [...f.contractId]\n\t\t: f.contractId\n\t\t\t? [f.contractId as string]\n\t\t\t: f.assetIdentifier\n\t\t\t\t? [f.assetIdentifier.split(\"::\")[0] as string]\n\t\t\t\t: [];\n\tif (ids.length === 0 || ids.length > MAX_PINNED_CONTRACTS) return null;\n\tif (ids.some((id) => !id || id.includes(\"*\"))) return null;\n\treturn ids;\n}\n\n/**\n * Lists the event types and contract scopes a subgraph's filters match.\n *\n * Each target is a decoded event type with an optional contract scope. One\n * function feeds both the sparse probe and the event walks, so a new\n * contract-pinning filter field is added here once.\n *\n * Per event type: if ANY filter for it is unscoped, a single unscoped target\n * covers everything (today's behavior); otherwise one target per distinct\n * pinned contract.\n */\nexport function sparseProbeTargets(\n\tsubgraph: SubgraphDefinition,\n): SparseProbeTarget[] {\n\tconst byType = new Map<string, Set<string> | \"all\">();\n\tfor (const f of sourceFilters(subgraph)) {\n\t\tconst eventType = EVENT_FILTER_TO_INDEX_TYPE[f.type];\n\t\tif (!eventType) continue;\n\t\tconst pinned = pinnedContracts(f);\n\t\tconst prev = byType.get(eventType);\n\t\tif (!pinned || prev === \"all\") {\n\t\t\tbyType.set(eventType, \"all\");\n\t\t\tcontinue;\n\t\t}\n\t\tconst set = prev ?? new Set<string>();\n\t\tfor (const id of pinned) set.add(id);\n\t\tbyType.set(eventType, set);\n\t}\n\tconst targets: SparseProbeTarget[] = [];\n\tfor (const [eventType, scope] of byType) {\n\t\tif (scope === \"all\") targets.push({ eventType });\n\t\telse\n\t\t\tfor (const contractId of scope) targets.push({ eventType, contractId });\n\t}\n\treturn targets;\n}\n\n/** Lowest height this instance holds `state_writes` for; null when none. */\nexport type StateWritesCoverage = () => Promise<number | null>;\n\n/** How long a coverage answer is reused. Coverage only appears (the node\n * starts delivering `state_writes`) or reaches lower (a backfill). */\nconst COVERAGE_TTL_MS = 60_000;\n\n/** A coverage read cached per process; `forget` drops the cached answer. */\nexport type CachedCoverage = StateWritesCoverage & { forget(): void };\n\n/** Cache a coverage read per process; a failed read counts as no coverage. */\nexport function cachedCoverage(\n\tread: () => Promise<number | null>,\n\tttlMs: number = COVERAGE_TTL_MS,\n): CachedCoverage {\n\tlet cached: { at: number; value: Promise<number | null> } | undefined;\n\tconst coverage = () => {\n\t\tconst now = Date.now();\n\t\tif (!cached || now - cached.at > ttlMs) {\n\t\t\tcached = { at: now, value: read().catch(() => null) };\n\t\t}\n\t\treturn cached.value;\n\t};\n\treturn Object.assign(coverage, {\n\t\tforget: () => {\n\t\t\tcached = undefined;\n\t\t},\n\t});\n}\n\n/** The DB tap's coverage: the lowest `state_writes` height, one PK probe. */\nexport const dbStateWritesCoverage: CachedCoverage = cachedCoverage(\n\tasync () => {\n\t\tconst row = await getSourceDb()\n\t\t\t.selectFrom(\"state_writes\")\n\t\t\t.select(\"block_height\")\n\t\t\t.orderBy(\"block_height\", \"asc\")\n\t\t\t.limit(1)\n\t\t\t.executeTakeFirst();\n\t\treturn row ? Number(row.block_height) : null;\n\t},\n);\n\nlet httpCoverage: StateWritesCoverage | undefined;\n/** The Index API's coverage: the first `/v1/index/state-writes` row. */\nfunction httpStateWritesCoverage(): StateWritesCoverage {\n\thttpCoverage ??= cachedCoverage(() =>\n\t\tbuildHttpClient().firstStateWriteHeight(),\n\t);\n\treturn httpCoverage;\n}\n\n/**\n * The contracts whose writes a state subgraph would read from `state_writes`,\n * or null when it keeps `vm_events` whatever the instance holds.\n *\n * Only a subgraph running in the deterministic realm (stored level `state`)\n * whose sources the CURRENT rules still derive as `state`. A subgraph stored\n * as `state` before `map_insert` dropped to `events` keeps its `vm_events`\n * feed: `state_writes` cannot tell an insert from a set, so it would silently\n * lose those events.\n */\nexport function stateWriteContracts(\n\tsubgraph: SubgraphDefinition | undefined,\n): StateWriteFeed | null {\n\tif (!subgraph || !runsInRealm(subgraph)) return null;\n\tif (deriveVerification(subgraph).level !== \"state\") return null;\n\tconst contracts = new Set<string>();\n\tfor (const f of sourceFilters(subgraph)) {\n\t\tconst pinned = pinnedContracts(f);\n\t\t// A source with no fixed contract (wildcard, factory) needs every\n\t\t// contract's writes.\n\t\tif (!pinned) return { contracts: null };\n\t\tfor (const id of pinned) contracts.add(id);\n\t}\n\treturn { contracts: [...contracts] };\n}\n\n/**\n * The `state_writes` feed for a subgraph, or null when it keeps today's\n * `vm_events` feed. Derived, never configured: a state subgraph switches only\n * once this instance holds `state_writes` from the subgraph's `startBlock`\n * on, so a node that does not deliver them (or started delivering them after\n * the subgraph's range began) changes nothing.\n */\nexport async function stateWriteFeed(\n\tsubgraph: SubgraphDefinition | undefined,\n\tcoverage: StateWritesCoverage = dbStateWritesCoverage,\n): Promise<StateWriteFeed | null> {\n\tconst feed = stateWriteContracts(subgraph);\n\tif (!feed) return null;\n\tconst from = await coverage();\n\tif (from === null || from > (subgraph?.startBlock ?? 0)) return null;\n\treturn feed;\n}\n\n/** Reads directly from the shared indexer Postgres (the original behavior). */\nexport class PostgresBlockSource implements BlockSource {\n\t/** `feed`: read write events from `state_writes` (see {@link stateWriteFeed}). */\n\tconstructor(private readonly feed?: StateWriteFeed | undefined) {}\n\n\tasync getTip(): Promise<number> {\n\t\tconst progress = await getSourceDb()\n\t\t\t.selectFrom(\"index_progress\")\n\t\t\t.selectAll()\n\t\t\t.where(\"network\", \"=\", process.env.NETWORK ?? \"mainnet\")\n\t\t\t.executeTakeFirst();\n\t\treturn progress ? Number(progress.highest_seen_block) : 0;\n\t}\n\n\tloadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>> {\n\t\treturn loadBlockRange(getSourceDb(), fromHeight, toHeight, {\n\t\t\tstateWrites: this.feed,\n\t\t});\n\t}\n}\n\n// Subgraph source filter types that map to a decoded Index event_type. The\n// `_event` suffix is the runtime's raw form; print is keyed `print_event`.\nconst EVENT_FILTER_TO_INDEX_TYPE: Record<string, string> = {\n\tstx_transfer: \"stx_transfer\",\n\tstx_mint: \"stx_mint\",\n\tstx_burn: \"stx_burn\",\n\tstx_lock: \"stx_lock\",\n\tft_transfer: \"ft_transfer\",\n\tft_mint: \"ft_mint\",\n\tft_burn: \"ft_burn\",\n\tnft_transfer: \"nft_transfer\",\n\tnft_mint: \"nft_mint\",\n\tnft_burn: \"nft_burn\",\n\tprint_event: \"print\",\n\tnested_contract_call: \"nested_contract_call\",\n\tvar_set: \"var_set\",\n\tmap_set: \"map_set\",\n\tmap_insert: \"map_insert\",\n\tmap_delete: \"map_delete\",\n};\n\n// Tx-level source types — matched against /v1/index/transactions, not events.\nconst TX_SOURCE_TYPES = new Set([\"contract_call\", \"contract_deploy\"]);\n// Second clock (ordinal). Never part of a tx's classic event set: a\n// contract_call/contract_deploy source fetches every CLASSIC type, and vm\n// types are fetched only when a vm source names them.\nexport const VM_INDEX_EVENT_TYPES: ReadonlySet<string> = new Set([\n\t\"nested_contract_call\",\n\t\"var_set\",\n\t\"map_set\",\n\t\"map_insert\",\n\t\"map_delete\",\n]);\nconst CLASSIC_INDEX_EVENT_TYPES = [\n\t...new Set(Object.values(EVENT_FILTER_TO_INDEX_TYPE)),\n].filter((t) => !VM_INDEX_EVENT_TYPES.has(t));\n\nfunction sourceFilters(subgraph: SubgraphDefinition): SubgraphFilter[] {\n\tconst sources = subgraph.sources;\n\treturn Array.isArray(sources)\n\t\t? (sources as SubgraphFilter[])\n\t\t: Object.values(sources as Record<string, SubgraphFilter>);\n}\n\n/**\n * True when any source matches transactions (contract_call / contract_deploy):\n * the handler receives the full tx, so the loader must fetch real transactions.\n * Event-only subgraphs skip walkTransactions and synthesize the tx from joined\n * event context instead (the ~37x reindex over-fetch; see indexing-speed plan).\n */\nexport function needsTransactionData(subgraph: SubgraphDefinition): boolean {\n\treturn sourceFilters(subgraph).some((f) => TX_SOURCE_TYPES.has(f.type));\n}\n\n/** Build the (few) event-bearing txs from joined event context, one per tx_id —\n * the event-only replacement for draining every transaction in the range. */\nfunction synthesizeTxsFromEvents(events: IndexEventRow[]): Transaction[] {\n\tconst byId = new Map<string, Transaction>();\n\tfor (const e of events) {\n\t\tif (!byId.has(e.tx_id)) byId.set(e.tx_id, reconstructTxFromEventRow(e));\n\t}\n\treturn [...byId.values()];\n}\n\n/**\n * The Index event_types the loader must fetch for a set of source filter types.\n * A contract_call/contract_deploy source matches a tx and hands its FULL event\n * set to the handler, so when one is present we fetch every classic event type\n * (the matched tx's events must be complete); otherwise just the referenced\n * types. VM types ride a second clock and are fetched only when referenced.\n * Shared by the subgraph loader and the chain-trigger evaluator.\n */\nexport function indexEventTypesForFilterTypes(filterTypes: string[]): string[] {\n\tconst types = new Set<string>();\n\tif (filterTypes.some((t) => TX_SOURCE_TYPES.has(t))) {\n\t\tfor (const t of CLASSIC_INDEX_EVENT_TYPES) types.add(t);\n\t}\n\tfor (const t of filterTypes) {\n\t\tconst indexType = EVENT_FILTER_TO_INDEX_TYPE[t];\n\t\tif (indexType) types.add(indexType);\n\t}\n\treturn [...types];\n}\n\n/** Index event_types a subgraph's sources require. Empty when sources are absent. */\nexport function referencedIndexEventTypes(\n\tsubgraph: SubgraphDefinition,\n): string[] {\n\tif (!subgraph.sources) return [];\n\treturn indexEventTypesForFilterTypes(\n\t\tsourceFilters(subgraph).map((f) => f.type),\n\t);\n}\n\n/**\n * Tells whether a subgraph's sources can be read from the Streams index.\n *\n * Every source must be a known event-type, `contract_call` or\n * `contract_deploy` filter, and array-style sources never qualify because they\n * leak the unreconstructable `_eventId`. Trait scope is allowed: trait\n * resolution reads the contract registry on the platform database, which the\n * processor always holds. Everything else stays on the database tap.\n */\nexport function isStreamsIndexEligible(subgraph: SubgraphDefinition): boolean {\n\tif (Array.isArray(subgraph.sources)) return false;\n\tconst filters = sourceFilters(subgraph);\n\tif (filters.length === 0) return false;\n\tfor (const f of filters) {\n\t\tconst known =\n\t\t\tEVENT_FILTER_TO_INDEX_TYPE[f.type] || TX_SOURCE_TYPES.has(f.type);\n\t\tif (!known) return false;\n\t}\n\treturn true;\n}\n\n/** Merge of overlapping walks: one row per (type, height, event_index). */\nfunction dedupeEvents(rows: IndexEventRow[]): IndexEventRow[] {\n\tconst seen = new Set<string>();\n\treturn rows.filter((e) => {\n\t\tconst key = `${e.event_type}|${e.block_height}|${e.event_index}`;\n\t\tif (seen.has(key)) return false;\n\t\tseen.add(key);\n\t\treturn true;\n\t});\n}\n\n/** Streams clock + Index data plane, reconstructed into raw BlockData rows. */\nexport class PublicApiBlockSource implements BlockSource {\n\tconstructor(\n\t\tprivate readonly http: IndexHttpClient,\n\t\tprivate readonly eventTypes: string[],\n\t\t/** When set, enables the sparse-scan probe (event-scoped subgraphs). */\n\t\tprivate readonly probeTargets?: SparseProbeTarget[] | undefined,\n\t\t/** False for event-only subgraphs → skip walkTransactions, synthesize the\n\t\t * tx from joined event context. Defaults true (safe / unchanged). */\n\t\tprivate readonly needsTransactions = true,\n\t\t/** Write events from `state_writes` instead of the vm event walks. */\n\t\tprivate readonly feed?: StateWriteFeed | undefined,\n\t) {}\n\n\t/**\n\t * What the event walks fetch. Event-only subgraphs walk exactly what their\n\t * filters can match (contract-scoped where a filter pins one); tx-level\n\t * sources need every event of a matched tx, so they walk each type whole.\n\t */\n\tprivate walkTargets(): SparseProbeTarget[] {\n\t\tconst scoped = this.needsTransactions ? undefined : this.probeTargets;\n\t\t// Under a state_writes feed, write events come from the writes walk.\n\t\tconst types = this.feed\n\t\t\t? this.eventTypes.filter((t) => !VM_INDEX_EVENT_TYPES.has(t))\n\t\t\t: this.eventTypes;\n\t\treturn types.flatMap((eventType) => {\n\t\t\tconst own = scoped?.filter((t) => t.eventType === eventType);\n\t\t\treturn own?.length ? own : [{ eventType }];\n\t\t});\n\t}\n\n\t/** Lowest height in (after, until] any probe target hits, or null. */\n\tasync nextDataHeight(\n\t\tafterHeight: number,\n\t\tuntilHeight: number,\n\t): Promise<number | null> {\n\t\tif (!this.probeTargets?.length) return afterHeight + 1;\n\t\tconst hits = await Promise.all(\n\t\t\tthis.probeTargets.map((t) =>\n\t\t\t\tthis.http.firstEventHeight(\n\t\t\t\t\tt.eventType,\n\t\t\t\t\tafterHeight + 1,\n\t\t\t\t\tuntilHeight,\n\t\t\t\t\tt.contractId,\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t\tconst found = hits.filter((h): h is number => h !== null);\n\t\treturn found.length ? Math.min(...found) : null;\n\t}\n\n\tgetTip(opts?: { wait?: number; knownHeight?: number }): Promise<number> {\n\t\t// VM rows land with ingest. Decoded Index tip can lag; use the source\n\t\t// field when this loader fetches any vm type.\n\t\tif (this.eventTypes.some((t) => VM_INDEX_EVENT_TYPES.has(t))) {\n\t\t\treturn this.http.getIndexSourceTip(opts);\n\t\t}\n\t\t// Scope the tip (and, with `wait`, what counts as \"nothing new\") to\n\t\t// exactly the classic types THIS source reads instead of the global\n\t\t// cross-decoder floor. Without this, any of the ~15 classic decoders\n\t\t// committing — most unrelated to what this source actually walks —\n\t\t// moves the global floor and makes an unrelated `wait` return early.\n\t\treturn this.http.getIndexTip({ ...opts, eventTypes: this.eventTypes });\n\t}\n\n\t/** Reads the SAME envelope `getTip()` just cached on `this.http` — call\n\t * this only after `getTip()` has resolved at least once. */\n\tgetDecodedHeights(): Record<string, number | null> | undefined {\n\t\treturn this.http.getDecodedHeights();\n\t}\n\n\tasync loadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>> {\n\t\t// Event-only subgraphs join tx context onto events (withTx) and skip the\n\t\t// walkTransactions over-fetch entirely; tx-level sources fetch real txs.\n\t\tconst withTx = !this.needsTransactions;\n\t\tconst [blocks, txRows, eventLists, writes] = await Promise.all([\n\t\t\tthis.http.walkBlocks(fromHeight, toHeight),\n\t\t\tthis.needsTransactions\n\t\t\t\t? this.http.walkTransactions(fromHeight, toHeight)\n\t\t\t\t: Promise.resolve<IndexTransactionRow[]>([]),\n\t\t\tPromise.all(\n\t\t\t\tthis.walkTargets().map((t) =>\n\t\t\t\t\tthis.http.walkEvents(\n\t\t\t\t\t\tt.eventType,\n\t\t\t\t\t\tfromHeight,\n\t\t\t\t\t\ttoHeight,\n\t\t\t\t\t\twithTx,\n\t\t\t\t\t\tt.contractId,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t\tthis.feed ? this.walkWrites(fromHeight, toHeight, this.feed) : null,\n\t\t]);\n\t\tconst events = dedupeEvents(eventLists.flat());\n\n\t\tconst map = new Map<number, BlockData>();\n\t\t// Seed every canonical height (incl. empty blocks) so catch-up doesn't\n\t\t// file them as gaps.\n\t\tfor (const b of blocks) {\n\t\t\tmap.set(b.block_height, {\n\t\t\t\tblock: reconstructBlock(b),\n\t\t\t\ttxs: [],\n\t\t\t\tevents: [],\n\t\t\t});\n\t\t}\n\t\t// For event-only subgraphs, materialize only the event-bearing txs from\n\t\t// joined event context instead of every transaction in the range.\n\t\tconst txs = this.needsTransactions\n\t\t\t? txRows.map(reconstructTransaction)\n\t\t\t: synthesizeTxsFromEvents(events);\n\t\tfor (const t of txs) {\n\t\t\tmap.get(t.block_height)?.txs.push(t);\n\t\t}\n\t\tfor (const e of events) {\n\t\t\tconst bd = map.get(e.block_height);\n\t\t\tif (!bd) continue;\n\t\t\t// vm rows ride their own clock: never merged into `events`, whose\n\t\t\t// order is classic event_index.\n\t\t\tif (VM_INDEX_EVENT_TYPES.has(e.event_type)) {\n\t\t\t\tbd.vmEvents ??= [];\n\t\t\t\tbd.vmEvents.push(reconstructEvent(e));\n\t\t\t} else {\n\t\t\t\tbd.events.push(reconstructEvent(e));\n\t\t\t}\n\t\t}\n\t\tif (writes) {\n\t\t\tfor (const [height, fed] of writes) {\n\t\t\t\tconst bd = map.get(height);\n\t\t\t\tif (!bd) continue;\n\t\t\t\tbd.txs.push(...fed.txs);\n\t\t\t\tbd.vmEvents = fed.vmEvents;\n\t\t\t}\n\t\t}\n\t\t// Canonical ordering — multi-type event walks merge here, per clock.\n\t\tfor (const bd of map.values()) {\n\t\t\tbd.txs.sort((a, b) => (a.tx_index ?? 0) - (b.tx_index ?? 0));\n\t\t\tbd.events.sort((a, b) => a.event_index - b.event_index);\n\t\t\tbd.vmEvents?.sort((a, b) => a.event_index - b.event_index);\n\t\t}\n\t\treturn map;\n\t}\n\n\t/** Each height's named writes as events, the writing txs rebuilt from the\n\t * joined `tx_*` fields. One walk per contract, merged in ordinal order. */\n\tprivate async walkWrites(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t\tfeed: StateWriteFeed,\n\t): Promise<ReturnType<typeof stateWriteBlocks>> {\n\t\tconst walks = await Promise.all(\n\t\t\t(feed.contracts ?? [undefined]).map((c) =>\n\t\t\t\tthis.http.walkStateWrites(fromHeight, toHeight, c),\n\t\t\t),\n\t\t);\n\t\tconst writesByHeight = new Map<number, Map<number, StateWriteRow>>();\n\t\tconst txsByHeight = new Map<number, Map<number, TxRecord>>();\n\t\tfor (const row of walks.flat()) {\n\t\t\tconst writes = writesByHeight.get(row.block_height) ?? new Map();\n\t\t\twrites.set(row.ordinal, row);\n\t\t\twritesByHeight.set(row.block_height, writes);\n\t\t\tconst tx = writeTx(row);\n\t\t\tif (tx) {\n\t\t\t\tconst txs = txsByHeight.get(row.block_height) ?? new Map();\n\t\t\t\ttxs.set(row.tx_index as number, tx);\n\t\t\t\ttxsByHeight.set(row.block_height, txs);\n\t\t\t}\n\t\t}\n\t\treturn stateWriteBlocks(\n\t\t\tnew Map(\n\t\t\t\t[...writesByHeight].map(([h, w]) => [\n\t\t\t\t\th,\n\t\t\t\t\t[...w.values()].sort((a, b) => a.ordinal - b.ordinal),\n\t\t\t\t]),\n\t\t\t),\n\t\t\tnew Map([...txsByHeight].map(([h, t]) => [h, [...t.values()]])),\n\t\t);\n\t}\n}\n\n/** The writing tx a `tx_context=true` row carries; null for block-level\n * writes or a row whose tx the Index could not join. */\nfunction writeTx(row: IndexStateWriteRow): TxRecord | null {\n\tif (row.tx_index === null || !row.tx_id) return null;\n\treturn {\n\t\ttx_id: row.tx_id,\n\t\ttx_index: row.tx_index,\n\t\ttype: row.tx_type ?? \"\",\n\t\tsender: row.tx_sender ?? \"\",\n\t\tstatus: row.tx_status ?? \"\",\n\t\tcontract_id: row.tx_contract_id ?? null,\n\t\tfunction_name: row.tx_function_name ?? null,\n\t};\n}\n\n/**\n * Wraps a primary source and falls back to a secondary, per call, when the\n * primary throws. Use it to make the HTTP (Streams+Index) plane a SOFT dependency:\n * if api is unavailable, the processor reads the Postgres tap and keeps advancing\n * instead of stalling. Safe to mix mid-stream — both taps read the same canonical\n * chain at the same heights and the cursor is forward-only. Stateless (no breaker)\n * so it's failover-safe across replicas; the primary is retried every call and\n * resumes transparently once healthy.\n */\nexport class FallbackBlockSource implements BlockSource {\n\t/** True when the LAST `getTip()` call actually used the primary — guards\n\t * `getDecodedHeights()` against returning the primary's stale cached\n\t * envelope from an earlier success after a call that just fell back. */\n\tprivate lastTipFromPrimary = false;\n\n\tconstructor(\n\t\tprivate readonly primary: BlockSource,\n\t\tprivate readonly fallback: BlockSource,\n\t) {}\n\n\tasync getTip(opts?: {\n\t\twait?: number;\n\t\tknownHeight?: number;\n\t}): Promise<number> {\n\t\ttry {\n\t\t\tconst tip = await this.primary.getTip(opts);\n\t\t\tthis.lastTipFromPrimary = true;\n\t\t\treturn tip;\n\t\t} catch (err) {\n\t\t\t// A billing refusal is not the api being down: the DB tap would\n\t\t\t// quietly serve different data, so let the caller pause instead.\n\t\t\tif (err instanceof BillingPausedError) throw err;\n\t\t\tlogger.warn(\"block source primary getTip failed — using DB tap\", {\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t});\n\t\t\tthis.lastTipFromPrimary = false;\n\t\t\t// The DB tap has no wait/long-poll notion — a plain read is already\n\t\t\t// instant, so `opts` is dropped here rather than forwarded.\n\t\t\treturn this.fallback.getTip();\n\t\t}\n\t}\n\n\t/** Only meaningful right after a `getTip()` that used the primary — the\n\t * fallback (Postgres tap) has no such notion, and returning the\n\t * primary's stale cache after a fallback would mismatch the returned\n\t * tip. Local mode's own `decoderBoundTip` never calls this. */\n\tgetDecodedHeights(): Record<string, number | null> | undefined {\n\t\tif (!this.lastTipFromPrimary) return undefined;\n\t\treturn this.primary.getDecodedHeights?.();\n\t}\n\n\tasync loadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>> {\n\t\ttry {\n\t\t\treturn await this.primary.loadBlockRange(fromHeight, toHeight);\n\t\t} catch (err) {\n\t\t\tif (err instanceof BillingPausedError) throw err;\n\t\t\tlogger.warn(\"block source primary loadBlockRange failed — using DB tap\", {\n\t\t\t\tfrom: fromHeight,\n\t\t\t\tto: toHeight,\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t});\n\t\t\treturn this.fallback.loadBlockRange(fromHeight, toHeight);\n\t\t}\n\t}\n\n\t/** Probe via the primary only; a probe failure just means \"no skip\" —\n\t * the caller falls back to plain batch advancement. */\n\tasync nextDataHeight(\n\t\tafterHeight: number,\n\t\tuntilHeight: number,\n\t): Promise<number | null> {\n\t\tif (!this.primary.nextDataHeight) return afterHeight + 1;\n\t\ttry {\n\t\t\treturn await this.primary.nextDataHeight(afterHeight, untilHeight);\n\t\t} catch {\n\t\t\treturn afterHeight + 1;\n\t\t}\n\t}\n}\n\nconst postgresBlockSource = new PostgresBlockSource();\n\n/** The Postgres tap for a subgraph: its `state_writes` feed when it has one. */\nfunction postgresSourceFor(feed: StateWriteFeed | null): BlockSource {\n\treturn feed ? new PostgresBlockSource(feed) : postgresBlockSource;\n}\n\n/**\n * HTTP (Streams+Index) chain source for a set of decoded event types, wrapped so\n * it falls back to the Postgres tap when api is down. Used by the chain-trigger\n * evaluator (which isn't subgraph-scoped, so it can't go through resolveBlockSource).\n *\n * `needsTransactions` defaults true (safe/unchanged) but the evaluator passes\n * `chainSubsNeedTransactions(chainSubs)` so a tick with no contract_call/deploy\n * trigger skips `walkTransactions` entirely — one fewer HTTP round trip and a\n * smaller `walkEvents` payload (no `tx_context` join) on every such tick.\n *\n * `httpClient` defaults to a fresh client (unchanged behavior) — pass one in\n * to reuse across calls. The evaluator's own long-lived loop does this so\n * `IndexHttpClient.waitIsSupported()` reflects what THIS\n * server actually supports instead of resetting every tick.\n */\nexport function buildChainBlockSource(\n\teventTypes: string[],\n\tneedsTransactions = true,\n\thttpClient: IndexHttpClient = buildHttpClient(),\n): BlockSource {\n\treturn new FallbackBlockSource(\n\t\tnew PublicApiBlockSource(\n\t\t\thttpClient,\n\t\t\teventTypes,\n\t\t\tundefined,\n\t\t\tneedsTransactions,\n\t\t),\n\t\tpostgresBlockSource,\n\t);\n}\n\nexport function buildHttpClient(): IndexHttpClient {\n\treturn createInternalIndexHttpClient();\n}\n\n/**\n * Resolve the block source for a subgraph. `SUBGRAPH_SOURCE=streams-index`\n * opts eligible subgraphs onto the public Streams clock + Index data.\n * Default stays on the Postgres tap.\n */\nexport async function resolveBlockSource(\n\tsubgraph?: SubgraphDefinition,\n): Promise<BlockSource> {\n\tif (\n\t\tprocess.env.SUBGRAPH_SOURCE === \"streams-index\" &&\n\t\tsubgraph &&\n\t\tisStreamsIndexEligible(subgraph)\n\t) {\n\t\t// Soft-depend on api: fall back to the Postgres tap per-call if the HTTP\n\t\t// plane is down, so the processor keeps advancing instead of stalling.\n\t\t// Both read the same feed, decided by the plane this source reads.\n\t\tconst feed =\n\t\t\t(await stateWriteFeed(subgraph, httpStateWritesCoverage())) ?? undefined;\n\t\treturn new FallbackBlockSource(\n\t\t\tnew PublicApiBlockSource(\n\t\t\t\tbuildHttpClient(),\n\t\t\t\treferencedIndexEventTypes(subgraph),\n\t\t\t\t// The sparse probe reads vm_events; a state_writes feed walks\n\t\t\t\t// every block instead of skipping on another table's rows.\n\t\t\t\tcanSparseScan(subgraph) && !feed\n\t\t\t\t\t? sparseProbeTargets(subgraph)\n\t\t\t\t\t: undefined,\n\t\t\t\tneedsTransactionData(subgraph),\n\t\t\t\tfeed,\n\t\t\t),\n\t\t\tpostgresSourceFor(feed ?? null),\n\t\t);\n\t}\n\tif (process.env.SUBGRAPH_SOURCE === \"streams-index\" && subgraph) {\n\t\tlogger.debug(\"Subgraph not streams-index eligible, using DB tap\", {\n\t\t\tsubgraph: subgraph.name,\n\t\t});\n\t}\n\treturn postgresSourceFor(await stateWriteFeed(subgraph));\n}\n",
|
|
17
|
+
"import type { Database } from \"@secondlayer/shared/db\";\nimport { stacksNetworkFromEnv } from \"@secondlayer/shared/db/queries/instance\";\nimport { type Kysely, sql } from \"kysely\";\nimport type {\n\tSubgraphDefinition,\n\tSubgraphSchema,\n\tSubgraphTable,\n} from \"../types.ts\";\nimport { validateSubgraphDefinition } from \"../validate.ts\";\nimport {\n\ttype SubgraphVerification,\n\tcomputePin,\n\tpinPreimage,\n} from \"../verification.ts\";\nimport {\n\tTYPE_MAP,\n\temitIndexedColumnIndexDDL,\n\temitTableDDL,\n\tgenerateSubgraphSQL,\n\ttableNeedsTrgm,\n} from \"./generator.ts\";\nimport { pgSchemaName } from \"./utils.ts\";\n\ntype AnyDb = Kysely<Database>;\n\n/** Deep-clone an object, converting BigInts to strings for JSON serialization. */\nfunction toJsonSafe(obj: unknown): unknown {\n\treturn JSON.parse(\n\t\tJSON.stringify(obj, (_key, value) =>\n\t\t\ttypeof value === \"bigint\" ? value.toString() : value,\n\t\t),\n\t);\n}\n\n/** Tables added, removed, or changed between two schemas. */\nexport interface TableDiff {\n\t/** Tables added to the schema */\n\taddedTables: string[];\n\t/** Tables removed from the schema */\n\tremovedTables: string[];\n\t/** Per-table column diffs (only for tables present in both) */\n\ttables: Record<string, ColumnDiff>;\n\t/** Per-table uniqueKeys / composite-index diffs (tables present in both) */\n\tconstraints: Record<string, ConstraintDiff>;\n}\n\nexport interface ColumnDiff {\n\tadded: string[];\n\tremoved: string[];\n\t/** Data-shape changes (type/nullable/default) — breaking. */\n\tchanged: string[];\n\t/** Only the `indexed`/`search` flags differ — index DDL, never a rebuild. */\n\tindexChanged: string[];\n}\n\nexport interface ConstraintDiff {\n\t/** New uniqueKeys entries → `ALTER TABLE … ADD CONSTRAINT` (additive). */\n\taddedUniqueKeys: string[][];\n\t/** Removed uniqueKeys entries — breaking: handler upserts may target them. */\n\tremovedUniqueKeys: string[][];\n\t/** New composite `indexes` entries → CREATE INDEX (additive). */\n\taddedIndexes: string[][];\n\t/** Removed composite `indexes` entries → DROP INDEX (additive). */\n\tremovedIndexes: string[][];\n}\n\n/** Column identity minus the index flags: what actually shapes stored data. */\nfunction columnDataShape(col: unknown): string {\n\tconst { indexed, search, ...rest } = (col ?? {}) as Record<string, unknown>;\n\treturn JSON.stringify(rest, Object.keys(rest).sort());\n}\n\n/** Diff two `string[][]` lists (uniqueKeys / indexes) by column-list value. */\nfunction diffKeyLists(\n\texisting: readonly (readonly string[])[] | undefined,\n\tincoming: readonly (readonly string[])[] | undefined,\n): { added: string[][]; removed: string[][] } {\n\tconst key = (cols: readonly string[]) => JSON.stringify(cols);\n\tconst existingSet = new Set((existing ?? []).map(key));\n\tconst incomingSet = new Set((incoming ?? []).map(key));\n\treturn {\n\t\tadded: (incoming ?? [])\n\t\t\t.filter((cols) => !existingSet.has(key(cols)))\n\t\t\t.map((cols) => [...cols]),\n\t\tremoved: (existing ?? [])\n\t\t\t.filter((cols) => !incomingSet.has(key(cols)))\n\t\t\t.map((cols) => [...cols]),\n\t};\n}\n\n/**\n * Compare two multi-table subgraph schemas and return differences.\n *\n * Index-only changes (`indexed`/`search` flags, composite `indexes`) are\n * reported separately from data-shape changes: an index never requires a\n * rebuild, so it must never land in `changed`/breaking — flipping\n * `indexed: true` on a populated column used to cost a full reindex.\n */\nexport function diffSchema(\n\texisting: SubgraphSchema,\n\tincoming: SubgraphSchema,\n): TableDiff {\n\tconst existingTables = new Set(Object.keys(existing));\n\tconst incomingTables = new Set(Object.keys(incoming));\n\n\tconst addedTables = [...incomingTables].filter((t) => !existingTables.has(t));\n\tconst removedTables = [...existingTables].filter(\n\t\t(t) => !incomingTables.has(t),\n\t);\n\n\tconst tables: Record<string, ColumnDiff> = {};\n\tconst constraints: Record<string, ConstraintDiff> = {};\n\tfor (const tableName of incomingTables) {\n\t\tif (!existingTables.has(tableName)) continue;\n\t\tconst existingTable = existing[tableName];\n\t\tconst incomingTable = incoming[tableName];\n\t\tconst existingCols = existingTable?.columns;\n\t\tconst incomingCols = incomingTable?.columns;\n\n\t\tconst existingKeys = new Set(Object.keys(existingCols));\n\t\tconst incomingKeys = new Set(Object.keys(incomingCols));\n\t\tconst common = [...incomingKeys].filter((k) => existingKeys.has(k));\n\n\t\tconst sortedStringify = (o: unknown) =>\n\t\t\tJSON.stringify(o, Object.keys(o as object).sort());\n\n\t\ttables[tableName] = {\n\t\t\tadded: [...incomingKeys].filter((k) => !existingKeys.has(k)),\n\t\t\tremoved: [...existingKeys].filter((k) => !incomingKeys.has(k)),\n\t\t\tchanged: common.filter(\n\t\t\t\t(k) =>\n\t\t\t\t\tcolumnDataShape(existingCols[k]) !== columnDataShape(incomingCols[k]),\n\t\t\t),\n\t\t\tindexChanged: common.filter(\n\t\t\t\t(k) =>\n\t\t\t\t\tcolumnDataShape(existingCols[k]) ===\n\t\t\t\t\t\tcolumnDataShape(incomingCols[k]) &&\n\t\t\t\t\tsortedStringify(existingCols[k]) !== sortedStringify(incomingCols[k]),\n\t\t\t),\n\t\t};\n\n\t\tconst uq = diffKeyLists(\n\t\t\texistingTable?.uniqueKeys,\n\t\t\tincomingTable?.uniqueKeys,\n\t\t);\n\t\tconst ix = diffKeyLists(existingTable?.indexes, incomingTable?.indexes);\n\t\tconstraints[tableName] = {\n\t\t\taddedUniqueKeys: uq.added,\n\t\t\tremovedUniqueKeys: uq.removed,\n\t\t\taddedIndexes: ix.added,\n\t\t\tremovedIndexes: ix.removed,\n\t\t};\n\t}\n\n\treturn { addedTables, removedTables, tables, constraints };\n}\n\n/**\n * Tells whether a schema diff is breaking, with the reasons.\n *\n * Breaking means removed tables, removed columns, changed column types or\n * removed `uniqueKeys`, which handler upserts conflict on. Index-flag and\n * composite-index changes are never breaking.\n */\nexport function hasBreakingChanges(diff: TableDiff): {\n\tbreaking: boolean;\n\treasons: string[];\n} {\n\tconst reasons: string[] = [];\n\tif (diff.removedTables.length > 0) {\n\t\treasons.push(`removed tables: [${diff.removedTables.join(\", \")}]`);\n\t}\n\tfor (const [table, colDiff] of Object.entries(diff.tables)) {\n\t\tif (colDiff.removed.length > 0) {\n\t\t\treasons.push(`${table}: removed columns [${colDiff.removed.join(\", \")}]`);\n\t\t}\n\t\tif (colDiff.changed.length > 0) {\n\t\t\treasons.push(`${table}: changed columns [${colDiff.changed.join(\", \")}]`);\n\t\t}\n\t}\n\tfor (const [table, conDiff] of Object.entries(diff.constraints ?? {})) {\n\t\tif (conDiff.removedUniqueKeys.length > 0) {\n\t\t\treasons.push(\n\t\t\t\t`${table}: removed uniqueKeys [${conDiff.removedUniqueKeys\n\t\t\t\t\t.map((cols) => `(${cols.join(\", \")})`)\n\t\t\t\t\t.join(\", \")}]`,\n\t\t\t);\n\t\t}\n\t}\n\treturn { breaking: reasons.length > 0, reasons };\n}\n\n/** Increment the patch segment of a semver string. \"1.0.2\" → \"1.0.3\" */\nfunction bumpPatch(version: string): string {\n\tconst parts = version.split(\".\");\n\tif (parts.length !== 3) return \"1.0.1\";\n\tconst patch = Number.parseInt(parts[2] ?? \"0\", 10);\n\treturn `${parts[0]}.${parts[1]}.${Number.isNaN(patch) ? 1 : patch + 1}`;\n}\n\n/** The tables and columns a deploy adds, removes, or breaks. */\nexport interface DeployDiff {\n\taddedTables: string[];\n\tremovedTables: string[];\n\taddedColumns: Record<string, string[]>;\n\tbreakingChanges: string[];\n\t/** Columns whose only change was the `indexed`/`search` flag (index DDL applied in place). */\n\tindexChanges?: Record<string, string[]>;\n\t/** uniqueKeys added in place via ALTER TABLE … ADD CONSTRAINT. */\n\taddedUniqueKeys?: Record<string, string[][]>;\n}\n\n/**\n * Map a raw `TableDiff` (+ breaking reasons) into the wire `DeployDiff`. `null`\n * diff (e.g. same-hash force reindex, where no schema diff exists) → empty\n * added/removed/columns with reasons preserved. Single source for both the\n * non-refuse \"reindexed\" result and the refuse-path error payload.\n */\nfunction toDeployDiff(diff: TableDiff | null, reasons: string[]): DeployDiff {\n\treturn {\n\t\taddedTables: diff?.addedTables ?? [],\n\t\tremovedTables: diff?.removedTables ?? [],\n\t\taddedColumns: diff\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries(diff.tables)\n\t\t\t\t\t\t.filter(([, c]) => c.added.length > 0)\n\t\t\t\t\t\t.map(([t, c]) => [t, c.added]),\n\t\t\t\t)\n\t\t\t: {},\n\t\tbreakingChanges: reasons,\n\t};\n}\n\n/** The schema name and SQL a deploy will run. */\nexport interface DeployPlan {\n\tschemaName: string;\n\t/** `DROP SCHEMA … CASCADE` a destructive rebuild would run first. */\n\tdropStatement: string;\n\t/** DDL the deploy will run. */\n\tstatements: string[];\n}\n\n/**\n * Render the DDL a deploy would run, without executing.\n * Powers `--dry-run`: the user reviews exactly what a deploy does first.\n */\nexport function renderDeployPlan(\n\tdef: SubgraphDefinition,\n\tschemaName?: string,\n): DeployPlan {\n\tvalidateSubgraphDefinition(def);\n\tconst { statements } = generateSubgraphSQL(def, schemaName);\n\tconst schema = schemaName ?? pgSchemaName(def.name);\n\tconst dropStatement = `DROP SCHEMA IF EXISTS \"${schema}\" CASCADE;`;\n\treturn { schemaName: schema, dropStatement, statements };\n}\n\n/**\n * Deploys a subgraph schema to the database.\n *\n * A new subgraph gets its schema and tables created and registered. The same\n * schema hash only updates the handler path. An additive change adds columns\n * and tables in place, and a breaking change reindexes by dropping and\n * recreating the tables.\n */\nexport async function deploySchema(\n\tdb: AnyDb,\n\tdef: SubgraphDefinition,\n\thandlerPath: string,\n\topts?: {\n\t\tforceReindex?: boolean;\n\t\tapiKeyId?: string;\n\t\taccountId?: string;\n\t\tschemaName?: string;\n\t\thandlerCode?: string;\n\t\tsourceCode?: string;\n\t\t/** Derived level to store (see `deriveVerification`). */\n\t\tverification?: SubgraphVerification;\n\t\t/** Network baked into the pin. Defaults to `NETWORK`, then mainnet. */\n\t\tnetwork?: string;\n\t},\n): Promise<{\n\taction: \"created\" | \"unchanged\" | \"handler_updated\" | \"updated\" | \"reindexed\";\n\tsubgraphId: string;\n\tversion: string;\n\t/** Present when the deploy carried a bundled handler. */\n\tpin?: string;\n\tdiff?: DeployDiff;\n\t/** Non-fatal caveats the caller should surface (e.g. handler grafts at tip). */\n\twarnings?: string[];\n}> {\n\tvalidateSubgraphDefinition(def);\n\n\tconst { statements, hash } = generateSubgraphSQL(def, opts?.schemaName);\n\t// Only a bundled handler is pinnable: a local deploy runs the source file\n\t// in place, so there are no stored bytes for anyone to rebuild and compare.\n\tconst pinInput =\n\t\topts?.handlerCode != null\n\t\t\t? {\n\t\t\t\t\tschemaHash: hash,\n\t\t\t\t\thandlerCode: opts.handlerCode,\n\t\t\t\t\tstartBlock: def.startBlock,\n\t\t\t\t\tnetwork: opts.network ?? stacksNetworkFromEnv(),\n\t\t\t\t}\n\t\t\t: null;\n\tconst pin = pinInput ? computePin(pinInput) : null;\n\t// Stored beside the pin so a client can recompute it: network and runtime\n\t// are recorded nowhere else.\n\tconst preimage = pinInput ? pinPreimage(pinInput) : null;\n\tconst identity = pin ? { pin } : {};\n\tconst { getSubgraph, registerSubgraph } = await import(\n\t\t\"@secondlayer/shared/db/queries/subgraphs\"\n\t);\n\n\tconst ddlDb = db;\n\n\tconst existing = await getSubgraph(db, def.name, opts?.accountId);\n\n\tconst schemaName = opts?.schemaName ?? pgSchemaName(def.name);\n\n\t// Server owns versioning: bump patch from existing, or start at 1.0.0\n\tconst newVersion = existing ? bumpPatch(existing.version) : \"1.0.0\";\n\n\tconst regData = {\n\t\tname: def.name,\n\t\tversion: newVersion,\n\t\tdefinition: toJsonSafe({\n\t\t\tname: def.name,\n\t\t\tdescription: def.description,\n\t\t\tstartBlock: def.startBlock,\n\t\t\tsources: def.sources,\n\t\t\tschema: def.schema,\n\t\t}) as Record<string, unknown>,\n\t\tschemaHash: hash,\n\t\thandlerPath,\n\t\tapiKeyId: opts?.apiKeyId,\n\t\taccountId: opts?.accountId,\n\t\thandlerCode: opts?.handlerCode,\n\t\tsourceCode: opts?.sourceCode,\n\t\tschemaName,\n\t\tstartBlock: def.startBlock,\n\t\tpin,\n\t\tpinPreimage: preimage,\n\t\tverification: opts?.verification ?? null,\n\t};\n\n\tif (existing) {\n\t\t// Guard against zombie rows: registry entry exists but PG schema was dropped\n\t\t// (e.g. partial delete or manual cleanup). Treat as a new subgraph.\n\t\tconst schemaExists = await sql<{ exists: boolean }>`\n\t\t\tSELECT EXISTS (\n\t\t\t\tSELECT 1 FROM information_schema.schemata\n\t\t\t\tWHERE schema_name = ${schemaName}\n\t\t\t) AS \"exists\"\n\t\t`\n\t\t\t.execute(ddlDb)\n\t\t\t.then((r) => r.rows[0]?.exists ?? false);\n\n\t\tif (!schemaExists) {\n\t\t\tfor (const stmt of statements) {\n\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t}\n\t\t\tconst sg = await registerSubgraph(db, regData);\n\t\t\treturn {\n\t\t\t\taction: \"reindexed\",\n\t\t\t\tsubgraphId: sg.id,\n\t\t\t\tversion: newVersion,\n\t\t\t\t...identity,\n\t\t\t};\n\t\t}\n\n\t\tif (existing.schema_hash === hash && !opts?.forceReindex) {\n\t\t\t// Update handler path and code in case file moved or handler changed.\n\t\t\tconst handlerChanged =\n\t\t\t\topts?.handlerCode != null && opts.handlerCode !== existing.handler_code;\n\t\t\tconst { updateSubgraphHandlerPath } = await import(\n\t\t\t\t\"@secondlayer/shared/db/queries/subgraphs\"\n\t\t\t);\n\t\t\tawait updateSubgraphHandlerPath(db, def.name, handlerPath, {\n\t\t\t\thandlerCode: opts?.handlerCode,\n\t\t\t\tsourceCode: opts?.sourceCode,\n\t\t\t\tpin,\n\t\t\t\tpinPreimage: preimage,\n\t\t\t\tverification: opts?.verification ?? null,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\taction: handlerChanged ? \"handler_updated\" : \"unchanged\",\n\t\t\t\tsubgraphId: existing.id,\n\t\t\t\tversion: existing.version,\n\t\t\t\t...identity,\n\t\t\t\t// A handler-only change takes effect from the CURRENT tip: rows\n\t\t\t\t// already indexed keep the old handler's output. Silent until now —\n\t\t\t\t// say it, and name the fix.\n\t\t\t\t...(handlerChanged\n\t\t\t\t\t? {\n\t\t\t\t\t\t\twarnings: [\n\t\t\t\t\t\t\t\t\"handler changed but schema did not: new logic applies from the current tip only. \" +\n\t\t\t\t\t\t\t\t\t\"Rows already indexed were computed by the previous handler. \" +\n\t\t\t\t\t\t\t\t\t\"To recompute history, redeploy with --reindex (or backfill a range).\",\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t}\n\n\t\tif (existing.schema_hash === hash && opts?.forceReindex) {\n\t\t\t// Same schema but force reindex requested — drop and recreate.\n\t\t\tawait sql\n\t\t\t\t.raw(`DROP SCHEMA IF EXISTS \"${schemaName}\" CASCADE`)\n\t\t\t\t.execute(ddlDb);\n\t\t\tfor (const stmt of statements) {\n\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t}\n\t\t\tconst sg = await registerSubgraph(db, regData);\n\t\t\treturn {\n\t\t\t\taction: \"reindexed\",\n\t\t\t\tsubgraphId: sg.id,\n\t\t\t\tversion: newVersion,\n\t\t\t\t...identity,\n\t\t\t};\n\t\t}\n\n\t\tif (existing.definition.schema) {\n\t\t\tconst diff = diffSchema(\n\t\t\t\texisting.definition.schema as SubgraphSchema,\n\t\t\t\tdef.schema,\n\t\t\t);\n\t\t\tconst { breaking, reasons } = hasBreakingChanges(diff);\n\n\t\t\tif (breaking || opts?.forceReindex) {\n\t\t\t\t// Breaking change or forced: drop schema, recreate, register\n\t\t\t\tawait sql\n\t\t\t\t\t.raw(`DROP SCHEMA IF EXISTS \"${schemaName}\" CASCADE`)\n\t\t\t\t\t.execute(ddlDb);\n\t\t\t\tfor (const stmt of statements) {\n\t\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t\t}\n\t\t\t\tconst sg = await registerSubgraph(db, regData);\n\t\t\t\tconst deployDiff = toDeployDiff(diff, reasons);\n\t\t\t\treturn {\n\t\t\t\t\taction: \"reindexed\",\n\t\t\t\t\tsubgraphId: sg.id,\n\t\t\t\t\tversion: newVersion,\n\t\t\t\t\t...identity,\n\t\t\t\t\tdiff: deployDiff,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Create new tables using the SAME per-table emitter as the full\n\t\t\t// generator, so an additively-created table gets its UNIQUE constraints,\n\t\t\t// composite indexes, column defaults, and FKs — not just the bare columns.\n\t\t\t// (A missing UNIQUE here previously made a handler upsert ON CONFLICT fail\n\t\t\t// at runtime on additively-added tables.)\n\t\t\tconst addedDefs = diff.addedTables\n\t\t\t\t.map((tableName) => ({ tableName, tableDef: def.schema[tableName] }))\n\t\t\t\t.filter(\n\t\t\t\t\t(t): t is { tableName: string; tableDef: SubgraphTable } =>\n\t\t\t\t\t\tt.tableDef !== undefined,\n\t\t\t\t);\n\n\t\t\t// pg_trgm must exist before any search-column GIN index on the new tables.\n\t\t\tif (addedDefs.some(({ tableDef }) => tableNeedsTrgm(tableDef))) {\n\t\t\t\tawait sql.raw(\"CREATE EXTENSION IF NOT EXISTS pg_trgm\").execute(ddlDb);\n\t\t\t}\n\t\t\tfor (const { tableName, tableDef } of addedDefs) {\n\t\t\t\tfor (const stmt of emitTableDDL(schemaName, tableName, tableDef)) {\n\t\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Add columns to existing tables\n\t\t\tfor (const [tableName, colDiff] of Object.entries(diff.tables)) {\n\t\t\t\tif (colDiff.added.length === 0) continue;\n\t\t\t\tconst qualifiedName = `${schemaName}.${tableName}`;\n\t\t\t\tconst tableDef = def.schema[tableName];\n\t\t\t\tif (!tableDef) continue;\n\t\t\t\tfor (const colName of colDiff.added) {\n\t\t\t\t\tconst col = tableDef.columns[colName];\n\t\t\t\t\tif (!col) continue;\n\t\t\t\t\tconst sqlType = TYPE_MAP[col.type];\n\t\t\t\t\tif (!sqlType) continue;\n\t\t\t\t\tconst nullable = col.nullable\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: ` NOT NULL DEFAULT ${getDefault(col.type)}`;\n\t\t\t\t\tawait sql\n\t\t\t\t\t\t.raw(\n\t\t\t\t\t\t\t`ALTER TABLE ${qualifiedName} ADD COLUMN ${colName} ${sqlType}${nullable}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t\tif (col.indexed) {\n\t\t\t\t\t\tfor (const stmt of emitIndexedColumnIndexDDL(\n\t\t\t\t\t\t\tschemaName,\n\t\t\t\t\t\t\ttableName,\n\t\t\t\t\t\t\tcolName,\n\t\t\t\t\t\t).create) {\n\t\t\t\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (col.search) {\n\t\t\t\t\t\tawait sql\n\t\t\t\t\t\t\t.raw(\n\t\t\t\t\t\t\t\t`CREATE INDEX IF NOT EXISTS idx_${schemaName}_${tableName}_${colName}_trgm ON ${qualifiedName} USING gin (${colName} gin_trgm_ops)`,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Index-flag flips on EXISTING (populated) columns: pure index DDL,\n\t\t\t// applied in place. CONCURRENTLY because the table has data and this\n\t\t\t// runs outside a transaction (autocommit per statement) — a plain\n\t\t\t// CREATE INDEX would take a write lock for the whole build.\n\t\t\tconst existingSchema = existing.definition.schema as SubgraphSchema;\n\t\t\tconst flagFlips: Record<string, string[]> = {};\n\t\t\tconst needsTrgmForFlips = Object.entries(diff.tables).some(\n\t\t\t\t([tableName, colDiff]) =>\n\t\t\t\t\tcolDiff.indexChanged.some(\n\t\t\t\t\t\t(colName) =>\n\t\t\t\t\t\t\tdef.schema[tableName]?.columns[colName]?.search &&\n\t\t\t\t\t\t\t!existingSchema[tableName]?.columns[colName]?.search,\n\t\t\t\t\t),\n\t\t\t);\n\t\t\tif (needsTrgmForFlips) {\n\t\t\t\tawait sql.raw(\"CREATE EXTENSION IF NOT EXISTS pg_trgm\").execute(ddlDb);\n\t\t\t}\n\t\t\tfor (const [tableName, colDiff] of Object.entries(diff.tables)) {\n\t\t\t\tif (colDiff.indexChanged.length === 0) continue;\n\t\t\t\tflagFlips[tableName] = colDiff.indexChanged;\n\t\t\t\tconst qualifiedName = `${schemaName}.${tableName}`;\n\t\t\t\tfor (const colName of colDiff.indexChanged) {\n\t\t\t\t\tconst was = existingSchema[tableName]?.columns[colName];\n\t\t\t\t\tconst now = def.schema[tableName]?.columns[colName];\n\t\t\t\t\tif (!now) continue;\n\t\t\t\t\tconst trgmIdx = `idx_${schemaName}_${tableName}_${colName}_trgm`;\n\t\t\t\t\tconst indexedIdx = emitIndexedColumnIndexDDL(\n\t\t\t\t\t\tschemaName,\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tcolName,\n\t\t\t\t\t\t{ concurrently: true },\n\t\t\t\t\t);\n\t\t\t\t\tif (now.indexed && !was?.indexed) {\n\t\t\t\t\t\tfor (const stmt of indexedIdx.create) {\n\t\t\t\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!now.indexed && was?.indexed) {\n\t\t\t\t\t\tfor (const stmt of indexedIdx.drop) {\n\t\t\t\t\t\t\tawait sql.raw(stmt).execute(ddlDb);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (now.search && !was?.search) {\n\t\t\t\t\t\tawait sql\n\t\t\t\t\t\t\t.raw(\n\t\t\t\t\t\t\t\t`CREATE INDEX CONCURRENTLY IF NOT EXISTS ${trgmIdx} ON ${qualifiedName} USING gin (${colName} gin_trgm_ops)`,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t\t} else if (!now.search && was?.search) {\n\t\t\t\t\t\tawait sql\n\t\t\t\t\t\t\t.raw(`DROP INDEX CONCURRENTLY IF EXISTS ${schemaName}.${trgmIdx}`)\n\t\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// uniqueKeys additions: ADD CONSTRAINT in place (idempotent via\n\t\t\t// pg_constraint check — Postgres has no ADD CONSTRAINT IF NOT EXISTS).\n\t\t\t// Removals never reach here: hasBreakingChanges classifies them\n\t\t\t// breaking, which lands in the reindex branch above.\n\t\t\tconst addedUq: Record<string, string[][]> = {};\n\t\t\tfor (const [tableName, conDiff] of Object.entries(diff.constraints)) {\n\t\t\t\tconst qualifiedName = `${schemaName}.${tableName}`;\n\t\t\t\tfor (const cols of conDiff.addedUniqueKeys) {\n\t\t\t\t\tconst constraintName = `uq_${schemaName}_${tableName}_${cols.join(\"_\")}`;\n\t\t\t\t\tconst exists = await sql<{ exists: boolean }>`\n\t\t\t\t\t\tSELECT EXISTS (\n\t\t\t\t\t\t\tSELECT 1 FROM pg_constraint\n\t\t\t\t\t\t\tWHERE conname = ${constraintName}\n\t\t\t\t\t\t) AS \"exists\"\n\t\t\t\t\t`\n\t\t\t\t\t\t.execute(ddlDb)\n\t\t\t\t\t\t.then((r) => r.rows[0]?.exists ?? false);\n\t\t\t\t\tif (!exists) {\n\t\t\t\t\t\tawait sql\n\t\t\t\t\t\t\t.raw(\n\t\t\t\t\t\t\t\t`ALTER TABLE ${qualifiedName} ADD CONSTRAINT ${constraintName} UNIQUE (${cols.join(\", \")})`,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t\t}\n\t\t\t\t\taddedUq[tableName] = [...(addedUq[tableName] ?? []), cols];\n\t\t\t\t}\n\t\t\t\t// Composite indexes: additive both ways. Names are positional in the\n\t\t\t\t// incoming schema; a reordered (unchanged-value) entry keeps its old\n\t\t\t\t// positionally-derived name, which is harmless.\n\t\t\t\tfor (const cols of conDiff.addedIndexes) {\n\t\t\t\t\tconst i = (def.schema[tableName]?.indexes ?? []).findIndex(\n\t\t\t\t\t\t(entry) => JSON.stringify(entry) === JSON.stringify(cols),\n\t\t\t\t\t);\n\t\t\t\t\tconst idxName = `idx_${schemaName}_${tableName}_composite_${i}`;\n\t\t\t\t\tawait sql\n\t\t\t\t\t\t.raw(\n\t\t\t\t\t\t\t`CREATE INDEX CONCURRENTLY IF NOT EXISTS ${idxName} ON ${qualifiedName} (${cols.join(\", \")})`,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t}\n\t\t\t\tfor (const cols of conDiff.removedIndexes) {\n\t\t\t\t\tconst i = (existingSchema[tableName]?.indexes ?? []).findIndex(\n\t\t\t\t\t\t(entry) => JSON.stringify(entry) === JSON.stringify(cols),\n\t\t\t\t\t);\n\t\t\t\t\tif (i < 0) continue;\n\t\t\t\t\tconst idxName = `idx_${schemaName}_${tableName}_composite_${i}`;\n\t\t\t\t\tawait sql\n\t\t\t\t\t\t.raw(`DROP INDEX CONCURRENTLY IF EXISTS ${schemaName}.${idxName}`)\n\t\t\t\t\t\t.execute(ddlDb);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst sg = await registerSubgraph(db, regData);\n\t\t\tconst addedCols: Record<string, string[]> = {};\n\t\t\tfor (const [t, colDiff] of Object.entries(diff.tables)) {\n\t\t\t\tif ((colDiff as ColumnDiff).added.length > 0)\n\t\t\t\t\taddedCols[t] = (colDiff as ColumnDiff).added;\n\t\t\t}\n\t\t\tconst deployDiff: DeployDiff = {\n\t\t\t\taddedTables: diff.addedTables,\n\t\t\t\tremovedTables: [],\n\t\t\t\taddedColumns: addedCols,\n\t\t\t\tbreakingChanges: [],\n\t\t\t\t...(Object.keys(flagFlips).length > 0\n\t\t\t\t\t? { indexChanges: flagFlips }\n\t\t\t\t\t: {}),\n\t\t\t\t...(Object.keys(addedUq).length > 0\n\t\t\t\t\t? { addedUniqueKeys: addedUq }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t\treturn {\n\t\t\t\taction: \"updated\",\n\t\t\t\tsubgraphId: sg.id,\n\t\t\t\tversion: newVersion,\n\t\t\t\t...identity,\n\t\t\t\tdiff: deployDiff,\n\t\t\t};\n\t\t}\n\t}\n\n\t// New subgraph — execute all DDL\n\tfor (const stmt of statements) {\n\t\tawait sql.raw(stmt).execute(ddlDb);\n\t}\n\n\tconst sg = await registerSubgraph(db, regData);\n\treturn {\n\t\taction: \"created\",\n\t\tsubgraphId: sg.id,\n\t\tversion: newVersion,\n\t\t...identity,\n\t};\n}\n\nfunction getDefault(type: string): string {\n\tswitch (type) {\n\t\tcase \"text\":\n\t\tcase \"principal\":\n\t\t\treturn \"''\";\n\t\tcase \"uint\":\n\t\tcase \"int\":\n\t\t\treturn \"0\";\n\t\tcase \"boolean\":\n\t\t\treturn \"false\";\n\t\tcase \"timestamp\":\n\t\t\treturn \"NOW()\";\n\t\tcase \"jsonb\":\n\t\t\treturn \"'{}'\";\n\t\tdefault:\n\t\t\treturn \"''\";\n\t}\n}\n",
|
|
18
|
+
"import { getSourceDb } from \"@secondlayer/shared/db\";\nimport type { Transaction } from \"@secondlayer/shared/db\";\nimport { resolveChainTip } from \"@secondlayer/shared/db/queries/integrity\";\nimport {\n\tBillingPausedError,\n\ttype IndexEventRow,\n\ttype IndexHttpClient,\n\ttype IndexStateWriteRow,\n\ttype IndexTransactionRow,\n\tcreateInternalIndexHttpClient,\n} from \"@secondlayer/shared/index-http\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport type { SubgraphDefinition, SubgraphFilter } from \"../types.ts\";\nimport { deriveVerification } from \"../verification.ts\";\nimport {\n\ttype BlockData,\n\ttype StateWriteFeed,\n\tloadBlockRange,\n\tstateWriteBlocks,\n} from \"./batch-loader.ts\";\nimport { runsInRealm } from \"./realm.ts\";\nimport {\n\treconstructBlock,\n\treconstructEvent,\n\treconstructTransaction,\n\treconstructTxFromEventRow,\n} from \"./reconstruct.ts\";\nimport type { TxRecord } from \"./source-matcher.ts\";\nimport type { StateWriteRow } from \"./state-writes.ts\";\n\n/**\n * Where the subgraph runtime reads canonical chain data. Today it taps the\n * indexer Postgres directly (`PostgresBlockSource`); the re-point adds a\n * `PublicApiBlockSource` that consumes the Streams clock + Index data over\n * HTTP. `matchSources` / handlers / flush are unchanged — only the\n * loader + tip swap behind this seam.\n */\nexport interface BlockSource {\n\t/**\n\t * Highest canonical block height available to process.\n\t *\n\t * `opts` is an HTTP-plane long-poll hint, ignored by any\n\t * source with no such notion (the Postgres tap: a local DB read is already\n\t * instant, nothing to wait on). `knownHeight` is the last tip THIS caller\n\t * observed; passing `wait` without it is a no-op — the server needs a\n\t * baseline to decide whether anything has changed.\n\t */\n\tgetTip(opts?: { wait?: number; knownHeight?: number }): Promise<number>;\n\t/** Canonical block data for [fromHeight, toHeight], keyed by height. */\n\tloadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>>;\n\t/** Sparse-scan probe: lowest height in (afterHeight, untilHeight] holding\n\t * an event this source's subgraph could match, or null when the rest of\n\t * the range is empty. Optional — only event-scoped sources support it. */\n\tnextDataHeight?(\n\t\tafterHeight: number,\n\t\tuntilHeight: number,\n\t): Promise<number | null>;\n\t/**\n\t * Per-decoder committed heights from the SAME response `getTip()` just\n\t * fetched (no extra request) — undefined for a source with no such notion\n\t * (the Postgres tap: local mode reads `decoder_checkpoints` directly and\n\t * never needs this). Lets a caller (the chain evaluator) narrow its own\n\t * bound to the decoders it actually reads instead of `getTip()`'s\n\t * conservative cross-decoder floor. Call AFTER `getTip()`.\n\t */\n\tgetDecodedHeights?(): Record<string, number | null> | undefined;\n}\n\n/** A (decoded event type, optional contract scope) pair the sparse probe\n * checks. Contract scoping is what makes token-subgraph reindexes leap over\n * everything that isn't their token. */\nexport type SparseProbeTarget = { eventType: string; contractId?: string };\n\n/**\n * Tells whether a subgraph can skip blocks without its events.\n *\n * Sparse scanning is sound only when every source is an event-type filter. A\n * `contract_call` or `contract_deploy` source matches transactions, which the\n * event probe cannot see.\n */\nexport function canSparseScan(subgraph: SubgraphDefinition): boolean {\n\tif (Array.isArray(subgraph.sources)) return false;\n\tconst filters = sourceFilters(subgraph);\n\tif (filters.length === 0) return false;\n\treturn filters.every((f) => Boolean(EVENT_FILTER_TO_INDEX_TYPE[f.type]));\n}\n\n/** Most contracts one filter may pin before it is treated as unscoped (the\n * Index list-filter ceiling; beyond it a per-contract walk fan-out costs more\n * than it saves). */\nconst MAX_PINNED_CONTRACTS = 20;\n\n/**\n * Concrete contract ids a filter pins, or null when it pins none the Index can\n * be asked for. Wildcards, trait scope and factory scope resolve per block\n * against registry state the Index cannot see, so they stay unscoped: scoping\n * them would change which events a handler receives.\n */\nfunction pinnedContracts(filter: SubgraphFilter): string[] | null {\n\tconst f = filter as {\n\t\tcontractId?: string | readonly string[];\n\t\tassetIdentifier?: string;\n\t\ttrait?: unknown;\n\t\tfactory?: unknown;\n\t};\n\tif (f.trait || f.factory) return null;\n\tconst ids = Array.isArray(f.contractId)\n\t\t? [...f.contractId]\n\t\t: f.contractId\n\t\t\t? [f.contractId as string]\n\t\t\t: f.assetIdentifier\n\t\t\t\t? [f.assetIdentifier.split(\"::\")[0] as string]\n\t\t\t\t: [];\n\tif (ids.length === 0 || ids.length > MAX_PINNED_CONTRACTS) return null;\n\tif (ids.some((id) => !id || id.includes(\"*\"))) return null;\n\treturn ids;\n}\n\n/**\n * Lists the event types and contract scopes a subgraph's filters match.\n *\n * Each target is a decoded event type with an optional contract scope. One\n * function feeds both the sparse probe and the event walks, so a new\n * contract-pinning filter field is added here once.\n *\n * Per event type: if ANY filter for it is unscoped, a single unscoped target\n * covers everything (today's behavior); otherwise one target per distinct\n * pinned contract.\n */\nexport function sparseProbeTargets(\n\tsubgraph: SubgraphDefinition,\n): SparseProbeTarget[] {\n\tconst byType = new Map<string, Set<string> | \"all\">();\n\tfor (const f of sourceFilters(subgraph)) {\n\t\tconst eventType = EVENT_FILTER_TO_INDEX_TYPE[f.type];\n\t\tif (!eventType) continue;\n\t\tconst pinned = pinnedContracts(f);\n\t\tconst prev = byType.get(eventType);\n\t\tif (!pinned || prev === \"all\") {\n\t\t\tbyType.set(eventType, \"all\");\n\t\t\tcontinue;\n\t\t}\n\t\tconst set = prev ?? new Set<string>();\n\t\tfor (const id of pinned) set.add(id);\n\t\tbyType.set(eventType, set);\n\t}\n\tconst targets: SparseProbeTarget[] = [];\n\tfor (const [eventType, scope] of byType) {\n\t\tif (scope === \"all\") targets.push({ eventType });\n\t\telse\n\t\t\tfor (const contractId of scope) targets.push({ eventType, contractId });\n\t}\n\treturn targets;\n}\n\n/** Lowest height this instance holds `state_writes` for; null when none. */\nexport type StateWritesCoverage = () => Promise<number | null>;\n\n/** How long a coverage answer is reused. Coverage only appears (the node\n * starts delivering `state_writes`) or reaches lower (a backfill). */\nconst COVERAGE_TTL_MS = 60_000;\n\n/** A coverage read cached per process; `forget` drops the cached answer. */\nexport type CachedCoverage = StateWritesCoverage & { forget(): void };\n\n/** Cache a coverage read per process; a failed read counts as no coverage. */\nexport function cachedCoverage(\n\tread: () => Promise<number | null>,\n\tttlMs: number = COVERAGE_TTL_MS,\n): CachedCoverage {\n\tlet cached: { at: number; value: Promise<number | null> } | undefined;\n\tconst coverage = () => {\n\t\tconst now = Date.now();\n\t\tif (!cached || now - cached.at > ttlMs) {\n\t\t\tcached = { at: now, value: read().catch(() => null) };\n\t\t}\n\t\treturn cached.value;\n\t};\n\treturn Object.assign(coverage, {\n\t\tforget: () => {\n\t\t\tcached = undefined;\n\t\t},\n\t});\n}\n\n/** The DB tap's coverage: the lowest `state_writes` height, one PK probe. */\nexport const dbStateWritesCoverage: CachedCoverage = cachedCoverage(\n\tasync () => {\n\t\tconst row = await getSourceDb()\n\t\t\t.selectFrom(\"state_writes\")\n\t\t\t.select(\"block_height\")\n\t\t\t.orderBy(\"block_height\", \"asc\")\n\t\t\t.limit(1)\n\t\t\t.executeTakeFirst();\n\t\treturn row ? Number(row.block_height) : null;\n\t},\n);\n\nlet httpCoverage: StateWritesCoverage | undefined;\n/** The Index API's coverage: the first `/v1/index/state-writes` row. */\nfunction httpStateWritesCoverage(): StateWritesCoverage {\n\thttpCoverage ??= cachedCoverage(() =>\n\t\tbuildHttpClient().firstStateWriteHeight(),\n\t);\n\treturn httpCoverage;\n}\n\n/**\n * The contracts whose writes a state subgraph would read from `state_writes`,\n * or null when it keeps `vm_events` whatever the instance holds.\n *\n * Only a subgraph running in the deterministic realm (stored level `state`)\n * whose sources the CURRENT rules still derive as `state`. A subgraph stored\n * as `state` before `map_insert` dropped to `events` keeps its `vm_events`\n * feed: `state_writes` cannot tell an insert from a set, so it would silently\n * lose those events.\n */\nexport function stateWriteContracts(\n\tsubgraph: SubgraphDefinition | undefined,\n): StateWriteFeed | null {\n\tif (!subgraph || !runsInRealm(subgraph)) return null;\n\tif (deriveVerification(subgraph).level !== \"state\") return null;\n\tconst contracts = new Set<string>();\n\tfor (const f of sourceFilters(subgraph)) {\n\t\tconst pinned = pinnedContracts(f);\n\t\t// A source with no fixed contract (wildcard, factory) needs every\n\t\t// contract's writes.\n\t\tif (!pinned) return { contracts: null };\n\t\tfor (const id of pinned) contracts.add(id);\n\t}\n\treturn { contracts: [...contracts] };\n}\n\n/**\n * The `state_writes` feed for a subgraph, or null when it keeps today's\n * `vm_events` feed. Derived, never configured: a state subgraph switches only\n * once this instance holds `state_writes` from the subgraph's `startBlock`\n * on, so a node that does not deliver them (or started delivering them after\n * the subgraph's range began) changes nothing.\n */\nexport async function stateWriteFeed(\n\tsubgraph: SubgraphDefinition | undefined,\n\tcoverage: StateWritesCoverage = dbStateWritesCoverage,\n): Promise<StateWriteFeed | null> {\n\tconst feed = stateWriteContracts(subgraph);\n\tif (!feed) return null;\n\tconst from = await coverage();\n\tif (from === null || from > (subgraph?.startBlock ?? 0)) return null;\n\treturn feed;\n}\n\n/** Reads directly from the shared indexer Postgres (the original behavior). */\nexport class PostgresBlockSource implements BlockSource {\n\t/** `feed`: read write events from `state_writes` (see {@link stateWriteFeed}). */\n\tconstructor(private readonly feed?: StateWriteFeed | undefined) {}\n\n\tasync getTip(): Promise<number> {\n\t\treturn (await resolveChainTip(getSourceDb(), \"seen\")) ?? 0;\n\t}\n\n\tloadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>> {\n\t\treturn loadBlockRange(getSourceDb(), fromHeight, toHeight, {\n\t\t\tstateWrites: this.feed,\n\t\t});\n\t}\n}\n\n// Subgraph source filter types that map to a decoded Index event_type. The\n// `_event` suffix is the runtime's raw form; print is keyed `print_event`.\nconst EVENT_FILTER_TO_INDEX_TYPE: Record<string, string> = {\n\tstx_transfer: \"stx_transfer\",\n\tstx_mint: \"stx_mint\",\n\tstx_burn: \"stx_burn\",\n\tstx_lock: \"stx_lock\",\n\tft_transfer: \"ft_transfer\",\n\tft_mint: \"ft_mint\",\n\tft_burn: \"ft_burn\",\n\tnft_transfer: \"nft_transfer\",\n\tnft_mint: \"nft_mint\",\n\tnft_burn: \"nft_burn\",\n\tprint_event: \"print\",\n\tnested_contract_call: \"nested_contract_call\",\n\tvar_set: \"var_set\",\n\tmap_set: \"map_set\",\n\tmap_insert: \"map_insert\",\n\tmap_delete: \"map_delete\",\n};\n\n// Tx-level source types — matched against /v1/index/transactions, not events.\nconst TX_SOURCE_TYPES = new Set([\"contract_call\", \"contract_deploy\"]);\n// Second clock (ordinal). Never part of a tx's classic event set: a\n// contract_call/contract_deploy source fetches every CLASSIC type, and vm\n// types are fetched only when a vm source names them.\nexport const VM_INDEX_EVENT_TYPES: ReadonlySet<string> = new Set([\n\t\"nested_contract_call\",\n\t\"var_set\",\n\t\"map_set\",\n\t\"map_insert\",\n\t\"map_delete\",\n]);\nconst CLASSIC_INDEX_EVENT_TYPES = [\n\t...new Set(Object.values(EVENT_FILTER_TO_INDEX_TYPE)),\n].filter((t) => !VM_INDEX_EVENT_TYPES.has(t));\n\nfunction sourceFilters(subgraph: SubgraphDefinition): SubgraphFilter[] {\n\tconst sources = subgraph.sources;\n\treturn Array.isArray(sources)\n\t\t? (sources as SubgraphFilter[])\n\t\t: Object.values(sources as Record<string, SubgraphFilter>);\n}\n\n/**\n * True when any source matches transactions (contract_call / contract_deploy):\n * the handler receives the full tx, so the loader must fetch real transactions.\n * Event-only subgraphs skip walkTransactions and synthesize the tx from joined\n * event context instead (the ~37x reindex over-fetch; see indexing-speed plan).\n */\nexport function needsTransactionData(subgraph: SubgraphDefinition): boolean {\n\treturn sourceFilters(subgraph).some((f) => TX_SOURCE_TYPES.has(f.type));\n}\n\n/** Build the (few) event-bearing txs from joined event context, one per tx_id —\n * the event-only replacement for draining every transaction in the range. */\nfunction synthesizeTxsFromEvents(events: IndexEventRow[]): Transaction[] {\n\tconst byId = new Map<string, Transaction>();\n\tfor (const e of events) {\n\t\tif (!byId.has(e.tx_id)) byId.set(e.tx_id, reconstructTxFromEventRow(e));\n\t}\n\treturn [...byId.values()];\n}\n\n/**\n * The Index event_types the loader must fetch for a set of source filter types.\n * A contract_call/contract_deploy source matches a tx and hands its FULL event\n * set to the handler, so when one is present we fetch every classic event type\n * (the matched tx's events must be complete); otherwise just the referenced\n * types. VM types ride a second clock and are fetched only when referenced.\n * Shared by the subgraph loader and the chain-trigger evaluator.\n */\nexport function indexEventTypesForFilterTypes(filterTypes: string[]): string[] {\n\tconst types = new Set<string>();\n\tif (filterTypes.some((t) => TX_SOURCE_TYPES.has(t))) {\n\t\tfor (const t of CLASSIC_INDEX_EVENT_TYPES) types.add(t);\n\t}\n\tfor (const t of filterTypes) {\n\t\tconst indexType = EVENT_FILTER_TO_INDEX_TYPE[t];\n\t\tif (indexType) types.add(indexType);\n\t}\n\treturn [...types];\n}\n\n/** Index event_types a subgraph's sources require. Empty when sources are absent. */\nexport function referencedIndexEventTypes(\n\tsubgraph: SubgraphDefinition,\n): string[] {\n\tif (!subgraph.sources) return [];\n\treturn indexEventTypesForFilterTypes(\n\t\tsourceFilters(subgraph).map((f) => f.type),\n\t);\n}\n\n/**\n * Tells whether a subgraph's sources can be read from the Streams index.\n *\n * Every source must be a known event-type, `contract_call` or\n * `contract_deploy` filter, and array-style sources never qualify because they\n * leak the unreconstructable `_eventId`. Trait scope is allowed: trait\n * resolution reads the contract registry on the platform database, which the\n * processor always holds. Everything else stays on the database tap.\n */\nexport function isStreamsIndexEligible(subgraph: SubgraphDefinition): boolean {\n\tif (Array.isArray(subgraph.sources)) return false;\n\tconst filters = sourceFilters(subgraph);\n\tif (filters.length === 0) return false;\n\tfor (const f of filters) {\n\t\tconst known =\n\t\t\tEVENT_FILTER_TO_INDEX_TYPE[f.type] || TX_SOURCE_TYPES.has(f.type);\n\t\tif (!known) return false;\n\t}\n\treturn true;\n}\n\n/** Merge of overlapping walks: one row per (type, height, event_index). */\nfunction dedupeEvents(rows: IndexEventRow[]): IndexEventRow[] {\n\tconst seen = new Set<string>();\n\treturn rows.filter((e) => {\n\t\tconst key = `${e.event_type}|${e.block_height}|${e.event_index}`;\n\t\tif (seen.has(key)) return false;\n\t\tseen.add(key);\n\t\treturn true;\n\t});\n}\n\n/** Streams clock + Index data plane, reconstructed into raw BlockData rows. */\nexport class PublicApiBlockSource implements BlockSource {\n\tconstructor(\n\t\tprivate readonly http: IndexHttpClient,\n\t\tprivate readonly eventTypes: string[],\n\t\t/** When set, enables the sparse-scan probe (event-scoped subgraphs). */\n\t\tprivate readonly probeTargets?: SparseProbeTarget[] | undefined,\n\t\t/** False for event-only subgraphs → skip walkTransactions, synthesize the\n\t\t * tx from joined event context. Defaults true (safe / unchanged). */\n\t\tprivate readonly needsTransactions = true,\n\t\t/** Write events from `state_writes` instead of the vm event walks. */\n\t\tprivate readonly feed?: StateWriteFeed | undefined,\n\t) {}\n\n\t/**\n\t * What the event walks fetch. Event-only subgraphs walk exactly what their\n\t * filters can match (contract-scoped where a filter pins one); tx-level\n\t * sources need every event of a matched tx, so they walk each type whole.\n\t */\n\tprivate walkTargets(): SparseProbeTarget[] {\n\t\tconst scoped = this.needsTransactions ? undefined : this.probeTargets;\n\t\t// Under a state_writes feed, write events come from the writes walk.\n\t\tconst types = this.feed\n\t\t\t? this.eventTypes.filter((t) => !VM_INDEX_EVENT_TYPES.has(t))\n\t\t\t: this.eventTypes;\n\t\treturn types.flatMap((eventType) => {\n\t\t\tconst own = scoped?.filter((t) => t.eventType === eventType);\n\t\t\treturn own?.length ? own : [{ eventType }];\n\t\t});\n\t}\n\n\t/** Lowest height in (after, until] any probe target hits, or null. */\n\tasync nextDataHeight(\n\t\tafterHeight: number,\n\t\tuntilHeight: number,\n\t): Promise<number | null> {\n\t\tif (!this.probeTargets?.length) return afterHeight + 1;\n\t\tconst hits = await Promise.all(\n\t\t\tthis.probeTargets.map((t) =>\n\t\t\t\tthis.http.firstEventHeight(\n\t\t\t\t\tt.eventType,\n\t\t\t\t\tafterHeight + 1,\n\t\t\t\t\tuntilHeight,\n\t\t\t\t\tt.contractId,\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t\tconst found = hits.filter((h): h is number => h !== null);\n\t\treturn found.length ? Math.min(...found) : null;\n\t}\n\n\tgetTip(opts?: { wait?: number; knownHeight?: number }): Promise<number> {\n\t\t// VM rows land with ingest. Decoded Index tip can lag; use the source\n\t\t// field when this loader fetches any vm type.\n\t\tif (this.eventTypes.some((t) => VM_INDEX_EVENT_TYPES.has(t))) {\n\t\t\treturn this.http.getIndexSourceTip(opts);\n\t\t}\n\t\t// Scope the tip (and, with `wait`, what counts as \"nothing new\") to\n\t\t// exactly the classic types THIS source reads instead of the global\n\t\t// cross-decoder floor. Without this, any of the ~15 classic decoders\n\t\t// committing — most unrelated to what this source actually walks —\n\t\t// moves the global floor and makes an unrelated `wait` return early.\n\t\treturn this.http.getIndexTip({ ...opts, eventTypes: this.eventTypes });\n\t}\n\n\t/** Reads the SAME envelope `getTip()` just cached on `this.http` — call\n\t * this only after `getTip()` has resolved at least once. */\n\tgetDecodedHeights(): Record<string, number | null> | undefined {\n\t\treturn this.http.getDecodedHeights();\n\t}\n\n\tasync loadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>> {\n\t\t// Event-only subgraphs join tx context onto events (withTx) and skip the\n\t\t// walkTransactions over-fetch entirely; tx-level sources fetch real txs.\n\t\tconst withTx = !this.needsTransactions;\n\t\tconst [blocks, txRows, eventLists, writes] = await Promise.all([\n\t\t\tthis.http.walkBlocks(fromHeight, toHeight),\n\t\t\tthis.needsTransactions\n\t\t\t\t? this.http.walkTransactions(fromHeight, toHeight)\n\t\t\t\t: Promise.resolve<IndexTransactionRow[]>([]),\n\t\t\tPromise.all(\n\t\t\t\tthis.walkTargets().map((t) =>\n\t\t\t\t\tthis.http.walkEvents(\n\t\t\t\t\t\tt.eventType,\n\t\t\t\t\t\tfromHeight,\n\t\t\t\t\t\ttoHeight,\n\t\t\t\t\t\twithTx,\n\t\t\t\t\t\tt.contractId,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\t\t\tthis.feed ? this.walkWrites(fromHeight, toHeight, this.feed) : null,\n\t\t]);\n\t\tconst events = dedupeEvents(eventLists.flat());\n\n\t\tconst map = new Map<number, BlockData>();\n\t\t// Seed every canonical height (incl. empty blocks) so catch-up doesn't\n\t\t// file them as gaps.\n\t\tfor (const b of blocks) {\n\t\t\tmap.set(b.block_height, {\n\t\t\t\tblock: reconstructBlock(b),\n\t\t\t\ttxs: [],\n\t\t\t\tevents: [],\n\t\t\t});\n\t\t}\n\t\t// For event-only subgraphs, materialize only the event-bearing txs from\n\t\t// joined event context instead of every transaction in the range.\n\t\tconst txs = this.needsTransactions\n\t\t\t? txRows.map(reconstructTransaction)\n\t\t\t: synthesizeTxsFromEvents(events);\n\t\tfor (const t of txs) {\n\t\t\tmap.get(t.block_height)?.txs.push(t);\n\t\t}\n\t\tfor (const e of events) {\n\t\t\tconst bd = map.get(e.block_height);\n\t\t\tif (!bd) continue;\n\t\t\t// vm rows ride their own clock: never merged into `events`, whose\n\t\t\t// order is classic event_index.\n\t\t\tif (VM_INDEX_EVENT_TYPES.has(e.event_type)) {\n\t\t\t\tbd.vmEvents ??= [];\n\t\t\t\tbd.vmEvents.push(reconstructEvent(e));\n\t\t\t} else {\n\t\t\t\tbd.events.push(reconstructEvent(e));\n\t\t\t}\n\t\t}\n\t\tif (writes) {\n\t\t\tfor (const [height, fed] of writes) {\n\t\t\t\tconst bd = map.get(height);\n\t\t\t\tif (!bd) continue;\n\t\t\t\tbd.txs.push(...fed.txs);\n\t\t\t\tbd.vmEvents = fed.vmEvents;\n\t\t\t}\n\t\t}\n\t\t// Canonical ordering — multi-type event walks merge here, per clock.\n\t\tfor (const bd of map.values()) {\n\t\t\tbd.txs.sort((a, b) => (a.tx_index ?? 0) - (b.tx_index ?? 0));\n\t\t\tbd.events.sort((a, b) => a.event_index - b.event_index);\n\t\t\tbd.vmEvents?.sort((a, b) => a.event_index - b.event_index);\n\t\t}\n\t\treturn map;\n\t}\n\n\t/** Each height's named writes as events, the writing txs rebuilt from the\n\t * joined `tx_*` fields. One walk per contract, merged in ordinal order. */\n\tprivate async walkWrites(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t\tfeed: StateWriteFeed,\n\t): Promise<ReturnType<typeof stateWriteBlocks>> {\n\t\tconst walks = await Promise.all(\n\t\t\t(feed.contracts ?? [undefined]).map((c) =>\n\t\t\t\tthis.http.walkStateWrites(fromHeight, toHeight, c),\n\t\t\t),\n\t\t);\n\t\tconst writesByHeight = new Map<number, Map<number, StateWriteRow>>();\n\t\tconst txsByHeight = new Map<number, Map<number, TxRecord>>();\n\t\tfor (const row of walks.flat()) {\n\t\t\tconst writes = writesByHeight.get(row.block_height) ?? new Map();\n\t\t\twrites.set(row.ordinal, row);\n\t\t\twritesByHeight.set(row.block_height, writes);\n\t\t\tconst tx = writeTx(row);\n\t\t\tif (tx) {\n\t\t\t\tconst txs = txsByHeight.get(row.block_height) ?? new Map();\n\t\t\t\ttxs.set(row.tx_index as number, tx);\n\t\t\t\ttxsByHeight.set(row.block_height, txs);\n\t\t\t}\n\t\t}\n\t\treturn stateWriteBlocks(\n\t\t\tnew Map(\n\t\t\t\t[...writesByHeight].map(([h, w]) => [\n\t\t\t\t\th,\n\t\t\t\t\t[...w.values()].sort((a, b) => a.ordinal - b.ordinal),\n\t\t\t\t]),\n\t\t\t),\n\t\t\tnew Map([...txsByHeight].map(([h, t]) => [h, [...t.values()]])),\n\t\t);\n\t}\n}\n\n/** The writing tx a `tx_context=true` row carries; null for block-level\n * writes or a row whose tx the Index could not join. */\nfunction writeTx(row: IndexStateWriteRow): TxRecord | null {\n\tif (row.tx_index === null || !row.tx_id) return null;\n\treturn {\n\t\ttx_id: row.tx_id,\n\t\ttx_index: row.tx_index,\n\t\ttype: row.tx_type ?? \"\",\n\t\tsender: row.tx_sender ?? \"\",\n\t\tstatus: row.tx_status ?? \"\",\n\t\tcontract_id: row.tx_contract_id ?? null,\n\t\tfunction_name: row.tx_function_name ?? null,\n\t};\n}\n\n/**\n * Wraps a primary source and falls back to a secondary, per call, when the\n * primary throws. Use it to make the HTTP (Streams+Index) plane a SOFT dependency:\n * if api is unavailable, the processor reads the Postgres tap and keeps advancing\n * instead of stalling. Safe to mix mid-stream — both taps read the same canonical\n * chain at the same heights and the cursor is forward-only. Stateless (no breaker)\n * so it's failover-safe across replicas; the primary is retried every call and\n * resumes transparently once healthy.\n */\nexport class FallbackBlockSource implements BlockSource {\n\t/** True when the LAST `getTip()` call actually used the primary — guards\n\t * `getDecodedHeights()` against returning the primary's stale cached\n\t * envelope from an earlier success after a call that just fell back. */\n\tprivate lastTipFromPrimary = false;\n\n\tconstructor(\n\t\tprivate readonly primary: BlockSource,\n\t\tprivate readonly fallback: BlockSource,\n\t) {}\n\n\tasync getTip(opts?: {\n\t\twait?: number;\n\t\tknownHeight?: number;\n\t}): Promise<number> {\n\t\ttry {\n\t\t\tconst tip = await this.primary.getTip(opts);\n\t\t\tthis.lastTipFromPrimary = true;\n\t\t\treturn tip;\n\t\t} catch (err) {\n\t\t\t// A billing refusal is not the api being down: the DB tap would\n\t\t\t// quietly serve different data, so let the caller pause instead.\n\t\t\tif (err instanceof BillingPausedError) throw err;\n\t\t\tlogger.warn(\"block source primary getTip failed — using DB tap\", {\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t});\n\t\t\tthis.lastTipFromPrimary = false;\n\t\t\t// The DB tap has no wait/long-poll notion — a plain read is already\n\t\t\t// instant, so `opts` is dropped here rather than forwarded.\n\t\t\treturn this.fallback.getTip();\n\t\t}\n\t}\n\n\t/** Only meaningful right after a `getTip()` that used the primary — the\n\t * fallback (Postgres tap) has no such notion, and returning the\n\t * primary's stale cache after a fallback would mismatch the returned\n\t * tip. Local mode's own `decoderBoundTip` never calls this. */\n\tgetDecodedHeights(): Record<string, number | null> | undefined {\n\t\tif (!this.lastTipFromPrimary) return undefined;\n\t\treturn this.primary.getDecodedHeights?.();\n\t}\n\n\tasync loadBlockRange(\n\t\tfromHeight: number,\n\t\ttoHeight: number,\n\t): Promise<Map<number, BlockData>> {\n\t\ttry {\n\t\t\treturn await this.primary.loadBlockRange(fromHeight, toHeight);\n\t\t} catch (err) {\n\t\t\tif (err instanceof BillingPausedError) throw err;\n\t\t\tlogger.warn(\"block source primary loadBlockRange failed — using DB tap\", {\n\t\t\t\tfrom: fromHeight,\n\t\t\t\tto: toHeight,\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t});\n\t\t\treturn this.fallback.loadBlockRange(fromHeight, toHeight);\n\t\t}\n\t}\n\n\t/** Probe via the primary only; a probe failure just means \"no skip\" —\n\t * the caller falls back to plain batch advancement. */\n\tasync nextDataHeight(\n\t\tafterHeight: number,\n\t\tuntilHeight: number,\n\t): Promise<number | null> {\n\t\tif (!this.primary.nextDataHeight) return afterHeight + 1;\n\t\ttry {\n\t\t\treturn await this.primary.nextDataHeight(afterHeight, untilHeight);\n\t\t} catch {\n\t\t\treturn afterHeight + 1;\n\t\t}\n\t}\n}\n\nconst postgresBlockSource = new PostgresBlockSource();\n\n/** The Postgres tap for a subgraph: its `state_writes` feed when it has one. */\nfunction postgresSourceFor(feed: StateWriteFeed | null): BlockSource {\n\treturn feed ? new PostgresBlockSource(feed) : postgresBlockSource;\n}\n\n/**\n * HTTP (Streams+Index) chain source for a set of decoded event types, wrapped so\n * it falls back to the Postgres tap when api is down. Used by the chain-trigger\n * evaluator (which isn't subgraph-scoped, so it can't go through resolveBlockSource).\n *\n * `needsTransactions` defaults true (safe/unchanged) but the evaluator passes\n * `chainSubsNeedTransactions(chainSubs)` so a tick with no contract_call/deploy\n * trigger skips `walkTransactions` entirely — one fewer HTTP round trip and a\n * smaller `walkEvents` payload (no `tx_context` join) on every such tick.\n *\n * `httpClient` defaults to a fresh client (unchanged behavior) — pass one in\n * to reuse across calls. The evaluator's own long-lived loop does this so\n * `IndexHttpClient.waitIsSupported()` reflects what THIS\n * server actually supports instead of resetting every tick.\n */\nexport function buildChainBlockSource(\n\teventTypes: string[],\n\tneedsTransactions = true,\n\thttpClient: IndexHttpClient = buildHttpClient(),\n): BlockSource {\n\treturn new FallbackBlockSource(\n\t\tnew PublicApiBlockSource(\n\t\t\thttpClient,\n\t\t\teventTypes,\n\t\t\tundefined,\n\t\t\tneedsTransactions,\n\t\t),\n\t\tpostgresBlockSource,\n\t);\n}\n\nexport function buildHttpClient(): IndexHttpClient {\n\treturn createInternalIndexHttpClient();\n}\n\n/**\n * Resolve the block source for a subgraph. `SUBGRAPH_SOURCE=streams-index`\n * opts eligible subgraphs onto the public Streams clock + Index data.\n * Default stays on the Postgres tap.\n */\nexport async function resolveBlockSource(\n\tsubgraph?: SubgraphDefinition,\n): Promise<BlockSource> {\n\tif (\n\t\tprocess.env.SUBGRAPH_SOURCE === \"streams-index\" &&\n\t\tsubgraph &&\n\t\tisStreamsIndexEligible(subgraph)\n\t) {\n\t\t// Soft-depend on api: fall back to the Postgres tap per-call if the HTTP\n\t\t// plane is down, so the processor keeps advancing instead of stalling.\n\t\t// Both read the same feed, decided by the plane this source reads.\n\t\tconst feed =\n\t\t\t(await stateWriteFeed(subgraph, httpStateWritesCoverage())) ?? undefined;\n\t\treturn new FallbackBlockSource(\n\t\t\tnew PublicApiBlockSource(\n\t\t\t\tbuildHttpClient(),\n\t\t\t\treferencedIndexEventTypes(subgraph),\n\t\t\t\t// The sparse probe reads vm_events; a state_writes feed walks\n\t\t\t\t// every block instead of skipping on another table's rows.\n\t\t\t\tcanSparseScan(subgraph) && !feed\n\t\t\t\t\t? sparseProbeTargets(subgraph)\n\t\t\t\t\t: undefined,\n\t\t\t\tneedsTransactionData(subgraph),\n\t\t\t\tfeed,\n\t\t\t),\n\t\t\tpostgresSourceFor(feed ?? null),\n\t\t);\n\t}\n\tif (process.env.SUBGRAPH_SOURCE === \"streams-index\" && subgraph) {\n\t\tlogger.debug(\"Subgraph not streams-index eligible, using DB tap\", {\n\t\t\tsubgraph: subgraph.name,\n\t\t});\n\t}\n\treturn postgresSourceFor(await stateWriteFeed(subgraph));\n}\n",
|
|
19
19
|
"import type {\n\tBlock,\n\tDatabase,\n\tEvent,\n\tTransaction,\n} from \"@secondlayer/shared/db\";\nimport { type Kysely, sql } from \"kysely\";\nimport type { EventRecord, TxRecord } from \"./source-matcher.ts\";\nimport { type StateWriteRow, stateWriteEvents } from \"./state-writes.ts\";\n\n/** A runtime event row. `clock: \"vm\"` marks an opt-in `vm_events` row whose\n * `event_index` is `ordinal` — a second ordinal that never sorts or\n * dedupes against classic `events.event_index`. */\nexport type RuntimeEvent = Event & { clock?: \"vm\" };\n\nexport interface BlockData {\n\tblock: Block;\n\t/** The block's transactions. Under a `state_writes` feed, only the ones\n\t * its named writes hang on (see `stateWriteEvents`). */\n\ttxs: TxRecord[];\n\t/** Classic `events` rows (Streams 1.0 clock). */\n\tevents: Event[];\n\t/** Write events on their own clock: opt-in `vm_events` rows, or named\n\t * `state_writes` for a state subgraph. Absent/empty on `\"*\"` nodes and on\n\t * archives collected without `storage`/`contract_calls`. */\n\tvmEvents?: EventRecord[];\n}\n\n/**\n * Which node storage writes feed a state subgraph's write sources, in place\n * of `vm_events`. `contracts: null` reads every contract's writes (a source\n * with no fixed contract).\n */\nexport interface StateWriteFeed {\n\tcontracts: string[] | null;\n}\n\n/** Each block's writes run through {@link stateWriteEvents} with that block's\n * own transactions, keyed by `tx_index`. */\nexport function stateWriteBlocks(\n\twritesByHeight: ReadonlyMap<number, StateWriteRow[]>,\n\ttxsByHeight: ReadonlyMap<number, readonly TxRecord[]>,\n): Map<number, { txs: TxRecord[]; vmEvents: EventRecord[] }> {\n\tconst out = new Map<number, { txs: TxRecord[]; vmEvents: EventRecord[] }>();\n\tfor (const [height, writes] of writesByHeight) {\n\t\tconst txByIndex = new Map<number, TxRecord>();\n\t\tfor (const tx of txsByHeight.get(height) ?? []) {\n\t\t\tif (tx.tx_index !== undefined) txByIndex.set(tx.tx_index, tx);\n\t\t}\n\t\tout.set(height, stateWriteEvents(writes, txByIndex));\n\t}\n\treturn out;\n}\n\n/** Stable synthetic id for a vm row. Distinct from the classic `tx#index`\n * so a print at event_index N and a map_set at ordinal N never share\n * an identity. */\nexport function vmEventId(txId: string, vmEventIndex: number): string {\n\treturn `${txId}#vm:${vmEventIndex}`;\n}\n\n/**\n * Load a range of blocks with their transactions and events in 4 parallel queries.\n * Returns a Map keyed by block height. Non-canonical blocks are excluded.\n * With `stateWrites`, write events come from `state_writes` instead of\n * `vm_events`.\n */\nexport async function loadBlockRange(\n\tdb: Kysely<Database>,\n\tfromHeight: number,\n\ttoHeight: number,\n\topts: { stateWrites?: StateWriteFeed } = {},\n): Promise<Map<number, BlockData>> {\n\tconst feed = opts.stateWrites;\n\tconst [blocks, txs, events, vmRows, writeRows] = await Promise.all([\n\t\tdb\n\t\t\t.selectFrom(\"blocks\")\n\t\t\t.selectAll()\n\t\t\t.where(\"height\", \">=\", fromHeight)\n\t\t\t.where(\"height\", \"<=\", toHeight)\n\t\t\t.where(\"canonical\", \"=\", true)\n\t\t\t.execute(),\n\t\tdb\n\t\t\t.selectFrom(\"transactions\")\n\t\t\t.selectAll()\n\t\t\t.where(\"block_height\", \">=\", fromHeight)\n\t\t\t.where(\"block_height\", \"<=\", toHeight)\n\t\t\t.execute(),\n\t\tdb\n\t\t\t.selectFrom(\"events\")\n\t\t\t.selectAll()\n\t\t\t.where(\"block_height\", \">=\", fromHeight)\n\t\t\t.where(\"block_height\", \"<=\", toHeight)\n\t\t\t.execute(),\n\t\tfeed\n\t\t\t? Promise.resolve([])\n\t\t\t: db\n\t\t\t\t\t.selectFrom(\"vm_events\")\n\t\t\t\t\t.selectAll()\n\t\t\t\t\t.where(\"block_height\", \">=\", fromHeight)\n\t\t\t\t\t.where(\"block_height\", \"<=\", toHeight)\n\t\t\t\t\t.orderBy(\"ordinal\", \"asc\")\n\t\t\t\t\t.execute(),\n\t\tfeed\n\t\t\t? loadStateWrites(db, fromHeight, toHeight, feed)\n\t\t\t: Promise.resolve([]),\n\t]);\n\n\t// Index by block height (coerce to number — bigint columns may return as string or number)\n\tconst txsByHeight = new Map<number, Transaction[]>();\n\tfor (const tx of txs) {\n\t\tconst h = Number(tx.block_height);\n\t\tconst list = txsByHeight.get(h) ?? [];\n\t\tlist.push(tx);\n\t\ttxsByHeight.set(h, list);\n\t}\n\n\tconst eventsByHeight = new Map<number, Event[]>();\n\tfor (const evt of events) {\n\t\tconst h = Number(evt.block_height);\n\t\tconst list = eventsByHeight.get(h) ?? [];\n\t\tlist.push(evt);\n\t\teventsByHeight.set(h, list);\n\t}\n\n\tconst vmByHeight = new Map<number, RuntimeEvent[]>();\n\tfor (const row of vmRows) {\n\t\tconst h = Number(row.block_height);\n\t\tconst list = vmByHeight.get(h) ?? [];\n\t\tlist.push({\n\t\t\tid: vmEventId(row.tx_id, Number(row.ordinal)),\n\t\t\ttx_id: row.tx_id,\n\t\t\tblock_height: h,\n\t\t\tevent_index: Number(row.ordinal),\n\t\t\ttype: row.type,\n\t\t\tdata: row.data,\n\t\t\tcreated_at: row.created_at,\n\t\t\tclock: \"vm\",\n\t\t} as RuntimeEvent);\n\t\tvmByHeight.set(h, list);\n\t}\n\n\tconst writesByHeight = new Map<number, StateWriteRow[]>();\n\tfor (const row of writeRows) {\n\t\tconst h = Number(row.block_height);\n\t\tconst list = writesByHeight.get(h) ?? [];\n\t\tlist.push({\n\t\t\tordinal: Number(row.ordinal),\n\t\t\ttx_index: row.tx_index === null ? null : Number(row.tx_index),\n\t\t\tkey: row.key,\n\t\t\tvalue_hex: row.value_hex,\n\t\t});\n\t\twritesByHeight.set(h, list);\n\t}\n\tconst named = stateWriteBlocks(writesByHeight, txsByHeight);\n\n\tconst result = new Map<number, BlockData>();\n\tfor (const block of blocks) {\n\t\tconst h = Number(block.height);\n\t\tconst fed = named.get(h);\n\t\tresult.set(h, {\n\t\t\tblock,\n\t\t\ttxs: feed ? (fed?.txs ?? []) : (txsByHeight.get(h) ?? []),\n\t\t\tevents: eventsByHeight.get(h) ?? [],\n\t\t\tvmEvents: feed ? (fed?.vmEvents ?? []) : (vmByHeight.get(h) ?? []),\n\t\t});\n\t}\n\n\treturn result;\n}\n\n/** `state_writes` over the range, scoped to the feed's contracts' keys. */\nasync function loadStateWrites(\n\tdb: Kysely<Database>,\n\tfromHeight: number,\n\ttoHeight: number,\n\tfeed: StateWriteFeed,\n): Promise<\n\tArray<{\n\t\tblock_height: number;\n\t\tordinal: number;\n\t\ttx_index: number | null;\n\t\tkey: string;\n\t\tvalue_hex: string;\n\t}>\n> {\n\t// `starts_with`, not LIKE: `_` in a contract name is a LIKE wildcard.\n\tconst scope = feed.contracts\n\t\t? sql`AND (${sql.join(\n\t\t\t\tfeed.contracts.map((c) => sql`starts_with(key, ${`vm::${c}::`})`),\n\t\t\t\tsql` OR `,\n\t\t\t)})`\n\t\t: sql``;\n\tconst { rows } = await sql<{\n\t\tblock_height: number;\n\t\tordinal: number;\n\t\ttx_index: number | null;\n\t\tkey: string;\n\t\tvalue_hex: string;\n\t}>`\n\t\tSELECT block_height, ordinal, tx_index, key, value_hex\n\t\tFROM state_writes\n\t\tWHERE block_height >= ${fromHeight} AND block_height <= ${toHeight} ${scope}\n\t\tORDER BY block_height, ordinal\n\t`.execute(db);\n\treturn rows;\n}\n\n/**\n * Compute average events per block from a loaded batch.\n * Used for adaptive batch sizing.\n */\nexport function avgEventsPerBlock(batch: Map<number, BlockData>): number {\n\tif (batch.size === 0) return 0;\n\tlet totalEvents = 0;\n\tfor (const data of batch.values()) {\n\t\ttotalEvents += data.events.length;\n\t}\n\treturn totalEvents / batch.size;\n}\n",
|
|
20
20
|
"/**\n * Node storage writes (`state_writes`) → the `var_set` / `map_set` /\n * `map_delete` events a state-level subgraph's handlers receive.\n *\n * The served runtime and client replay both call {@link stateWriteEvents} and\n * nothing else, so the events a handler saw on the server are exactly the ones\n * a verifier recomputes from the header-backed diff.\n */\nimport { vmEventId } from \"./batch-loader.ts\";\nimport type { EventRecord, TxRecord } from \"./source-matcher.ts\";\n\n/** One `state_writes` row (migration 0154), as the DB tap and the API serve it. */\nexport interface StateWriteRow {\n\tordinal: number;\n\t/** Null for a block-level write (no transaction). */\n\ttx_index: number | null;\n\t/** MARF key, e.g. `vm::<contract>::0::<map>::<keyhex>`. */\n\tkey: string;\n\t/** Hex of the stored value string's UTF-8 bytes. */\n\tvalue_hex: string;\n}\n\nexport type StateWriteKey =\n\t| { contractId: string; kind: \"map\"; map: string; rawKey: string }\n\t| { contractId: string; kind: \"var\"; varName: string };\n\n/** clarity_db.rs StoreType discriminants, formatted in decimal inside keys. */\nconst DATA_MAP = \"0\";\nconst VARIABLE = \"1\";\nconst HEX = /^(?:[0-9a-f]{2})+$/;\n\n/**\n * `vm::<c>::0::<map>::<keyhex>` | `vm::<c>::1::<var>`; null for every other key\n * (FT balances, NFT owners, contract metadata, accounts, `__MARF_*`).\n */\nexport function parseStateWriteKey(key: string): StateWriteKey | null {\n\tif (!key.startsWith(\"vm::\")) return null;\n\tconst parts = key.slice(4).split(\"::\");\n\tconst [contractId, store] = parts;\n\tif (!contractId?.includes(\".\")) return null;\n\tif (store === DATA_MAP && parts.length === 4) {\n\t\tconst [, , map, rawKey] = parts;\n\t\tif (!map || !rawKey || !HEX.test(rawKey)) return null;\n\t\treturn { contractId, kind: \"map\", map, rawKey };\n\t}\n\tif (store === VARIABLE && parts.length === 3 && parts[2]) {\n\t\treturn { contractId, kind: \"var\", varName: parts[2] };\n\t}\n\treturn null;\n}\n\nconst utf8 = new TextDecoder(\"utf-8\", { fatal: true });\n\n/** The stored value string a `value_hex` encodes (lowercase hex of a CV). */\nfunction storedValue(w: StateWriteRow): string {\n\tconst h = w.value_hex.startsWith(\"0x\") ? w.value_hex.slice(2) : w.value_hex;\n\tconst bytes = new Uint8Array(h.length / 2);\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tbytes[i] = Number.parseInt(h.slice(i * 2, i * 2 + 2), 16);\n\t}\n\tlet value: string;\n\ttry {\n\t\tvalue = utf8.decode(bytes);\n\t} catch {\n\t\tthrow new Error(`state write ${w.ordinal} value is not UTF-8 hex`);\n\t}\n\tvalue = value.toLowerCase();\n\tif (!HEX.test(value)) {\n\t\tthrow new Error(`state write ${w.ordinal} value is not a Clarity value`);\n\t}\n\treturn value;\n}\n\n/** The handler event one named write becomes, or null when it is not one. */\nfunction writeEvent(\n\tw: StateWriteRow,\n): { type: string; data: Record<string, string> } | null {\n\tconst key = parseStateWriteKey(w.key);\n\tif (!key) return null;\n\tconst value = storedValue(w);\n\tif (key.kind === \"var\") {\n\t\treturn {\n\t\t\ttype: \"var_set\",\n\t\t\tdata: {\n\t\t\t\tcontract_identifier: key.contractId,\n\t\t\t\tvar_name: key.varName,\n\t\t\t\traw_value: `0x${value}`,\n\t\t\t},\n\t\t};\n\t}\n\tconst base = {\n\t\tcontract_identifier: key.contractId,\n\t\tmap_name: key.map,\n\t\traw_key: `0x${key.rawKey}`,\n\t};\n\t// put_value stores a map entry as (some value); a delete stores none.\n\tif (value === \"09\") return { type: \"map_delete\", data: base };\n\tif (value.startsWith(\"0a\")) {\n\t\treturn {\n\t\t\ttype: \"map_set\",\n\t\t\tdata: { ...base, raw_value: `0x${value.slice(2)}` },\n\t\t};\n\t}\n\tthrow new Error(\n\t\t`state write ${w.ordinal} map value is neither (some v) nor none`,\n\t);\n}\n\n/**\n * A block's named writes as handler events, in node write order, plus the\n * transactions they hang on.\n *\n * Every returned tx carries `tx_index: 0`, so the runner's (tx_index,\n * event_index) sort dispatches by ordinal alone: node write order, including\n * block-level writes that land between transactions. Block-level writes\n * (`tx_index` null) share one synthetic tx with an empty id.\n *\n * Storage cannot tell `map_insert` from `map_set`, so no `map_insert` event is\n * ever produced; such sources are not state-level.\n */\nexport function stateWriteEvents(\n\twrites: StateWriteRow[],\n\ttxByIndex: ReadonlyMap<number, TxRecord>,\n): { txs: TxRecord[]; vmEvents: EventRecord[] } {\n\tconst txs = new Map<number | null, TxRecord>();\n\tconst vmEvents: EventRecord[] = [];\n\tfor (const w of [...writes].sort((a, b) => a.ordinal - b.ordinal)) {\n\t\tconst event = writeEvent(w);\n\t\tif (!event) continue;\n\t\tlet tx = txs.get(w.tx_index);\n\t\tif (!tx) {\n\t\t\tif (w.tx_index === null) {\n\t\t\t\ttx = { tx_id: \"\", type: \"block\", sender: \"\", status: \"success\" };\n\t\t\t} else {\n\t\t\t\tconst real = txByIndex.get(w.tx_index);\n\t\t\t\tif (!real) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`state write ${w.ordinal} names tx_index ${w.tx_index} the block does not have`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\ttx = real;\n\t\t\t}\n\t\t\ttx = { ...tx, tx_index: 0 };\n\t\t\ttxs.set(w.tx_index, tx);\n\t\t}\n\t\tvmEvents.push({\n\t\t\tid: vmEventId(tx.tx_id || \"block\", w.ordinal),\n\t\t\ttx_id: tx.tx_id,\n\t\t\ttype: event.type,\n\t\t\tevent_index: w.ordinal,\n\t\t\tdata: event.data,\n\t\t\tclock: \"vm\",\n\t\t});\n\t}\n\treturn { txs: [...txs.values()], vmEvents };\n}\n",
|
|
21
21
|
"import type { Block, Event, Transaction } from \"@secondlayer/shared/db\";\nimport type {\n\tIndexBlockRow,\n\tIndexEventRow,\n\tIndexTransactionRow,\n} from \"@secondlayer/shared/index-http\";\nimport { vmEventId } from \"./batch-loader.ts\";\n\nexport type {\n\tIndexBlockRow,\n\tIndexEventRow,\n\tIndexTransactionRow,\n} from \"@secondlayer/shared/index-http\";\n\n/**\n * Reconstruct the raw `blocks`/`events` row shapes the subgraph runtime expects\n * (the shapes `matchSources` + the handler runner read) from the decoded,\n * flattened rows the public Index API serves. This is what lets\n * `PublicApiBlockSource` feed the EXISTING pipeline byte-identically to the\n * Postgres tap.\n *\n * Two shape gaps the Index API can't avoid, handled here:\n * - Index event rows are flat (`event_type: \"ft_transfer\"`, columns\n * `sender`/`amount`/…); the runtime expects the node's nested `data` keyed by\n * a suffixed `type` (`ft_transfer_event`), with print under `contract_event`.\n * - nft/print Clarity values: the runtime decodes from the canonical hex\n * (`raw_value`), so we place the Index hex there. (The node's verbose\n * serde-tagged `value`, e.g. `{UInt:223}`, is not reproducible from hex and\n * is no longer read — see the nft tokenId normalization in runner.ts.)\n */\n\n/** ISO `block_time` (or null) → unix-seconds integer the runtime expects. */\nexport function isoToUnixSeconds(iso: string | null): number {\n\tif (!iso) return 0;\n\treturn Math.floor(new Date(iso).getTime() / 1000);\n}\n\nexport function reconstructBlock(b: IndexBlockRow): Block {\n\treturn {\n\t\theight: b.block_height,\n\t\thash: b.block_hash,\n\t\tparent_hash: b.parent_hash,\n\t\tburn_block_height: b.burn_block_height,\n\t\tburn_block_hash: b.burn_block_hash,\n\t\t// Present since the blocks endpoint started serving it; older API\n\t\t// deployments omit it, and a null propagates to a clean refusal in\n\t\t// `ctx.client.readOnly` rather than an unpinned tip read.\n\t\tindex_block_hash: b.index_block_hash ?? null,\n\t\ttimestamp: isoToUnixSeconds(b.block_time),\n\t\t// Index serves canonical rows only.\n\t\tcanonical: true,\n\t\tcreated_at: new Date(0),\n\t} as Block;\n}\n\nexport function reconstructTransaction(t: IndexTransactionRow): Transaction {\n\treturn {\n\t\ttx_id: t.tx_id,\n\t\tblock_height: t.block_height,\n\t\ttx_index: t.tx_index,\n\t\ttype: t.tx_type,\n\t\tsender: t.sender,\n\t\tstatus: t.status,\n\t\tcontract_id:\n\t\t\tt.contract_call?.contract_id ?? t.smart_contract?.contract_id ?? null,\n\t\tfunction_name: t.contract_call?.function_name ?? null,\n\t\t// Raw hex ClarityValues — the runner decodes them via its own deserializeCV\n\t\t// path, identical to the DB tap.\n\t\tfunction_args: t.contract_call?.function_args_hex ?? [],\n\t\traw_result: t.contract_call?.result_hex ?? null,\n\t\traw_tx: \"\",\n\t\tcreated_at: new Date(0),\n\t} as Transaction;\n}\n\n/**\n * Build a minimal canonical Transaction from an event row's joined tx context\n * (`tx_context=true` on /v1/index/events). For event-only subgraphs this lets\n * the loader materialize only the txs that actually carry a matched event,\n * instead of draining every transaction in the range (the ~37x reindex\n * over-fetch — see docs/sprints/indexing-speed/plan.md). `function_args` /\n * `raw_result` are empty: an event source never reads them (contract_call-only).\n */\nexport function reconstructTxFromEventRow(e: IndexEventRow): Transaction {\n\treturn {\n\t\ttx_id: e.tx_id,\n\t\tblock_height: e.block_height,\n\t\ttx_index: e.tx_index ?? 0,\n\t\ttype: e.tx_type ?? \"\",\n\t\tsender: e.tx_sender ?? \"\",\n\t\tstatus: e.tx_status ?? \"success\",\n\t\tcontract_id: e.tx_contract_id ?? null,\n\t\tfunction_name: e.tx_function_name ?? null,\n\t\tfunction_args: [],\n\t\traw_result: null,\n\t\traw_tx: \"\",\n\t\tcreated_at: new Date(0),\n\t} as Transaction;\n}\n\nexport function reconstructEvent(e: IndexEventRow): Event {\n\tconst base = {\n\t\t// Synthetic, deterministic id. The runtime only reads `id` for error logs\n\t\t// and the `*`-wildcard payload (which is streams-index-ineligible).\n\t\tid: `${e.tx_id}#${e.event_index}`,\n\t\ttx_id: e.tx_id,\n\t\tblock_height: e.block_height,\n\t\tevent_index: e.event_index,\n\t\tcreated_at: new Date(0),\n\t};\n\n\tswitch (e.event_type) {\n\t\tcase \"ft_transfer\":\n\t\tcase \"ft_mint\":\n\t\tcase \"ft_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: `${e.event_type}_event`,\n\t\t\t\tdata: {\n\t\t\t\t\tasset_identifier: e.asset_identifier,\n\t\t\t\t\tsender: e.sender,\n\t\t\t\t\trecipient: e.recipient,\n\t\t\t\t\tamount: e.amount,\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"nft_transfer\":\n\t\tcase \"nft_mint\":\n\t\tcase \"nft_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: `${e.event_type}_event`,\n\t\t\t\tdata: {\n\t\t\t\t\tasset_identifier: e.asset_identifier,\n\t\t\t\t\tsender: e.sender,\n\t\t\t\t\trecipient: e.recipient,\n\t\t\t\t\t// Canonical hex → runner decodes tokenId from raw_value.\n\t\t\t\t\traw_value: e.value,\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"stx_transfer\":\n\t\tcase \"stx_mint\":\n\t\tcase \"stx_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: `${e.event_type}_event`,\n\t\t\t\tdata: {\n\t\t\t\t\tsender: e.sender,\n\t\t\t\t\trecipient: e.recipient,\n\t\t\t\t\tamount: e.amount,\n\t\t\t\t\t// Raw stx_transfer always carries memo (\"\" when empty); Index\n\t\t\t\t\t// returns null for empty — default to \"\" to match the DB tap.\n\t\t\t\t\t...(e.event_type === \"stx_transfer\" ? { memo: e.memo ?? \"\" } : {}),\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"stx_lock\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: \"stx_lock_event\",\n\t\t\t\tdata: {\n\t\t\t\t\tlocked_address: e.sender,\n\t\t\t\t\tlocked_amount: e.amount,\n\t\t\t\t\tunlock_height: e.payload.unlock_height,\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"print\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype: \"contract_event\",\n\t\t\t\tdata: {\n\t\t\t\t\ttopic: e.payload.topic,\n\t\t\t\t\t// Index serves `contract_id`. Matcher + runner also accept\n\t\t\t\t\t// legacy `contract_identifier`; emit the current field.\n\t\t\t\t\tcontract_id: e.contract_id,\n\t\t\t\t\tvalue: e.payload.value,\n\t\t\t\t\traw_value: e.payload.raw_value,\n\t\t\t\t},\n\t\t\t} as Event;\n\n\t\tcase \"nested_contract_call\":\n\t\tcase \"var_set\":\n\t\tcase \"map_set\":\n\t\tcase \"map_insert\":\n\t\tcase \"map_delete\":\n\t\t\t// Second clock: `event_index` here is ordinal. Distinct id +\n\t\t\t// `clock` so it never dedupes or sorts against a classic row.\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tid: vmEventId(e.tx_id, e.event_index),\n\t\t\t\tclock: \"vm\",\n\t\t\t\ttype: e.event_type,\n\t\t\t\tdata: {\n\t\t\t\t\tcontract_identifier: e.contract_id,\n\t\t\t\t\t...(\"payload\" in e && e.payload && typeof e.payload === \"object\"\n\t\t\t\t\t\t? (e.payload as Record<string, unknown>)\n\t\t\t\t\t\t: {}),\n\t\t\t\t\tsender: \"sender\" in e ? e.sender : undefined,\n\t\t\t\t\tcaller: \"caller\" in e ? e.caller : undefined,\n\t\t\t\t\tfunction_name: \"function_name\" in e ? e.function_name : undefined,\n\t\t\t\t\tfunction_args: \"function_args\" in e ? e.function_args : undefined,\n\t\t\t\t\traw_result: \"raw_result\" in e ? e.raw_result : undefined,\n\t\t\t\t\tmap_name: \"map\" in e ? e.map : undefined,\n\t\t\t\t\tvar_name: \"var_name\" in e ? e.var_name : undefined,\n\t\t\t\t\traw_key: \"raw_key\" in e ? e.raw_key : undefined,\n\t\t\t\t\traw_value: \"raw_value\" in e ? e.raw_value : undefined,\n\t\t\t\t},\n\t\t\t} as Event;\n\t}\n}\n"
|
|
22
22
|
],
|
|
23
|
-
"mappings": "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",
|
|
24
|
-
"debugId": "
|
|
23
|
+
"mappings": "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",
|
|
24
|
+
"debugId": "4149099C0324E44864756E2164756E21",
|
|
25
25
|
"names": []
|
|
26
26
|
}
|