diff --git a/apps/indexer/.gitignore b/apps/indexer/.gitignore index 7535211..d9d133e 100644 --- a/apps/indexer/.gitignore +++ b/apps/indexer/.gitignore @@ -2,3 +2,5 @@ node_modules dist *.log .DS_Store +/data +*.db diff --git a/apps/indexer/drizzle.config.ts b/apps/indexer/drizzle.config.ts new file mode 100644 index 0000000..baf873b --- /dev/null +++ b/apps/indexer/drizzle.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "drizzle-kit"; + +export default defineConfig({ + schema: "./src/schema.ts", + out: "./drizzle", + dialect: "postgresql", +}); diff --git a/apps/indexer/drizzle/0000_dashing_leo.sql b/apps/indexer/drizzle/0000_dashing_leo.sql new file mode 100644 index 0000000..b66197f --- /dev/null +++ b/apps/indexer/drizzle/0000_dashing_leo.sql @@ -0,0 +1,29 @@ +CREATE TABLE "deposit" ( + "tx_id" text NOT NULL, + "chain_id" bigint NOT NULL, + "event_index" integer NOT NULL, + "contract_id" text NOT NULL, + "stacker" text NOT NULL, + "stx_amount" bigint, + "ststx_amount" bigint NOT NULL, + "referrer" text, + "pool" text, + "block_height" bigint NOT NULL, + "block_time" bigint NOT NULL, + CONSTRAINT "deposit_tx_id_chain_id_event_index_pk" PRIMARY KEY("tx_id","chain_id","event_index") +); +--> statement-breakpoint +CREATE TABLE "withdraw" ( + "tx_id" text NOT NULL, + "chain_id" bigint NOT NULL, + "event_index" integer NOT NULL, + "contract_id" text NOT NULL, + "action" text NOT NULL, + "stacker" text NOT NULL, + "nft_id" bigint, + "ststx_amount" bigint NOT NULL, + "stx_amount" bigint, + "block_height" bigint NOT NULL, + "block_time" bigint NOT NULL, + CONSTRAINT "withdraw_tx_id_chain_id_event_index_pk" PRIMARY KEY("tx_id","chain_id","event_index") +); diff --git a/apps/indexer/drizzle/meta/0000_snapshot.json b/apps/indexer/drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000..5cc5162 --- /dev/null +++ b/apps/indexer/drizzle/meta/0000_snapshot.json @@ -0,0 +1,187 @@ +{ + "id": "60debf12-6fea-4308-be94-1058663d1e4c", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.deposit": { + "name": "deposit", + "schema": "", + "columns": { + "tx_id": { + "name": "tx_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "chain_id": { + "name": "chain_id", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "event_index": { + "name": "event_index", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "contract_id": { + "name": "contract_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "stacker": { + "name": "stacker", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "stx_amount": { + "name": "stx_amount", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "ststx_amount": { + "name": "ststx_amount", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "referrer": { + "name": "referrer", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "pool": { + "name": "pool", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "block_height": { + "name": "block_height", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "block_time": { + "name": "block_time", + "type": "bigint", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "deposit_tx_id_chain_id_event_index_pk": { + "name": "deposit_tx_id_chain_id_event_index_pk", + "columns": ["tx_id", "chain_id", "event_index"] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.withdraw": { + "name": "withdraw", + "schema": "", + "columns": { + "tx_id": { + "name": "tx_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "chain_id": { + "name": "chain_id", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "event_index": { + "name": "event_index", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "contract_id": { + "name": "contract_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "stacker": { + "name": "stacker", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "nft_id": { + "name": "nft_id", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "ststx_amount": { + "name": "ststx_amount", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "stx_amount": { + "name": "stx_amount", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "block_height": { + "name": "block_height", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "block_time": { + "name": "block_time", + "type": "bigint", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "withdraw_tx_id_chain_id_event_index_pk": { + "name": "withdraw_tx_id_chain_id_event_index_pk", + "columns": ["tx_id", "chain_id", "event_index"] + } + }, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} diff --git a/apps/indexer/drizzle/meta/_journal.json b/apps/indexer/drizzle/meta/_journal.json new file mode 100644 index 0000000..2042b73 --- /dev/null +++ b/apps/indexer/drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1789128098101, + "tag": "0000_dashing_leo", + "breakpoints": true + } + ] +} diff --git a/apps/indexer/package.json b/apps/indexer/package.json index 2486eda..4c88867 100644 --- a/apps/indexer/package.json +++ b/apps/indexer/package.json @@ -6,10 +6,21 @@ "scripts": { "dev": "pnpm build && node --env-file-if-exists=.env dist/index.mjs", "build": "vp pack", - "test": "vp test" + "test": "vp test", + "generate": "drizzle-kit generate", + "studio": "drizzle-kit studio" + }, + "dependencies": { + "@electric-sql/pglite": "0.5.8", + "drizzle-orm": "0.45.2", + "pg": "8.23.0", + "stacksindex": "0.0.3", + "zod": "4.6.2" }, "devDependencies": { - "@types/node": "22.15.17", + "@types/node": "22.20.2", + "@types/pg": "8.23.1", + "drizzle-kit": "0.31.10", "typescript": "7.0.2", "vite-plus": "catalog:" } diff --git a/apps/indexer/src/index.ts b/apps/indexer/src/index.ts index 48c9bec..ad9cf76 100644 --- a/apps/indexer/src/index.ts +++ b/apps/indexer/src/index.ts @@ -1,5 +1,114 @@ -export function fn() { - return "Hello, tsdown!"; +import fs from "node:fs"; +import path from "node:path"; +import process from "node:process"; +import { fileURLToPath } from "node:url"; + +import { PGlite } from "@electric-sql/pglite"; +import { drizzle } from "drizzle-orm/pglite"; +import { migrate } from "drizzle-orm/pglite/migrator"; +import { createDatabase, createHistoricalRuntime, createLogger } from "stacksindex"; + +import { + createStackingDaoHandler, + STACKINGDAO_CONTRACTS, + STACKINGDAO_START_BLOCKS, +} from "./protocols/stackingdao/index.ts"; + +export * from "./schema.ts"; +export * from "./protocols/stackingdao/index.ts"; + +const apiKey = process.env.HIRO_API_KEY; +const dataDir = process.env.DATA_DIR ?? "./data"; + +fs.mkdirSync(dataDir, { recursive: true }); + +const appClient = new PGlite(path.join(dataDir, "app.db")); +await appClient.waitReady; +const appDb = drizzle({ client: appClient }); + +const migrationsFolder = fileURLToPath(new URL("../drizzle", import.meta.url)); +await migrate(appDb, { migrationsFolder }); + +const indexerDatabase = await createDatabase({ + kind: "pglite", + directory: path.join(dataDir, "indexer.db"), +}); + +const logger = createLogger({ + level: 2, +}); + +let isShuttingDown = false; +async function shutdown(code: number) { + if (isShuttingDown) { + return; + } + isShuttingDown = true; + try { + await appClient.close(); + } catch { + // Ignore error on close + } + try { + await indexerDatabase.close(); + } catch { + // Ignore error on close + } + process.exit(code); } -fn(); +process.on("SIGINT", () => { + // oxlint-disable-next-line eslint/no-void + void shutdown(0); +}); +process.on("SIGTERM", () => { + // oxlint-disable-next-line eslint/no-void + void shutdown(0); +}); + +const runtime = createHistoricalRuntime({ + logger, + db: indexerDatabase.db, + network: "mainnet", + api: { apiKey }, +}); + +const stackingDaoHandler = createStackingDaoHandler({ db: appDb, logger }); + +const contracts = [ + { + contractId: STACKINGDAO_CONTRACTS.CORE_V1, + startBlock: STACKINGDAO_START_BLOCKS[STACKINGDAO_CONTRACTS.CORE_V1], + handler: stackingDaoHandler, + }, + { + contractId: STACKINGDAO_CONTRACTS.CORE_V2, + startBlock: STACKINGDAO_START_BLOCKS[STACKINGDAO_CONTRACTS.CORE_V2], + handler: stackingDaoHandler, + }, + { + contractId: STACKINGDAO_CONTRACTS.CORE_V3, + startBlock: STACKINGDAO_START_BLOCKS[STACKINGDAO_CONTRACTS.CORE_V3], + handler: stackingDaoHandler, + }, + { + contractId: STACKINGDAO_CONTRACTS.CORE_V4, + startBlock: STACKINGDAO_START_BLOCKS[STACKINGDAO_CONTRACTS.CORE_V4], + handler: stackingDaoHandler, + }, +]; + +logger.info({ + msg: "Starting StackingDAO historical indexer", + contracts: contracts.map((c) => ({ contractId: c.contractId, startBlock: c.startBlock })), +}); + +const result = await runtime.run(contracts); + +if (result.isErr()) { + logger.error({ msg: "Error running historical sync", error: result.error }); + await shutdown(1); +} else { + logger.info({ msg: "Historical sync finished successfully" }); + await shutdown(0); +} diff --git a/apps/indexer/src/protocols/stackingdao/contracts.ts b/apps/indexer/src/protocols/stackingdao/contracts.ts new file mode 100644 index 0000000..8d9294f --- /dev/null +++ b/apps/indexer/src/protocols/stackingdao/contracts.ts @@ -0,0 +1,15 @@ +export const CHAIN_ID = 1n; + +export const STACKINGDAO_CONTRACTS = { + CORE_V1: "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.stacking-dao-core-v1", + CORE_V2: "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.stacking-dao-core-v2", + CORE_V3: "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.stacking-dao-core-v3", + CORE_V4: "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.stacking-dao-core-v4", +} as const; + +export const STACKINGDAO_START_BLOCKS: Record = { + [STACKINGDAO_CONTRACTS.CORE_V1]: 132118, + [STACKINGDAO_CONTRACTS.CORE_V2]: 147394, + [STACKINGDAO_CONTRACTS.CORE_V3]: 180551, + [STACKINGDAO_CONTRACTS.CORE_V4]: 489238, +}; diff --git a/apps/indexer/src/protocols/stackingdao/event-schemas.ts b/apps/indexer/src/protocols/stackingdao/event-schemas.ts new file mode 100644 index 0000000..e1802dc --- /dev/null +++ b/apps/indexer/src/protocols/stackingdao/event-schemas.ts @@ -0,0 +1,109 @@ +import { z } from "zod"; + +// --- Deposit Schemas --- + +const depositV1Schema = z + .object({ + action: z.literal("deposit"), + data: z.object({ + stacker: z.string(), + amount: z.bigint(), + referrer: z.string().nullable().optional(), + "block-height": z.bigint().optional(), + }), + }) + .transform((val) => ({ + kind: "deposit" as const, + stacker: val.data.stacker, + stxAmount: null, + ststxAmount: val.data.amount, + referrer: val.data.referrer ?? null, + pool: null, + })); + +const depositV2Schema = z + .object({ + action: z.literal("deposit"), + data: z.object({ + stacker: z.string(), + "stx-amount": z.bigint(), + "stxstx-amount": z.bigint().optional(), + "ststx-amount": z.bigint().optional(), + referrer: z.string().nullable().optional(), + pool: z.string().nullable().optional(), + "block-height": z.bigint().optional(), + }), + }) + .transform((val) => { + const ststxAmount = val.data["stxstx-amount"] ?? val.data["ststx-amount"]; + if (ststxAmount === undefined) { + throw new Error("Missing ststx-amount or stxstx-amount in deposit event"); + } + return { + kind: "deposit" as const, + stacker: val.data.stacker, + stxAmount: val.data["stx-amount"], + ststxAmount, + referrer: val.data.referrer ?? null, + pool: val.data.pool ?? null, + }; + }); + +export const depositLogSchema = z.union([depositV2Schema, depositV1Schema]); + +export type NormalizedDepositLog = z.infer; + +// --- Withdraw Schemas --- + +const withdrawV1Schema = z + .object({ + action: z.literal("withdraw"), + data: z.object({ + stacker: z.string(), + amount: z.bigint(), + "block-height": z.bigint().optional(), + }), + }) + .transform((val) => ({ + kind: "withdraw" as const, + action: "withdraw", + stacker: val.data.stacker, + nftId: null, + ststxAmount: val.data.amount, + stxAmount: null, + })); + +const withdrawV2ActionSchema = z.union([ + z.literal("withdraw"), + z.literal("init-withdraw"), + z.literal("cancel-withdraw"), + z.literal("withdraw-idle"), +]); + +const withdrawV2Schema = z + .object({ + action: withdrawV2ActionSchema, + data: z.object({ + stacker: z.string(), + "nft-id": z.bigint().nullable().optional(), + "ststx-amount": z.bigint(), + "stx-amount": z.bigint().nullable().optional(), + "block-height": z.bigint().optional(), + }), + }) + .transform((val) => ({ + kind: "withdraw" as const, + action: val.action, + stacker: val.data.stacker, + nftId: val.data["nft-id"] ?? null, + ststxAmount: val.data["ststx-amount"], + stxAmount: val.data["stx-amount"] ?? null, + })); + +export const withdrawLogSchema = z.union([withdrawV2Schema, withdrawV1Schema]); + +export type NormalizedWithdrawLog = z.infer; + +export const stackingDaoLogSchema = z.union([depositLogSchema, withdrawLogSchema]); + +export type StackingDaoLog = z.infer; diff --git a/apps/indexer/src/protocols/stackingdao/handler.test.ts b/apps/indexer/src/protocols/stackingdao/handler.test.ts new file mode 100644 index 0000000..1925db9 --- /dev/null +++ b/apps/indexer/src/protocols/stackingdao/handler.test.ts @@ -0,0 +1,245 @@ +import { fileURLToPath } from "node:url"; + +import { PGlite } from "@electric-sql/pglite"; +import { eq } from "drizzle-orm"; +import { drizzle } from "drizzle-orm/pglite"; +import { migrate } from "drizzle-orm/pglite/migrator"; +import type { HandlerEvent, Logger } from "stacksindex"; +import { describe, expect, it } from "vitest"; + +import { depositTable, withdrawTable } from "../../schema.ts"; +import { STACKINGDAO_CONTRACTS } from "./contracts.ts"; +import { depositLogSchema, stackingDaoLogSchema, withdrawLogSchema } from "./event-schemas.ts"; +import { createStackingDaoHandler } from "./handler.ts"; + +const mockLogger: Logger = { + info: () => {}, + warn: () => {}, + error: () => {}, + debug: () => {}, + trace: () => {}, +}; + +describe("StackingDAO event schemas", () => { + it("parses v1 deposit events", () => { + const raw = { + action: "deposit", + data: { + stacker: "SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7", + amount: 5000000000n, + referrer: null, + "block-height": 135000n, + }, + }; + const parsed = depositLogSchema.safeParse(raw); + expect(parsed.success).toBe(true); + if (!parsed.success) return; + + expect(parsed.data.kind).toBe("deposit"); + expect(parsed.data.stacker).toBe("SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7"); + expect(parsed.data.ststxAmount).toBe(5000000000n); + expect(parsed.data.stxAmount).toBeNull(); + expect(parsed.data.referrer).toBeNull(); + }); + + it("parses v2 deposit events with stxstx-amount and referrer", () => { + const raw = { + action: "deposit", + data: { + stacker: "SP3VCX5NFQ8VCHFS9M6N40ZJNVTRT4HZ62WFH5C4Q", + "stx-amount": 1000000000n, + "stxstx-amount": 920000000n, + referrer: "SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7", + pool: null, + "block-height": 150000n, + }, + }; + const parsed = depositLogSchema.safeParse(raw); + expect(parsed.success).toBe(true); + if (!parsed.success) return; + + expect(parsed.data.kind).toBe("deposit"); + expect(parsed.data.stacker).toBe("SP3VCX5NFQ8VCHFS9M6N40ZJNVTRT4HZ62WFH5C4Q"); + expect(parsed.data.stxAmount).toBe(1000000000n); + expect(parsed.data.ststxAmount).toBe(920000000n); + expect(parsed.data.referrer).toBe("SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7"); + }); + + it("parses v1 withdraw events", () => { + const raw = { + action: "withdraw", + data: { + stacker: "SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7", + amount: 2500000000n, + "block-height": 136000n, + }, + }; + const parsed = withdrawLogSchema.safeParse(raw); + expect(parsed.success).toBe(true); + if (!parsed.success) return; + + expect(parsed.data.kind).toBe("withdraw"); + expect(parsed.data.action).toBe("withdraw"); + expect(parsed.data.stacker).toBe("SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7"); + expect(parsed.data.ststxAmount).toBe(2500000000n); + expect(parsed.data.stxAmount).toBeNull(); + expect(parsed.data.nftId).toBeNull(); + }); + + it("parses v2 init-withdraw events with nft-id", () => { + const raw = { + action: "init-withdraw", + data: { + stacker: "SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7", + "nft-id": 105n, + "ststx-amount": 3000000000n, + "stx-amount": 3150000000n, + "block-height": 152000n, + }, + }; + const parsed = withdrawLogSchema.safeParse(raw); + expect(parsed.success).toBe(true); + if (!parsed.success) return; + + expect(parsed.data.kind).toBe("withdraw"); + expect(parsed.data.action).toBe("init-withdraw"); + expect(parsed.data.nftId).toBe(105n); + expect(parsed.data.ststxAmount).toBe(3000000000n); + expect(parsed.data.stxAmount).toBe(3150000000n); + }); + + it("parses v4 withdraw-idle events", () => { + const raw = { + action: "withdraw-idle", + data: { + stacker: "SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7", + "ststx-amount": 1000000000n, + "stx-amount": 1050000000n, + "block-height": 500000n, + }, + }; + const parsed = withdrawLogSchema.safeParse(raw); + expect(parsed.success).toBe(true); + if (!parsed.success) return; + + expect(parsed.data.kind).toBe("withdraw"); + expect(parsed.data.action).toBe("withdraw-idle"); + expect(parsed.data.ststxAmount).toBe(1000000000n); + expect(parsed.data.stxAmount).toBe(1050000000n); + }); + + it("ignores non-matching log events", () => { + const raw = { + action: "something-else", + data: { foo: "bar" }, + }; + const parsed = stackingDaoLogSchema.safeParse(raw); + expect(parsed.success).toBe(false); + }); +}); + +describe("StackingDAO event handler with PGlite", () => { + it("inserts deposit and withdraw rows into database", async () => { + const client = new PGlite(); + await client.waitReady; + const db = drizzle({ client }); + + const migrationsFolder = fileURLToPath(new URL("../../../drizzle", import.meta.url)); + await migrate(db, { migrationsFolder }); + + const handler = createStackingDaoHandler({ + db, + logger: mockLogger, + }); + + // Hex-encoded Clarity tuple for: + // (print { action: "deposit", data: { stacker: 'SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG, referrer: none, amount: u5000, block-height: u132200 } }) + // In stacksindex, decodeHex is called. We can mock a HandlerEvent with contract_log.value.hex + // Using a valid hex from clarity value + // Alternatively, let's construct Clarity value or test handler + const mockDepositEvent: HandlerEvent = { + event_type: "smart_contract_log", + contract_log: { + contract_id: STACKINGDAO_CONTRACTS.CORE_V1, + topic: "print", + value: { + hex: "0x0c0000000206616374696f6e0d000000076465706f73697404646174610c0000000406616d6f756e7401000000000000000000000000000013880c626c6f636b2d68656967687401000000000000000000000000000204680872656665727265720907737461636b657205162b78161ee235efdc923b7ffc2aa09440628e8334", + repr: '(tuple (action "deposit") (data (tuple (amount u5000) (block-height u132200) (referrer none) (stacker \'SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG))))', + }, + }, + tx_id: "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", + event_index: 0, + block_height: 132200, + block_time: 1700000000, + tx_index: 1, + sender_address: "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG", + }; + + // oxlint-disable-next-line typescript/no-explicit-any + await handler(mockDepositEvent, {} as any); + + const deposits = await db + .select() + .from(depositTable) + .where(eq(depositTable.txId, mockDepositEvent.tx_id)); + expect(deposits.length).toBe(1); + expect(deposits[0].txId).toBe(mockDepositEvent.tx_id); + expect(deposits[0].contractId).toBe(STACKINGDAO_CONTRACTS.CORE_V1); + expect(deposits[0].ststxAmount).toBe(5000n); + expect(deposits[0].stxAmount).toBeNull(); + expect(deposits[0].blockHeight).toBe(132200n); + + // Test idempotency (inserting same event again should not throw) + // oxlint-disable-next-line typescript/no-explicit-any + await handler(mockDepositEvent, {} as any); + const depositsAfterSecond = await db.select().from(depositTable); + expect(depositsAfterSecond.length).toBe(1); + + // Test withdraw event handling: + // (print { action: "withdraw", data: { stacker: 'SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG, amount: u2500, block-height: u133000 } }) + const mockWithdrawEvent: HandlerEvent = { + event_type: "smart_contract_log", + contract_log: { + contract_id: STACKINGDAO_CONTRACTS.CORE_V1, + topic: "print", + value: { + hex: "0x0c0000000206616374696f6e0d00000008776974686472617704646174610c0000000306616d6f756e7401000000000000000000000000000009c40c626c6f636b2d686569676874010000000000000000000000000002078807737461636b657205162b78161ee235efdc923b7ffc2aa09440628e8334", + repr: '(tuple (action "withdraw") (data (tuple (amount u2500) (block-height u133000) (stacker \'SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG))))', + }, + }, + tx_id: "0x9876543210abcdef9876543210abcdef9876543210abcdef9876543210abcdef", + event_index: 0, + block_height: 133000, + block_time: 1700100000, + tx_index: 2, + sender_address: "SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG", + }; + + // oxlint-disable-next-line typescript/no-explicit-any + await handler(mockWithdrawEvent, {} as any); + + const withdrawals = await db + .select() + .from(withdrawTable) + .where(eq(withdrawTable.txId, mockWithdrawEvent.tx_id)); + expect(withdrawals.length).toBe(1); + expect(withdrawals[0].action).toBe("withdraw"); + expect(withdrawals[0].contractId).toBe(STACKINGDAO_CONTRACTS.CORE_V1); + expect(withdrawals[0].ststxAmount).toBe(2500n); + expect(withdrawals[0].stxAmount).toBeNull(); + expect(withdrawals[0].nftId).toBeNull(); + + // Test invalid hex handling (should not throw) + const invalidEvent: HandlerEvent = { + ...mockDepositEvent, + contract_log: { + ...mockDepositEvent.contract_log, + value: { hex: "0xdeadbeefinvalid", repr: "invalid" }, + }, + }; + // oxlint-disable-next-line typescript/no-explicit-any + await expect(handler(invalidEvent, {} as any)).resolves.not.toThrow(); + + await client.close(); + }); +}); diff --git a/apps/indexer/src/protocols/stackingdao/handler.ts b/apps/indexer/src/protocols/stackingdao/handler.ts new file mode 100644 index 0000000..7f18786 --- /dev/null +++ b/apps/indexer/src/protocols/stackingdao/handler.ts @@ -0,0 +1,104 @@ +import type { PgliteDatabase } from "drizzle-orm/pglite"; +import { decodeHex, type EventHandler, type Logger } from "stacksindex"; + +import { depositTable, withdrawTable } from "../../schema.ts"; +import { CHAIN_ID } from "./contracts.ts"; +import { stackingDaoLogSchema } from "./event-schemas.ts"; + +// oxlint-disable-next-line typescript/no-explicit-any +export type AppDatabase = PgliteDatabase; + +export interface CreateStackingDaoHandlerOptions { + db: AppDatabase; + logger: Logger; + chainId?: bigint; +} + +export function createStackingDaoHandler({ + db, + logger, + chainId = CHAIN_ID, +}: CreateStackingDaoHandlerOptions): EventHandler { + return async (event) => { + const rawValue = event.contract_log.value.hex; + let decoded: unknown; + try { + decoded = decodeHex(rawValue); + } catch (err) { + logger.debug({ + msg: "Failed to decode Clarity log value", + contractId: event.contract_log.contract_id, + txId: event.tx_id, + error: err, + }); + return; + } + + const parsed = stackingDaoLogSchema.safeParse(decoded); + if (!parsed.success) { + logger.trace?.({ + msg: "Non-matching StackingDAO log event", + contractId: event.contract_log.contract_id, + txId: event.tx_id, + }); + return; + } + + const log = parsed.data; + + if (log.kind === "deposit") { + await db + .insert(depositTable) + .values({ + txId: event.tx_id, + chainId, + eventIndex: event.event_index, + contractId: event.contract_log.contract_id, + stacker: log.stacker, + stxAmount: log.stxAmount, + ststxAmount: log.ststxAmount, + referrer: log.referrer, + pool: log.pool, + blockHeight: BigInt(event.block_height), + blockTime: BigInt(event.block_time), + }) + .onConflictDoNothing(); + + logger.debug({ + msg: "StackingDAO deposit indexed", + txId: event.tx_id, + stacker: log.stacker, + ststxAmount: log.ststxAmount, + stxAmount: log.stxAmount, + contractId: event.contract_log.contract_id, + }); + } else { + await db + .insert(withdrawTable) + .values({ + txId: event.tx_id, + chainId, + eventIndex: event.event_index, + contractId: event.contract_log.contract_id, + action: log.action, + stacker: log.stacker, + nftId: log.nftId, + ststxAmount: log.ststxAmount, + stxAmount: log.stxAmount, + blockHeight: BigInt(event.block_height), + blockTime: BigInt(event.block_time), + }) + .onConflictDoNothing(); + + logger.debug({ + msg: "StackingDAO withdraw indexed", + action: log.action, + txId: event.tx_id, + stacker: log.stacker, + ststxAmount: log.ststxAmount, + stxAmount: log.stxAmount, + contractId: event.contract_log.contract_id, + }); + } + }; +} diff --git a/apps/indexer/src/protocols/stackingdao/index.ts b/apps/indexer/src/protocols/stackingdao/index.ts new file mode 100644 index 0000000..31e7fd7 --- /dev/null +++ b/apps/indexer/src/protocols/stackingdao/index.ts @@ -0,0 +1,3 @@ +export * from "./contracts.ts"; +export * from "./event-schemas.ts"; +export * from "./handler.ts"; diff --git a/apps/indexer/src/schema.ts b/apps/indexer/src/schema.ts new file mode 100644 index 0000000..4a60717 --- /dev/null +++ b/apps/indexer/src/schema.ts @@ -0,0 +1,51 @@ +import { pgTable, primaryKey } from "drizzle-orm/pg-core"; + +export const depositTable = pgTable( + "deposit", + (table) => ({ + txId: table.text("tx_id").notNull(), + chainId: table.bigint("chain_id", { mode: "bigint" }).notNull(), + eventIndex: table.integer("event_index").notNull(), + contractId: table.text("contract_id").notNull(), + stacker: table.text("stacker").notNull(), + stxAmount: table.bigint("stx_amount", { mode: "bigint" }), + ststxAmount: table.bigint("ststx_amount", { mode: "bigint" }).notNull(), + referrer: table.text("referrer"), + pool: table.text("pool"), + blockHeight: table.bigint("block_height", { mode: "bigint" }).notNull(), + blockTime: table.bigint("block_time", { mode: "bigint" }).notNull(), + }), + (table) => [ + primaryKey({ + columns: [table.txId, table.chainId, table.eventIndex], + }), + ], +); + +export type Deposit = typeof depositTable.$inferSelect; +export type InsertDeposit = typeof depositTable.$inferInsert; + +export const withdrawTable = pgTable( + "withdraw", + (table) => ({ + txId: table.text("tx_id").notNull(), + chainId: table.bigint("chain_id", { mode: "bigint" }).notNull(), + eventIndex: table.integer("event_index").notNull(), + contractId: table.text("contract_id").notNull(), + action: table.text("action").notNull(), + stacker: table.text("stacker").notNull(), + nftId: table.bigint("nft_id", { mode: "bigint" }), + ststxAmount: table.bigint("ststx_amount", { mode: "bigint" }).notNull(), + stxAmount: table.bigint("stx_amount", { mode: "bigint" }), + blockHeight: table.bigint("block_height", { mode: "bigint" }).notNull(), + blockTime: table.bigint("block_time", { mode: "bigint" }).notNull(), + }), + (table) => [ + primaryKey({ + columns: [table.txId, table.chainId, table.eventIndex], + }), + ], +); + +export type Withdraw = typeof withdrawTable.$inferSelect; +export type InsertWithdraw = typeof withdrawTable.$inferInsert; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5d6896b..24cb631 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,19 +29,41 @@ importers: version: 2.5.3 vite-plus: specifier: 'catalog:' - version: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0) + version: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0) apps/indexer: + dependencies: + '@electric-sql/pglite': + specifier: 0.5.8 + version: 0.5.8 + drizzle-orm: + specifier: 0.45.2 + version: 0.45.2(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@7.0.2)) + pg: + specifier: 8.23.0 + version: 8.23.0 + stacksindex: + specifier: 0.0.3 + version: 0.0.3(@electric-sql/pglite@0.5.8)(@stacks/network@7.6.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@7.0.2)))(pg@8.23.0)(supports-color@10.2.2)(typescript@7.0.2) + zod: + specifier: 4.6.2 + version: 4.6.2 devDependencies: '@types/node': - specifier: 22.15.17 - version: 22.15.17 + specifier: 22.20.2 + version: 22.20.2 + '@types/pg': + specifier: 8.23.1 + version: 8.23.1 + drizzle-kit: + specifier: 0.31.10 + version: 0.31.10 typescript: specifier: 7.0.2 version: 7.0.2 vite-plus: specifier: 'catalog:' - version: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0) + version: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.20.2)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0) apps/server: dependencies: @@ -71,10 +93,10 @@ importers: version: 3.4.2 db0: specifier: 0.3.2 - version: 0.3.2(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))) + version: 0.3.2(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))) drizzle-orm: specifier: 0.39.3 - version: 0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3)) + version: 0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3)) h3: specifier: 1.15.3 version: 1.15.3 @@ -89,7 +111,7 @@ importers: version: 1.18.2 unstorage: specifier: 1.16.0 - version: 1.16.0(db0@0.3.2(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))))(ioredis@5.11.1(supports-color@10.2.2)) + version: 1.16.0(db0@0.3.2(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))))(ioredis@5.11.1(supports-color@10.2.2)) zod: specifier: 3.24.4 version: 3.24.4 @@ -99,7 +121,7 @@ importers: devDependencies: nitropack: specifier: 2.11.11 - version: 2.11.11(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3)))(supports-color@10.2.2) + version: 2.11.11(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3)))(supports-color@10.2.2) prisma: specifier: 6.7.0 version: 6.7.0(supports-color@10.2.2)(typescript@5.9.3) @@ -180,7 +202,7 @@ importers: version: 1.0.7(tailwindcss@3.4.15) unstorage: specifier: 1.16.0 - version: 1.16.0(db0@0.3.2(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3))))(ioredis@5.11.1(supports-color@10.2.2)) + version: 1.16.0(db0@0.3.2(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3))))(ioredis@5.11.1(supports-color@10.2.2)) zod: specifier: 3.24.4 version: 3.24.4 @@ -418,12 +440,18 @@ packages: resolution: {integrity: sha512-Z8XjM75aWZ/ekUzBjlr/OqQsLWtJY4nVtruxopAt+FlYHfY0/gKl85nD16aEqbTkU53kJcm5psID0L2/sQMmuw==} hasBin: true + '@drizzle-team/brocli@0.10.2': + resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} + '@ecies/ciphers@0.2.6': resolution: {integrity: sha512-patgsRPKGkhhoBjETV4XxD0En4ui5fbX0hzayqI3M8tvNMGUoUvmyYAIWwlxBc1KX5cturfqByYdj5bYGRpN9g==} engines: {bun: '>=1', deno: '>=2.7.10', node: '>=16'} peerDependencies: '@noble/ciphers': ^1.0.0 + '@electric-sql/pglite@0.5.8': + resolution: {integrity: sha512-n9tsbUOhwx2epK1V0ZG9Ar4SHWUju04dhmzZXiSBXwBoleOvIfals33NAaWgagQVAL4Rbvx/Ptsu3P+pA09f6Q==} + '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} @@ -436,6 +464,14 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@esbuild-kit/core-utils@3.3.2': + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + deprecated: 'Merged into tsx: https://tsx.hirok.io' + + '@esbuild-kit/esm-loader@2.6.5': + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + deprecated: 'Merged into tsx: https://tsx.hirok.io' + '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} @@ -454,6 +490,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.25.12': resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} @@ -472,6 +514,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.25.12': resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} engines: {node: '>=18'} @@ -490,6 +538,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.25.12': resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} engines: {node: '>=18'} @@ -508,6 +562,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.25.12': resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} engines: {node: '>=18'} @@ -526,6 +586,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.25.12': resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} engines: {node: '>=18'} @@ -544,6 +610,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.25.12': resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} engines: {node: '>=18'} @@ -562,6 +634,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} engines: {node: '>=18'} @@ -580,6 +658,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.25.12': resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} engines: {node: '>=18'} @@ -598,6 +682,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.25.12': resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} engines: {node: '>=18'} @@ -616,6 +706,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.25.12': resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} engines: {node: '>=18'} @@ -634,6 +730,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.25.12': resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} engines: {node: '>=18'} @@ -652,6 +754,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.25.12': resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} engines: {node: '>=18'} @@ -670,6 +778,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.25.12': resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} engines: {node: '>=18'} @@ -688,6 +802,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.25.12': resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} engines: {node: '>=18'} @@ -706,6 +826,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.25.12': resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} engines: {node: '>=18'} @@ -724,6 +850,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.25.12': resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} engines: {node: '>=18'} @@ -760,6 +892,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} engines: {node: '>=18'} @@ -796,6 +934,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} engines: {node: '>=18'} @@ -826,6 +970,12 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.25.12': resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} engines: {node: '>=18'} @@ -844,6 +994,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.25.12': resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} engines: {node: '>=18'} @@ -862,6 +1018,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.25.12': resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} @@ -880,6 +1042,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.25.12': resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} engines: {node: '>=18'} @@ -3023,6 +3191,13 @@ packages: '@stacks/blockchain-api-client@8.10.0': resolution: {integrity: sha512-e4se2QjRF4R6tBSFSanMvtK8YpxOd54NoQRwH4SD6dt+IWP5jMDwztup2jCNbuUFDEPlID/TErOUMh4mU0NBCA==} + '@stacks/blockchain-api-client@9.2.0': + resolution: {integrity: sha512-CCSGzjrKMx1k4g8ZJfUD43DwDyZybzAIpq17mig5TcevGgpI3ieEFnHqCAS6FVggW9CcTDkcl49M2D98e6IT+w==} + + '@stacks/codec@2.1.0': + resolution: {integrity: sha512-RzI3UQ5oNXjcO1we2e6qq5/27+SosrmX2gZZxSi6VPTB26bTUxBY1/z1wxnJ820xu7xTg6Bhf8ssNkkZlcsz0A==} + engines: {node: '>=20'} + '@stacks/common@7.6.0': resolution: {integrity: sha512-VUW8WDmZP4wXUNWVvpFerV+7LQ0PqIn8YOs8AjSUMA7ZOXIRLxJHoKxjfiHzJqazy7KlyryPW4kSNBCr7tLqhQ==} @@ -3035,6 +3210,9 @@ packages: '@stacks/transactions@7.0.6': resolution: {integrity: sha512-qRGo4tNwOh+avUv/u4JGqqUWQ8xW/iUWtJV0o3BxpMyRxqDXmj+m+yeAEVYf9jRDouOo+NaWmwtRmWc0URZPdw==} + '@stacks/transactions@7.6.0': + resolution: {integrity: sha512-s7F7eJtQVnZoB79j8pY9SLKhlvvdYZZD1NSDRWrFjzSJTDmxptL8c50S563WFja6KOhFOgg1jd+p0XWTxFAVyA==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -3165,6 +3343,12 @@ packages: '@types/node@22.15.17': resolution: {integrity: sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==} + '@types/node@22.20.2': + resolution: {integrity: sha512-xlvWf4Vs9n1PEVYwP1n4vvG07M6y8WgvJ2t0vbrWTmijsIHp1cS+uJ2kMIRdY3nHZK0nCYKrPeD171+SzF4/zw==} + + '@types/node@24.13.4': + resolution: {integrity: sha512-YJ7EqCstVTzIr0fMr7qul/977en+pQHrfmuKIo6Zr9i75Be21dr3MovcfvGtyvi2HAUrRerWps5sMO9I7WaxDw==} + '@types/node@26.5.1': resolution: {integrity: sha512-CzNm2FezW4VR/LjG6yUdiEgLE/rAQ9Slj5gCu/C2VrdcW7I0ahNZ8DRbHT7zOZ6r3ONgd/bsQIeSaoDGrd1C6g==} @@ -3174,6 +3358,9 @@ packages: '@types/pg-pool@2.0.6': resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} + '@types/pg@8.23.1': + resolution: {integrity: sha512-fKVHpikPdg4GKks3JuLEhvwSyvwzF23hnabPy6DD8ljVbC7+6J5dQzdv4arV6jqq57djnMgs1HKBxX4P8aBI3A==} + '@types/pg@8.6.1': resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} @@ -4120,6 +4307,9 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + better-result@3.0.1: + resolution: {integrity: sha512-rnCeqEXkKPHmz5MO5ZroPRDyHe4YvlNPyy7qj8cVcWs/GnvSvC3086G74/220W+wWcIWlXgzvcjskFV0A4blUQ==} + better-sqlite3@11.10.0: resolution: {integrity: sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==} @@ -4270,6 +4460,26 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + clarity-abitype@0.7.1: + resolution: {integrity: sha512-0ToR38l5cK8tf5FbftUlG43NS1HnnEjgKUt8pPgSUM3nCg64B2PdzdOf3OfJKPi0LA9MAJCRMeYslt4qaB6pzQ==} + peerDependencies: + '@stacks/clarinet-sdk': '>= 3.0.0' + '@stacks/connect': '>= 8.0.0' + '@stacks/network': '>= 7.3.0' + '@stacks/transactions': '>= 7.3.0' + typescript: '>=5.4.0 || >=6.0.0 || >=7.0.0' + peerDependenciesMeta: + '@stacks/clarinet-sdk': + optional: true + '@stacks/connect': + optional: true + '@stacks/network': + optional: true + '@stacks/transactions': + optional: true + typescript: + optional: true + class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} @@ -4694,6 +4904,10 @@ packages: resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} engines: {node: '>=12'} + drizzle-kit@0.31.10: + resolution: {integrity: sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==} + hasBin: true + drizzle-orm@0.39.3: resolution: {integrity: sha512-EZ8ZpYvDIvKU9C56JYLOmUskazhad+uXZCTCRN4OnRMsL+xAJ05dv1eCpAG5xzhsm1hqiuC5kAZUCS924u2DTw==} peerDependencies: @@ -4780,6 +4994,98 @@ packages: sqlite3: optional: true + drizzle-orm@0.45.2: + resolution: {integrity: sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=4' + '@electric-sql/pglite': '>=0.2.0' + '@libsql/client': '>=0.10.0' + '@libsql/client-wasm': '>=0.10.0' + '@neondatabase/serverless': '>=0.10.0' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1.13' + '@prisma/client': '*' + '@tidbcloud/serverless': '*' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/sql.js': '*' + '@upstash/redis': '>=1.34.7' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=14.0.0' + gel: '>=2' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + prisma: '*' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@libsql/client-wasm': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@prisma/client': + optional: true + '@tidbcloud/serverless': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/sql.js': + optional: true + '@upstash/redis': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + gel: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + prisma: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -4885,6 +5191,11 @@ packages: peerDependencies: esbuild: '>=0.12 <1' + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.25.12: resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} @@ -6490,10 +6801,21 @@ packages: perfect-debounce@2.1.0: resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + pg-cloudflare@1.4.0: + resolution: {integrity: sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==} + + pg-connection-string@2.14.0: + resolution: {integrity: sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==} + pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} + pg-pool@3.14.0: + resolution: {integrity: sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==} + peerDependencies: + pg: '>=8.0' + pg-protocol@1.16.0: resolution: {integrity: sha512-sILXutLVjCLjcDuOmvhX5e2Z4cS5qG/6Bu3VkpFwdf/633ElGLpEh9bgmuI5I4sqKqkifQiGyiCcx1HdtrK7tg==} @@ -6501,6 +6823,18 @@ packages: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} + pg@8.23.0: + resolution: {integrity: sha512-Ip2EQCngowJLGOfCwkFhPXU7/ljlhn6Rxlmy4XYfL2Y+vyRM59+8uR2xqRWKdYmbXmxCFOAmKxBuSUCdF34qLg==} + engines: {node: '>= 16.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -7104,6 +7438,10 @@ packages: spdx-license-ids@3.0.23: resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + stable-hash@0.0.5: resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} @@ -7113,6 +7451,18 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stacksindex@0.0.3: + resolution: {integrity: sha512-AwSD+BnEz5FpYvu4pXv3zdaiAMOL9BAaLDrzGS5PL1VYThP6PGqZjKP1OyaXRj7XraGJnTMaqHPlmJeJwDvdrQ==} + peerDependencies: + '@electric-sql/pglite': ^0.5.0 + drizzle-orm: ^0.45.2 + pg: ^8.0.0 + peerDependenciesMeta: + '@electric-sql/pglite': + optional: true + pg: + optional: true + stacktrace-parser@0.1.11: resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==} engines: {node: '>=6'} @@ -7365,6 +7715,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.23.13: + resolution: {integrity: sha512-BL5MGkRln6aDYhb0xbQlEAGw743BaZYWdbWtdJOBriYJboKgUUYCadFp2/FpBBZquBC/ezNBn7wMMPx7FDZUDw==} + engines: {node: '>=18.0.0'} + hasBin: true + tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -7474,9 +7829,16 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + undici-types@8.9.0: resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} + undici@8.10.2: + resolution: {integrity: sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ==} + engines: {node: '>=22.19.0'} + unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} @@ -7882,6 +8244,9 @@ packages: zod@3.24.4: resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + zod@4.6.2: + resolution: {integrity: sha512-lh5RCAGFa1Cm2hjtNwLQhSs/AsqdWnTQaBER9fEwN/88pSh7KOtJavtBx/0VlkN/uFd61SwYmljLMDAsHlvzBQ==} + snapshots: '@alloc/quick-lru@5.3.0': {} @@ -8155,10 +8520,14 @@ snapshots: picomatch: 4.0.7 which: 4.0.0 + '@drizzle-team/brocli@0.10.2': {} + '@ecies/ciphers@0.2.6(@noble/ciphers@1.3.0)': dependencies: '@noble/ciphers': 1.3.0 + '@electric-sql/pglite@0.5.8': {} + '@emnapi/core@1.10.0': dependencies: '@emnapi/wasi-threads': 1.2.1 @@ -8180,6 +8549,16 @@ snapshots: tslib: 2.8.1 optional: true + '@esbuild-kit/core-utils@3.3.2': + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + + '@esbuild-kit/esm-loader@2.6.5': + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.14.3 + '@esbuild/aix-ppc64@0.25.12': optional: true @@ -8189,6 +8568,9 @@ snapshots: '@esbuild/aix-ppc64@0.28.2': optional: true + '@esbuild/android-arm64@0.18.20': + optional: true + '@esbuild/android-arm64@0.25.12': optional: true @@ -8198,6 +8580,9 @@ snapshots: '@esbuild/android-arm64@0.28.2': optional: true + '@esbuild/android-arm@0.18.20': + optional: true + '@esbuild/android-arm@0.25.12': optional: true @@ -8207,6 +8592,9 @@ snapshots: '@esbuild/android-arm@0.28.2': optional: true + '@esbuild/android-x64@0.18.20': + optional: true + '@esbuild/android-x64@0.25.12': optional: true @@ -8216,6 +8604,9 @@ snapshots: '@esbuild/android-x64@0.28.2': optional: true + '@esbuild/darwin-arm64@0.18.20': + optional: true + '@esbuild/darwin-arm64@0.25.12': optional: true @@ -8225,6 +8616,9 @@ snapshots: '@esbuild/darwin-arm64@0.28.2': optional: true + '@esbuild/darwin-x64@0.18.20': + optional: true + '@esbuild/darwin-x64@0.25.12': optional: true @@ -8234,6 +8628,9 @@ snapshots: '@esbuild/darwin-x64@0.28.2': optional: true + '@esbuild/freebsd-arm64@0.18.20': + optional: true + '@esbuild/freebsd-arm64@0.25.12': optional: true @@ -8243,6 +8640,9 @@ snapshots: '@esbuild/freebsd-arm64@0.28.2': optional: true + '@esbuild/freebsd-x64@0.18.20': + optional: true + '@esbuild/freebsd-x64@0.25.12': optional: true @@ -8252,6 +8652,9 @@ snapshots: '@esbuild/freebsd-x64@0.28.2': optional: true + '@esbuild/linux-arm64@0.18.20': + optional: true + '@esbuild/linux-arm64@0.25.12': optional: true @@ -8261,6 +8664,9 @@ snapshots: '@esbuild/linux-arm64@0.28.2': optional: true + '@esbuild/linux-arm@0.18.20': + optional: true + '@esbuild/linux-arm@0.25.12': optional: true @@ -8270,6 +8676,9 @@ snapshots: '@esbuild/linux-arm@0.28.2': optional: true + '@esbuild/linux-ia32@0.18.20': + optional: true + '@esbuild/linux-ia32@0.25.12': optional: true @@ -8279,6 +8688,9 @@ snapshots: '@esbuild/linux-ia32@0.28.2': optional: true + '@esbuild/linux-loong64@0.18.20': + optional: true + '@esbuild/linux-loong64@0.25.12': optional: true @@ -8288,6 +8700,9 @@ snapshots: '@esbuild/linux-loong64@0.28.2': optional: true + '@esbuild/linux-mips64el@0.18.20': + optional: true + '@esbuild/linux-mips64el@0.25.12': optional: true @@ -8297,6 +8712,9 @@ snapshots: '@esbuild/linux-mips64el@0.28.2': optional: true + '@esbuild/linux-ppc64@0.18.20': + optional: true + '@esbuild/linux-ppc64@0.25.12': optional: true @@ -8306,6 +8724,9 @@ snapshots: '@esbuild/linux-ppc64@0.28.2': optional: true + '@esbuild/linux-riscv64@0.18.20': + optional: true + '@esbuild/linux-riscv64@0.25.12': optional: true @@ -8315,6 +8736,9 @@ snapshots: '@esbuild/linux-riscv64@0.28.2': optional: true + '@esbuild/linux-s390x@0.18.20': + optional: true + '@esbuild/linux-s390x@0.25.12': optional: true @@ -8324,6 +8748,9 @@ snapshots: '@esbuild/linux-s390x@0.28.2': optional: true + '@esbuild/linux-x64@0.18.20': + optional: true + '@esbuild/linux-x64@0.25.12': optional: true @@ -8342,6 +8769,9 @@ snapshots: '@esbuild/netbsd-arm64@0.28.2': optional: true + '@esbuild/netbsd-x64@0.18.20': + optional: true + '@esbuild/netbsd-x64@0.25.12': optional: true @@ -8360,6 +8790,9 @@ snapshots: '@esbuild/openbsd-arm64@0.28.2': optional: true + '@esbuild/openbsd-x64@0.18.20': + optional: true + '@esbuild/openbsd-x64@0.25.12': optional: true @@ -8375,6 +8808,9 @@ snapshots: '@esbuild/openharmony-arm64@0.28.2': optional: true + '@esbuild/sunos-x64@0.18.20': + optional: true + '@esbuild/sunos-x64@0.25.12': optional: true @@ -8384,6 +8820,9 @@ snapshots: '@esbuild/sunos-x64@0.28.2': optional: true + '@esbuild/win32-arm64@0.18.20': + optional: true + '@esbuild/win32-arm64@0.25.12': optional: true @@ -8393,6 +8832,9 @@ snapshots: '@esbuild/win32-arm64@0.28.2': optional: true + '@esbuild/win32-ia32@0.18.20': + optional: true + '@esbuild/win32-ia32@0.25.12': optional: true @@ -8402,6 +8844,9 @@ snapshots: '@esbuild/win32-ia32@0.28.2': optional: true + '@esbuild/win32-x64@0.18.20': + optional: true + '@esbuild/win32-x64@0.25.12': optional: true @@ -10484,6 +10929,23 @@ snapshots: - supports-color - utf-8-validate + '@stacks/blockchain-api-client@9.2.0(supports-color@10.2.2)': + dependencies: + '@types/node': 20.14.14 + eventemitter3: 4.0.7 + jsonrpc-lite: 2.2.0 + openapi-fetch: 0.10.6 + socket.io-client: 4.8.3(supports-color@10.2.2) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@stacks/codec@2.1.0': + dependencies: + '@types/node': 24.13.4 + detect-libc: 2.1.2 + '@stacks/common@7.6.0': {} '@stacks/network@7.6.0': @@ -10506,6 +10968,17 @@ snapshots: transitivePeerDependencies: - encoding + '@stacks/transactions@7.6.0': + dependencies: + '@noble/hashes': 1.1.5 + '@noble/secp256k1': 1.7.1 + '@stacks/common': 7.6.0 + '@stacks/network': 7.6.0 + c32check: 2.0.0 + lodash.clonedeep: 4.5.0 + transitivePeerDependencies: + - encoding + '@standard-schema/spec@1.1.0': {} '@swc/counter@0.1.3': {} @@ -10582,7 +11055,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.15.17 + '@types/node': 22.20.2 '@types/d3-array@3.2.2': {} @@ -10620,7 +11093,7 @@ snapshots: '@types/mysql@2.15.26': dependencies: - '@types/node': 22.15.17 + '@types/node': 22.20.2 '@types/node@20.14.14': dependencies: @@ -10630,6 +11103,14 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@22.20.2': + dependencies: + undici-types: 6.21.0 + + '@types/node@24.13.4': + dependencies: + undici-types: 7.18.2 + '@types/node@26.5.1': dependencies: undici-types: 8.9.0 @@ -10639,14 +11120,20 @@ snapshots: '@types/pg-pool@2.0.6': dependencies: - '@types/pg': 8.6.1 + '@types/pg': 8.23.1 - '@types/pg@8.6.1': + '@types/pg@8.23.1': dependencies: '@types/node': 22.15.17 pg-protocol: 1.16.0 pg-types: 2.2.0 + '@types/pg@8.6.1': + dependencies: + '@types/node': 22.20.2 + pg-protocol: 1.16.0 + pg-types: 2.2.0 + '@types/react-dom@19.1.3(@types/react@19.1.3)': dependencies: '@types/react': 19.1.3 @@ -10661,13 +11148,13 @@ snapshots: '@types/tedious@4.0.14': dependencies: - '@types/node': 22.15.17 + '@types/node': 22.20.2 '@types/triple-beam@1.3.5': {} '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.15.17 + '@types/node': 22.20.2 optional: true '@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@9.26.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.8.3))(eslint@9.26.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@5.8.3)': @@ -10938,28 +11425,28 @@ snapshots: - rollup - supports-color - '@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11)': + '@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11)': dependencies: '@testing-library/dom': 10.4.1 '@testing-library/user-event': 14.6.7(@testing-library/dom@10.4.1) - '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) - vitest: 4.1.11(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + vitest: 4.1.11(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11)': + '@vitest/browser@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) '@vitest/utils': 4.1.11 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.1 - vitest: 4.1.11(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) + vitest: 4.1.11(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) ws: 8.21.3 transitivePeerDependencies: - bufferutil @@ -10976,13 +11463,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))': + '@vitest/mocker@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)' + vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)' '@vitest/pretty-format@4.1.11': dependencies: @@ -11008,7 +11495,33 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.1 - '@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)': + '@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)': + dependencies: + '@oxc-project/runtime': 0.148.0 + '@oxc-project/types': 0.148.0 + lightningcss: 1.33.0 + postcss: 8.5.28 + yuku-codegen: 0.9.5 + yuku-parser: 0.9.5 + optionalDependencies: + '@types/node': 22.20.2 + '@voidzero-dev/vite-plus-darwin-arm64': 0.3.1 + '@voidzero-dev/vite-plus-darwin-x64': 0.3.1 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.3.1 + '@voidzero-dev/vite-plus-linux-arm64-musl': 0.3.1 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.3.1 + '@voidzero-dev/vite-plus-linux-x64-musl': 0.3.1 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.3.1 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.3.1 + esbuild: 0.28.2 + fsevents: 2.3.3 + jiti: 2.7.0 + terser: 5.51.2 + tsx: 4.23.13 + typescript: 7.0.2 + yaml: 2.9.0 + + '@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)': dependencies: '@oxc-project/runtime': 0.148.0 '@oxc-project/types': 0.148.0 @@ -11030,6 +11543,7 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 terser: 5.51.2 + tsx: 4.23.13 typescript: 7.0.2 yaml: 2.9.0 @@ -11528,6 +12042,8 @@ snapshots: baseline-browser-mapping@2.11.21: {} + better-result@3.0.1: {} + better-sqlite3@11.10.0: dependencies: bindings: 1.5.0 @@ -11703,6 +12219,12 @@ snapshots: cjs-module-lexer@1.4.3: {} + clarity-abitype@0.7.1(@stacks/network@7.6.0)(@stacks/transactions@7.6.0)(typescript@7.0.2): + optionalDependencies: + '@stacks/network': 7.6.0 + '@stacks/transactions': 7.6.0 + typescript: 7.0.2 + class-variance-authority@0.7.1: dependencies: clsx: 2.1.1 @@ -11915,16 +12437,18 @@ snapshots: date-fns@4.1.0: {} - db0@0.3.2(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3))): + db0@0.3.2(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))): optionalDependencies: + '@electric-sql/pglite': 0.5.8 better-sqlite3: 11.10.0 - drizzle-orm: 0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3)) - optional: true + drizzle-orm: 0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3)) - db0@0.3.2(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))): + db0@0.3.2(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3))): optionalDependencies: + '@electric-sql/pglite': 0.5.8 better-sqlite3: 11.10.0 - drizzle-orm: 0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3)) + drizzle-orm: 0.45.2(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3)) + optional: true debug@3.2.7(supports-color@10.2.2): dependencies: @@ -12061,22 +12585,43 @@ snapshots: dotenv@17.4.2: {} - drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3)): + drizzle-kit@0.31.10: + dependencies: + '@drizzle-team/brocli': 0.10.2 + '@esbuild-kit/esm-loader': 2.6.5 + esbuild: 0.25.12 + tsx: 4.23.13 + + drizzle-orm@0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3)): optionalDependencies: + '@electric-sql/pglite': 0.5.8 '@opentelemetry/api': 1.9.1 - '@types/pg': 8.6.1 + '@types/pg': 8.23.1 + better-sqlite3: 11.10.0 + pg: 8.23.0 + postgres: 3.4.5 + prisma: 6.7.0(supports-color@10.2.2)(typescript@5.9.3) + + drizzle-orm@0.45.2(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3)): + optionalDependencies: + '@electric-sql/pglite': 0.5.8 + '@opentelemetry/api': 1.9.1 + '@types/pg': 8.23.1 better-sqlite3: 11.10.0 + pg: 8.23.0 postgres: 3.4.5 prisma: 6.7.0(supports-color@10.2.2)(typescript@5.8.3) optional: true - drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3)): + drizzle-orm@0.45.2(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@7.0.2)): optionalDependencies: + '@electric-sql/pglite': 0.5.8 '@opentelemetry/api': 1.9.1 - '@types/pg': 8.6.1 + '@types/pg': 8.23.1 better-sqlite3: 11.10.0 + pg: 8.23.0 postgres: 3.4.5 - prisma: 6.7.0(supports-color@10.2.2)(typescript@5.9.3) + prisma: 6.7.0(supports-color@10.2.2)(typescript@7.0.2) dunder-proto@1.0.1: dependencies: @@ -12258,6 +12803,31 @@ snapshots: transitivePeerDependencies: - supports-color + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + esbuild@0.25.12: optionalDependencies: '@esbuild/aix-ppc64': 0.25.12 @@ -13649,7 +14219,7 @@ snapshots: h3: 1.15.3 ufo: 1.6.4 - nitropack@2.11.11(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3)))(supports-color@10.2.2): + nitropack@2.11.11(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3)))(supports-color@10.2.2): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@netlify/functions': 3.1.10(rollup@4.63.1)(supports-color@10.2.2) @@ -13671,7 +14241,7 @@ snapshots: cookie-es: 2.0.1 croner: 9.1.0 crossws: 0.3.5 - db0: 0.3.2(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))) + db0: 0.3.2(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))) defu: 6.1.7 destr: 2.0.5 dot-prop: 9.0.0 @@ -13717,7 +14287,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 5.7.0 unplugin-utils: 0.2.5 - unstorage: 1.16.0(db0@0.3.2(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))))(ioredis@5.11.1(supports-color@10.2.2)) + unstorage: 1.16.0(db0@0.3.2(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))))(ioredis@5.11.1(supports-color@10.2.2)) untyped: 2.0.0 unwasm: 0.3.11 youch: 4.1.1 @@ -13927,7 +14497,7 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxfmt@0.66.0(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)): + oxfmt@0.66.0(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)): dependencies: tinypool: 2.1.0 optionalDependencies: @@ -13950,9 +14520,9 @@ snapshots: '@oxfmt/binding-win32-arm64-msvc': 0.66.0 '@oxfmt/binding-win32-ia32-msvc': 0.66.0 '@oxfmt/binding-win32-x64-msvc': 0.66.0 - vite-plus: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0) + vite-plus: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0) - oxfmt@0.66.0(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)): + oxfmt@0.66.0(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.20.2)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)): dependencies: tinypool: 2.1.0 optionalDependencies: @@ -13975,7 +14545,7 @@ snapshots: '@oxfmt/binding-win32-arm64-msvc': 0.66.0 '@oxfmt/binding-win32-ia32-msvc': 0.66.0 '@oxfmt/binding-win32-x64-msvc': 0.66.0 - vite-plus: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0) + vite-plus: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.20.2)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0) oxlint-tsgolint@7.0.2001: optionalDependencies: @@ -13986,7 +14556,7 @@ snapshots: '@oxlint-tsgolint/win32-arm64': 7.0.2001 '@oxlint-tsgolint/win32-x64': 7.0.2001 - oxlint@1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)): + oxlint@1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)): optionalDependencies: '@oxlint/binding-android-arm-eabi': 1.81.0 '@oxlint/binding-android-arm64': 1.81.0 @@ -14008,9 +14578,9 @@ snapshots: '@oxlint/binding-win32-ia32-msvc': 1.81.0 '@oxlint/binding-win32-x64-msvc': 1.81.0 oxlint-tsgolint: 7.0.2001 - vite-plus: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0) + vite-plus: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0) - oxlint@1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)): + oxlint@1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.20.2)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)): optionalDependencies: '@oxlint/binding-android-arm-eabi': 1.81.0 '@oxlint/binding-android-arm64': 1.81.0 @@ -14032,7 +14602,7 @@ snapshots: '@oxlint/binding-win32-ia32-msvc': 1.81.0 '@oxlint/binding-win32-x64-msvc': 1.81.0 oxlint-tsgolint: 7.0.2001 - vite-plus: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0) + vite-plus: 0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.20.2)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0) p-event@6.0.1: dependencies: @@ -14107,8 +14677,17 @@ snapshots: perfect-debounce@2.1.0: {} + pg-cloudflare@1.4.0: + optional: true + + pg-connection-string@2.14.0: {} + pg-int8@1.0.1: {} + pg-pool@3.14.0(pg@8.23.0): + dependencies: + pg: 8.23.0 + pg-protocol@1.16.0: {} pg-types@2.2.0: @@ -14119,6 +14698,20 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 + pg@8.23.0: + dependencies: + pg-connection-string: 2.14.0 + pg-pool: 3.14.0(pg@8.23.0) + pg-protocol: 1.16.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.4.0 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -14279,6 +14872,17 @@ snapshots: transitivePeerDependencies: - supports-color + prisma@6.7.0(supports-color@10.2.2)(typescript@7.0.2): + dependencies: + '@prisma/config': 6.7.0(supports-color@10.2.2) + '@prisma/engines': 6.7.0 + optionalDependencies: + fsevents: 2.3.3 + typescript: 7.0.2 + transitivePeerDependencies: + - supports-color + optional: true + process-nextick-args@2.0.1: {} process@0.11.10: {} @@ -14927,12 +15531,37 @@ snapshots: spdx-license-ids@3.0.23: {} + split2@4.2.0: {} + stable-hash@0.0.5: {} stack-trace@0.0.10: {} stackback@0.0.2: {} + stacksindex@0.0.3(@electric-sql/pglite@0.5.8)(@stacks/network@7.6.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@7.0.2)))(pg@8.23.0)(supports-color@10.2.2)(typescript@7.0.2): + dependencies: + '@stacks/blockchain-api-client': 9.2.0(supports-color@10.2.2) + '@stacks/codec': 2.1.0 + '@stacks/transactions': 7.6.0 + better-result: 3.0.1 + clarity-abitype: 0.7.1(@stacks/network@7.6.0)(@stacks/transactions@7.6.0)(typescript@7.0.2) + consola: 3.4.2 + drizzle-orm: 0.45.2(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@7.0.2)) + undici: 8.10.2 + optionalDependencies: + '@electric-sql/pglite': 0.5.8 + pg: 8.23.0 + transitivePeerDependencies: + - '@stacks/clarinet-sdk' + - '@stacks/connect' + - '@stacks/network' + - bufferutil + - encoding + - supports-color + - typescript + - utf-8-validate + stacktrace-parser@0.1.11: dependencies: type-fest: 0.7.1 @@ -15238,6 +15867,12 @@ snapshots: tslib@2.8.1: {} + tsx@4.23.13: + dependencies: + esbuild: 0.28.2 + optionalDependencies: + fsevents: 2.3.3 + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 @@ -15369,9 +16004,13 @@ snapshots: undici-types@6.21.0: {} + undici-types@7.18.2: {} + undici-types@8.9.0: optional: true + undici@8.10.2: {} + unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 @@ -15454,7 +16093,7 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.12.2 '@unrs/resolver-binding-win32-x64-msvc': 1.12.2 - unstorage@1.16.0(db0@0.3.2(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3))))(ioredis@5.11.1(supports-color@10.2.2)): + unstorage@1.16.0(db0@0.3.2(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))))(ioredis@5.11.1(supports-color@10.2.2)): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -15465,10 +16104,10 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.4 optionalDependencies: - db0: 0.3.2(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3))) + db0: 0.3.2(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))) ioredis: 5.11.1(supports-color@10.2.2) - unstorage@1.16.0(db0@0.3.2(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))))(ioredis@5.11.1(supports-color@10.2.2)): + unstorage@1.16.0(db0@0.3.2(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3))))(ioredis@5.11.1(supports-color@10.2.2)): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -15479,7 +16118,7 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.4 optionalDependencies: - db0: 0.3.2(better-sqlite3@11.10.0)(drizzle-orm@0.39.3(@opentelemetry/api@1.9.1)(@types/pg@8.6.1)(better-sqlite3@11.10.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.9.3))) + db0: 0.3.2(@electric-sql/pglite@0.5.8)(better-sqlite3@11.10.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.5.8)(@opentelemetry/api@1.9.1)(@types/pg@8.23.1)(better-sqlite3@11.10.0)(pg@8.23.0)(postgres@3.4.5)(prisma@6.7.0(supports-color@10.2.2)(typescript@5.8.3))) ioredis: 5.11.1(supports-color@10.2.2) untun@0.2.2: {} @@ -15562,24 +16201,24 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0): + vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0): dependencies: '@oxc-project/types': 0.148.0 '@oxlint/plugins': 1.79.0 - '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) - '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.11 '@vitest/runner': 4.1.11 '@vitest/snapshot': 4.1.11 '@vitest/spy': 4.1.11 '@vitest/utils': 4.1.11 - oxfmt: 0.66.0(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) - oxlint: 1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) + oxfmt: 0.66.0(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) + oxlint: 1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) oxlint-tsgolint: 7.0.2001 - vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)' - vitest: 4.1.11(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) + vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)' + vitest: 4.1.11(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) optionalDependencies: '@voidzero-dev/vite-plus-darwin-arm64': 0.3.1 '@voidzero-dev/vite-plus-darwin-x64': 0.3.1 @@ -15619,24 +16258,24 @@ snapshots: - utf-8-validate - yaml - vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0): + vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.20.2)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0): dependencies: '@oxc-project/types': 0.148.0 '@oxlint/plugins': 1.79.0 - '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) - '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.11 '@vitest/runner': 4.1.11 '@vitest/snapshot': 4.1.11 '@vitest/spy': 4.1.11 '@vitest/utils': 4.1.11 - oxfmt: 0.66.0(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) - oxlint: 1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) + oxfmt: 0.66.0(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.20.2)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) + oxlint: 1.81.0(oxlint-tsgolint@7.0.2001)(vite-plus@0.3.1(@opentelemetry/api@1.9.1)(@types/node@22.20.2)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) oxlint-tsgolint: 7.0.2001 - vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)' - vitest: 4.1.11(@opentelemetry/api@1.9.1)(@types/node@26.5.1)(@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11))(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) + vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@22.20.2)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)' + vitest: 4.1.11(@opentelemetry/api@1.9.1)(@types/node@22.20.2)(@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11))(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) optionalDependencies: '@voidzero-dev/vite-plus-darwin-arm64': 0.3.1 '@voidzero-dev/vite-plus-darwin-x64': 0.3.1 @@ -15676,10 +16315,10 @@ snapshots: - utf-8-validate - yaml - vitest@4.1.11(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)): + vitest@4.1.11(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(@vitest/browser-preview@4.1.11)(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.11 '@vitest/runner': 4.1.11 '@vitest/snapshot': 4.1.11 @@ -15696,19 +16335,19 @@ snapshots: tinyexec: 1.3.1 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)' + vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)' why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 '@types/node': 22.15.17 - '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) transitivePeerDependencies: - msw - vitest@4.1.11(@opentelemetry/api@1.9.1)(@types/node@26.5.1)(@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11))(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)): + vitest@4.1.11(@opentelemetry/api@1.9.1)(@types/node@22.20.2)(@vitest/browser-preview@4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11))(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)) + '@vitest/mocker': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.11 '@vitest/runner': 4.1.11 '@vitest/snapshot': 4.1.11 @@ -15725,12 +16364,12 @@ snapshots: tinyexec: 1.3.1 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0)' + vite: '@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0)' why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@types/node': 26.5.1 - '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) + '@types/node': 22.20.2 + '@vitest/browser-preview': 4.1.11(@voidzero-dev/vite-plus-core@0.3.1(@types/node@26.5.1)(esbuild@0.28.2)(jiti@2.7.0)(terser@5.51.2)(tsx@4.23.13)(typescript@7.0.2)(yaml@2.9.0))(vitest@4.1.11) transitivePeerDependencies: - msw @@ -15989,3 +16628,5 @@ snapshots: zod: 3.24.4 zod@3.24.4: {} + + zod@4.6.2: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3190d29..1a02340 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -17,6 +17,10 @@ catalog: vite-plus: 0.3.1 "@vitest/coverage-v8": 4.1.11 +minimumReleaseAgeExclude: + - stacksindex@0.0.3 + - zod@4.6.2 + overrides: vite@*: "catalog:" vitest@*: "catalog:"