@secondlayer/shared 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/src/index.js CHANGED
@@ -500,7 +500,7 @@ var CreateStreamSchema = z4.object({
500
500
  name: z4.string().min(1).max(255),
501
501
  endpointUrl: z4.string().url(),
502
502
  filters: z4.array(StreamFilterSchema).min(1),
503
- options: streamOptionsShape.optional().default(undefined),
503
+ options: streamOptionsShape.optional(),
504
504
  startBlock: z4.number().int().positive().optional(),
505
505
  endBlock: z4.number().int().positive().optional()
506
506
  });
@@ -660,5 +660,5 @@ export {
660
660
  AuthenticationError
661
661
  };
662
662
 
663
- //# debugId=99E2621053B07F6D64756E2164756E21
663
+ //# debugId=D2BBFAFE2AAED10A64756E2164756E21
664
664
  //# sourceMappingURL=index.js.map
@@ -10,10 +10,10 @@
10
10
  "import { sql } from \"kysely\";\nimport { getDb } from \"../db/index.ts\";\nimport type { Job } from \"../db/types.ts\";\nimport { randomUUID } from \"crypto\";\n\nexport interface QueueStats {\n pending: number;\n processing: number;\n completed: number;\n failed: number;\n total: number;\n}\n\n// Worker identifier for this process\nconst WORKER_ID: string = `worker-${randomUUID().slice(0, 8)}`;\n\n/**\n * Enqueue a new job for stream evaluation\n */\nexport async function enqueue(\n streamId: string,\n blockHeight: number,\n backfill = false\n): Promise<string> {\n const db = getDb();\n\n const row = await db\n .insertInto(\"jobs\")\n .values({\n stream_id: streamId,\n block_height: blockHeight,\n backfill,\n status: \"pending\",\n attempts: 0,\n })\n .returning([\"id\"])\n .executeTakeFirstOrThrow();\n\n return row.id;\n}\n\n/**\n * Claim a pending job using SKIP LOCKED to prevent concurrent access\n * Returns null if no jobs available\n */\nexport async function claim(): Promise<Job | null> {\n const db = getDb();\n\n const { rows } = await sql<Job>`\n UPDATE jobs\n SET\n status = 'processing',\n locked_at = NOW(),\n locked_by = ${WORKER_ID},\n attempts = attempts + 1\n WHERE id = (\n SELECT id FROM jobs\n WHERE status = 'pending'\n ORDER BY\n backfill ASC,\n block_height ASC,\n created_at ASC\n FOR UPDATE SKIP LOCKED\n LIMIT 1\n )\n RETURNING *\n `.execute(db);\n\n return rows[0] ?? null;\n}\n\n/**\n * Mark a job as completed\n */\nexport async function complete(jobId: string): Promise<void> {\n const db = getDb();\n\n await db\n .updateTable(\"jobs\")\n .set({\n status: \"completed\",\n completed_at: new Date(),\n locked_at: null,\n locked_by: null,\n })\n .where(\"id\", \"=\", jobId)\n .execute();\n}\n\n/**\n * Mark a job as failed\n * Re-queues if under max attempts, otherwise marks as permanently failed\n */\nexport async function fail(\n jobId: string,\n error: string,\n maxAttempts = 3\n): Promise<void> {\n const db = getDb();\n\n const job = await db\n .selectFrom(\"jobs\")\n .select(\"attempts\")\n .where(\"id\", \"=\", jobId)\n .executeTakeFirst();\n\n if (!job) return;\n\n if (job.attempts < maxAttempts) {\n await db\n .updateTable(\"jobs\")\n .set({\n status: \"pending\",\n error,\n locked_at: null,\n locked_by: null,\n })\n .where(\"id\", \"=\", jobId)\n .execute();\n } else {\n await db\n .updateTable(\"jobs\")\n .set({\n status: \"failed\",\n error,\n completed_at: new Date(),\n locked_at: null,\n locked_by: null,\n })\n .where(\"id\", \"=\", jobId)\n .execute();\n }\n}\n\n/**\n * Get queue statistics\n */\nexport async function stats(): Promise<QueueStats> {\n const { rows } = await sql<{ status: string; count: string }>`\n SELECT status, COUNT(*) as count\n FROM jobs\n GROUP BY status\n `.execute(getDb());\n\n const counts: Record<string, number> = {};\n for (const row of rows) {\n counts[row.status] = parseInt(row.count, 10);\n }\n\n return {\n pending: counts[\"pending\"] || 0,\n processing: counts[\"processing\"] || 0,\n completed: counts[\"completed\"] || 0,\n failed: counts[\"failed\"] || 0,\n total: Object.values(counts).reduce((a, b) => a + b, 0),\n };\n}\n\n/**\n * Get worker ID for this process\n */\nexport function getWorkerId(): string {\n return WORKER_ID;\n}\n\nexport { WORKER_ID };\n",
11
11
  "import { z } from \"zod/v4\";\nimport { isValidAddress as _isValidAddress } from \"@secondlayer/stacks\";\n\nconst isValidAddress = _isValidAddress as (addr: string) => boolean;\n\n/** Validate a Stacks principal (standard or contract, e.g. SP2J...ABC or SP2J...ABC.contract-name) */\nconst stacksPrincipal = z.string().refine((val) => {\n const parts = val.split(\".\");\n if (parts.length > 2) return false;\n return isValidAddress(parts[0]!);\n}, \"Invalid Stacks principal address\");\n\n// Base filter with common fields\nconst baseFilter = {\n // Optional: filter by sender\n sender: stacksPrincipal.optional(),\n // Optional: filter by recipient\n recipient: stacksPrincipal.optional(),\n};\n\n// Type exports — defined first so they can annotate schemas\nexport interface StxTransferFilter {\n type: \"stx_transfer\";\n sender?: string;\n recipient?: string;\n minAmount?: number;\n maxAmount?: number;\n}\n\nexport interface StxMintFilter {\n type: \"stx_mint\";\n recipient?: string;\n minAmount?: number;\n}\n\nexport interface StxBurnFilter {\n type: \"stx_burn\";\n sender?: string;\n minAmount?: number;\n}\n\nexport interface StxLockFilter {\n type: \"stx_lock\";\n lockedAddress?: string;\n minAmount?: number;\n}\n\nexport interface FtTransferFilter {\n type: \"ft_transfer\";\n sender?: string;\n recipient?: string;\n assetIdentifier?: string;\n minAmount?: number;\n}\n\nexport interface FtMintFilter {\n type: \"ft_mint\";\n recipient?: string;\n assetIdentifier?: string;\n minAmount?: number;\n}\n\nexport interface FtBurnFilter {\n type: \"ft_burn\";\n sender?: string;\n assetIdentifier?: string;\n minAmount?: number;\n}\n\nexport interface NftTransferFilter {\n type: \"nft_transfer\";\n sender?: string;\n recipient?: string;\n assetIdentifier?: string;\n tokenId?: string;\n}\n\nexport interface NftMintFilter {\n type: \"nft_mint\";\n recipient?: string;\n assetIdentifier?: string;\n tokenId?: string;\n}\n\nexport interface NftBurnFilter {\n type: \"nft_burn\";\n sender?: string;\n assetIdentifier?: string;\n tokenId?: string;\n}\n\nexport interface ContractCallFilter {\n type: \"contract_call\";\n contractId?: string;\n functionName?: string;\n caller?: string;\n}\n\nexport interface ContractDeployFilter {\n type: \"contract_deploy\";\n deployer?: string;\n contractName?: string;\n}\n\nexport interface PrintEventFilter {\n type: \"print_event\";\n contractId?: string;\n topic?: string;\n contains?: string;\n}\n\nexport type StreamFilter =\n | StxTransferFilter\n | StxMintFilter\n | StxBurnFilter\n | StxLockFilter\n | FtTransferFilter\n | FtMintFilter\n | FtBurnFilter\n | NftTransferFilter\n | NftMintFilter\n | NftBurnFilter\n | ContractCallFilter\n | ContractDeployFilter\n | PrintEventFilter;\n\n// STX Transfer Filter\nexport const StxTransferFilterSchema: z.ZodType<StxTransferFilter> = z.object({\n type: z.literal(\"stx_transfer\"),\n ...baseFilter,\n // Optional: minimum amount in microSTX\n minAmount: z.coerce.number().int().positive().optional(),\n // Optional: maximum amount in microSTX\n maxAmount: z.coerce.number().int().positive().optional(),\n});\n\n// STX Mint Filter\nexport const StxMintFilterSchema: z.ZodType<StxMintFilter> = z.object({\n type: z.literal(\"stx_mint\"),\n recipient: stacksPrincipal.optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// STX Burn Filter\nexport const StxBurnFilterSchema: z.ZodType<StxBurnFilter> = z.object({\n type: z.literal(\"stx_burn\"),\n sender: stacksPrincipal.optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// STX Lock Filter\nexport const StxLockFilterSchema: z.ZodType<StxLockFilter> = z.object({\n type: z.literal(\"stx_lock\"),\n lockedAddress: stacksPrincipal.optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// FT Transfer Filter\nexport const FtTransferFilterSchema: z.ZodType<FtTransferFilter> = z.object({\n type: z.literal(\"ft_transfer\"),\n ...baseFilter,\n // Contract that defines the token (e.g., SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-wstx)\n assetIdentifier: z.string().optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// FT Mint Filter\nexport const FtMintFilterSchema: z.ZodType<FtMintFilter> = z.object({\n type: z.literal(\"ft_mint\"),\n recipient: stacksPrincipal.optional(),\n assetIdentifier: z.string().optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// FT Burn Filter\nexport const FtBurnFilterSchema: z.ZodType<FtBurnFilter> = z.object({\n type: z.literal(\"ft_burn\"),\n sender: stacksPrincipal.optional(),\n assetIdentifier: z.string().optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// NFT Transfer Filter\nexport const NftTransferFilterSchema: z.ZodType<NftTransferFilter> = z.object({\n type: z.literal(\"nft_transfer\"),\n ...baseFilter,\n assetIdentifier: z.string().optional(),\n // Optional: filter by specific token ID (Clarity value as hex)\n tokenId: z.string().optional(),\n});\n\n// NFT Mint Filter\nexport const NftMintFilterSchema: z.ZodType<NftMintFilter> = z.object({\n type: z.literal(\"nft_mint\"),\n recipient: stacksPrincipal.optional(),\n assetIdentifier: z.string().optional(),\n tokenId: z.string().optional(),\n});\n\n// NFT Burn Filter\nexport const NftBurnFilterSchema: z.ZodType<NftBurnFilter> = z.object({\n type: z.literal(\"nft_burn\"),\n sender: stacksPrincipal.optional(),\n assetIdentifier: z.string().optional(),\n tokenId: z.string().optional(),\n});\n\n// Contract Call Filter\nexport const ContractCallFilterSchema: z.ZodType<ContractCallFilter> = z.object({\n type: z.literal(\"contract_call\"),\n // Contract being called\n contractId: stacksPrincipal.optional(),\n // Function name (supports wildcards with *)\n functionName: z.string().optional(),\n // Caller address\n caller: stacksPrincipal.optional(),\n});\n\n// Contract Deploy Filter\nexport const ContractDeployFilterSchema: z.ZodType<ContractDeployFilter> = z.object({\n type: z.literal(\"contract_deploy\"),\n // Deployer address\n deployer: stacksPrincipal.optional(),\n // Contract name pattern (supports wildcards)\n contractName: z.string().optional(),\n});\n\n// Print Event Filter (smart contract events)\nexport const PrintEventFilterSchema: z.ZodType<PrintEventFilter> = z.object({\n type: z.literal(\"print_event\"),\n // Contract emitting the event\n contractId: stacksPrincipal.optional(),\n // Topic/name of the event\n topic: z.string().optional(),\n // Search for substring in event data\n contains: z.string().optional(),\n});\n\n// Union of all filter types\nexport const StreamFilterSchema: z.ZodType<StreamFilter> = z.discriminatedUnion(\"type\", [\n StxTransferFilterSchema as any,\n StxMintFilterSchema as any,\n StxBurnFilterSchema as any,\n StxLockFilterSchema as any,\n FtTransferFilterSchema as any,\n FtMintFilterSchema as any,\n FtBurnFilterSchema as any,\n NftTransferFilterSchema as any,\n NftMintFilterSchema as any,\n NftBurnFilterSchema as any,\n ContractCallFilterSchema as any,\n ContractDeployFilterSchema as any,\n PrintEventFilterSchema as any,\n]);\n",
12
12
  "import { z } from \"zod/v4\";\n\n// ── Deploy Subgraph Request ─────────────────────────────────────────────────\n\nexport interface DeploySubgraphRequest {\n name: string;\n version?: string;\n description?: string;\n sources: string[];\n schema: Record<string, unknown>;\n handlerCode: string;\n reindex?: boolean;\n}\n\nexport const DeploySubgraphRequestSchema: z.ZodType<DeploySubgraphRequest> = z.object({\n name: z.string().regex(/^[a-z0-9-]+$/, \"lowercase alphanumeric + hyphens only\").max(63),\n version: z.string().optional(),\n description: z.string().optional(),\n sources: z.array(z.string()).min(1),\n schema: z.record(z.string(), z.unknown()),\n handlerCode: z.string().max(1_048_576, \"handler code exceeds 1MB limit\"),\n reindex: z.boolean().optional(),\n});\n\nexport interface DeploySubgraphResponse {\n action: \"created\" | \"unchanged\" | \"updated\" | \"reindexed\";\n subgraphId: string;\n message: string;\n}\n\n// Subgraph API response types\n\nexport interface SubgraphSummary {\n name: string;\n version: string;\n status: string;\n lastProcessedBlock: number;\n tables: string[];\n createdAt: string;\n}\n\nexport interface SubgraphDetail {\n name: string;\n version: string;\n status: string;\n lastProcessedBlock: number;\n health: {\n totalProcessed: number;\n totalErrors: number;\n errorRate: number;\n lastError: string | null;\n lastErrorAt: string | null;\n };\n tables: Record<string, {\n endpoint: string;\n columns: Record<string, { type: string; nullable?: boolean }>;\n rowCount: number;\n example: string;\n }>;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ReindexResponse {\n message: string;\n fromBlock: number;\n toBlock: number | string;\n}\n\nexport interface SubgraphQueryParams {\n sort?: string;\n order?: string;\n limit?: number;\n offset?: number;\n fields?: string;\n filters?: Record<string, string>;\n}\n",
13
- "import { z } from \"zod/v4\";\nimport { StreamFilterSchema, type StreamFilter } from \"./filters.ts\";\n\n// ── Type interfaces ──────────────────────────────────────────────────\n\nexport interface StreamOptions {\n decodeClarityValues: boolean;\n includeRawTx: boolean;\n includeBlockMetadata: boolean;\n rateLimit: number;\n timeoutMs: number;\n maxRetries: number;\n}\n\nexport interface CreateStream {\n name: string;\n endpointUrl: string;\n filters: StreamFilter[];\n options?: StreamOptions;\n startBlock?: number;\n endBlock?: number;\n}\n\nexport interface UpdateStream {\n name?: string;\n endpointUrl?: string;\n filters?: StreamFilter[];\n options?: Partial<StreamOptions>;\n}\n\nexport interface DeliveryPayload {\n streamId: string;\n streamName: string;\n block: {\n height: number;\n hash: string;\n parentHash: string;\n burnBlockHeight: number;\n timestamp: number;\n };\n matches: {\n transactions: Array<{\n txId: string;\n type: string;\n sender: string;\n status: string;\n contractId: string | null;\n functionName: string | null;\n rawTx?: string;\n }>;\n events: Array<{\n txId: string;\n eventIndex: number;\n type: string;\n data?: any;\n }>;\n };\n isBackfill: boolean;\n deliveredAt: string;\n}\n\nexport interface StreamMetricsResponse {\n totalDeliveries: number;\n failedDeliveries: number;\n lastTriggeredAt: string | null;\n lastTriggeredBlock: number | null;\n errorMessage: string | null;\n}\n\nexport interface StreamResponse {\n id: string;\n name: string;\n status: \"inactive\" | \"active\" | \"paused\" | \"failed\";\n endpointUrl: string;\n filters: StreamFilter[];\n options: StreamOptions;\n totalDeliveries: number;\n failedDeliveries: number;\n lastTriggeredAt?: string | null;\n lastTriggeredBlock?: number | null;\n errorMessage?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n// ── Zod schemas ──────────────────────────────────────────────────────\n\n// Stream options schema (internal, keeps ZodObject methods like .partial())\nconst streamOptionsShape = z.object({\n decodeClarityValues: z.boolean().default(true),\n includeRawTx: z.boolean().default(false),\n includeBlockMetadata: z.boolean().default(true),\n rateLimit: z.number().int().positive().max(100).default(10),\n timeoutMs: z.number().int().positive().max(30000).default(10000),\n maxRetries: z.number().int().min(0).max(10).default(3),\n});\n\n// Cast: .default() makes _input fields optional, but output type matches StreamOptions\nexport const StreamOptionsSchema: z.ZodType<StreamOptions> =\n streamOptionsShape as unknown as z.ZodType<StreamOptions>;\n\nexport const CreateStreamSchema: z.ZodType<CreateStream> = z.object({\n name: z.string().min(1).max(255),\n endpointUrl: z.string().url(),\n filters: z.array(StreamFilterSchema).min(1),\n options: streamOptionsShape.optional().default(undefined),\n startBlock: z.number().int().positive().optional(),\n endBlock: z.number().int().positive().optional(),\n}) as unknown as z.ZodType<CreateStream>;\n\nexport const UpdateStreamSchema: z.ZodType<UpdateStream> = z.object({\n name: z.string().min(1).max(255).optional(),\n endpointUrl: z.string().url().optional(),\n filters: z.array(StreamFilterSchema).min(1).optional(),\n options: streamOptionsShape.partial().optional(),\n}).refine(\n (data) => Object.keys(data).length > 0,\n { message: \"At least one field must be provided for update\" }\n) as unknown as z.ZodType<UpdateStream>;\n\nexport const DeliveryPayloadSchema: z.ZodType<DeliveryPayload> = z.object({\n streamId: z.string().uuid(),\n streamName: z.string(),\n block: z.object({\n height: z.number(),\n hash: z.string(),\n parentHash: z.string(),\n burnBlockHeight: z.number(),\n timestamp: z.number(),\n }),\n matches: z.object({\n transactions: z.array(z.object({\n txId: z.string(),\n type: z.string(),\n sender: z.string(),\n status: z.string(),\n contractId: z.string().nullable(),\n functionName: z.string().nullable(),\n rawTx: z.string().optional(),\n })),\n events: z.array(z.object({\n txId: z.string(),\n eventIndex: z.number(),\n type: z.string(),\n data: z.any(),\n })),\n }),\n isBackfill: z.boolean(),\n deliveredAt: z.string().datetime(),\n}) as unknown as z.ZodType<DeliveryPayload>;\n\nexport const StreamMetricsSchema: z.ZodType<StreamMetricsResponse> = z.object({\n totalDeliveries: z.number(),\n failedDeliveries: z.number(),\n lastTriggeredAt: z.string().datetime().nullable(),\n lastTriggeredBlock: z.number().nullable(),\n errorMessage: z.string().nullable(),\n});\n\nexport const StreamResponseSchema: z.ZodType<StreamResponse> = z.object({\n id: z.string().uuid(),\n name: z.string(),\n status: z.enum([\"inactive\", \"active\", \"paused\", \"failed\"]),\n endpointUrl: z.string().url(),\n filters: z.array(StreamFilterSchema),\n options: streamOptionsShape,\n totalDeliveries: z.number().int().default(0),\n failedDeliveries: z.number().int().default(0),\n lastTriggeredAt: z.string().datetime().nullable().optional(),\n lastTriggeredBlock: z.number().int().nullable().optional(),\n errorMessage: z.string().nullable().optional(),\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime(),\n}) as unknown as z.ZodType<StreamResponse>;\n\n// API response types\nexport interface CreateStreamResponse {\n stream: StreamResponse;\n signingSecret: string;\n}\n\nexport interface ListStreamsResponse {\n streams: StreamResponse[];\n total: number;\n}\n\nexport interface BulkPauseResponse {\n paused: number;\n streams: StreamResponse[];\n}\n\nexport interface BulkResumeResponse {\n resumed: number;\n streams: StreamResponse[];\n}\n",
13
+ "import { z } from \"zod/v4\";\nimport { StreamFilterSchema, type StreamFilter } from \"./filters.ts\";\n\n// ── Type interfaces ──────────────────────────────────────────────────\n\nexport interface StreamOptions {\n decodeClarityValues: boolean;\n includeRawTx: boolean;\n includeBlockMetadata: boolean;\n rateLimit: number;\n timeoutMs: number;\n maxRetries: number;\n}\n\nexport interface CreateStream {\n name: string;\n endpointUrl: string;\n filters: StreamFilter[];\n options?: StreamOptions;\n startBlock?: number;\n endBlock?: number;\n}\n\nexport interface UpdateStream {\n name?: string;\n endpointUrl?: string;\n filters?: StreamFilter[];\n options?: Partial<StreamOptions>;\n}\n\nexport interface DeliveryPayload {\n streamId: string;\n streamName: string;\n block: {\n height: number;\n hash: string;\n parentHash: string;\n burnBlockHeight: number;\n timestamp: number;\n };\n matches: {\n transactions: Array<{\n txId: string;\n type: string;\n sender: string;\n status: string;\n contractId: string | null;\n functionName: string | null;\n rawTx?: string;\n }>;\n events: Array<{\n txId: string;\n eventIndex: number;\n type: string;\n data?: any;\n }>;\n };\n isBackfill: boolean;\n deliveredAt: string;\n}\n\nexport interface StreamMetricsResponse {\n totalDeliveries: number;\n failedDeliveries: number;\n lastTriggeredAt: string | null;\n lastTriggeredBlock: number | null;\n errorMessage: string | null;\n}\n\nexport interface StreamResponse {\n id: string;\n name: string;\n status: \"inactive\" | \"active\" | \"paused\" | \"failed\";\n endpointUrl: string;\n filters: StreamFilter[];\n options: StreamOptions;\n totalDeliveries: number;\n failedDeliveries: number;\n lastTriggeredAt?: string | null;\n lastTriggeredBlock?: number | null;\n errorMessage?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n// ── Zod schemas ──────────────────────────────────────────────────────\n\n// Stream options schema (internal, keeps ZodObject methods like .partial())\nconst streamOptionsShape = z.object({\n decodeClarityValues: z.boolean().default(true),\n includeRawTx: z.boolean().default(false),\n includeBlockMetadata: z.boolean().default(true),\n rateLimit: z.number().int().positive().max(100).default(10),\n timeoutMs: z.number().int().positive().max(30000).default(10000),\n maxRetries: z.number().int().min(0).max(10).default(3),\n});\n\n// Cast: .default() makes _input fields optional, but output type matches StreamOptions\nexport const StreamOptionsSchema: z.ZodType<StreamOptions> =\n streamOptionsShape as unknown as z.ZodType<StreamOptions>;\n\nexport const CreateStreamSchema: z.ZodType<CreateStream> = z.object({\n name: z.string().min(1).max(255),\n endpointUrl: z.string().url(),\n filters: z.array(StreamFilterSchema).min(1),\n options: streamOptionsShape.optional(),\n startBlock: z.number().int().positive().optional(),\n endBlock: z.number().int().positive().optional(),\n}) as unknown as z.ZodType<CreateStream>;\n\nexport const UpdateStreamSchema: z.ZodType<UpdateStream> = z.object({\n name: z.string().min(1).max(255).optional(),\n endpointUrl: z.string().url().optional(),\n filters: z.array(StreamFilterSchema).min(1).optional(),\n options: streamOptionsShape.partial().optional(),\n}).refine(\n (data) => Object.keys(data).length > 0,\n { message: \"At least one field must be provided for update\" }\n) as unknown as z.ZodType<UpdateStream>;\n\nexport const DeliveryPayloadSchema: z.ZodType<DeliveryPayload> = z.object({\n streamId: z.string().uuid(),\n streamName: z.string(),\n block: z.object({\n height: z.number(),\n hash: z.string(),\n parentHash: z.string(),\n burnBlockHeight: z.number(),\n timestamp: z.number(),\n }),\n matches: z.object({\n transactions: z.array(z.object({\n txId: z.string(),\n type: z.string(),\n sender: z.string(),\n status: z.string(),\n contractId: z.string().nullable(),\n functionName: z.string().nullable(),\n rawTx: z.string().optional(),\n })),\n events: z.array(z.object({\n txId: z.string(),\n eventIndex: z.number(),\n type: z.string(),\n data: z.any(),\n })),\n }),\n isBackfill: z.boolean(),\n deliveredAt: z.string().datetime(),\n}) as unknown as z.ZodType<DeliveryPayload>;\n\nexport const StreamMetricsSchema: z.ZodType<StreamMetricsResponse> = z.object({\n totalDeliveries: z.number(),\n failedDeliveries: z.number(),\n lastTriggeredAt: z.string().datetime().nullable(),\n lastTriggeredBlock: z.number().nullable(),\n errorMessage: z.string().nullable(),\n});\n\nexport const StreamResponseSchema: z.ZodType<StreamResponse> = z.object({\n id: z.string().uuid(),\n name: z.string(),\n status: z.enum([\"inactive\", \"active\", \"paused\", \"failed\"]),\n endpointUrl: z.string().url(),\n filters: z.array(StreamFilterSchema),\n options: streamOptionsShape,\n totalDeliveries: z.number().int().default(0),\n failedDeliveries: z.number().int().default(0),\n lastTriggeredAt: z.string().datetime().nullable().optional(),\n lastTriggeredBlock: z.number().int().nullable().optional(),\n errorMessage: z.string().nullable().optional(),\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime(),\n}) as unknown as z.ZodType<StreamResponse>;\n\n// API response types\nexport interface CreateStreamResponse {\n stream: StreamResponse;\n signingSecret: string;\n}\n\nexport interface ListStreamsResponse {\n streams: StreamResponse[];\n total: number;\n}\n\nexport interface BulkPauseResponse {\n paused: number;\n streams: StreamResponse[];\n}\n\nexport interface BulkResumeResponse {\n resumed: number;\n streams: StreamResponse[];\n}\n",
14
14
  "import { createHmac, randomBytes } from \"crypto\";\n\n/**\n * Generate a random secret for delivery signing\n * Returns 32 bytes as a 64-character hex string\n */\nexport function generateSecret(): string {\n return randomBytes(32).toString(\"hex\");\n}\n\n/**\n * Sign a payload with HMAC-SHA256\n * Returns the signature as a hex string\n */\nexport function signPayload(payload: string, secret: string): string {\n const hmac = createHmac(\"sha256\", secret);\n hmac.update(payload);\n return hmac.digest(\"hex\");\n}\n\n/**\n * Verify an HMAC signature\n * Uses constant-time comparison to prevent timing attacks\n */\nexport function verifySignature(\n payload: string,\n signature: string,\n secret: string\n): boolean {\n const expectedSignature = signPayload(payload, secret);\n\n // Constant-time comparison\n if (signature.length !== expectedSignature.length) {\n return false;\n }\n\n let result = 0;\n for (let i = 0; i < signature.length; i++) {\n result |= signature.charCodeAt(i) ^ expectedSignature.charCodeAt(i);\n }\n\n return result === 0;\n}\n\n/**\n * Create a Stripe-style signature header\n * Format: t=timestamp,v1=signature\n */\nexport function createSignatureHeader(\n payload: string,\n secret: string,\n timestamp?: number\n): string {\n const ts = timestamp ?? Math.floor(Date.now() / 1000);\n const signedPayload = `${ts}.${payload}`;\n const signature = signPayload(signedPayload, secret);\n\n return `t=${ts},v1=${signature}`;\n}\n\n/**\n * Parse and verify a Stripe-style signature header\n * Returns true if valid, false otherwise\n */\nexport function verifySignatureHeader(\n payload: string,\n header: string,\n secret: string,\n toleranceSeconds = 300 // 5 minutes\n): boolean {\n // Parse header\n const parts = header.split(\",\");\n const timestamp = parts\n .find((p) => p.startsWith(\"t=\"))\n ?.slice(2);\n const signature = parts\n .find((p) => p.startsWith(\"v1=\"))\n ?.slice(3);\n\n if (!timestamp || !signature) {\n return false;\n }\n\n const ts = parseInt(timestamp, 10);\n if (isNaN(ts)) {\n return false;\n }\n\n // Check timestamp is within tolerance\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - ts) > toleranceSeconds) {\n return false;\n }\n\n // Verify signature\n const signedPayload = `${ts}.${payload}`;\n return verifySignature(signedPayload, signature, secret);\n}\n"
15
15
  ],
16
- "mappings": ";;;;;;;;;;;;;;;;AAAA;AAOO,SAAS,KAAK,CAAC,OAAqC;AAAA,EACzD,MAAM,UAAU,KAAK,UAAU,KAAK,EAAE,QAAQ,MAAM,IAAI;AAAA,EACxD,OAAO,MAAM,IAAI,IAAI,IAAI,iBAAiB;AAAA;AAQrC,SAAS,UAAuB,CAAC,OAAmB;AAAA,EACzD,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,IAAI;AAAA,MACF,OAAO,KAAK,MAAM,KAAK;AAAA,MACvB,MAAM;AAAA,MACN,OAAO;AAAA;AAAA,EAEX;AAAA,EACA,OAAQ,SAAS,CAAC;AAAA;;;ACzBpB;AACA;AACA;AAwCA,gBAAS;AArCT,IAAI,KAA8B;AAClC,IAAI,YAAgD;AAE7C,SAAS,KAAK,CAAC,kBAA6C;AAAA,EACjE,IAAI,CAAC,IAAI;AAAA,IACP,MAAM,MAAM,oBAAoB,QAAQ,IAAI,gBAAgB;AAAA,IAG5D,MAAM,UAAU,IAAI,SAAS,WAAW,KAAK,IAAI,SAAS,WAAW,KAAK,IAAI,SAAS,YAAY;AAAA,IACnG,YAAY,SAAS,KAAK;AAAA,MACxB,KAAK,UAAU,YAAY,EAAE,oBAAoB,QAAQ,IAAI,iCAAiC,IAAI;AAAA,IACpG,CAAC;AAAA,IACD,KAAK,IAAI,OAAiB;AAAA,MACxB,SAAS,IAAI,kBAAkB,EAAE,UAAU,UAAU,CAAC;AAAA,IACxD,CAAC;AAAA,EACH;AAAA,EACA,OAAO;AAAA;AAIF,SAAS,YAAY,GAAgC;AAAA,EAC1D,IAAI,CAAC;AAAA,IAAW,MAAM;AAAA,EACtB,OAAO;AAAA;AAIT,eAAsB,OAAO,GAAkB;AAAA,EAC7C,IAAI,IAAI;AAAA,IACN,MAAM,GAAG,QAAQ;AAAA,IACjB,KAAK;AAAA,EACP;AAAA,EACA,IAAI,WAAW;AAAA,IACb,MAAM,UAAU,IAAI;AAAA,IACpB,YAAY;AAAA,EACd;AAAA;;ACpCK,MAAM,qBAAqB,MAAM;AAAA,EAC/B;AAAA,EACS;AAAA,EAEhB,WAAW,CACT,MACA,SACA,OACA;AAAA,IACA,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA,IACZ,KAAK,QAAQ;AAAA,IACb,KAAK,OAAO,KAAK,YAAY;AAAA,IAC7B,MAAM,oBAAoB,MAAM,KAAK,WAAW;AAAA;AAAA,EAGlD,MAAM,GAA+F;AAAA,IACnG,OAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,IACd;AAAA;AAEJ;AAAA;AAKO,MAAM,4BAA4B,aAAa;AAAA,EACpD,WAAW,CAAC,UAAkB;AAAA,IAC5B,MAAM,oBAAoB,qBAAqB,UAAU;AAAA;AAE7D;AAAA;AAKO,MAAM,wBAAwB,aAAa;AAAA,EAChD,WAAW,CAAC,SAAiB,OAAiB;AAAA,IAC5C,MAAM,oBAAoB,SAAS,KAAK;AAAA;AAE5C;AAAA;AAKO,MAAM,sBAAsB,aAAa;AAAA,EAC9C,WAAW,CAAC,SAAiB,OAAiB;AAAA,IAC5C,MAAM,kBAAkB,SAAS,KAAK;AAAA;AAE1C;AAAA;AAKO,MAAM,sBAAsB,aAAa;AAAA,EAGrC;AAAA,EAFT,WAAW,CACT,SACO,YACP,OACA;AAAA,IACA,MAAM,kBAAkB,SAAS,KAAK;AAAA,IAH/B;AAAA;AAAA,EAMA,MAAM,GAA+H;AAAA,IAC5I,MAAM,OAAO,MAAM,OAAO;AAAA,IAC1B,OAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,YAAY,KAAK;AAAA,IACnB;AAAA;AAEJ;AAAA;AAKO,MAAM,8BAA8B,aAAa;AAAA,EACtD,WAAW,CAAC,SAAiB,OAAiB;AAAA,IAC5C,MAAM,2BAA2B,SAAS,KAAK;AAAA;AAEnD;AAAA;AAEO,MAAM,4BAA4B,aAAa;AAAA,EACpD,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,wBAAwB,OAAO;AAAA;AAEzC;AAAA;AAEO,MAAM,2BAA2B,aAAa;AAAA,EACnD,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,uBAAuB,OAAO;AAAA;AAExC;AAAA;AAEO,MAAM,uBAAuB,aAAa;AAAA,EAC/C,WAAW,CAAC,SAAiB;AAAA,IAC3B,MAAM,oBAAoB,OAAO;AAAA;AAErC;AAAA;AAEO,MAAM,uBAAuB,aAAa;AAAA,EAC/C,WAAW,CAAC,UAAU,aAAa;AAAA,IACjC,MAAM,aAAa,OAAO;AAAA;AAE9B;AAKO,SAAS,eAAe,CAAC,KAAsB;AAAA,EACpD,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA;;;ACvHxD;AAGA,IAAM,iBAAiB,EAAE,OAAO,EAAE,UAAU,CAAC,QAAQ;AAAA,EACnD,MAAM,WAAW,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAAA,EACnE,MAAM,QAAQ,CAAC,WAAW,SAAS;AAAA,EACnC,WAAW,KAAK,UAAU;AAAA,IACxB,IAAI,CAAC,MAAM,SAAS,CAAC,GAAG;AAAA,MACtB,MAAM,IAAI,MAAM,oBAAoB,sBAAsB,MAAM,KAAK,IAAI,GAAG;AAAA,IAC9E;AAAA,EACF;AAAA,EACA,OAAO;AAAA,CACR;AAYD,IAAM,YAAwC,EAAE,OAAO;AAAA,EACrD,cAAc,EAAE,WACd,CAAC,QAAS,OAAO,QAAQ,YAAY,IAAI,WAAW,IAAK,YAAY,KACrE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAC5B;AAAA,EACA,SAAS,EAAE,KAAK,CAAC,WAAW,SAAS,CAAC,EAAE,SAAS;AAAA,EACjD,UAAU,eAAe,SAAS;AAAA,EAClC,WAAW,EAAE,KAAK,CAAC,SAAS,QAAQ,QAAQ,OAAO,CAAC,EAAE,QAAQ,MAAM;AAAA,EACpE,UAAU,EAAE,KAAK,CAAC,eAAe,cAAc,MAAM,CAAC,EAAE,QAAQ,aAAa;AAC/E,CAAC;AAMD,IAAI,YAAwB;AAErB,SAAS,MAAM,GAAQ;AAAA,EAC5B,IAAI,WAAW;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,UAAU,UAAU,QAAQ,GAAG;AAAA,EAE9C,IAAI,CAAC,OAAO,SAAS;AAAA,IACnB,QAAQ,MAAM,sCAAqC;AAAA,IACnD,QAAQ,MAAM,EAAE,aAAa,OAAO,KAAK,CAAC;AAAA,IAC1C,MAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAAA,EAGA,IAAI;AAAA,EACJ,IAAI,OAAO,KAAK,YAAY,OAAO,KAAK,SAAS,SAAS,GAAG;AAAA,IAC3D,kBAAkB,OAAO,KAAK;AAAA,EAChC,EAAO,SAAI,OAAO,KAAK,SAAS;AAAA,IAC9B,kBAAkB,CAAC,OAAO,KAAK,OAAO;AAAA,EACxC,EAAO;AAAA,IACL,kBAAkB,CAAC,SAAS;AAAA;AAAA,EAG9B,YAAY,KAAK,OAAO,MAAM,gBAAgB;AAAA,EAC9C,OAAO;AAAA;;AC7DT,IAAM,aAAuC;AAAA,EAC3C,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AACT;AAAA;AAEA,MAAM,OAAO;AAAA,EACH;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EAEf,IAAI,GAAG;AAAA,IACb,IAAI,KAAK;AAAA,MAAc;AAAA,IACvB,KAAK,eAAe;AAAA,IACpB,IAAI;AAAA,MACF,MAAM,MAAM,OAAO;AAAA,MACnB,KAAK,SAAS,IAAI;AAAA,MAClB,KAAK,gBAAgB,IAAI,aAAa;AAAA,MACtC,MAAM;AAAA,MAEN,KAAK,SAAS;AAAA,MACd,KAAK,gBAAgB;AAAA;AAAA;AAAA,MAIb,KAAK,GAAa;AAAA,IAC5B,KAAK,KAAK;AAAA,IACV,OAAO,KAAK;AAAA;AAAA,MAGF,YAAY,GAAY;AAAA,IAClC,KAAK,KAAK;AAAA,IACV,OAAO,KAAK;AAAA;AAAA,EAGN,SAAS,CAAC,OAA0B;AAAA,IAC1C,OAAO,WAAW,UAAU,WAAW,KAAK;AAAA;AAAA,EAGtC,aAAa,CAAC,OAAiB,SAAiB,MAA4B;AAAA,IAClF,MAAM,YAAY,IAAI,KAAK,EAAE,YAAY;AAAA,IAEzC,IAAI,KAAK,cAAc;AAAA,MAErB,OAAO,KAAK,UAAU;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,WACG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,IAGA,MAAM,UAAU,OAAO,IAAI,KAAK,UAAU,IAAI,MAAM;AAAA,IACpD,OAAO,IAAI,cAAc,MAAM,YAAY,MAAM,UAAU;AAAA;AAAA,EAG7D,KAAK,CAAC,SAAiB,MAAkC;AAAA,IACvD,IAAI,KAAK,UAAU,OAAO,GAAG;AAAA,MAC3B,QAAQ,MAAM,KAAK,cAAc,SAAS,SAAS,IAAI,CAAC;AAAA,IAC1D;AAAA;AAAA,EAGF,IAAI,CAAC,SAAiB,MAAkC;AAAA,IACtD,IAAI,KAAK,UAAU,MAAM,GAAG;AAAA,MAC1B,QAAQ,KAAK,KAAK,cAAc,QAAQ,SAAS,IAAI,CAAC;AAAA,IACxD;AAAA;AAAA,EAGF,IAAI,CAAC,SAAiB,MAAkC;AAAA,IACtD,IAAI,KAAK,UAAU,MAAM,GAAG;AAAA,MAC1B,QAAQ,KAAK,KAAK,cAAc,QAAQ,SAAS,IAAI,CAAC;AAAA,IACxD;AAAA;AAAA,EAGF,KAAK,CAAC,SAAiB,MAAkC;AAAA,IACvD,IAAI,KAAK,UAAU,OAAO,GAAG;AAAA,MAC3B,QAAQ,MAAM,KAAK,cAAc,SAAS,SAAS,IAAI,CAAC;AAAA,IAC1D;AAAA;AAEJ;AAGO,IAAM,SAAiB,IAAI;;;;;;;;;;;;;ACxFlC,gBAAS;AAGT;AAWA,IAAM,YAAoB,UAAU,WAAW,EAAE,MAAM,GAAG,CAAC;AAK3D,eAAsB,OAAO,CAC3B,UACA,aACA,WAAW,OACM;AAAA,EACjB,MAAM,MAAK,MAAM;AAAA,EAEjB,MAAM,MAAM,MAAM,IACf,WAAW,MAAM,EACjB,OAAO;AAAA,IACN,WAAW;AAAA,IACX,cAAc;AAAA,IACd;AAAA,IACA,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,CAAC,EACA,UAAU,CAAC,IAAI,CAAC,EAChB,wBAAwB;AAAA,EAE3B,OAAO,IAAI;AAAA;AAOb,eAAsB,KAAK,GAAwB;AAAA,EACjD,MAAM,MAAK,MAAM;AAAA,EAEjB,QAAQ,SAAS,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAahB,QAAQ,GAAE;AAAA,EAEZ,OAAO,KAAK,MAAM;AAAA;AAMpB,eAAsB,QAAQ,CAAC,OAA8B;AAAA,EAC3D,MAAM,MAAK,MAAM;AAAA,EAEjB,MAAM,IACH,YAAY,MAAM,EAClB,IAAI;AAAA,IACH,QAAQ;AAAA,IACR,cAAc,IAAI;AAAA,IAClB,WAAW;AAAA,IACX,WAAW;AAAA,EACb,CAAC,EACA,MAAM,MAAM,KAAK,KAAK,EACtB,QAAQ;AAAA;AAOb,eAAsB,IAAI,CACxB,OACA,OACA,cAAc,GACC;AAAA,EACf,MAAM,MAAK,MAAM;AAAA,EAEjB,MAAM,MAAM,MAAM,IACf,WAAW,MAAM,EACjB,OAAO,UAAU,EACjB,MAAM,MAAM,KAAK,KAAK,EACtB,iBAAiB;AAAA,EAEpB,IAAI,CAAC;AAAA,IAAK;AAAA,EAEV,IAAI,IAAI,WAAW,aAAa;AAAA,IAC9B,MAAM,IACH,YAAY,MAAM,EAClB,IAAI;AAAA,MACH,QAAQ;AAAA,MACR;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,IACb,CAAC,EACA,MAAM,MAAM,KAAK,KAAK,EACtB,QAAQ;AAAA,EACb,EAAO;AAAA,IACL,MAAM,IACH,YAAY,MAAM,EAClB,IAAI;AAAA,MACH,QAAQ;AAAA,MACR;AAAA,MACA,cAAc,IAAI;AAAA,MAClB,WAAW;AAAA,MACX,WAAW;AAAA,IACb,CAAC,EACA,MAAM,MAAM,KAAK,KAAK,EACtB,QAAQ;AAAA;AAAA;AAOf,eAAsB,KAAK,GAAwB;AAAA,EACjD,QAAQ,SAAS,MAAM;AAAA;AAAA;AAAA;AAAA,IAIrB,QAAQ,MAAM,CAAC;AAAA,EAEjB,MAAM,SAAiC,CAAC;AAAA,EACxC,WAAW,OAAO,MAAM;AAAA,IACtB,OAAO,IAAI,UAAU,SAAS,IAAI,OAAO,EAAE;AAAA,EAC7C;AAAA,EAEA,OAAO;AAAA,IACL,SAAS,OAAO,cAAc;AAAA,IAC9B,YAAY,OAAO,iBAAiB;AAAA,IACpC,WAAW,OAAO,gBAAgB;AAAA,IAClC,QAAQ,OAAO,aAAa;AAAA,IAC5B,OAAO,OAAO,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AAAA,EACxD;AAAA;AAMK,SAAS,WAAW,GAAW;AAAA,EACpC,OAAO;AAAA;;AClKT,cAAS;AACT,2BAAS;AAET,IAAM,iBAAiB;AAGvB,IAAM,kBAAkB,GAAE,OAAO,EAAE,OAAO,CAAC,QAAQ;AAAA,EACjD,MAAM,QAAQ,IAAI,MAAM,GAAG;AAAA,EAC3B,IAAI,MAAM,SAAS;AAAA,IAAG,OAAO;AAAA,EAC7B,OAAO,eAAe,MAAM,EAAG;AAAA,GAC9B,kCAAkC;AAGrC,IAAM,aAAa;AAAA,EAEjB,QAAQ,gBAAgB,SAAS;AAAA,EAEjC,WAAW,gBAAgB,SAAS;AACtC;AA6GO,IAAM,0BAAwD,GAAE,OAAO;AAAA,EAC5E,MAAM,GAAE,QAAQ,cAAc;AAAA,KAC3B;AAAA,EAEH,WAAW,GAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAEvD,WAAW,GAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACzD,CAAC;AAGM,IAAM,sBAAgD,GAAE,OAAO;AAAA,EACpE,MAAM,GAAE,QAAQ,UAAU;AAAA,EAC1B,WAAW,gBAAgB,SAAS;AAAA,EACpC,WAAW,GAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACzD,CAAC;AAGM,IAAM,sBAAgD,GAAE,OAAO;AAAA,EACpE,MAAM,GAAE,QAAQ,UAAU;AAAA,EAC1B,QAAQ,gBAAgB,SAAS;AAAA,EACjC,WAAW,GAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACzD,CAAC;AAGM,IAAM,sBAAgD,GAAE,OAAO;AAAA,EACpE,MAAM,GAAE,QAAQ,UAAU;AAAA,EAC1B,eAAe,gBAAgB,SAAS;AAAA,EACxC,WAAW,GAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACzD,CAAC;AAGM,IAAM,yBAAsD,GAAE,OAAO;AAAA,EAC1E,MAAM,GAAE,QAAQ,aAAa;AAAA,KAC1B;AAAA,EAEH,iBAAiB,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,WAAW,GAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACzD,CAAC;AAGM,IAAM,qBAA8C,GAAE,OAAO;AAAA,EAClE,MAAM,GAAE,QAAQ,SAAS;AAAA,EACzB,WAAW,gBAAgB,SAAS;AAAA,EACpC,iBAAiB,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,WAAW,GAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACzD,CAAC;AAGM,IAAM,qBAA8C,GAAE,OAAO;AAAA,EAClE,MAAM,GAAE,QAAQ,SAAS;AAAA,EACzB,QAAQ,gBAAgB,SAAS;AAAA,EACjC,iBAAiB,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,WAAW,GAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACzD,CAAC;AAGM,IAAM,0BAAwD,GAAE,OAAO;AAAA,EAC5E,MAAM,GAAE,QAAQ,cAAc;AAAA,KAC3B;AAAA,EACH,iBAAiB,GAAE,OAAO,EAAE,SAAS;AAAA,EAErC,SAAS,GAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAGM,IAAM,sBAAgD,GAAE,OAAO;AAAA,EACpE,MAAM,GAAE,QAAQ,UAAU;AAAA,EAC1B,WAAW,gBAAgB,SAAS;AAAA,EACpC,iBAAiB,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,SAAS,GAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAGM,IAAM,sBAAgD,GAAE,OAAO;AAAA,EACpE,MAAM,GAAE,QAAQ,UAAU;AAAA,EAC1B,QAAQ,gBAAgB,SAAS;AAAA,EACjC,iBAAiB,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,SAAS,GAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAGM,IAAM,2BAA0D,GAAE,OAAO;AAAA,EAC9E,MAAM,GAAE,QAAQ,eAAe;AAAA,EAE/B,YAAY,gBAAgB,SAAS;AAAA,EAErC,cAAc,GAAE,OAAO,EAAE,SAAS;AAAA,EAElC,QAAQ,gBAAgB,SAAS;AACnC,CAAC;AAGM,IAAM,6BAA8D,GAAE,OAAO;AAAA,EAClF,MAAM,GAAE,QAAQ,iBAAiB;AAAA,EAEjC,UAAU,gBAAgB,SAAS;AAAA,EAEnC,cAAc,GAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAGM,IAAM,yBAAsD,GAAE,OAAO;AAAA,EAC1E,MAAM,GAAE,QAAQ,aAAa;AAAA,EAE7B,YAAY,gBAAgB,SAAS;AAAA,EAErC,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,EAE3B,UAAU,GAAE,OAAO,EAAE,SAAS;AAChC,CAAC;AAGM,IAAM,qBAA8C,GAAE,mBAAmB,QAAQ;AAAA,EACtF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;AC7PD,cAAS;AAcF,IAAM,8BAAgE,GAAE,OAAO;AAAA,EACpF,MAAM,GAAE,OAAO,EAAE,MAAM,gBAAgB,uCAAuC,EAAE,IAAI,EAAE;AAAA,EACtF,SAAS,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,SAAS,GAAE,MAAM,GAAE,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EAClC,QAAQ,GAAE,OAAO,GAAE,OAAO,GAAG,GAAE,QAAQ,CAAC;AAAA,EACxC,aAAa,GAAE,OAAO,EAAE,IAAI,SAAW,gCAAgC;AAAA,EACvE,SAAS,GAAE,QAAQ,EAAE,SAAS;AAChC,CAAC;;ACtBD,cAAS;AAwFT,IAAM,qBAAqB,GAAE,OAAO;AAAA,EAClC,qBAAqB,GAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EAC7C,cAAc,GAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACvC,sBAAsB,GAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EAC9C,WAAW,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA,EAC1D,WAAW,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK,EAAE,QAAQ,GAAK;AAAA,EAC/D,YAAY,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC;AACvD,CAAC;AAGM,IAAM,sBACX;AAEK,IAAM,qBAA8C,GAAE,OAAO;AAAA,EAClE,MAAM,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC/B,aAAa,GAAE,OAAO,EAAE,IAAI;AAAA,EAC5B,SAAS,GAAE,MAAM,kBAAkB,EAAE,IAAI,CAAC;AAAA,EAC1C,SAAS,mBAAmB,SAAS,EAAE,QAAQ,SAAS;AAAA,EACxD,YAAY,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACjD,UAAU,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACjD,CAAC;AAEM,IAAM,qBAA8C,GAAE,OAAO;AAAA,EAClE,MAAM,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC1C,aAAa,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACvC,SAAS,GAAE,MAAM,kBAAkB,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACrD,SAAS,mBAAmB,QAAQ,EAAE,SAAS;AACjD,CAAC,EAAE,OACD,CAAC,SAAS,OAAO,KAAK,IAAI,EAAE,SAAS,GACrC,EAAE,SAAS,iDAAiD,CAC9D;AAEO,IAAM,wBAAoD,GAAE,OAAO;AAAA,EACxE,UAAU,GAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,YAAY,GAAE,OAAO;AAAA,EACrB,OAAO,GAAE,OAAO;AAAA,IACd,QAAQ,GAAE,OAAO;AAAA,IACjB,MAAM,GAAE,OAAO;AAAA,IACf,YAAY,GAAE,OAAO;AAAA,IACrB,iBAAiB,GAAE,OAAO;AAAA,IAC1B,WAAW,GAAE,OAAO;AAAA,EACtB,CAAC;AAAA,EACD,SAAS,GAAE,OAAO;AAAA,IAChB,cAAc,GAAE,MAAM,GAAE,OAAO;AAAA,MAC7B,MAAM,GAAE,OAAO;AAAA,MACf,MAAM,GAAE,OAAO;AAAA,MACf,QAAQ,GAAE,OAAO;AAAA,MACjB,QAAQ,GAAE,OAAO;AAAA,MACjB,YAAY,GAAE,OAAO,EAAE,SAAS;AAAA,MAChC,cAAc,GAAE,OAAO,EAAE,SAAS;AAAA,MAClC,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC,CAAC;AAAA,IACF,QAAQ,GAAE,MAAM,GAAE,OAAO;AAAA,MACvB,MAAM,GAAE,OAAO;AAAA,MACf,YAAY,GAAE,OAAO;AAAA,MACrB,MAAM,GAAE,OAAO;AAAA,MACf,MAAM,GAAE,IAAI;AAAA,IACd,CAAC,CAAC;AAAA,EACJ,CAAC;AAAA,EACD,YAAY,GAAE,QAAQ;AAAA,EACtB,aAAa,GAAE,OAAO,EAAE,SAAS;AACnC,CAAC;AAEM,IAAM,sBAAwD,GAAE,OAAO;AAAA,EAC5E,iBAAiB,GAAE,OAAO;AAAA,EAC1B,kBAAkB,GAAE,OAAO;AAAA,EAC3B,iBAAiB,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,oBAAoB,GAAE,OAAO,EAAE,SAAS;AAAA,EACxC,cAAc,GAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAEM,IAAM,uBAAkD,GAAE,OAAO;AAAA,EACtE,IAAI,GAAE,OAAO,EAAE,KAAK;AAAA,EACpB,MAAM,GAAE,OAAO;AAAA,EACf,QAAQ,GAAE,KAAK,CAAC,YAAY,UAAU,UAAU,QAAQ,CAAC;AAAA,EACzD,aAAa,GAAE,OAAO,EAAE,IAAI;AAAA,EAC5B,SAAS,GAAE,MAAM,kBAAkB;AAAA,EACnC,SAAS;AAAA,EACT,iBAAiB,GAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC;AAAA,EAC3C,kBAAkB,GAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC;AAAA,EAC5C,iBAAiB,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3D,oBAAoB,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACzD,cAAc,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,WAAW,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,GAAE,OAAO,EAAE,SAAS;AACjC,CAAC;;;;;;;;;;AC7KD;AAMO,SAAS,cAAc,GAAW;AAAA,EACvC,OAAO,YAAY,EAAE,EAAE,SAAS,KAAK;AAAA;AAOhC,SAAS,WAAW,CAAC,SAAiB,QAAwB;AAAA,EACnE,MAAM,OAAO,WAAW,UAAU,MAAM;AAAA,EACxC,KAAK,OAAO,OAAO;AAAA,EACnB,OAAO,KAAK,OAAO,KAAK;AAAA;AAOnB,SAAS,eAAe,CAC7B,SACA,WACA,QACS;AAAA,EACT,MAAM,oBAAoB,YAAY,SAAS,MAAM;AAAA,EAGrD,IAAI,UAAU,WAAW,kBAAkB,QAAQ;AAAA,IACjD,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,SAAS;AAAA,EACb,SAAS,IAAI,EAAG,IAAI,UAAU,QAAQ,KAAK;AAAA,IACzC,UAAU,UAAU,WAAW,CAAC,IAAI,kBAAkB,WAAW,CAAC;AAAA,EACpE;AAAA,EAEA,OAAO,WAAW;AAAA;AAOb,SAAS,qBAAqB,CACnC,SACA,QACA,WACQ;AAAA,EACR,MAAM,KAAK,aAAa,KAAK,MAAM,KAAK,IAAI,IAAI,IAAI;AAAA,EACpD,MAAM,gBAAgB,GAAG,MAAM;AAAA,EAC/B,MAAM,YAAY,YAAY,eAAe,MAAM;AAAA,EAEnD,OAAO,KAAK,SAAS;AAAA;AAOhB,SAAS,qBAAqB,CACnC,SACA,QACA,QACA,mBAAmB,KACV;AAAA,EAET,MAAM,QAAQ,OAAO,MAAM,GAAG;AAAA,EAC9B,MAAM,YAAY,MACf,KAAK,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC,GAC7B,MAAM,CAAC;AAAA,EACX,MAAM,YAAY,MACf,KAAK,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC,GAC9B,MAAM,CAAC;AAAA,EAEX,IAAI,CAAC,aAAa,CAAC,WAAW;AAAA,IAC5B,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,SAAS,WAAW,EAAE;AAAA,EACjC,IAAI,MAAM,EAAE,GAAG;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EAGA,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,IAAI;AAAA,EACxC,IAAI,KAAK,IAAI,MAAM,EAAE,IAAI,kBAAkB;AAAA,IACzC,OAAO;AAAA,EACT;AAAA,EAGA,MAAM,gBAAgB,GAAG,MAAM;AAAA,EAC/B,OAAO,gBAAgB,eAAe,WAAW,MAAM;AAAA;",
17
- "debugId": "99E2621053B07F6D64756E2164756E21",
16
+ "mappings": "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",
17
+ "debugId": "D2BBFAFE2AAED10A64756E2164756E21",
18
18
  "names": []
19
19
  }
@@ -144,7 +144,7 @@ class HiroClient {
144
144
  get headers() {
145
145
  return this.apiKey ? { "x-hiro-api-key": this.apiKey } : {};
146
146
  }
147
- async fetchWithRetry(url, timeoutMs = 15000) {
147
+ async fetchWithRetry(url, timeoutMs = 120000) {
148
148
  for (let attempt = 0;attempt < this.maxRetries; attempt++) {
149
149
  const res = await fetch(url, { headers: this.headers, signal: AbortSignal.timeout(timeoutMs) });
150
150
  if (res.ok || res.status === 404)
@@ -468,5 +468,5 @@ export {
468
468
  HiroClient
469
469
  };
470
470
 
471
- //# debugId=9D01A1DBB63D95F064756E2164756E21
471
+ //# debugId=84E732ABB4DEC21A64756E2164756E21
472
472
  //# sourceMappingURL=hiro-client.js.map
@@ -4,9 +4,9 @@
4
4
  "sourcesContent": [
5
5
  "import { z } from \"zod/v4\";\n\n// Parse comma-separated networks\nconst networksSchema = z.string().transform((val) => {\n const networks = val.split(\",\").map((n) => n.trim()).filter(Boolean);\n const valid = [\"mainnet\", \"testnet\"];\n for (const n of networks) {\n if (!valid.includes(n)) {\n throw new Error(`Invalid network: ${n}. Must be one of: ${valid.join(\", \")}`);\n }\n }\n return networks as (\"mainnet\" | \"testnet\")[];\n});\n\ninterface EnvSchemaOutput {\n DATABASE_URL?: string;\n NETWORK?: \"mainnet\" | \"testnet\";\n NETWORKS?: (\"mainnet\" | \"testnet\")[];\n LOG_LEVEL: \"debug\" | \"info\" | \"warn\" | \"error\";\n NODE_ENV: \"development\" | \"production\" | \"test\";\n}\n\n// Cast needed: z.preprocess / z.default create different _input vs _output types\n// that z.ZodType<T> can't represent without explicit input type param\nconst envSchema: z.ZodType<EnvSchemaOutput> = z.object({\n DATABASE_URL: z.preprocess(\n (val) => (typeof val === \"string\" && val.length === 0) ? undefined : val,\n z.string().url().optional(),\n ),\n NETWORK: z.enum([\"mainnet\", \"testnet\"]).optional(),\n NETWORKS: networksSchema.optional(),\n LOG_LEVEL: z.enum([\"debug\", \"info\", \"warn\", \"error\"]).default(\"info\"),\n NODE_ENV: z.enum([\"development\", \"production\", \"test\"]).default(\"development\"),\n}) as unknown as z.ZodType<EnvSchemaOutput>;\n\nexport type Env = EnvSchemaOutput & {\n enabledNetworks: (\"mainnet\" | \"testnet\")[];\n};\n\nlet cachedEnv: Env | null = null;\n\nexport function getEnv(): Env {\n if (cachedEnv) {\n return cachedEnv;\n }\n\n const result = envSchema.safeParse(process.env);\n\n if (!result.success) {\n console.error(\"❌ Invalid environment configuration:\");\n console.error(z.treeifyError(result.error));\n throw new Error(\"Invalid environment configuration\");\n }\n\n // Compute enabled networks from NETWORKS or NETWORK\n let enabledNetworks: (\"mainnet\" | \"testnet\")[];\n if (result.data.NETWORKS && result.data.NETWORKS.length > 0) {\n enabledNetworks = result.data.NETWORKS;\n } else if (result.data.NETWORK) {\n enabledNetworks = [result.data.NETWORK];\n } else {\n enabledNetworks = [\"mainnet\"]; // Default\n }\n\n cachedEnv = { ...result.data, enabledNetworks };\n return cachedEnv;\n}\n\n// Export for testing\nexport { envSchema };\n",
6
6
  "import { getEnv } from \"./env.ts\";\n\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\nclass Logger {\n private _level?: LogLevel;\n private _isProduction?: boolean;\n private _initialized = false;\n\n private init() {\n if (this._initialized) return;\n this._initialized = true;\n try {\n const env = getEnv();\n this._level = env.LOG_LEVEL;\n this._isProduction = env.NODE_ENV === \"production\";\n } catch {\n // Fallback when env is unavailable (e.g. tests without DATABASE_URL)\n this._level = \"info\";\n this._isProduction = false;\n }\n }\n\n private get level(): LogLevel {\n this.init();\n return this._level!;\n }\n\n private get isProduction(): boolean {\n this.init();\n return this._isProduction!;\n }\n\n private shouldLog(level: LogLevel): boolean {\n return LOG_LEVELS[level] >= LOG_LEVELS[this.level];\n }\n\n private formatMessage(level: LogLevel, message: string, meta?: Record<string, any>) {\n const timestamp = new Date().toISOString();\n\n if (this.isProduction) {\n // JSON output for production\n return JSON.stringify({\n timestamp,\n level,\n message,\n ...meta,\n });\n }\n\n // Human-readable output for development\n const metaStr = meta ? ` ${JSON.stringify(meta)}` : \"\";\n return `[${timestamp}] ${level.toUpperCase()}: ${message}${metaStr}`;\n }\n\n debug(message: string, meta?: Record<string, any>): void {\n if (this.shouldLog(\"debug\")) {\n console.debug(this.formatMessage(\"debug\", message, meta));\n }\n }\n\n info(message: string, meta?: Record<string, any>): void {\n if (this.shouldLog(\"info\")) {\n console.info(this.formatMessage(\"info\", message, meta));\n }\n }\n\n warn(message: string, meta?: Record<string, any>): void {\n if (this.shouldLog(\"warn\")) {\n console.warn(this.formatMessage(\"warn\", message, meta));\n }\n }\n\n error(message: string, meta?: Record<string, any>): void {\n if (this.shouldLog(\"error\")) {\n console.error(this.formatMessage(\"error\", message, meta));\n }\n }\n}\n\n// Export singleton instance\nexport const logger: Logger = new Logger();\n",
7
- "/**\n * Hiro public API client for backfilling historical block data.\n *\n * The stacks-node RPC `/v2/blocks/{height}` only returns block headers + tx IDs,\n * not full transaction data or events. The Hiro API serves complete block data\n * that we can transform into the NewBlockPayload format our indexer expects.\n */\n\nimport { logger } from \"../logger.ts\";\n\nconst DEFAULT_HIRO_API_URL = \"https://api.mainnet.hiro.so\";\n\n/** v2 /extended/v2/blocks/{height} response */\nexport interface HiroBlockResponse {\n canonical: boolean;\n height: number;\n hash: string;\n block_time: number;\n block_time_iso: string;\n index_block_hash: string;\n parent_block_hash: string;\n parent_index_block_hash: string;\n burn_block_hash: string;\n burn_block_height: number;\n burn_block_time: number;\n miner_txid: string;\n tx_count: number;\n}\n\n/** v2 /extended/v2/blocks/{height}/transactions response */\nexport interface HiroBlockTxsResponse {\n limit: number;\n offset: number;\n total: number;\n results: HiroTxResponse[];\n}\n\nexport interface HiroTxResponse {\n tx_id: string;\n tx_type: string;\n tx_status: string;\n sender_address: string;\n fee_rate: string;\n nonce: number;\n block_hash: string;\n block_height: number;\n burn_block_height: number;\n tx_index: number;\n event_count: number;\n token_transfer?: {\n recipient_address: string;\n amount: string;\n memo: string;\n };\n contract_call?: {\n contract_id: string;\n function_name: string;\n function_args: unknown[];\n };\n smart_contract?: {\n contract_id: string;\n source_code: string;\n };\n}\n\nexport interface HiroEvent {\n event_index: number;\n event_type: string; // \"stx_asset\" | \"fungible_token_asset\" | \"non_fungible_token_asset\" | \"smart_contract_log\"\n tx_id: string;\n asset?: {\n asset_event_type: string; // \"transfer\" | \"mint\" | \"burn\"\n sender?: string;\n recipient?: string;\n amount?: string;\n memo?: string;\n asset_id?: string;\n value?: unknown;\n };\n contract_log?: {\n contract_id: string;\n topic: string;\n value: unknown;\n };\n}\n\nexport interface HiroEventsResponse {\n limit: number;\n offset: number;\n events: HiroEvent[];\n}\n\n/** Shape our indexer expects at POST /new_block */\nexport interface NewBlockPayload {\n block_hash: string;\n block_height: number;\n index_block_hash: string;\n parent_block_hash: string;\n parent_index_block_hash: string;\n burn_block_hash: string;\n burn_block_height: number;\n burn_block_timestamp: number;\n miner_txid: string;\n timestamp: number;\n transactions: TransactionPayload[];\n events: TransactionEventPayload[];\n}\n\ninterface TransactionPayload {\n txid: string;\n raw_tx: string;\n status: string;\n tx_index: number;\n tx_type?: string;\n sender_address?: string;\n}\n\ninterface TransactionEventPayload {\n txid: string;\n event_index: number;\n committed: boolean;\n type: string;\n stx_transfer_event?: { sender: string; recipient: string; amount: string; memo?: string };\n stx_mint_event?: { recipient: string; amount: string };\n stx_burn_event?: { sender: string; amount: string };\n stx_lock_event?: { locked_amount: string; unlock_height: string; locked_address: string };\n ft_transfer_event?: { asset_identifier: string; sender: string; recipient: string; amount: string };\n ft_mint_event?: { asset_identifier: string; recipient: string; amount: string };\n ft_burn_event?: { asset_identifier: string; sender: string; amount: string };\n nft_transfer_event?: { asset_identifier: string; sender: string; recipient: string; value: unknown };\n nft_mint_event?: { asset_identifier: string; recipient: string; value: unknown };\n nft_burn_event?: { asset_identifier: string; sender: string; value: unknown };\n smart_contract_event?: { contract_identifier: string; topic: string; value: unknown };\n}\n\nexport interface GetBlockOptions {\n /** Fetch actual raw_tx hex for each transaction (instead of \"0x00\" placeholder) */\n includeRawTx?: boolean;\n /** Max concurrent raw_tx fetches per block (default: 10) */\n rawTxConcurrency?: number;\n}\n\nexport class HiroClient {\n private apiUrl: string;\n private fallbackUrl: string | undefined;\n private apiKey: string | undefined;\n private maxRetries: number;\n\n constructor(apiUrl?: string, maxRetries = 5) {\n this.apiUrl = apiUrl || process.env.HIRO_API_URL || DEFAULT_HIRO_API_URL;\n this.fallbackUrl = process.env.HIRO_FALLBACK_URL;\n this.apiKey = process.env.HIRO_API_KEY;\n this.maxRetries = maxRetries;\n }\n\n private get headers(): Record<string, string> {\n return this.apiKey ? { \"x-hiro-api-key\": this.apiKey } : {};\n }\n\n /** Fetch with retry on 429/5xx using exponential backoff */\n private async fetchWithRetry(url: string, timeoutMs = 15_000): Promise<Response> {\n for (let attempt = 0; attempt < this.maxRetries; attempt++) {\n const res = await fetch(url, { headers: this.headers, signal: AbortSignal.timeout(timeoutMs) });\n\n if (res.ok || res.status === 404) return res;\n\n if (res.status === 429 || res.status >= 500) {\n const delay = Math.min(1000 * Math.pow(2, attempt), 10_000);\n logger.info(\"Rate limited, retrying\", { url: url.split(\"/\").slice(-2).join(\"/\"), attempt, delay });\n await new Promise((r) => setTimeout(r, delay));\n continue;\n }\n\n // 4xx (not 404/429) — don't retry\n return res;\n }\n\n // Final attempt\n return fetch(url, { headers: this.headers, signal: AbortSignal.timeout(timeoutMs) });\n }\n\n /**\n * Fetch a complete block by height, including all transactions and events,\n * transformed into the NewBlockPayload format our indexer expects.\n *\n * Uses 3-step approach:\n * 1. GET /extended/v2/blocks/{height} — block metadata\n * 2. GET /extended/v2/blocks/{height}/transactions — all txs (paginated)\n * 3. GET /extended/v1/tx/events?tx_id={txId} — events per tx (only for txs with events)\n */\n async getBlockForIndexer(height: number, options?: GetBlockOptions): Promise<NewBlockPayload | null> {\n // 1. Fetch block metadata (try primary, fallback on 404)\n let block = await this.fetchBlock(height);\n let usingFallback = false;\n if (!block && this.fallbackUrl) {\n block = await this.fetchBlock(height, this.fallbackUrl);\n if (block) usingFallback = true;\n }\n if (!block) return null;\n\n // 2. Fetch all transactions via v2 block/transactions endpoint\n const baseUrl = usingFallback ? this.fallbackUrl! : this.apiUrl;\n const hiroTxs = await this.fetchBlockTransactions(height, baseUrl);\n\n const txPayloads: TransactionPayload[] = [];\n const eventPayloads: TransactionEventPayload[] = [];\n\n for (const hiroTx of hiroTxs) {\n txPayloads.push({\n txid: hiroTx.tx_id,\n raw_tx: \"0x00\",\n status: mapTxStatus(hiroTx.tx_status),\n tx_index: hiroTx.tx_index ?? 0,\n tx_type: mapTxType(hiroTx.tx_type),\n sender_address: hiroTx.sender_address,\n });\n\n // 3. Fetch events only for txs that have them\n if (hiroTx.event_count > 0) {\n if (hiroTx.event_count > 1000) {\n logger.info(\"Fetching large event set\", { txId: hiroTx.tx_id, eventCount: hiroTx.event_count, height });\n }\n try {\n const events = await this.fetchAllEvents(hiroTx.tx_id, baseUrl);\n eventPayloads.push(...events);\n } catch (err) {\n logger.warn(\"Failed to fetch events for backfill\", { txId: hiroTx.tx_id, error: String(err) });\n }\n }\n }\n\n // 4. Optionally fetch raw_tx for all transactions\n if (options?.includeRawTx && txPayloads.length > 0) {\n const txIds = txPayloads.map((t) => t.txid);\n const rawTxMap = await this.fetchRawTxBatch(txIds, options.rawTxConcurrency);\n for (const txPayload of txPayloads) {\n const raw = rawTxMap.get(txPayload.txid);\n if (raw) txPayload.raw_tx = raw;\n }\n }\n\n return {\n block_hash: block.hash,\n block_height: block.height,\n index_block_hash: block.index_block_hash,\n parent_block_hash: block.parent_block_hash,\n parent_index_block_hash: block.parent_index_block_hash,\n burn_block_hash: block.burn_block_hash,\n burn_block_height: block.burn_block_height,\n burn_block_timestamp: block.burn_block_time,\n miner_txid: block.miner_txid,\n timestamp: block.block_time,\n transactions: txPayloads,\n events: eventPayloads,\n };\n }\n\n /** v2 block metadata */\n private async fetchBlock(height: number, baseUrl?: string): Promise<HiroBlockResponse | null> {\n const url = baseUrl || this.apiUrl;\n const res = await this.fetchWithRetry(`${url}/extended/v2/blocks/${height}`);\n if (res.status === 404) return null;\n if (!res.ok) throw new Error(`Hiro API block/${height} returned ${res.status}`);\n return res.json() as Promise<HiroBlockResponse>;\n }\n\n /** v2 block transactions (paginated) */\n private async fetchBlockTransactions(height: number, baseUrl?: string): Promise<HiroTxResponse[]> {\n const url = baseUrl || this.apiUrl;\n const txs: HiroTxResponse[] = [];\n let offset = 0;\n const limit = 50;\n\n while (true) {\n const res = await this.fetchWithRetry(\n `${url}/extended/v2/blocks/${height}/transactions?limit=${limit}&offset=${offset}`\n );\n if (!res.ok) throw new Error(`Hiro API block/${height}/transactions returned ${res.status}`);\n\n const data = (await res.json()) as HiroBlockTxsResponse;\n txs.push(...data.results);\n\n if (txs.length >= data.total || data.results.length < limit) break;\n offset += limit;\n }\n\n return txs;\n }\n\n private async fetchAllEvents(txId: string, baseUrl?: string, _maxEvents?: number): Promise<TransactionEventPayload[]> {\n const url = baseUrl || this.apiUrl;\n const events: TransactionEventPayload[] = [];\n let offset = 0;\n const limit = 100;\n\n while (true) {\n const res = await this.fetchWithRetry(\n `${url}/extended/v1/tx/events?tx_id=${txId}&limit=${limit}&offset=${offset}`\n );\n if (!res.ok) {\n logger.warn(\"Failed to fetch events from Hiro\", { txId, status: res.status });\n break;\n }\n\n const data = (await res.json()) as HiroEventsResponse;\n for (const hEvent of data.events) {\n const converted = convertHiroEvent(hEvent);\n if (converted) events.push(converted);\n }\n\n if (data.events.length < limit) break;\n offset += limit;\n }\n\n return events;\n }\n\n /** Fetch raw_tx hex for a single transaction */\n async fetchRawTx(txId: string): Promise<string | null> {\n try {\n const res = await this.fetchWithRetry(`${this.apiUrl}/extended/v1/tx/${txId}/raw`, 10_000);\n if (!res.ok) return null;\n const data = (await res.json()) as { raw_tx: string };\n return data.raw_tx || null;\n } catch {\n return null;\n }\n }\n\n /** Fetch raw_tx for multiple transactions with bounded concurrency */\n async fetchRawTxBatch(txIds: string[], concurrency = 10): Promise<Map<string, string>> {\n const results = new Map<string, string>();\n for (let i = 0; i < txIds.length; i += concurrency) {\n const chunk = txIds.slice(i, i + concurrency);\n const settled = await Promise.allSettled(\n chunk.map(async (txId) => {\n const raw = await this.fetchRawTx(txId);\n return { txId, raw };\n })\n );\n for (const result of settled) {\n if (result.status === \"fulfilled\" && result.value.raw) {\n results.set(result.value.txId, result.value.raw);\n }\n }\n }\n return results;\n }\n\n /** Fetch current chain tip height from Hiro API status endpoint */\n async fetchChainTip(): Promise<number> {\n const res = await this.fetchWithRetry(`${this.apiUrl}/extended/v1/status`);\n if (!res.ok) throw new Error(`Hiro API /status returned ${res.status}`);\n const data = (await res.json()) as { chain_tip?: { block_height: number }; stacks_tip_height?: number };\n return data.chain_tip?.block_height ?? data.stacks_tip_height ?? 0;\n }\n\n async isHealthy(): Promise<boolean> {\n try {\n const res = await fetch(`${this.apiUrl}/extended/v1/status`, {\n headers: this.headers,\n signal: AbortSignal.timeout(10_000),\n });\n // 429 = rate limited but reachable\n return res.ok || res.status === 429;\n } catch {\n return false;\n }\n }\n\n getApiUrl(): string {\n return this.apiUrl;\n }\n}\n\n/** Map Hiro tx_status to our indexer's expected format */\nfunction mapTxStatus(status: string): string {\n switch (status) {\n case \"success\":\n return \"success\";\n case \"abort_by_response\":\n case \"abort_by_post_condition\":\n return status;\n default:\n return \"success\";\n }\n}\n\n/** Map Hiro tx_type to node event tx_type */\nfunction mapTxType(type: string): string {\n switch (type) {\n case \"token_transfer\":\n return \"token_transfer\";\n case \"contract_call\":\n return \"contract_call\";\n case \"smart_contract\":\n return \"smart_contract\";\n case \"coinbase\":\n return \"coinbase\";\n case \"tenure_change\":\n return \"tenure_change\";\n case \"poison_microblock\":\n return \"poison_microblock\";\n default:\n return type;\n }\n}\n\n/**\n * Convert a Hiro API event to our indexer's TransactionEvent format.\n *\n * Hiro uses:\n * event_type: \"stx_asset\" | \"fungible_token_asset\" | \"non_fungible_token_asset\" | \"smart_contract_log\"\n * asset.asset_event_type: \"transfer\" | \"mint\" | \"burn\" | \"lock\"\n *\n * Our indexer expects:\n * type: \"stx_transfer_event\" | \"stx_mint_event\" | \"ft_transfer_event\" | \"smart_contract_event\" | ...\n */\nfunction convertHiroEvent(hEvent: HiroEvent): TransactionEventPayload | null {\n const base = {\n txid: hEvent.tx_id,\n event_index: hEvent.event_index,\n committed: true,\n };\n\n if (hEvent.event_type === \"stx_asset\" && hEvent.asset) {\n const a = hEvent.asset;\n switch (a.asset_event_type) {\n case \"transfer\":\n return {\n ...base,\n type: \"stx_transfer_event\",\n stx_transfer_event: {\n sender: a.sender!,\n recipient: a.recipient!,\n amount: a.amount!,\n memo: a.memo,\n },\n };\n case \"mint\":\n return {\n ...base,\n type: \"stx_mint_event\",\n stx_mint_event: { recipient: a.recipient!, amount: a.amount! },\n };\n case \"burn\":\n return {\n ...base,\n type: \"stx_burn_event\",\n stx_burn_event: { sender: a.sender!, amount: a.amount! },\n };\n case \"lock\":\n return {\n ...base,\n type: \"stx_lock_event\",\n stx_lock_event: {\n locked_amount: a.amount!,\n unlock_height: \"0\",\n locked_address: a.sender!,\n },\n };\n }\n }\n\n if (hEvent.event_type === \"fungible_token_asset\" && hEvent.asset) {\n const a = hEvent.asset;\n const assetId = a.asset_id || \"\";\n switch (a.asset_event_type) {\n case \"transfer\":\n return {\n ...base,\n type: \"ft_transfer_event\",\n ft_transfer_event: {\n asset_identifier: assetId,\n sender: a.sender!,\n recipient: a.recipient!,\n amount: a.amount!,\n },\n };\n case \"mint\":\n return {\n ...base,\n type: \"ft_mint_event\",\n ft_mint_event: { asset_identifier: assetId, recipient: a.recipient!, amount: a.amount! },\n };\n case \"burn\":\n return {\n ...base,\n type: \"ft_burn_event\",\n ft_burn_event: { asset_identifier: assetId, sender: a.sender!, amount: a.amount! },\n };\n }\n }\n\n if (hEvent.event_type === \"non_fungible_token_asset\" && hEvent.asset) {\n const a = hEvent.asset;\n const assetId = a.asset_id || \"\";\n switch (a.asset_event_type) {\n case \"transfer\":\n return {\n ...base,\n type: \"nft_transfer_event\",\n nft_transfer_event: {\n asset_identifier: assetId,\n sender: a.sender!,\n recipient: a.recipient!,\n value: a.value,\n },\n };\n case \"mint\":\n return {\n ...base,\n type: \"nft_mint_event\",\n nft_mint_event: { asset_identifier: assetId, recipient: a.recipient!, value: a.value },\n };\n case \"burn\":\n return {\n ...base,\n type: \"nft_burn_event\",\n nft_burn_event: { asset_identifier: assetId, sender: a.sender!, value: a.value },\n };\n }\n }\n\n if (hEvent.event_type === \"smart_contract_log\" && hEvent.contract_log) {\n return {\n ...base,\n type: \"smart_contract_event\",\n smart_contract_event: {\n contract_identifier: hEvent.contract_log.contract_id,\n topic: hEvent.contract_log.topic,\n value: hEvent.contract_log.value,\n },\n };\n }\n\n logger.debug(\"Unknown Hiro event type, skipping\", {\n eventType: hEvent.event_type,\n txId: hEvent.tx_id,\n });\n return null;\n}\n"
7
+ "/**\n * Hiro public API client for backfilling historical block data.\n *\n * The stacks-node RPC `/v2/blocks/{height}` only returns block headers + tx IDs,\n * not full transaction data or events. The Hiro API serves complete block data\n * that we can transform into the NewBlockPayload format our indexer expects.\n */\n\nimport { logger } from \"../logger.ts\";\n\nconst DEFAULT_HIRO_API_URL = \"https://api.mainnet.hiro.so\";\n\n/** v2 /extended/v2/blocks/{height} response */\nexport interface HiroBlockResponse {\n canonical: boolean;\n height: number;\n hash: string;\n block_time: number;\n block_time_iso: string;\n index_block_hash: string;\n parent_block_hash: string;\n parent_index_block_hash: string;\n burn_block_hash: string;\n burn_block_height: number;\n burn_block_time: number;\n miner_txid: string;\n tx_count: number;\n}\n\n/** v2 /extended/v2/blocks/{height}/transactions response */\nexport interface HiroBlockTxsResponse {\n limit: number;\n offset: number;\n total: number;\n results: HiroTxResponse[];\n}\n\nexport interface HiroTxResponse {\n tx_id: string;\n tx_type: string;\n tx_status: string;\n sender_address: string;\n fee_rate: string;\n nonce: number;\n block_hash: string;\n block_height: number;\n burn_block_height: number;\n tx_index: number;\n event_count: number;\n token_transfer?: {\n recipient_address: string;\n amount: string;\n memo: string;\n };\n contract_call?: {\n contract_id: string;\n function_name: string;\n function_args: unknown[];\n };\n smart_contract?: {\n contract_id: string;\n source_code: string;\n };\n}\n\nexport interface HiroEvent {\n event_index: number;\n event_type: string; // \"stx_asset\" | \"fungible_token_asset\" | \"non_fungible_token_asset\" | \"smart_contract_log\"\n tx_id: string;\n asset?: {\n asset_event_type: string; // \"transfer\" | \"mint\" | \"burn\"\n sender?: string;\n recipient?: string;\n amount?: string;\n memo?: string;\n asset_id?: string;\n value?: unknown;\n };\n contract_log?: {\n contract_id: string;\n topic: string;\n value: unknown;\n };\n}\n\nexport interface HiroEventsResponse {\n limit: number;\n offset: number;\n events: HiroEvent[];\n}\n\n/** Shape our indexer expects at POST /new_block */\nexport interface NewBlockPayload {\n block_hash: string;\n block_height: number;\n index_block_hash: string;\n parent_block_hash: string;\n parent_index_block_hash: string;\n burn_block_hash: string;\n burn_block_height: number;\n burn_block_timestamp: number;\n miner_txid: string;\n timestamp: number;\n transactions: TransactionPayload[];\n events: TransactionEventPayload[];\n}\n\ninterface TransactionPayload {\n txid: string;\n raw_tx: string;\n status: string;\n tx_index: number;\n tx_type?: string;\n sender_address?: string;\n}\n\ninterface TransactionEventPayload {\n txid: string;\n event_index: number;\n committed: boolean;\n type: string;\n stx_transfer_event?: { sender: string; recipient: string; amount: string; memo?: string };\n stx_mint_event?: { recipient: string; amount: string };\n stx_burn_event?: { sender: string; amount: string };\n stx_lock_event?: { locked_amount: string; unlock_height: string; locked_address: string };\n ft_transfer_event?: { asset_identifier: string; sender: string; recipient: string; amount: string };\n ft_mint_event?: { asset_identifier: string; recipient: string; amount: string };\n ft_burn_event?: { asset_identifier: string; sender: string; amount: string };\n nft_transfer_event?: { asset_identifier: string; sender: string; recipient: string; value: unknown };\n nft_mint_event?: { asset_identifier: string; recipient: string; value: unknown };\n nft_burn_event?: { asset_identifier: string; sender: string; value: unknown };\n smart_contract_event?: { contract_identifier: string; topic: string; value: unknown };\n}\n\nexport interface GetBlockOptions {\n /** Fetch actual raw_tx hex for each transaction (instead of \"0x00\" placeholder) */\n includeRawTx?: boolean;\n /** Max concurrent raw_tx fetches per block (default: 10) */\n rawTxConcurrency?: number;\n}\n\nexport class HiroClient {\n private apiUrl: string;\n private fallbackUrl: string | undefined;\n private apiKey: string | undefined;\n private maxRetries: number;\n\n constructor(apiUrl?: string, maxRetries = 5) {\n this.apiUrl = apiUrl || process.env.HIRO_API_URL || DEFAULT_HIRO_API_URL;\n this.fallbackUrl = process.env.HIRO_FALLBACK_URL;\n this.apiKey = process.env.HIRO_API_KEY;\n this.maxRetries = maxRetries;\n }\n\n private get headers(): Record<string, string> {\n return this.apiKey ? { \"x-hiro-api-key\": this.apiKey } : {};\n }\n\n /** Fetch with retry on 429/5xx using exponential backoff */\n private async fetchWithRetry(url: string, timeoutMs = 120_000): Promise<Response> {\n for (let attempt = 0; attempt < this.maxRetries; attempt++) {\n const res = await fetch(url, { headers: this.headers, signal: AbortSignal.timeout(timeoutMs) });\n\n if (res.ok || res.status === 404) return res;\n\n if (res.status === 429 || res.status >= 500) {\n const delay = Math.min(1000 * Math.pow(2, attempt), 10_000);\n logger.info(\"Rate limited, retrying\", { url: url.split(\"/\").slice(-2).join(\"/\"), attempt, delay });\n await new Promise((r) => setTimeout(r, delay));\n continue;\n }\n\n // 4xx (not 404/429) — don't retry\n return res;\n }\n\n // Final attempt\n return fetch(url, { headers: this.headers, signal: AbortSignal.timeout(timeoutMs) });\n }\n\n /**\n * Fetch a complete block by height, including all transactions and events,\n * transformed into the NewBlockPayload format our indexer expects.\n *\n * Uses 3-step approach:\n * 1. GET /extended/v2/blocks/{height} — block metadata\n * 2. GET /extended/v2/blocks/{height}/transactions — all txs (paginated)\n * 3. GET /extended/v1/tx/events?tx_id={txId} — events per tx (only for txs with events)\n */\n async getBlockForIndexer(height: number, options?: GetBlockOptions): Promise<NewBlockPayload | null> {\n // 1. Fetch block metadata (try primary, fallback on 404)\n let block = await this.fetchBlock(height);\n let usingFallback = false;\n if (!block && this.fallbackUrl) {\n block = await this.fetchBlock(height, this.fallbackUrl);\n if (block) usingFallback = true;\n }\n if (!block) return null;\n\n // 2. Fetch all transactions via v2 block/transactions endpoint\n const baseUrl = usingFallback ? this.fallbackUrl! : this.apiUrl;\n const hiroTxs = await this.fetchBlockTransactions(height, baseUrl);\n\n const txPayloads: TransactionPayload[] = [];\n const eventPayloads: TransactionEventPayload[] = [];\n\n for (const hiroTx of hiroTxs) {\n txPayloads.push({\n txid: hiroTx.tx_id,\n raw_tx: \"0x00\",\n status: mapTxStatus(hiroTx.tx_status),\n tx_index: hiroTx.tx_index ?? 0,\n tx_type: mapTxType(hiroTx.tx_type),\n sender_address: hiroTx.sender_address,\n });\n\n // 3. Fetch events only for txs that have them\n if (hiroTx.event_count > 0) {\n if (hiroTx.event_count > 1000) {\n logger.info(\"Fetching large event set\", { txId: hiroTx.tx_id, eventCount: hiroTx.event_count, height });\n }\n try {\n const events = await this.fetchAllEvents(hiroTx.tx_id, baseUrl);\n eventPayloads.push(...events);\n } catch (err) {\n logger.warn(\"Failed to fetch events for backfill\", { txId: hiroTx.tx_id, error: String(err) });\n }\n }\n }\n\n // 4. Optionally fetch raw_tx for all transactions\n if (options?.includeRawTx && txPayloads.length > 0) {\n const txIds = txPayloads.map((t) => t.txid);\n const rawTxMap = await this.fetchRawTxBatch(txIds, options.rawTxConcurrency);\n for (const txPayload of txPayloads) {\n const raw = rawTxMap.get(txPayload.txid);\n if (raw) txPayload.raw_tx = raw;\n }\n }\n\n return {\n block_hash: block.hash,\n block_height: block.height,\n index_block_hash: block.index_block_hash,\n parent_block_hash: block.parent_block_hash,\n parent_index_block_hash: block.parent_index_block_hash,\n burn_block_hash: block.burn_block_hash,\n burn_block_height: block.burn_block_height,\n burn_block_timestamp: block.burn_block_time,\n miner_txid: block.miner_txid,\n timestamp: block.block_time,\n transactions: txPayloads,\n events: eventPayloads,\n };\n }\n\n /** v2 block metadata */\n private async fetchBlock(height: number, baseUrl?: string): Promise<HiroBlockResponse | null> {\n const url = baseUrl || this.apiUrl;\n const res = await this.fetchWithRetry(`${url}/extended/v2/blocks/${height}`);\n if (res.status === 404) return null;\n if (!res.ok) throw new Error(`Hiro API block/${height} returned ${res.status}`);\n return res.json() as Promise<HiroBlockResponse>;\n }\n\n /** v2 block transactions (paginated) */\n private async fetchBlockTransactions(height: number, baseUrl?: string): Promise<HiroTxResponse[]> {\n const url = baseUrl || this.apiUrl;\n const txs: HiroTxResponse[] = [];\n let offset = 0;\n const limit = 50;\n\n while (true) {\n const res = await this.fetchWithRetry(\n `${url}/extended/v2/blocks/${height}/transactions?limit=${limit}&offset=${offset}`\n );\n if (!res.ok) throw new Error(`Hiro API block/${height}/transactions returned ${res.status}`);\n\n const data = (await res.json()) as HiroBlockTxsResponse;\n txs.push(...data.results);\n\n if (txs.length >= data.total || data.results.length < limit) break;\n offset += limit;\n }\n\n return txs;\n }\n\n private async fetchAllEvents(txId: string, baseUrl?: string, _maxEvents?: number): Promise<TransactionEventPayload[]> {\n const url = baseUrl || this.apiUrl;\n const events: TransactionEventPayload[] = [];\n let offset = 0;\n const limit = 100;\n\n while (true) {\n const res = await this.fetchWithRetry(\n `${url}/extended/v1/tx/events?tx_id=${txId}&limit=${limit}&offset=${offset}`\n );\n if (!res.ok) {\n logger.warn(\"Failed to fetch events from Hiro\", { txId, status: res.status });\n break;\n }\n\n const data = (await res.json()) as HiroEventsResponse;\n for (const hEvent of data.events) {\n const converted = convertHiroEvent(hEvent);\n if (converted) events.push(converted);\n }\n\n if (data.events.length < limit) break;\n offset += limit;\n }\n\n return events;\n }\n\n /** Fetch raw_tx hex for a single transaction */\n async fetchRawTx(txId: string): Promise<string | null> {\n try {\n const res = await this.fetchWithRetry(`${this.apiUrl}/extended/v1/tx/${txId}/raw`, 10_000);\n if (!res.ok) return null;\n const data = (await res.json()) as { raw_tx: string };\n return data.raw_tx || null;\n } catch {\n return null;\n }\n }\n\n /** Fetch raw_tx for multiple transactions with bounded concurrency */\n async fetchRawTxBatch(txIds: string[], concurrency = 10): Promise<Map<string, string>> {\n const results = new Map<string, string>();\n for (let i = 0; i < txIds.length; i += concurrency) {\n const chunk = txIds.slice(i, i + concurrency);\n const settled = await Promise.allSettled(\n chunk.map(async (txId) => {\n const raw = await this.fetchRawTx(txId);\n return { txId, raw };\n })\n );\n for (const result of settled) {\n if (result.status === \"fulfilled\" && result.value.raw) {\n results.set(result.value.txId, result.value.raw);\n }\n }\n }\n return results;\n }\n\n /** Fetch current chain tip height from Hiro API status endpoint */\n async fetchChainTip(): Promise<number> {\n const res = await this.fetchWithRetry(`${this.apiUrl}/extended/v1/status`);\n if (!res.ok) throw new Error(`Hiro API /status returned ${res.status}`);\n const data = (await res.json()) as { chain_tip?: { block_height: number }; stacks_tip_height?: number };\n return data.chain_tip?.block_height ?? data.stacks_tip_height ?? 0;\n }\n\n async isHealthy(): Promise<boolean> {\n try {\n const res = await fetch(`${this.apiUrl}/extended/v1/status`, {\n headers: this.headers,\n signal: AbortSignal.timeout(10_000),\n });\n // 429 = rate limited but reachable\n return res.ok || res.status === 429;\n } catch {\n return false;\n }\n }\n\n getApiUrl(): string {\n return this.apiUrl;\n }\n}\n\n/** Map Hiro tx_status to our indexer's expected format */\nfunction mapTxStatus(status: string): string {\n switch (status) {\n case \"success\":\n return \"success\";\n case \"abort_by_response\":\n case \"abort_by_post_condition\":\n return status;\n default:\n return \"success\";\n }\n}\n\n/** Map Hiro tx_type to node event tx_type */\nfunction mapTxType(type: string): string {\n switch (type) {\n case \"token_transfer\":\n return \"token_transfer\";\n case \"contract_call\":\n return \"contract_call\";\n case \"smart_contract\":\n return \"smart_contract\";\n case \"coinbase\":\n return \"coinbase\";\n case \"tenure_change\":\n return \"tenure_change\";\n case \"poison_microblock\":\n return \"poison_microblock\";\n default:\n return type;\n }\n}\n\n/**\n * Convert a Hiro API event to our indexer's TransactionEvent format.\n *\n * Hiro uses:\n * event_type: \"stx_asset\" | \"fungible_token_asset\" | \"non_fungible_token_asset\" | \"smart_contract_log\"\n * asset.asset_event_type: \"transfer\" | \"mint\" | \"burn\" | \"lock\"\n *\n * Our indexer expects:\n * type: \"stx_transfer_event\" | \"stx_mint_event\" | \"ft_transfer_event\" | \"smart_contract_event\" | ...\n */\nfunction convertHiroEvent(hEvent: HiroEvent): TransactionEventPayload | null {\n const base = {\n txid: hEvent.tx_id,\n event_index: hEvent.event_index,\n committed: true,\n };\n\n if (hEvent.event_type === \"stx_asset\" && hEvent.asset) {\n const a = hEvent.asset;\n switch (a.asset_event_type) {\n case \"transfer\":\n return {\n ...base,\n type: \"stx_transfer_event\",\n stx_transfer_event: {\n sender: a.sender!,\n recipient: a.recipient!,\n amount: a.amount!,\n memo: a.memo,\n },\n };\n case \"mint\":\n return {\n ...base,\n type: \"stx_mint_event\",\n stx_mint_event: { recipient: a.recipient!, amount: a.amount! },\n };\n case \"burn\":\n return {\n ...base,\n type: \"stx_burn_event\",\n stx_burn_event: { sender: a.sender!, amount: a.amount! },\n };\n case \"lock\":\n return {\n ...base,\n type: \"stx_lock_event\",\n stx_lock_event: {\n locked_amount: a.amount!,\n unlock_height: \"0\",\n locked_address: a.sender!,\n },\n };\n }\n }\n\n if (hEvent.event_type === \"fungible_token_asset\" && hEvent.asset) {\n const a = hEvent.asset;\n const assetId = a.asset_id || \"\";\n switch (a.asset_event_type) {\n case \"transfer\":\n return {\n ...base,\n type: \"ft_transfer_event\",\n ft_transfer_event: {\n asset_identifier: assetId,\n sender: a.sender!,\n recipient: a.recipient!,\n amount: a.amount!,\n },\n };\n case \"mint\":\n return {\n ...base,\n type: \"ft_mint_event\",\n ft_mint_event: { asset_identifier: assetId, recipient: a.recipient!, amount: a.amount! },\n };\n case \"burn\":\n return {\n ...base,\n type: \"ft_burn_event\",\n ft_burn_event: { asset_identifier: assetId, sender: a.sender!, amount: a.amount! },\n };\n }\n }\n\n if (hEvent.event_type === \"non_fungible_token_asset\" && hEvent.asset) {\n const a = hEvent.asset;\n const assetId = a.asset_id || \"\";\n switch (a.asset_event_type) {\n case \"transfer\":\n return {\n ...base,\n type: \"nft_transfer_event\",\n nft_transfer_event: {\n asset_identifier: assetId,\n sender: a.sender!,\n recipient: a.recipient!,\n value: a.value,\n },\n };\n case \"mint\":\n return {\n ...base,\n type: \"nft_mint_event\",\n nft_mint_event: { asset_identifier: assetId, recipient: a.recipient!, value: a.value },\n };\n case \"burn\":\n return {\n ...base,\n type: \"nft_burn_event\",\n nft_burn_event: { asset_identifier: assetId, sender: a.sender!, value: a.value },\n };\n }\n }\n\n if (hEvent.event_type === \"smart_contract_log\" && hEvent.contract_log) {\n return {\n ...base,\n type: \"smart_contract_event\",\n smart_contract_event: {\n contract_identifier: hEvent.contract_log.contract_id,\n topic: hEvent.contract_log.topic,\n value: hEvent.contract_log.value,\n },\n };\n }\n\n logger.debug(\"Unknown Hiro event type, skipping\", {\n eventType: hEvent.event_type,\n txId: hEvent.tx_id,\n });\n return null;\n}\n"
8
8
  ],
9
- "mappings": "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",
10
- "debugId": "9D01A1DBB63D95F064756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "84E732ABB4DEC21A64756E2164756E21",
11
11
  "names": []
12
12
  }
@@ -0,0 +1,21 @@
1
+ declare class HiroPgClient {
2
+ private sql;
3
+ constructor(connectionUrl?: string);
4
+ getChainTip(): Promise<number>;
5
+ /**
6
+ * Fetch a complete block by height directly from PG.
7
+ * Returns data in the same NewBlockPayload shape the backfill expects.
8
+ */
9
+ getBlockForIndexer(height: number, options?: {
10
+ includeRawTx?: boolean
11
+ }): Promise<any | null>;
12
+ /**
13
+ * Fetch multiple blocks in bulk — 6 queries total instead of 6 per block.
14
+ * Returns array of NewBlockPayload in height order.
15
+ */
16
+ getBlockBatch(heights: number[], options?: {
17
+ includeRawTx?: boolean
18
+ }): Promise<any[]>;
19
+ close(): Promise<void>;
20
+ }
21
+ export { HiroPgClient };
@@ -0,0 +1,439 @@
1
+ import { createRequire } from "node:module";
2
+ var __defProp = Object.defineProperty;
3
+ var __returnValue = (v) => v;
4
+ function __exportSetter(name, newValue) {
5
+ this[name] = __returnValue.bind(null, newValue);
6
+ }
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true,
12
+ configurable: true,
13
+ set: __exportSetter.bind(all, name)
14
+ });
15
+ };
16
+
17
+ // src/node/hiro-pg-client.ts
18
+ import postgres from "postgres";
19
+ var SCHEMA = "stacks_blockchain_api";
20
+ function toHex(buf) {
21
+ if (!buf)
22
+ return "0x";
23
+ return "0x" + Buffer.from(buf).toString("hex");
24
+ }
25
+ function stxEventType(assetTypeId) {
26
+ switch (assetTypeId) {
27
+ case 1:
28
+ return "stx_transfer_event";
29
+ case 2:
30
+ return "stx_mint_event";
31
+ case 3:
32
+ return "stx_burn_event";
33
+ default:
34
+ return "stx_transfer_event";
35
+ }
36
+ }
37
+ function ftEventType(assetTypeId) {
38
+ switch (assetTypeId) {
39
+ case 1:
40
+ return "ft_transfer_event";
41
+ case 2:
42
+ return "ft_mint_event";
43
+ case 3:
44
+ return "ft_burn_event";
45
+ default:
46
+ return "ft_transfer_event";
47
+ }
48
+ }
49
+ function nftEventType(assetTypeId) {
50
+ switch (assetTypeId) {
51
+ case 1:
52
+ return "nft_transfer_event";
53
+ case 2:
54
+ return "nft_mint_event";
55
+ case 3:
56
+ return "nft_burn_event";
57
+ default:
58
+ return "nft_transfer_event";
59
+ }
60
+ }
61
+ function mapTxTypeId(typeId) {
62
+ switch (typeId) {
63
+ case 0:
64
+ return "token_transfer";
65
+ case 1:
66
+ return "smart_contract";
67
+ case 2:
68
+ return "contract_call";
69
+ case 3:
70
+ return "poison_microblock";
71
+ case 4:
72
+ return "coinbase";
73
+ case 5:
74
+ return "coinbase";
75
+ case 6:
76
+ return "smart_contract";
77
+ case 7:
78
+ return "tenure_change";
79
+ case 8:
80
+ return "coinbase";
81
+ default:
82
+ return "token_transfer";
83
+ }
84
+ }
85
+ function mapTxStatus(status) {
86
+ switch (status) {
87
+ case 1:
88
+ return "success";
89
+ case 0:
90
+ return "abort_by_response";
91
+ default:
92
+ return "abort_by_post_condition";
93
+ }
94
+ }
95
+
96
+ class HiroPgClient {
97
+ sql;
98
+ constructor(connectionUrl) {
99
+ const url = connectionUrl || process.env.HIRO_PG_URL;
100
+ if (!url)
101
+ throw new Error("HIRO_PG_URL is required for HiroPgClient");
102
+ this.sql = postgres(url, {
103
+ max: 10,
104
+ idle_timeout: 30,
105
+ types: { bigint: postgres.BigInt }
106
+ });
107
+ }
108
+ async getChainTip() {
109
+ const rows = await this.sql`
110
+ SELECT MAX(block_height) as tip FROM ${this.sql(SCHEMA)}.blocks WHERE canonical = true
111
+ `;
112
+ return Number(rows[0]?.tip ?? 0);
113
+ }
114
+ async getBlockForIndexer(height, options) {
115
+ const blocks = await this.sql`
116
+ SELECT block_hash, block_height, index_block_hash, parent_block_hash,
117
+ parent_index_block_hash, burn_block_hash, burn_block_height,
118
+ burn_block_time, block_time, miner_txid
119
+ FROM ${this.sql(SCHEMA)}.blocks
120
+ WHERE block_height = ${height} AND canonical = true
121
+ LIMIT 1
122
+ `;
123
+ if (blocks.length === 0)
124
+ return null;
125
+ const block = blocks[0];
126
+ const txs = await this.sql`
127
+ SELECT tx_id, tx_index, type_id, status, sender_address, raw_tx, event_count,
128
+ contract_call_contract_id, contract_call_function_name, smart_contract_contract_id
129
+ FROM ${this.sql(SCHEMA)}.txs
130
+ WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true
131
+ ORDER BY tx_index
132
+ `;
133
+ const transactions = txs.map((tx) => {
134
+ const txType = mapTxTypeId(tx.type_id);
135
+ const entry = {
136
+ txid: toHex(tx.tx_id),
137
+ raw_tx: options?.includeRawTx ? toHex(tx.raw_tx) : "0x00",
138
+ status: mapTxStatus(tx.status),
139
+ tx_index: tx.tx_index,
140
+ tx_type: txType,
141
+ sender_address: tx.sender_address
142
+ };
143
+ if (txType === "contract_call" && tx.contract_call_contract_id) {
144
+ entry.contract_call = {
145
+ contract_id: tx.contract_call_contract_id,
146
+ function_name: tx.contract_call_function_name || ""
147
+ };
148
+ } else if (txType === "smart_contract" && tx.smart_contract_contract_id) {
149
+ entry.smart_contract = {
150
+ contract_id: tx.smart_contract_contract_id
151
+ };
152
+ }
153
+ return entry;
154
+ });
155
+ const events = [];
156
+ const stxEvents = await this.sql`
157
+ SELECT tx_id, event_index, asset_event_type_id, amount, sender, recipient, memo
158
+ FROM ${this.sql(SCHEMA)}.stx_events
159
+ WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true
160
+ ORDER BY event_index
161
+ `;
162
+ for (const e of stxEvents) {
163
+ const type = stxEventType(e.asset_event_type_id);
164
+ const evt = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };
165
+ if (type === "stx_transfer_event") {
166
+ evt.stx_transfer_event = {
167
+ sender: e.sender || "",
168
+ recipient: e.recipient || "",
169
+ amount: String(e.amount),
170
+ ...e.memo ? { memo: toHex(e.memo) } : {}
171
+ };
172
+ } else if (type === "stx_mint_event") {
173
+ evt.stx_mint_event = { recipient: e.recipient || "", amount: String(e.amount) };
174
+ } else if (type === "stx_burn_event") {
175
+ evt.stx_burn_event = { sender: e.sender || "", amount: String(e.amount) };
176
+ }
177
+ events.push(evt);
178
+ }
179
+ const lockEvents = await this.sql`
180
+ SELECT tx_id, event_index, locked_amount, unlock_height, locked_address
181
+ FROM ${this.sql(SCHEMA)}.stx_lock_events
182
+ WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true
183
+ ORDER BY event_index
184
+ `;
185
+ for (const e of lockEvents) {
186
+ events.push({
187
+ txid: toHex(e.tx_id),
188
+ event_index: e.event_index,
189
+ committed: true,
190
+ type: "stx_lock_event",
191
+ stx_lock_event: {
192
+ locked_amount: String(e.locked_amount),
193
+ unlock_height: String(e.unlock_height),
194
+ locked_address: e.locked_address
195
+ }
196
+ });
197
+ }
198
+ const ftEvents = await this.sql`
199
+ SELECT tx_id, event_index, asset_event_type_id, asset_identifier, amount, sender, recipient
200
+ FROM ${this.sql(SCHEMA)}.ft_events
201
+ WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true
202
+ ORDER BY event_index
203
+ `;
204
+ for (const e of ftEvents) {
205
+ const type = ftEventType(e.asset_event_type_id);
206
+ const evt = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };
207
+ if (type === "ft_transfer_event") {
208
+ evt.ft_transfer_event = {
209
+ asset_identifier: e.asset_identifier,
210
+ sender: e.sender || "",
211
+ recipient: e.recipient || "",
212
+ amount: String(e.amount)
213
+ };
214
+ } else if (type === "ft_mint_event") {
215
+ evt.ft_mint_event = { asset_identifier: e.asset_identifier, recipient: e.recipient || "", amount: String(e.amount) };
216
+ } else if (type === "ft_burn_event") {
217
+ evt.ft_burn_event = { asset_identifier: e.asset_identifier, sender: e.sender || "", amount: String(e.amount) };
218
+ }
219
+ events.push(evt);
220
+ }
221
+ const nftEvents = await this.sql`
222
+ SELECT tx_id, event_index, asset_event_type_id, asset_identifier, value, sender, recipient
223
+ FROM ${this.sql(SCHEMA)}.nft_events
224
+ WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true
225
+ ORDER BY event_index
226
+ `;
227
+ for (const e of nftEvents) {
228
+ const type = nftEventType(e.asset_event_type_id);
229
+ const evt = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };
230
+ const val = toHex(e.value);
231
+ if (type === "nft_transfer_event") {
232
+ evt.nft_transfer_event = { asset_identifier: e.asset_identifier, sender: e.sender || "", recipient: e.recipient || "", value: val };
233
+ } else if (type === "nft_mint_event") {
234
+ evt.nft_mint_event = { asset_identifier: e.asset_identifier, recipient: e.recipient || "", value: val };
235
+ } else if (type === "nft_burn_event") {
236
+ evt.nft_burn_event = { asset_identifier: e.asset_identifier, sender: e.sender || "", value: val };
237
+ }
238
+ events.push(evt);
239
+ }
240
+ const logEvents = await this.sql`
241
+ SELECT tx_id, event_index, contract_identifier, topic, value
242
+ FROM ${this.sql(SCHEMA)}.contract_logs
243
+ WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true
244
+ ORDER BY event_index
245
+ `;
246
+ for (const e of logEvents) {
247
+ events.push({
248
+ txid: toHex(e.tx_id),
249
+ event_index: e.event_index,
250
+ committed: true,
251
+ type: "smart_contract_event",
252
+ smart_contract_event: {
253
+ contract_identifier: e.contract_identifier,
254
+ topic: e.topic,
255
+ value: toHex(e.value)
256
+ }
257
+ });
258
+ }
259
+ return {
260
+ block_hash: toHex(block.block_hash),
261
+ block_height: block.block_height,
262
+ index_block_hash: toHex(block.index_block_hash),
263
+ parent_block_hash: toHex(block.parent_block_hash),
264
+ parent_index_block_hash: toHex(block.parent_index_block_hash),
265
+ burn_block_hash: toHex(block.burn_block_hash),
266
+ burn_block_height: block.burn_block_height,
267
+ burn_block_timestamp: block.burn_block_time,
268
+ miner_txid: toHex(block.miner_txid),
269
+ timestamp: block.block_time,
270
+ transactions,
271
+ events
272
+ };
273
+ }
274
+ async getBlockBatch(heights, options) {
275
+ if (heights.length === 0)
276
+ return [];
277
+ const blocks = await this.sql`
278
+ SELECT block_hash, block_height, index_block_hash, parent_block_hash,
279
+ parent_index_block_hash, burn_block_hash, burn_block_height,
280
+ burn_block_time, block_time, miner_txid
281
+ FROM ${this.sql(SCHEMA)}.blocks
282
+ WHERE block_height = ANY(${heights}) AND canonical = true
283
+ `;
284
+ if (blocks.length === 0)
285
+ return [];
286
+ const blockMap = new Map;
287
+ for (const b of blocks) {
288
+ blockMap.set(b.block_height, { ...b, transactions: [], events: [] });
289
+ }
290
+ const txs = await this.sql`
291
+ SELECT tx_id, tx_index, type_id, status, sender_address, raw_tx, event_count, block_height,
292
+ contract_call_contract_id, contract_call_function_name, smart_contract_contract_id
293
+ FROM ${this.sql(SCHEMA)}.txs
294
+ WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true
295
+ ORDER BY block_height, tx_index
296
+ `;
297
+ for (const tx of txs) {
298
+ const block = blockMap.get(tx.block_height);
299
+ if (!block)
300
+ continue;
301
+ const txType = mapTxTypeId(tx.type_id);
302
+ const entry = {
303
+ txid: toHex(tx.tx_id),
304
+ raw_tx: options?.includeRawTx ? toHex(tx.raw_tx) : "0x00",
305
+ status: mapTxStatus(tx.status),
306
+ tx_index: tx.tx_index,
307
+ tx_type: txType,
308
+ sender_address: tx.sender_address
309
+ };
310
+ if (txType === "contract_call" && tx.contract_call_contract_id) {
311
+ entry.contract_call = { contract_id: tx.contract_call_contract_id, function_name: tx.contract_call_function_name || "" };
312
+ } else if (txType === "smart_contract" && tx.smart_contract_contract_id) {
313
+ entry.smart_contract = { contract_id: tx.smart_contract_contract_id };
314
+ }
315
+ block.transactions.push(entry);
316
+ }
317
+ const stxEvents = await this.sql`
318
+ SELECT tx_id, event_index, asset_event_type_id, amount, sender, recipient, memo, block_height
319
+ FROM ${this.sql(SCHEMA)}.stx_events
320
+ WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true
321
+ `;
322
+ for (const e of stxEvents) {
323
+ const block = blockMap.get(e.block_height);
324
+ if (!block)
325
+ continue;
326
+ const type = stxEventType(e.asset_event_type_id);
327
+ const evt = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };
328
+ if (type === "stx_transfer_event") {
329
+ evt.stx_transfer_event = { sender: e.sender || "", recipient: e.recipient || "", amount: String(e.amount), ...e.memo ? { memo: toHex(e.memo) } : {} };
330
+ } else if (type === "stx_mint_event") {
331
+ evt.stx_mint_event = { recipient: e.recipient || "", amount: String(e.amount) };
332
+ } else if (type === "stx_burn_event") {
333
+ evt.stx_burn_event = { sender: e.sender || "", amount: String(e.amount) };
334
+ }
335
+ block.events.push(evt);
336
+ }
337
+ const lockEvents = await this.sql`
338
+ SELECT tx_id, event_index, locked_amount, unlock_height, locked_address, block_height
339
+ FROM ${this.sql(SCHEMA)}.stx_lock_events
340
+ WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true
341
+ `;
342
+ for (const e of lockEvents) {
343
+ const block = blockMap.get(e.block_height);
344
+ if (!block)
345
+ continue;
346
+ block.events.push({
347
+ txid: toHex(e.tx_id),
348
+ event_index: e.event_index,
349
+ committed: true,
350
+ type: "stx_lock_event",
351
+ stx_lock_event: { locked_amount: String(e.locked_amount), unlock_height: String(e.unlock_height), locked_address: e.locked_address }
352
+ });
353
+ }
354
+ const ftEvents = await this.sql`
355
+ SELECT tx_id, event_index, asset_event_type_id, asset_identifier, amount, sender, recipient, block_height
356
+ FROM ${this.sql(SCHEMA)}.ft_events
357
+ WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true
358
+ `;
359
+ for (const e of ftEvents) {
360
+ const block = blockMap.get(e.block_height);
361
+ if (!block)
362
+ continue;
363
+ const type = ftEventType(e.asset_event_type_id);
364
+ const evt = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };
365
+ if (type === "ft_transfer_event") {
366
+ evt.ft_transfer_event = { asset_identifier: e.asset_identifier, sender: e.sender || "", recipient: e.recipient || "", amount: String(e.amount) };
367
+ } else if (type === "ft_mint_event") {
368
+ evt.ft_mint_event = { asset_identifier: e.asset_identifier, recipient: e.recipient || "", amount: String(e.amount) };
369
+ } else if (type === "ft_burn_event") {
370
+ evt.ft_burn_event = { asset_identifier: e.asset_identifier, sender: e.sender || "", amount: String(e.amount) };
371
+ }
372
+ block.events.push(evt);
373
+ }
374
+ const nftEvents = await this.sql`
375
+ SELECT tx_id, event_index, asset_event_type_id, asset_identifier, value, sender, recipient, block_height
376
+ FROM ${this.sql(SCHEMA)}.nft_events
377
+ WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true
378
+ `;
379
+ for (const e of nftEvents) {
380
+ const block = blockMap.get(e.block_height);
381
+ if (!block)
382
+ continue;
383
+ const type = nftEventType(e.asset_event_type_id);
384
+ const evt = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };
385
+ const val = toHex(e.value);
386
+ if (type === "nft_transfer_event") {
387
+ evt.nft_transfer_event = { asset_identifier: e.asset_identifier, sender: e.sender || "", recipient: e.recipient || "", value: val };
388
+ } else if (type === "nft_mint_event") {
389
+ evt.nft_mint_event = { asset_identifier: e.asset_identifier, recipient: e.recipient || "", value: val };
390
+ } else if (type === "nft_burn_event") {
391
+ evt.nft_burn_event = { asset_identifier: e.asset_identifier, sender: e.sender || "", value: val };
392
+ }
393
+ block.events.push(evt);
394
+ }
395
+ const logEvents = await this.sql`
396
+ SELECT tx_id, event_index, contract_identifier, topic, value, block_height
397
+ FROM ${this.sql(SCHEMA)}.contract_logs
398
+ WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true
399
+ `;
400
+ for (const e of logEvents) {
401
+ const block = blockMap.get(e.block_height);
402
+ if (!block)
403
+ continue;
404
+ block.events.push({
405
+ txid: toHex(e.tx_id),
406
+ event_index: e.event_index,
407
+ committed: true,
408
+ type: "smart_contract_event",
409
+ smart_contract_event: { contract_identifier: e.contract_identifier, topic: e.topic, value: toHex(e.value) }
410
+ });
411
+ }
412
+ return heights.filter((h) => blockMap.has(h)).map((h) => {
413
+ const b = blockMap.get(h);
414
+ return {
415
+ block_hash: toHex(b.block_hash),
416
+ block_height: b.block_height,
417
+ index_block_hash: toHex(b.index_block_hash),
418
+ parent_block_hash: toHex(b.parent_block_hash),
419
+ parent_index_block_hash: toHex(b.parent_index_block_hash),
420
+ burn_block_hash: toHex(b.burn_block_hash),
421
+ burn_block_height: b.burn_block_height,
422
+ burn_block_timestamp: b.burn_block_time,
423
+ miner_txid: toHex(b.miner_txid),
424
+ timestamp: b.block_time,
425
+ transactions: b.transactions,
426
+ events: b.events
427
+ };
428
+ });
429
+ }
430
+ async close() {
431
+ await this.sql.end();
432
+ }
433
+ }
434
+ export {
435
+ HiroPgClient
436
+ };
437
+
438
+ //# debugId=F4751CE743F3BF9964756E2164756E21
439
+ //# sourceMappingURL=hiro-pg-client.js.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/node/hiro-pg-client.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Direct Postgres client for reading from a local Hiro API database.\n *\n * Bypasses the Hiro HTTP API entirely — queries the stacks_blockchain_api\n * schema directly. Orders of magnitude faster for bulk backfill since we\n * avoid per-tx HTTP round-trips and the API's slow UNION event queries.\n *\n * Expects HIRO_PG_URL env var pointing to the Hiro API database, e.g.:\n * postgres://secondlayer:pass@localhost:5432/stacks_blockchain_api\n */\n\nimport postgres from \"postgres\";\nimport { logger } from \"../logger.ts\";\n\nconst SCHEMA = \"stacks_blockchain_api\";\n\n// Hiro DB stores bytea; we need 0x-prefixed hex strings\nfunction toHex(buf: Buffer | Uint8Array | null): string {\n if (!buf) return \"0x\";\n return \"0x\" + Buffer.from(buf).toString(\"hex\");\n}\n\n// asset_event_type_id mapping: 1=transfer, 2=mint, 3=burn\nfunction stxEventType(assetTypeId: number): string {\n switch (assetTypeId) {\n case 1: return \"stx_transfer_event\";\n case 2: return \"stx_mint_event\";\n case 3: return \"stx_burn_event\";\n default: return \"stx_transfer_event\";\n }\n}\n\nfunction ftEventType(assetTypeId: number): string {\n switch (assetTypeId) {\n case 1: return \"ft_transfer_event\";\n case 2: return \"ft_mint_event\";\n case 3: return \"ft_burn_event\";\n default: return \"ft_transfer_event\";\n }\n}\n\nfunction nftEventType(assetTypeId: number): string {\n switch (assetTypeId) {\n case 1: return \"nft_transfer_event\";\n case 2: return \"nft_mint_event\";\n case 3: return \"nft_burn_event\";\n default: return \"nft_transfer_event\";\n }\n}\n\n// Hiro tx type_id mapping\nfunction mapTxTypeId(typeId: number): string {\n switch (typeId) {\n case 0: return \"token_transfer\";\n case 1: return \"smart_contract\";\n case 2: return \"contract_call\";\n case 3: return \"poison_microblock\";\n case 4: return \"coinbase\";\n case 5: return \"coinbase\"; // coinbase-pay-to-alt\n case 6: return \"smart_contract\"; // versioned\n case 7: return \"tenure_change\";\n case 8: return \"coinbase\"; // nakamoto coinbase\n default: return \"token_transfer\";\n }\n}\n\n// Hiro tx status mapping\nfunction mapTxStatus(status: number): string {\n switch (status) {\n case 1: return \"success\";\n case 0: return \"abort_by_response\";\n default: return \"abort_by_post_condition\";\n }\n}\n\ninterface BlockRow {\n block_hash: Buffer;\n block_height: number;\n index_block_hash: Buffer;\n parent_block_hash: Buffer;\n parent_index_block_hash: Buffer;\n burn_block_hash: Buffer;\n burn_block_height: number;\n burn_block_time: number;\n block_time: number;\n miner_txid: Buffer;\n}\n\ninterface TxRow {\n tx_id: Buffer;\n tx_index: number;\n type_id: number;\n status: number;\n sender_address: string;\n raw_tx: Buffer;\n event_count: number;\n contract_call_contract_id: string | null;\n contract_call_function_name: string | null;\n smart_contract_contract_id: string | null;\n}\n\nexport class HiroPgClient {\n private sql: ReturnType<typeof postgres>;\n\n constructor(connectionUrl?: string) {\n const url = connectionUrl || process.env.HIRO_PG_URL;\n if (!url) throw new Error(\"HIRO_PG_URL is required for HiroPgClient\");\n this.sql = postgres(url, {\n max: 10,\n idle_timeout: 30,\n types: { bigint: postgres.BigInt },\n });\n }\n\n async getChainTip(): Promise<number> {\n const rows = await this.sql`\n SELECT MAX(block_height) as tip FROM ${this.sql(SCHEMA)}.blocks WHERE canonical = true\n `;\n return Number(rows[0]?.tip ?? 0);\n }\n\n /**\n * Fetch a complete block by height directly from PG.\n * Returns data in the same NewBlockPayload shape the backfill expects.\n */\n async getBlockForIndexer(height: number, options?: { includeRawTx?: boolean }): Promise<any | null> {\n // 1. Block metadata\n const blocks = await this.sql<BlockRow[]>`\n SELECT block_hash, block_height, index_block_hash, parent_block_hash,\n parent_index_block_hash, burn_block_hash, burn_block_height,\n burn_block_time, block_time, miner_txid\n FROM ${this.sql(SCHEMA)}.blocks\n WHERE block_height = ${height} AND canonical = true\n LIMIT 1\n `;\n if (blocks.length === 0) return null;\n const block = blocks[0];\n\n // 2. Transactions\n const txs = await this.sql<TxRow[]>`\n SELECT tx_id, tx_index, type_id, status, sender_address, raw_tx, event_count,\n contract_call_contract_id, contract_call_function_name, smart_contract_contract_id\n FROM ${this.sql(SCHEMA)}.txs\n WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true\n ORDER BY tx_index\n `;\n\n const transactions = txs.map((tx) => {\n const txType = mapTxTypeId(tx.type_id);\n const entry: any = {\n txid: toHex(tx.tx_id),\n raw_tx: options?.includeRawTx ? toHex(tx.raw_tx) : \"0x00\",\n status: mapTxStatus(tx.status),\n tx_index: tx.tx_index,\n tx_type: txType,\n sender_address: tx.sender_address,\n };\n if (txType === \"contract_call\" && tx.contract_call_contract_id) {\n entry.contract_call = {\n contract_id: tx.contract_call_contract_id,\n function_name: tx.contract_call_function_name || \"\",\n };\n } else if (txType === \"smart_contract\" && tx.smart_contract_contract_id) {\n entry.smart_contract = {\n contract_id: tx.smart_contract_contract_id,\n };\n }\n return entry;\n });\n\n // 3. Events — query all event tables by block_height (fast, indexed)\n const events: any[] = [];\n\n // STX events\n const stxEvents = await this.sql`\n SELECT tx_id, event_index, asset_event_type_id, amount, sender, recipient, memo\n FROM ${this.sql(SCHEMA)}.stx_events\n WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true\n ORDER BY event_index\n `;\n for (const e of stxEvents) {\n const type = stxEventType(e.asset_event_type_id);\n const evt: any = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };\n if (type === \"stx_transfer_event\") {\n evt.stx_transfer_event = {\n sender: e.sender || \"\",\n recipient: e.recipient || \"\",\n amount: String(e.amount),\n ...(e.memo ? { memo: toHex(e.memo) } : {}),\n };\n } else if (type === \"stx_mint_event\") {\n evt.stx_mint_event = { recipient: e.recipient || \"\", amount: String(e.amount) };\n } else if (type === \"stx_burn_event\") {\n evt.stx_burn_event = { sender: e.sender || \"\", amount: String(e.amount) };\n }\n events.push(evt);\n }\n\n // STX lock events\n const lockEvents = await this.sql`\n SELECT tx_id, event_index, locked_amount, unlock_height, locked_address\n FROM ${this.sql(SCHEMA)}.stx_lock_events\n WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true\n ORDER BY event_index\n `;\n for (const e of lockEvents) {\n events.push({\n txid: toHex(e.tx_id),\n event_index: e.event_index,\n committed: true,\n type: \"stx_lock_event\",\n stx_lock_event: {\n locked_amount: String(e.locked_amount),\n unlock_height: String(e.unlock_height),\n locked_address: e.locked_address,\n },\n });\n }\n\n // FT events\n const ftEvents = await this.sql`\n SELECT tx_id, event_index, asset_event_type_id, asset_identifier, amount, sender, recipient\n FROM ${this.sql(SCHEMA)}.ft_events\n WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true\n ORDER BY event_index\n `;\n for (const e of ftEvents) {\n const type = ftEventType(e.asset_event_type_id);\n const evt: any = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };\n if (type === \"ft_transfer_event\") {\n evt.ft_transfer_event = {\n asset_identifier: e.asset_identifier,\n sender: e.sender || \"\",\n recipient: e.recipient || \"\",\n amount: String(e.amount),\n };\n } else if (type === \"ft_mint_event\") {\n evt.ft_mint_event = { asset_identifier: e.asset_identifier, recipient: e.recipient || \"\", amount: String(e.amount) };\n } else if (type === \"ft_burn_event\") {\n evt.ft_burn_event = { asset_identifier: e.asset_identifier, sender: e.sender || \"\", amount: String(e.amount) };\n }\n events.push(evt);\n }\n\n // NFT events\n const nftEvents = await this.sql`\n SELECT tx_id, event_index, asset_event_type_id, asset_identifier, value, sender, recipient\n FROM ${this.sql(SCHEMA)}.nft_events\n WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true\n ORDER BY event_index\n `;\n for (const e of nftEvents) {\n const type = nftEventType(e.asset_event_type_id);\n const evt: any = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };\n const val = toHex(e.value);\n if (type === \"nft_transfer_event\") {\n evt.nft_transfer_event = { asset_identifier: e.asset_identifier, sender: e.sender || \"\", recipient: e.recipient || \"\", value: val };\n } else if (type === \"nft_mint_event\") {\n evt.nft_mint_event = { asset_identifier: e.asset_identifier, recipient: e.recipient || \"\", value: val };\n } else if (type === \"nft_burn_event\") {\n evt.nft_burn_event = { asset_identifier: e.asset_identifier, sender: e.sender || \"\", value: val };\n }\n events.push(evt);\n }\n\n // Contract log events\n const logEvents = await this.sql`\n SELECT tx_id, event_index, contract_identifier, topic, value\n FROM ${this.sql(SCHEMA)}.contract_logs\n WHERE block_height = ${height} AND canonical = true AND microblock_canonical = true\n ORDER BY event_index\n `;\n for (const e of logEvents) {\n events.push({\n txid: toHex(e.tx_id),\n event_index: e.event_index,\n committed: true,\n type: \"smart_contract_event\",\n smart_contract_event: {\n contract_identifier: e.contract_identifier,\n topic: e.topic,\n value: toHex(e.value),\n },\n });\n }\n\n return {\n block_hash: toHex(block.block_hash),\n block_height: block.block_height,\n index_block_hash: toHex(block.index_block_hash),\n parent_block_hash: toHex(block.parent_block_hash),\n parent_index_block_hash: toHex(block.parent_index_block_hash),\n burn_block_hash: toHex(block.burn_block_hash),\n burn_block_height: block.burn_block_height,\n burn_block_timestamp: block.burn_block_time,\n miner_txid: toHex(block.miner_txid),\n timestamp: block.block_time,\n transactions,\n events,\n };\n }\n\n /**\n * Fetch multiple blocks in bulk — 6 queries total instead of 6 per block.\n * Returns array of NewBlockPayload in height order.\n */\n async getBlockBatch(heights: number[], options?: { includeRawTx?: boolean }): Promise<any[]> {\n if (heights.length === 0) return [];\n\n // 1. All blocks in range\n const blocks = await this.sql`\n SELECT block_hash, block_height, index_block_hash, parent_block_hash,\n parent_index_block_hash, burn_block_hash, burn_block_height,\n burn_block_time, block_time, miner_txid\n FROM ${this.sql(SCHEMA)}.blocks\n WHERE block_height = ANY(${heights}) AND canonical = true\n `;\n\n if (blocks.length === 0) return [];\n const blockMap = new Map<number, any>();\n for (const b of blocks) {\n blockMap.set(b.block_height, { ...b, transactions: [], events: [] });\n }\n\n // 2. All transactions\n const txs = await this.sql`\n SELECT tx_id, tx_index, type_id, status, sender_address, raw_tx, event_count, block_height,\n contract_call_contract_id, contract_call_function_name, smart_contract_contract_id\n FROM ${this.sql(SCHEMA)}.txs\n WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true\n ORDER BY block_height, tx_index\n `;\n for (const tx of txs) {\n const block = blockMap.get(tx.block_height);\n if (!block) continue;\n const txType = mapTxTypeId(tx.type_id);\n const entry: any = {\n txid: toHex(tx.tx_id),\n raw_tx: options?.includeRawTx ? toHex(tx.raw_tx) : \"0x00\",\n status: mapTxStatus(tx.status),\n tx_index: tx.tx_index,\n tx_type: txType,\n sender_address: tx.sender_address,\n };\n if (txType === \"contract_call\" && tx.contract_call_contract_id) {\n entry.contract_call = { contract_id: tx.contract_call_contract_id, function_name: tx.contract_call_function_name || \"\" };\n } else if (txType === \"smart_contract\" && tx.smart_contract_contract_id) {\n entry.smart_contract = { contract_id: tx.smart_contract_contract_id };\n }\n block.transactions.push(entry);\n }\n\n // 3. STX events\n const stxEvents = await this.sql`\n SELECT tx_id, event_index, asset_event_type_id, amount, sender, recipient, memo, block_height\n FROM ${this.sql(SCHEMA)}.stx_events\n WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true\n `;\n for (const e of stxEvents) {\n const block = blockMap.get(e.block_height);\n if (!block) continue;\n const type = stxEventType(e.asset_event_type_id);\n const evt: any = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };\n if (type === \"stx_transfer_event\") {\n evt.stx_transfer_event = { sender: e.sender || \"\", recipient: e.recipient || \"\", amount: String(e.amount), ...(e.memo ? { memo: toHex(e.memo) } : {}) };\n } else if (type === \"stx_mint_event\") {\n evt.stx_mint_event = { recipient: e.recipient || \"\", amount: String(e.amount) };\n } else if (type === \"stx_burn_event\") {\n evt.stx_burn_event = { sender: e.sender || \"\", amount: String(e.amount) };\n }\n block.events.push(evt);\n }\n\n // 4. STX lock events\n const lockEvents = await this.sql`\n SELECT tx_id, event_index, locked_amount, unlock_height, locked_address, block_height\n FROM ${this.sql(SCHEMA)}.stx_lock_events\n WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true\n `;\n for (const e of lockEvents) {\n const block = blockMap.get(e.block_height);\n if (!block) continue;\n block.events.push({\n txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type: \"stx_lock_event\",\n stx_lock_event: { locked_amount: String(e.locked_amount), unlock_height: String(e.unlock_height), locked_address: e.locked_address },\n });\n }\n\n // 5. FT events\n const ftEvents = await this.sql`\n SELECT tx_id, event_index, asset_event_type_id, asset_identifier, amount, sender, recipient, block_height\n FROM ${this.sql(SCHEMA)}.ft_events\n WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true\n `;\n for (const e of ftEvents) {\n const block = blockMap.get(e.block_height);\n if (!block) continue;\n const type = ftEventType(e.asset_event_type_id);\n const evt: any = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };\n if (type === \"ft_transfer_event\") {\n evt.ft_transfer_event = { asset_identifier: e.asset_identifier, sender: e.sender || \"\", recipient: e.recipient || \"\", amount: String(e.amount) };\n } else if (type === \"ft_mint_event\") {\n evt.ft_mint_event = { asset_identifier: e.asset_identifier, recipient: e.recipient || \"\", amount: String(e.amount) };\n } else if (type === \"ft_burn_event\") {\n evt.ft_burn_event = { asset_identifier: e.asset_identifier, sender: e.sender || \"\", amount: String(e.amount) };\n }\n block.events.push(evt);\n }\n\n // 6. NFT events\n const nftEvents = await this.sql`\n SELECT tx_id, event_index, asset_event_type_id, asset_identifier, value, sender, recipient, block_height\n FROM ${this.sql(SCHEMA)}.nft_events\n WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true\n `;\n for (const e of nftEvents) {\n const block = blockMap.get(e.block_height);\n if (!block) continue;\n const type = nftEventType(e.asset_event_type_id);\n const evt: any = { txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type };\n const val = toHex(e.value);\n if (type === \"nft_transfer_event\") {\n evt.nft_transfer_event = { asset_identifier: e.asset_identifier, sender: e.sender || \"\", recipient: e.recipient || \"\", value: val };\n } else if (type === \"nft_mint_event\") {\n evt.nft_mint_event = { asset_identifier: e.asset_identifier, recipient: e.recipient || \"\", value: val };\n } else if (type === \"nft_burn_event\") {\n evt.nft_burn_event = { asset_identifier: e.asset_identifier, sender: e.sender || \"\", value: val };\n }\n block.events.push(evt);\n }\n\n // 7. Contract log events\n const logEvents = await this.sql`\n SELECT tx_id, event_index, contract_identifier, topic, value, block_height\n FROM ${this.sql(SCHEMA)}.contract_logs\n WHERE block_height = ANY(${heights}) AND canonical = true AND microblock_canonical = true\n `;\n for (const e of logEvents) {\n const block = blockMap.get(e.block_height);\n if (!block) continue;\n block.events.push({\n txid: toHex(e.tx_id), event_index: e.event_index, committed: true, type: \"smart_contract_event\",\n smart_contract_event: { contract_identifier: e.contract_identifier, topic: e.topic, value: toHex(e.value) },\n });\n }\n\n // Build results in height order\n return heights\n .filter((h) => blockMap.has(h))\n .map((h) => {\n const b = blockMap.get(h)!;\n return {\n block_hash: toHex(b.block_hash),\n block_height: b.block_height,\n index_block_hash: toHex(b.index_block_hash),\n parent_block_hash: toHex(b.parent_block_hash),\n parent_index_block_hash: toHex(b.parent_index_block_hash),\n burn_block_hash: toHex(b.burn_block_hash),\n burn_block_height: b.burn_block_height,\n burn_block_timestamp: b.burn_block_time,\n miner_txid: toHex(b.miner_txid),\n timestamp: b.block_time,\n transactions: b.transactions,\n events: b.events,\n };\n });\n }\n\n async close(): Promise<void> {\n await this.sql.end();\n }\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "F4751CE743F3BF9964756E2164756E21",
9
+ "names": []
10
+ }
@@ -144,7 +144,7 @@ var CreateStreamSchema = z3.object({
144
144
  name: z3.string().min(1).max(255),
145
145
  endpointUrl: z3.string().url(),
146
146
  filters: z3.array(StreamFilterSchema).min(1),
147
- options: streamOptionsShape.optional().default(undefined),
147
+ options: streamOptionsShape.optional(),
148
148
  startBlock: z3.number().int().positive().optional(),
149
149
  endBlock: z3.number().int().positive().optional()
150
150
  });
@@ -230,5 +230,5 @@ export {
230
230
  ContractCallFilterSchema
231
231
  };
232
232
 
233
- //# debugId=6E87BC7BC360F10E64756E2164756E21
233
+ //# debugId=57E1984E65E4E9AC64756E2164756E21
234
234
  //# sourceMappingURL=index.js.map
@@ -4,9 +4,9 @@
4
4
  "sourcesContent": [
5
5
  "import { z } from \"zod/v4\";\nimport { isValidAddress as _isValidAddress } from \"@secondlayer/stacks\";\n\nconst isValidAddress = _isValidAddress as (addr: string) => boolean;\n\n/** Validate a Stacks principal (standard or contract, e.g. SP2J...ABC or SP2J...ABC.contract-name) */\nconst stacksPrincipal = z.string().refine((val) => {\n const parts = val.split(\".\");\n if (parts.length > 2) return false;\n return isValidAddress(parts[0]!);\n}, \"Invalid Stacks principal address\");\n\n// Base filter with common fields\nconst baseFilter = {\n // Optional: filter by sender\n sender: stacksPrincipal.optional(),\n // Optional: filter by recipient\n recipient: stacksPrincipal.optional(),\n};\n\n// Type exports — defined first so they can annotate schemas\nexport interface StxTransferFilter {\n type: \"stx_transfer\";\n sender?: string;\n recipient?: string;\n minAmount?: number;\n maxAmount?: number;\n}\n\nexport interface StxMintFilter {\n type: \"stx_mint\";\n recipient?: string;\n minAmount?: number;\n}\n\nexport interface StxBurnFilter {\n type: \"stx_burn\";\n sender?: string;\n minAmount?: number;\n}\n\nexport interface StxLockFilter {\n type: \"stx_lock\";\n lockedAddress?: string;\n minAmount?: number;\n}\n\nexport interface FtTransferFilter {\n type: \"ft_transfer\";\n sender?: string;\n recipient?: string;\n assetIdentifier?: string;\n minAmount?: number;\n}\n\nexport interface FtMintFilter {\n type: \"ft_mint\";\n recipient?: string;\n assetIdentifier?: string;\n minAmount?: number;\n}\n\nexport interface FtBurnFilter {\n type: \"ft_burn\";\n sender?: string;\n assetIdentifier?: string;\n minAmount?: number;\n}\n\nexport interface NftTransferFilter {\n type: \"nft_transfer\";\n sender?: string;\n recipient?: string;\n assetIdentifier?: string;\n tokenId?: string;\n}\n\nexport interface NftMintFilter {\n type: \"nft_mint\";\n recipient?: string;\n assetIdentifier?: string;\n tokenId?: string;\n}\n\nexport interface NftBurnFilter {\n type: \"nft_burn\";\n sender?: string;\n assetIdentifier?: string;\n tokenId?: string;\n}\n\nexport interface ContractCallFilter {\n type: \"contract_call\";\n contractId?: string;\n functionName?: string;\n caller?: string;\n}\n\nexport interface ContractDeployFilter {\n type: \"contract_deploy\";\n deployer?: string;\n contractName?: string;\n}\n\nexport interface PrintEventFilter {\n type: \"print_event\";\n contractId?: string;\n topic?: string;\n contains?: string;\n}\n\nexport type StreamFilter =\n | StxTransferFilter\n | StxMintFilter\n | StxBurnFilter\n | StxLockFilter\n | FtTransferFilter\n | FtMintFilter\n | FtBurnFilter\n | NftTransferFilter\n | NftMintFilter\n | NftBurnFilter\n | ContractCallFilter\n | ContractDeployFilter\n | PrintEventFilter;\n\n// STX Transfer Filter\nexport const StxTransferFilterSchema: z.ZodType<StxTransferFilter> = z.object({\n type: z.literal(\"stx_transfer\"),\n ...baseFilter,\n // Optional: minimum amount in microSTX\n minAmount: z.coerce.number().int().positive().optional(),\n // Optional: maximum amount in microSTX\n maxAmount: z.coerce.number().int().positive().optional(),\n});\n\n// STX Mint Filter\nexport const StxMintFilterSchema: z.ZodType<StxMintFilter> = z.object({\n type: z.literal(\"stx_mint\"),\n recipient: stacksPrincipal.optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// STX Burn Filter\nexport const StxBurnFilterSchema: z.ZodType<StxBurnFilter> = z.object({\n type: z.literal(\"stx_burn\"),\n sender: stacksPrincipal.optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// STX Lock Filter\nexport const StxLockFilterSchema: z.ZodType<StxLockFilter> = z.object({\n type: z.literal(\"stx_lock\"),\n lockedAddress: stacksPrincipal.optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// FT Transfer Filter\nexport const FtTransferFilterSchema: z.ZodType<FtTransferFilter> = z.object({\n type: z.literal(\"ft_transfer\"),\n ...baseFilter,\n // Contract that defines the token (e.g., SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-wstx)\n assetIdentifier: z.string().optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// FT Mint Filter\nexport const FtMintFilterSchema: z.ZodType<FtMintFilter> = z.object({\n type: z.literal(\"ft_mint\"),\n recipient: stacksPrincipal.optional(),\n assetIdentifier: z.string().optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// FT Burn Filter\nexport const FtBurnFilterSchema: z.ZodType<FtBurnFilter> = z.object({\n type: z.literal(\"ft_burn\"),\n sender: stacksPrincipal.optional(),\n assetIdentifier: z.string().optional(),\n minAmount: z.coerce.number().int().positive().optional(),\n});\n\n// NFT Transfer Filter\nexport const NftTransferFilterSchema: z.ZodType<NftTransferFilter> = z.object({\n type: z.literal(\"nft_transfer\"),\n ...baseFilter,\n assetIdentifier: z.string().optional(),\n // Optional: filter by specific token ID (Clarity value as hex)\n tokenId: z.string().optional(),\n});\n\n// NFT Mint Filter\nexport const NftMintFilterSchema: z.ZodType<NftMintFilter> = z.object({\n type: z.literal(\"nft_mint\"),\n recipient: stacksPrincipal.optional(),\n assetIdentifier: z.string().optional(),\n tokenId: z.string().optional(),\n});\n\n// NFT Burn Filter\nexport const NftBurnFilterSchema: z.ZodType<NftBurnFilter> = z.object({\n type: z.literal(\"nft_burn\"),\n sender: stacksPrincipal.optional(),\n assetIdentifier: z.string().optional(),\n tokenId: z.string().optional(),\n});\n\n// Contract Call Filter\nexport const ContractCallFilterSchema: z.ZodType<ContractCallFilter> = z.object({\n type: z.literal(\"contract_call\"),\n // Contract being called\n contractId: stacksPrincipal.optional(),\n // Function name (supports wildcards with *)\n functionName: z.string().optional(),\n // Caller address\n caller: stacksPrincipal.optional(),\n});\n\n// Contract Deploy Filter\nexport const ContractDeployFilterSchema: z.ZodType<ContractDeployFilter> = z.object({\n type: z.literal(\"contract_deploy\"),\n // Deployer address\n deployer: stacksPrincipal.optional(),\n // Contract name pattern (supports wildcards)\n contractName: z.string().optional(),\n});\n\n// Print Event Filter (smart contract events)\nexport const PrintEventFilterSchema: z.ZodType<PrintEventFilter> = z.object({\n type: z.literal(\"print_event\"),\n // Contract emitting the event\n contractId: stacksPrincipal.optional(),\n // Topic/name of the event\n topic: z.string().optional(),\n // Search for substring in event data\n contains: z.string().optional(),\n});\n\n// Union of all filter types\nexport const StreamFilterSchema: z.ZodType<StreamFilter> = z.discriminatedUnion(\"type\", [\n StxTransferFilterSchema as any,\n StxMintFilterSchema as any,\n StxBurnFilterSchema as any,\n StxLockFilterSchema as any,\n FtTransferFilterSchema as any,\n FtMintFilterSchema as any,\n FtBurnFilterSchema as any,\n NftTransferFilterSchema as any,\n NftMintFilterSchema as any,\n NftBurnFilterSchema as any,\n ContractCallFilterSchema as any,\n ContractDeployFilterSchema as any,\n PrintEventFilterSchema as any,\n]);\n",
6
6
  "import { z } from \"zod/v4\";\n\n// ── Deploy Subgraph Request ─────────────────────────────────────────────────\n\nexport interface DeploySubgraphRequest {\n name: string;\n version?: string;\n description?: string;\n sources: string[];\n schema: Record<string, unknown>;\n handlerCode: string;\n reindex?: boolean;\n}\n\nexport const DeploySubgraphRequestSchema: z.ZodType<DeploySubgraphRequest> = z.object({\n name: z.string().regex(/^[a-z0-9-]+$/, \"lowercase alphanumeric + hyphens only\").max(63),\n version: z.string().optional(),\n description: z.string().optional(),\n sources: z.array(z.string()).min(1),\n schema: z.record(z.string(), z.unknown()),\n handlerCode: z.string().max(1_048_576, \"handler code exceeds 1MB limit\"),\n reindex: z.boolean().optional(),\n});\n\nexport interface DeploySubgraphResponse {\n action: \"created\" | \"unchanged\" | \"updated\" | \"reindexed\";\n subgraphId: string;\n message: string;\n}\n\n// Subgraph API response types\n\nexport interface SubgraphSummary {\n name: string;\n version: string;\n status: string;\n lastProcessedBlock: number;\n tables: string[];\n createdAt: string;\n}\n\nexport interface SubgraphDetail {\n name: string;\n version: string;\n status: string;\n lastProcessedBlock: number;\n health: {\n totalProcessed: number;\n totalErrors: number;\n errorRate: number;\n lastError: string | null;\n lastErrorAt: string | null;\n };\n tables: Record<string, {\n endpoint: string;\n columns: Record<string, { type: string; nullable?: boolean }>;\n rowCount: number;\n example: string;\n }>;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ReindexResponse {\n message: string;\n fromBlock: number;\n toBlock: number | string;\n}\n\nexport interface SubgraphQueryParams {\n sort?: string;\n order?: string;\n limit?: number;\n offset?: number;\n fields?: string;\n filters?: Record<string, string>;\n}\n",
7
- "import { z } from \"zod/v4\";\nimport { StreamFilterSchema, type StreamFilter } from \"./filters.ts\";\n\n// ── Type interfaces ──────────────────────────────────────────────────\n\nexport interface StreamOptions {\n decodeClarityValues: boolean;\n includeRawTx: boolean;\n includeBlockMetadata: boolean;\n rateLimit: number;\n timeoutMs: number;\n maxRetries: number;\n}\n\nexport interface CreateStream {\n name: string;\n endpointUrl: string;\n filters: StreamFilter[];\n options?: StreamOptions;\n startBlock?: number;\n endBlock?: number;\n}\n\nexport interface UpdateStream {\n name?: string;\n endpointUrl?: string;\n filters?: StreamFilter[];\n options?: Partial<StreamOptions>;\n}\n\nexport interface DeliveryPayload {\n streamId: string;\n streamName: string;\n block: {\n height: number;\n hash: string;\n parentHash: string;\n burnBlockHeight: number;\n timestamp: number;\n };\n matches: {\n transactions: Array<{\n txId: string;\n type: string;\n sender: string;\n status: string;\n contractId: string | null;\n functionName: string | null;\n rawTx?: string;\n }>;\n events: Array<{\n txId: string;\n eventIndex: number;\n type: string;\n data?: any;\n }>;\n };\n isBackfill: boolean;\n deliveredAt: string;\n}\n\nexport interface StreamMetricsResponse {\n totalDeliveries: number;\n failedDeliveries: number;\n lastTriggeredAt: string | null;\n lastTriggeredBlock: number | null;\n errorMessage: string | null;\n}\n\nexport interface StreamResponse {\n id: string;\n name: string;\n status: \"inactive\" | \"active\" | \"paused\" | \"failed\";\n endpointUrl: string;\n filters: StreamFilter[];\n options: StreamOptions;\n totalDeliveries: number;\n failedDeliveries: number;\n lastTriggeredAt?: string | null;\n lastTriggeredBlock?: number | null;\n errorMessage?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n// ── Zod schemas ──────────────────────────────────────────────────────\n\n// Stream options schema (internal, keeps ZodObject methods like .partial())\nconst streamOptionsShape = z.object({\n decodeClarityValues: z.boolean().default(true),\n includeRawTx: z.boolean().default(false),\n includeBlockMetadata: z.boolean().default(true),\n rateLimit: z.number().int().positive().max(100).default(10),\n timeoutMs: z.number().int().positive().max(30000).default(10000),\n maxRetries: z.number().int().min(0).max(10).default(3),\n});\n\n// Cast: .default() makes _input fields optional, but output type matches StreamOptions\nexport const StreamOptionsSchema: z.ZodType<StreamOptions> =\n streamOptionsShape as unknown as z.ZodType<StreamOptions>;\n\nexport const CreateStreamSchema: z.ZodType<CreateStream> = z.object({\n name: z.string().min(1).max(255),\n endpointUrl: z.string().url(),\n filters: z.array(StreamFilterSchema).min(1),\n options: streamOptionsShape.optional().default(undefined),\n startBlock: z.number().int().positive().optional(),\n endBlock: z.number().int().positive().optional(),\n}) as unknown as z.ZodType<CreateStream>;\n\nexport const UpdateStreamSchema: z.ZodType<UpdateStream> = z.object({\n name: z.string().min(1).max(255).optional(),\n endpointUrl: z.string().url().optional(),\n filters: z.array(StreamFilterSchema).min(1).optional(),\n options: streamOptionsShape.partial().optional(),\n}).refine(\n (data) => Object.keys(data).length > 0,\n { message: \"At least one field must be provided for update\" }\n) as unknown as z.ZodType<UpdateStream>;\n\nexport const DeliveryPayloadSchema: z.ZodType<DeliveryPayload> = z.object({\n streamId: z.string().uuid(),\n streamName: z.string(),\n block: z.object({\n height: z.number(),\n hash: z.string(),\n parentHash: z.string(),\n burnBlockHeight: z.number(),\n timestamp: z.number(),\n }),\n matches: z.object({\n transactions: z.array(z.object({\n txId: z.string(),\n type: z.string(),\n sender: z.string(),\n status: z.string(),\n contractId: z.string().nullable(),\n functionName: z.string().nullable(),\n rawTx: z.string().optional(),\n })),\n events: z.array(z.object({\n txId: z.string(),\n eventIndex: z.number(),\n type: z.string(),\n data: z.any(),\n })),\n }),\n isBackfill: z.boolean(),\n deliveredAt: z.string().datetime(),\n}) as unknown as z.ZodType<DeliveryPayload>;\n\nexport const StreamMetricsSchema: z.ZodType<StreamMetricsResponse> = z.object({\n totalDeliveries: z.number(),\n failedDeliveries: z.number(),\n lastTriggeredAt: z.string().datetime().nullable(),\n lastTriggeredBlock: z.number().nullable(),\n errorMessage: z.string().nullable(),\n});\n\nexport const StreamResponseSchema: z.ZodType<StreamResponse> = z.object({\n id: z.string().uuid(),\n name: z.string(),\n status: z.enum([\"inactive\", \"active\", \"paused\", \"failed\"]),\n endpointUrl: z.string().url(),\n filters: z.array(StreamFilterSchema),\n options: streamOptionsShape,\n totalDeliveries: z.number().int().default(0),\n failedDeliveries: z.number().int().default(0),\n lastTriggeredAt: z.string().datetime().nullable().optional(),\n lastTriggeredBlock: z.number().int().nullable().optional(),\n errorMessage: z.string().nullable().optional(),\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime(),\n}) as unknown as z.ZodType<StreamResponse>;\n\n// API response types\nexport interface CreateStreamResponse {\n stream: StreamResponse;\n signingSecret: string;\n}\n\nexport interface ListStreamsResponse {\n streams: StreamResponse[];\n total: number;\n}\n\nexport interface BulkPauseResponse {\n paused: number;\n streams: StreamResponse[];\n}\n\nexport interface BulkResumeResponse {\n resumed: number;\n streams: StreamResponse[];\n}\n"
7
+ "import { z } from \"zod/v4\";\nimport { StreamFilterSchema, type StreamFilter } from \"./filters.ts\";\n\n// ── Type interfaces ──────────────────────────────────────────────────\n\nexport interface StreamOptions {\n decodeClarityValues: boolean;\n includeRawTx: boolean;\n includeBlockMetadata: boolean;\n rateLimit: number;\n timeoutMs: number;\n maxRetries: number;\n}\n\nexport interface CreateStream {\n name: string;\n endpointUrl: string;\n filters: StreamFilter[];\n options?: StreamOptions;\n startBlock?: number;\n endBlock?: number;\n}\n\nexport interface UpdateStream {\n name?: string;\n endpointUrl?: string;\n filters?: StreamFilter[];\n options?: Partial<StreamOptions>;\n}\n\nexport interface DeliveryPayload {\n streamId: string;\n streamName: string;\n block: {\n height: number;\n hash: string;\n parentHash: string;\n burnBlockHeight: number;\n timestamp: number;\n };\n matches: {\n transactions: Array<{\n txId: string;\n type: string;\n sender: string;\n status: string;\n contractId: string | null;\n functionName: string | null;\n rawTx?: string;\n }>;\n events: Array<{\n txId: string;\n eventIndex: number;\n type: string;\n data?: any;\n }>;\n };\n isBackfill: boolean;\n deliveredAt: string;\n}\n\nexport interface StreamMetricsResponse {\n totalDeliveries: number;\n failedDeliveries: number;\n lastTriggeredAt: string | null;\n lastTriggeredBlock: number | null;\n errorMessage: string | null;\n}\n\nexport interface StreamResponse {\n id: string;\n name: string;\n status: \"inactive\" | \"active\" | \"paused\" | \"failed\";\n endpointUrl: string;\n filters: StreamFilter[];\n options: StreamOptions;\n totalDeliveries: number;\n failedDeliveries: number;\n lastTriggeredAt?: string | null;\n lastTriggeredBlock?: number | null;\n errorMessage?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n// ── Zod schemas ──────────────────────────────────────────────────────\n\n// Stream options schema (internal, keeps ZodObject methods like .partial())\nconst streamOptionsShape = z.object({\n decodeClarityValues: z.boolean().default(true),\n includeRawTx: z.boolean().default(false),\n includeBlockMetadata: z.boolean().default(true),\n rateLimit: z.number().int().positive().max(100).default(10),\n timeoutMs: z.number().int().positive().max(30000).default(10000),\n maxRetries: z.number().int().min(0).max(10).default(3),\n});\n\n// Cast: .default() makes _input fields optional, but output type matches StreamOptions\nexport const StreamOptionsSchema: z.ZodType<StreamOptions> =\n streamOptionsShape as unknown as z.ZodType<StreamOptions>;\n\nexport const CreateStreamSchema: z.ZodType<CreateStream> = z.object({\n name: z.string().min(1).max(255),\n endpointUrl: z.string().url(),\n filters: z.array(StreamFilterSchema).min(1),\n options: streamOptionsShape.optional(),\n startBlock: z.number().int().positive().optional(),\n endBlock: z.number().int().positive().optional(),\n}) as unknown as z.ZodType<CreateStream>;\n\nexport const UpdateStreamSchema: z.ZodType<UpdateStream> = z.object({\n name: z.string().min(1).max(255).optional(),\n endpointUrl: z.string().url().optional(),\n filters: z.array(StreamFilterSchema).min(1).optional(),\n options: streamOptionsShape.partial().optional(),\n}).refine(\n (data) => Object.keys(data).length > 0,\n { message: \"At least one field must be provided for update\" }\n) as unknown as z.ZodType<UpdateStream>;\n\nexport const DeliveryPayloadSchema: z.ZodType<DeliveryPayload> = z.object({\n streamId: z.string().uuid(),\n streamName: z.string(),\n block: z.object({\n height: z.number(),\n hash: z.string(),\n parentHash: z.string(),\n burnBlockHeight: z.number(),\n timestamp: z.number(),\n }),\n matches: z.object({\n transactions: z.array(z.object({\n txId: z.string(),\n type: z.string(),\n sender: z.string(),\n status: z.string(),\n contractId: z.string().nullable(),\n functionName: z.string().nullable(),\n rawTx: z.string().optional(),\n })),\n events: z.array(z.object({\n txId: z.string(),\n eventIndex: z.number(),\n type: z.string(),\n data: z.any(),\n })),\n }),\n isBackfill: z.boolean(),\n deliveredAt: z.string().datetime(),\n}) as unknown as z.ZodType<DeliveryPayload>;\n\nexport const StreamMetricsSchema: z.ZodType<StreamMetricsResponse> = z.object({\n totalDeliveries: z.number(),\n failedDeliveries: z.number(),\n lastTriggeredAt: z.string().datetime().nullable(),\n lastTriggeredBlock: z.number().nullable(),\n errorMessage: z.string().nullable(),\n});\n\nexport const StreamResponseSchema: z.ZodType<StreamResponse> = z.object({\n id: z.string().uuid(),\n name: z.string(),\n status: z.enum([\"inactive\", \"active\", \"paused\", \"failed\"]),\n endpointUrl: z.string().url(),\n filters: z.array(StreamFilterSchema),\n options: streamOptionsShape,\n totalDeliveries: z.number().int().default(0),\n failedDeliveries: z.number().int().default(0),\n lastTriggeredAt: z.string().datetime().nullable().optional(),\n lastTriggeredBlock: z.number().int().nullable().optional(),\n errorMessage: z.string().nullable().optional(),\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime(),\n}) as unknown as z.ZodType<StreamResponse>;\n\n// API response types\nexport interface CreateStreamResponse {\n stream: StreamResponse;\n signingSecret: string;\n}\n\nexport interface ListStreamsResponse {\n streams: StreamResponse[];\n total: number;\n}\n\nexport interface BulkPauseResponse {\n paused: number;\n streams: StreamResponse[];\n}\n\nexport interface BulkResumeResponse {\n resumed: number;\n streams: StreamResponse[];\n}\n"
8
8
  ],
9
- "mappings": "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",
10
- "debugId": "6E87BC7BC360F10E64756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "57E1984E65E4E9AC64756E2164756E21",
11
11
  "names": []
12
12
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@secondlayer/shared",
3
- "version": "0.5.1",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -108,6 +108,10 @@
108
108
  "./node/local-client": {
109
109
  "types": "./dist/src/node/local-client.d.ts",
110
110
  "import": "./dist/src/node/local-client.js"
111
+ },
112
+ "./node/hiro-pg-client": {
113
+ "types": "./dist/src/node/hiro-pg-client.d.ts",
114
+ "import": "./dist/src/node/hiro-pg-client.js"
111
115
  }
112
116
  },
113
117
  "files": [
@@ -124,7 +128,7 @@
124
128
  "prepublishOnly": "bun run build"
125
129
  },
126
130
  "dependencies": {
127
- "@secondlayer/stacks": "^0.2.0",
131
+ "@secondlayer/stacks": "^0.2.2",
128
132
  "kysely": "0.28.10",
129
133
  "kysely-postgres-js": "3.0.0",
130
134
  "postgres": "^3.4.6",