@secondlayer/sdk 4.0.2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -197,7 +197,7 @@ type StreamsEventPayload = Record<string, unknown>;
197
197
  type StreamsEvent = {
198
198
  cursor: string
199
199
  block_height: number
200
- index_block_hash: string
200
+ block_hash: string
201
201
  burn_block_height: number
202
202
  tx_id: string
203
203
  tx_index: number
@@ -209,13 +209,13 @@ type StreamsEvent = {
209
209
  };
210
210
  type StreamsTip = {
211
211
  block_height: number
212
- index_block_hash: string
212
+ block_hash: string
213
213
  burn_block_height: number
214
214
  lag_seconds: number
215
215
  };
216
216
  type StreamsCanonicalBlock = {
217
217
  block_height: number
218
- index_block_hash: string
218
+ block_hash: string
219
219
  burn_block_height: number
220
220
  burn_block_hash: string | null
221
221
  is_canonical: true
package/dist/index.js.map CHANGED
@@ -15,7 +15,7 @@
15
15
  "import type { InferSubgraphClient } from \"@secondlayer/subgraphs\";\nimport type { SecondLayerOptions } from \"../base.ts\";\nimport { SecondLayer } from \"../client.ts\";\nimport { Subgraphs } from \"./client.ts\";\n\n/**\n * Returns a typed client for a subgraph defined with `defineSubgraph()`.\n *\n * Accepts a plain options object, a `SecondLayer` instance, or a `Subgraphs` instance.\n *\n * @example\n * ```ts\n * import mySubgraph from './subgraphs/my-subgraph'\n * import { getSubgraph } from '@secondlayer/sdk'\n *\n * const client = getSubgraph(mySubgraph, { apiKey: 'sl_...' })\n * const rows = await client.transfers.findMany({ where: { sender: 'SP...' } })\n * ```\n */\nexport function getSubgraph<\n\tT extends { name: string; schema: Record<string, unknown> },\n>(\n\tdef: T,\n\toptions: Partial<SecondLayerOptions> | SecondLayer | Subgraphs = {},\n): InferSubgraphClient<T> {\n\tif (options instanceof Subgraphs) {\n\t\treturn options.typed(def);\n\t}\n\tif (options instanceof SecondLayer) {\n\t\treturn options.subgraphs.typed(def);\n\t}\n\treturn new Subgraphs(options).typed(def);\n}\n",
16
16
  "import type { StreamsEvent } from \"./types.ts\";\n\nexport type FtTransferPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type FtTransferEvent = StreamsEvent & {\n\tevent_type: \"ft_transfer\";\n\tpayload: FtTransferPayload;\n};\n\nexport type DecodedFtTransferPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedFtTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_transfer\";\n\tdecoded_payload: DecodedFtTransferPayload;\n\tsource_cursor: string;\n};\n\nfunction requireString(\n\tpayload: Record<string, unknown>,\n\tfield: keyof FtTransferPayload,\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`ft_transfer payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nfunction parseAssetIdentifier(assetIdentifier: string): {\n\tcontract_id: string;\n\ttoken_name: string | null;\n} {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(\"ft_transfer payload has malformed asset_identifier\");\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\nexport function isFtTransfer(event: StreamsEvent): event is FtTransferEvent {\n\treturn event.event_type === \"ft_transfer\";\n}\n\nexport function decodeFtTransfer(event: StreamsEvent): DecodedFtTransfer {\n\tif (!isFtTransfer(event)) {\n\t\tthrow new Error(`Expected ft_transfer event, got ${event.event_type}`);\n\t}\n\n\tconst payload = event.payload;\n\tconst assetIdentifier = requireString(payload, \"asset_identifier\");\n\tconst sender = requireString(payload, \"sender\");\n\tconst recipient = requireString(payload, \"recipient\");\n\tconst amount = requireString(payload, \"amount\");\n\tif (!/^(0|[1-9]\\d*)$/.test(amount)) {\n\t\tthrow new Error(\"ft_transfer payload has malformed amount\");\n\t}\n\n\tconst { contract_id, token_name } = parseAssetIdentifier(assetIdentifier);\n\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: event.event_type,\n\t\tdecoded_payload: {\n\t\t\tasset_identifier: assetIdentifier,\n\t\t\tcontract_id: event.contract_id ?? contract_id,\n\t\t\ttoken_name,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tamount,\n\t\t},\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
17
17
  "import type { StreamsEvent } from \"./types.ts\";\n\nexport type NftTransferPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tvalue: string | { hex: string };\n};\n\nexport type NftTransferEvent = StreamsEvent & {\n\tevent_type: \"nft_transfer\";\n\tpayload: NftTransferPayload;\n};\n\nexport type DecodedNftTransferPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type DecodedNftTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_transfer\";\n\tdecoded_payload: DecodedNftTransferPayload;\n\tsource_cursor: string;\n};\n\nfunction requireString(\n\tpayload: Record<string, unknown>,\n\tfield: \"asset_identifier\" | \"sender\" | \"recipient\",\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`nft_transfer payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nfunction requireHexValue(payload: Record<string, unknown>): string {\n\t// Live streams emits the token id as a typed Clarity value at `value`\n\t// (e.g. `{UInt: 52}`) and the canonical hex at `raw_value`. Prefer raw_value\n\t// when available — mirrors the sbtc/bns decoder fix in indexer 1.3.7.\n\tconst rawValue = payload.raw_value;\n\tif (typeof rawValue === \"string\") {\n\t\tif (!/^0x[0-9a-fA-F]*$/.test(rawValue)) {\n\t\t\tthrow new Error(\"nft_transfer payload has malformed value\");\n\t\t}\n\t\treturn rawValue;\n\t}\n\n\tconst value = payload.value;\n\tconst hex =\n\t\ttypeof value === \"string\"\n\t\t\t? value\n\t\t\t: value &&\n\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t\t\t\t? (value as { hex: string }).hex\n\t\t\t\t: null;\n\n\tif (!hex) {\n\t\tthrow new Error(\"nft_transfer payload missing value\");\n\t}\n\tif (!/^0x[0-9a-fA-F]*$/.test(hex)) {\n\t\tthrow new Error(\"nft_transfer payload has malformed value\");\n\t}\n\treturn hex;\n}\n\nfunction parseAssetIdentifier(assetIdentifier: string): {\n\tcontract_id: string;\n\ttoken_name: string | null;\n} {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(\"nft_transfer payload has malformed asset_identifier\");\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\nexport function isNftTransfer(event: StreamsEvent): event is NftTransferEvent {\n\treturn event.event_type === \"nft_transfer\";\n}\n\nexport function decodeNftTransfer(event: StreamsEvent): DecodedNftTransfer {\n\tif (!isNftTransfer(event)) {\n\t\tthrow new Error(`Expected nft_transfer event, got ${event.event_type}`);\n\t}\n\n\tconst payload = event.payload;\n\tconst assetIdentifier = requireString(payload, \"asset_identifier\");\n\tconst sender = requireString(payload, \"sender\");\n\tconst recipient = requireString(payload, \"recipient\");\n\tconst value = requireHexValue(payload);\n\tconst { contract_id, token_name } = parseAssetIdentifier(assetIdentifier);\n\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: event.event_type,\n\t\tdecoded_payload: {\n\t\t\tasset_identifier: assetIdentifier,\n\t\t\tcontract_id: event.contract_id ?? contract_id,\n\t\t\ttoken_name,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tvalue,\n\t\t},\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
18
- "export const STREAMS_EVENT_TYPES = [\n\t\"stx_transfer\",\n\t\"stx_mint\",\n\t\"stx_burn\",\n\t\"stx_lock\",\n\t\"ft_transfer\",\n\t\"ft_mint\",\n\t\"ft_burn\",\n\t\"nft_transfer\",\n\t\"nft_mint\",\n\t\"nft_burn\",\n\t\"print\",\n] as const;\n\nexport type StreamsEventType = (typeof STREAMS_EVENT_TYPES)[number];\n\nexport type StreamsEventPayload = Record<string, unknown>;\n\nexport type StreamsEvent = {\n\tcursor: string;\n\tblock_height: number;\n\tindex_block_hash: string;\n\tburn_block_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: StreamsEventType;\n\tcontract_id: string | null;\n\tpayload: StreamsEventPayload;\n\tts: string;\n};\n\nexport type StreamsTip = {\n\tblock_height: number;\n\tindex_block_hash: string;\n\tburn_block_height: number;\n\tlag_seconds: number;\n};\n\nexport type StreamsCanonicalBlock = {\n\tblock_height: number;\n\tindex_block_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n\tis_canonical: true;\n};\n\nexport type StreamsReorg = {\n\tdetected_at: string;\n\tfork_point_height: number;\n\torphaned_range: { from: string; to: string };\n\tnew_canonical_tip: string;\n};\n\nexport type StreamsEventsEnvelope = {\n\tevents: StreamsEvent[];\n\tnext_cursor: string | null;\n\ttip: StreamsTip;\n\treorgs: StreamsReorg[];\n};\n\nexport type StreamsEventsListEnvelope = Omit<\n\tStreamsEventsEnvelope,\n\t\"next_cursor\"\n>;\n\nexport type StreamsReorgsListParams = {\n\tsince: string;\n\tlimit?: number;\n};\n\nexport type StreamsReorgsListEnvelope = {\n\treorgs: StreamsReorg[];\n\tnext_since: string | null;\n};\n\nexport type StreamsEventsListParams = {\n\tcursor?: string | null;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tlimit?: number;\n};\n\nexport type StreamsEventsStreamParams = {\n\tfromCursor?: string | null;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeParams = {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t) => Promise<string | null | undefined> | string | null | undefined;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeResult = {\n\tcursor: string | null;\n\tpages: number;\n\temptyPolls: number;\n};\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport type StreamsClient = {\n\tevents: {\n\t\tlist(params?: StreamsEventsListParams): Promise<StreamsEventsEnvelope>;\n\t\tbyTxId(txId: string): Promise<StreamsEventsListEnvelope>;\n\t\t/**\n\t\t * Pull pages from Streams and call `onBatch` after each page.\n\t\t *\n\t\t * Use `consume` for indexers and ETL jobs that own checkpointing. Return\n\t\t * the checkpoint cursor from `onBatch`. Default `mode: \"tail\"` keeps\n\t\t * polling when caught up; `mode: \"bounded\"` exits on the first empty page.\n\t\t * The consumer also exits when `maxPages`, `maxEmptyPolls`, or `signal`\n\t\t * stops it.\n\t\t */\n\t\tconsume(\n\t\t\tparams: StreamsEventsConsumeParams,\n\t\t): Promise<StreamsEventsConsumeResult>;\n\t\t/**\n\t\t * Follow Streams as an async iterator.\n\t\t *\n\t\t * Use `stream` for live processors and watch-style apps. It tails\n\t\t * indefinitely by default and stops when its `AbortSignal`, `maxPages`, or\n\t\t * `maxEmptyPolls` stops it.\n\t\t */\n\t\tstream(params?: StreamsEventsStreamParams): AsyncIterable<StreamsEvent>;\n\t};\n\tblocks: {\n\t\tevents(heightOrHash: number | string): Promise<StreamsEventsListEnvelope>;\n\t};\n\treorgs: {\n\t\tlist(params: StreamsReorgsListParams): Promise<StreamsReorgsListEnvelope>;\n\t};\n\tcanonical(height: number): Promise<StreamsCanonicalBlock>;\n\ttip(): Promise<StreamsTip>;\n};\n",
18
+ "export const STREAMS_EVENT_TYPES = [\n\t\"stx_transfer\",\n\t\"stx_mint\",\n\t\"stx_burn\",\n\t\"stx_lock\",\n\t\"ft_transfer\",\n\t\"ft_mint\",\n\t\"ft_burn\",\n\t\"nft_transfer\",\n\t\"nft_mint\",\n\t\"nft_burn\",\n\t\"print\",\n] as const;\n\nexport type StreamsEventType = (typeof STREAMS_EVENT_TYPES)[number];\n\nexport type StreamsEventPayload = Record<string, unknown>;\n\nexport type StreamsEvent = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: StreamsEventType;\n\tcontract_id: string | null;\n\tpayload: StreamsEventPayload;\n\tts: string;\n};\n\nexport type StreamsTip = {\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\tlag_seconds: number;\n};\n\nexport type StreamsCanonicalBlock = {\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n\tis_canonical: true;\n};\n\nexport type StreamsReorg = {\n\tdetected_at: string;\n\tfork_point_height: number;\n\torphaned_range: { from: string; to: string };\n\tnew_canonical_tip: string;\n};\n\nexport type StreamsEventsEnvelope = {\n\tevents: StreamsEvent[];\n\tnext_cursor: string | null;\n\ttip: StreamsTip;\n\treorgs: StreamsReorg[];\n};\n\nexport type StreamsEventsListEnvelope = Omit<\n\tStreamsEventsEnvelope,\n\t\"next_cursor\"\n>;\n\nexport type StreamsReorgsListParams = {\n\tsince: string;\n\tlimit?: number;\n};\n\nexport type StreamsReorgsListEnvelope = {\n\treorgs: StreamsReorg[];\n\tnext_since: string | null;\n};\n\nexport type StreamsEventsListParams = {\n\tcursor?: string | null;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tlimit?: number;\n};\n\nexport type StreamsEventsStreamParams = {\n\tfromCursor?: string | null;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeParams = {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t) => Promise<string | null | undefined> | string | null | undefined;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeResult = {\n\tcursor: string | null;\n\tpages: number;\n\temptyPolls: number;\n};\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport type StreamsClient = {\n\tevents: {\n\t\tlist(params?: StreamsEventsListParams): Promise<StreamsEventsEnvelope>;\n\t\tbyTxId(txId: string): Promise<StreamsEventsListEnvelope>;\n\t\t/**\n\t\t * Pull pages from Streams and call `onBatch` after each page.\n\t\t *\n\t\t * Use `consume` for indexers and ETL jobs that own checkpointing. Return\n\t\t * the checkpoint cursor from `onBatch`. Default `mode: \"tail\"` keeps\n\t\t * polling when caught up; `mode: \"bounded\"` exits on the first empty page.\n\t\t * The consumer also exits when `maxPages`, `maxEmptyPolls`, or `signal`\n\t\t * stops it.\n\t\t */\n\t\tconsume(\n\t\t\tparams: StreamsEventsConsumeParams,\n\t\t): Promise<StreamsEventsConsumeResult>;\n\t\t/**\n\t\t * Follow Streams as an async iterator.\n\t\t *\n\t\t * Use `stream` for live processors and watch-style apps. It tails\n\t\t * indefinitely by default and stops when its `AbortSignal`, `maxPages`, or\n\t\t * `maxEmptyPolls` stops it.\n\t\t */\n\t\tstream(params?: StreamsEventsStreamParams): AsyncIterable<StreamsEvent>;\n\t};\n\tblocks: {\n\t\tevents(heightOrHash: number | string): Promise<StreamsEventsListEnvelope>;\n\t};\n\treorgs: {\n\t\tlist(params: StreamsReorgsListParams): Promise<StreamsReorgsListEnvelope>;\n\t};\n\tcanonical(height: number): Promise<StreamsCanonicalBlock>;\n\ttip(): Promise<StreamsTip>;\n};\n",
19
19
  "import {\n\ttype StandardWebhooksHeaders,\n\tverify,\n} from \"@secondlayer/shared/crypto/standard-webhooks\";\n\nexport {\n\ttype StandardWebhooksHeaders,\n\tverify as verifyStandardWebhooksHeaders,\n} from \"@secondlayer/shared/crypto/standard-webhooks\";\n\ntype HeaderLookup = (name: string) => string | null | undefined;\nexport type WebhookHeaderInput =\n\t| HeaderLookup\n\t| StandardWebhooksHeaders\n\t| Record<string, string | string[] | undefined>\n\t| { get: (name: string) => string | null }; // e.g. Fetch `Headers`\n\nfunction pickHeader(headers: WebhookHeaderInput, name: string): string | undefined {\n\tif (typeof headers === \"function\") {\n\t\tconst v = (headers as HeaderLookup)(name);\n\t\treturn typeof v === \"string\" ? v : undefined;\n\t}\n\tif (\n\t\ttypeof (headers as { get?: unknown }).get === \"function\" &&\n\t\t!(name in (headers as Record<string, unknown>))\n\t) {\n\t\tconst v = (headers as { get: (n: string) => string | null }).get(name);\n\t\treturn typeof v === \"string\" ? v : undefined;\n\t}\n\tconst bag = headers as Record<string, string | string[] | undefined>;\n\tlet v = bag[name] ?? bag[name.toLowerCase()];\n\tif (v === undefined) {\n\t\tconst target = name.toLowerCase();\n\t\tfor (const key of Object.keys(bag)) {\n\t\t\tif (key.toLowerCase() === target) {\n\t\t\t\tv = bag[key];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (Array.isArray(v)) return v[0];\n\treturn typeof v === \"string\" ? v : undefined;\n}\n\n/**\n * Verify a Secondlayer webhook delivery signature.\n *\n * Every delivery whose subscription `format` is `\"standard-webhooks\"` (the\n * default) carries three Standard Webhooks headers:\n *\n * webhook-id — UUID for the delivery (stable across retries; use as\n * your dedup key)\n * webhook-timestamp — unix seconds at dispatch time\n * webhook-signature — space-separated list of `v1,<base64-hmac>` tuples\n *\n * The signed content is `${id}.${timestamp}.${rawBody}` HMAC-SHA256 with the\n * signing secret. Secrets returned by `sl subscriptions create` (or\n * `rotate-secret`) carry a `whsec_` prefix and are base64-decoded after the\n * prefix is stripped, matching the Svix / Standard Webhooks convention.\n *\n * @param rawBody The raw request body as a string. NEVER pass\n * `JSON.stringify(req.body)` — re-stringifying drops\n * key ordering and whitespace, breaking the HMAC.\n * Use the raw body bytes/string your framework hands\n * you (Express raw body middleware, Hono `c.req.text()`,\n * Bun `await req.text()`, etc.).\n * @param headers The request headers. Accepts a plain object\n * (Express / Node), a Fetch `Headers` instance\n * (Bun / Hono / Workers), or a callback that returns\n * a header value by name. Header name matching is\n * case-insensitive.\n * @param secret The signing secret returned by\n * `sl subscriptions create` / `rotateSecret`. Pass it\n * through verbatim — the helper handles the `whsec_`\n * prefix.\n * @param toleranceSeconds Max age of `webhook-timestamp` in seconds. Default\n * 300 (5 min) per the Standard Webhooks spec.\n * @returns true if every header is present, the timestamp is within\n * tolerance, and a `v1` signature matches.\n *\n * @example\n * ```ts\n * // Hono / Bun\n * import { verifyWebhookSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\"/webhook\", async (c) => {\n * const raw = await c.req.text();\n * if (!verifyWebhookSignature(raw, c.req.raw.headers, process.env.SIGNING_SECRET!)) {\n * return c.text(\"Invalid signature\", 401);\n * }\n * const { type, timestamp, data } = JSON.parse(raw);\n * // ... process data ...\n * return c.body(null, 204);\n * });\n * ```\n *\n * @example\n * ```ts\n * // Express with raw-body middleware\n * import express from \"express\";\n * import { verifyWebhookSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\n * \"/webhook\",\n * express.raw({ type: \"application/json\" }),\n * (req, res) => {\n * const raw = req.body.toString(\"utf8\");\n * if (!verifyWebhookSignature(raw, req.headers, process.env.SIGNING_SECRET!)) {\n * return res.status(401).end();\n * }\n * // ... process raw ...\n * res.status(204).end();\n * },\n * );\n * ```\n */\nexport function verifyWebhookSignature(\n\trawBody: string,\n\theaders: WebhookHeaderInput,\n\tsecret: string,\n\ttoleranceSeconds = 300,\n): boolean {\n\tconst id = pickHeader(headers, \"webhook-id\");\n\tconst timestamp = pickHeader(headers, \"webhook-timestamp\");\n\tconst signature = pickHeader(headers, \"webhook-signature\");\n\tif (!id || !timestamp || !signature) return false;\n\treturn verify(\n\t\trawBody,\n\t\t{\n\t\t\t\"webhook-id\": id,\n\t\t\t\"webhook-timestamp\": timestamp,\n\t\t\t\"webhook-signature\": signature,\n\t\t},\n\t\tsecret,\n\t\t{ toleranceSeconds },\n\t);\n}\n"
20
20
  ],
21
21
  "mappings": "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",
@@ -4,7 +4,7 @@ type StreamsEventPayload = Record<string, unknown>;
4
4
  type StreamsEvent = {
5
5
  cursor: string
6
6
  block_height: number
7
- index_block_hash: string
7
+ block_hash: string
8
8
  burn_block_height: number
9
9
  tx_id: string
10
10
  tx_index: number
@@ -16,13 +16,13 @@ type StreamsEvent = {
16
16
  };
17
17
  type StreamsTip = {
18
18
  block_height: number
19
- index_block_hash: string
19
+ block_hash: string
20
20
  burn_block_height: number
21
21
  lag_seconds: number
22
22
  };
23
23
  type StreamsCanonicalBlock = {
24
24
  block_height: number
25
- index_block_hash: string
25
+ block_hash: string
26
26
  burn_block_height: number
27
27
  burn_block_hash: string | null
28
28
  is_canonical: true
@@ -7,7 +7,7 @@
7
7
  "import {\n\ttype StreamsEventsFetcher,\n\tconsumeStreamsEvents,\n\tstreamStreamsEvents,\n} from \"./consumer.ts\";\nimport {\n\tAuthError,\n\tRateLimitError,\n\tStreamsServerError,\n\tValidationError,\n} from \"./errors.ts\";\nimport type {\n\tFetchLike,\n\tStreamsCanonicalBlock,\n\tStreamsClient,\n\tStreamsEventsConsumeParams,\n\tStreamsEventsEnvelope,\n\tStreamsEventsListEnvelope,\n\tStreamsEventsListParams,\n\tStreamsEventsStreamParams,\n\tStreamsReorgsListEnvelope,\n\tStreamsReorgsListParams,\n\tStreamsTip,\n} from \"./types.ts\";\n\nconst DEFAULT_STREAMS_BASE_URL = \"https://api.secondlayer.tools\";\n\nexport type CreateStreamsClientOptions = {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tfetchImpl?: FetchLike;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n\treturn baseUrl.replace(/\\/+$/, \"\");\n}\n\nfunction appendSearchParam(\n\tparams: URLSearchParams,\n\tname: string,\n\tvalue: number | string | null | undefined,\n): void {\n\tif (value === undefined || value === null) return;\n\tparams.set(name, String(value));\n}\n\nasync function responseBody(response: Response): Promise<unknown> {\n\tconst text = await response.text();\n\tif (text.length === 0) return undefined;\n\ttry {\n\t\treturn JSON.parse(text);\n\t} catch {\n\t\treturn text;\n\t}\n}\n\nfunction errorMessage(body: unknown, fallback: string): string {\n\tif (body && typeof body === \"object\") {\n\t\tconst record = body as Record<string, unknown>;\n\t\tconst message = record.error ?? record.message;\n\t\tif (typeof message === \"string\" && message.length > 0) return message;\n\t}\n\tif (typeof body === \"string\" && body.length > 0) return body;\n\treturn fallback;\n}\n\nasync function mapStreamsError(response: Response): Promise<never> {\n\tconst body = await responseBody(response);\n\n\tif (response.status === 401) {\n\t\tthrow new AuthError(errorMessage(body, \"API key invalid or expired.\"));\n\t}\n\n\tif (response.status === 429) {\n\t\tconst retryAfter = response.headers.get(\"Retry-After\") ?? undefined;\n\t\tthrow new RateLimitError(\n\t\t\terrorMessage(body, \"Rate limited. Try again later.\"),\n\t\t\tretryAfter,\n\t\t);\n\t}\n\n\tif (response.status >= 500) {\n\t\tthrow new StreamsServerError(\n\t\t\terrorMessage(body, `Streams server returned ${response.status}.`),\n\t\t\tresponse.status,\n\t\t\tbody,\n\t\t);\n\t}\n\n\tthrow new ValidationError(\n\t\terrorMessage(body, `Streams request returned ${response.status}.`),\n\t\tresponse.status,\n\t\tbody,\n\t);\n}\n\nexport function createStreamsClient(\n\toptions: CreateStreamsClientOptions,\n): StreamsClient {\n\tconst baseUrl = normalizeBaseUrl(options.baseUrl ?? DEFAULT_STREAMS_BASE_URL);\n\tconst fetchImpl = options.fetchImpl ?? ((input, init) => fetch(input, init));\n\n\tasync function request<T>(path: string): Promise<T> {\n\t\tconst response = await fetchImpl(`${baseUrl}${path}`, {\n\t\t\theaders: { Authorization: `Bearer ${options.apiKey}` },\n\t\t});\n\t\tif (!response.ok) await mapStreamsError(response);\n\t\treturn (await response.json()) as T;\n\t}\n\n\tconst fetchEvents: StreamsEventsFetcher = async ({\n\t\tcursor,\n\t\tlimit,\n\t\ttypes,\n\t\tcontractId,\n\t}) => {\n\t\treturn listEvents({ cursor, limit, types, contractId });\n\t};\n\n\tasync function listEvents(\n\t\tparams: StreamsEventsListParams = {},\n\t): Promise<StreamsEventsEnvelope> {\n\t\tconst searchParams = new URLSearchParams();\n\t\tappendSearchParam(searchParams, \"cursor\", params.cursor);\n\t\tappendSearchParam(searchParams, \"from_height\", params.fromHeight);\n\t\tappendSearchParam(searchParams, \"to_height\", params.toHeight);\n\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\tappendSearchParam(searchParams, \"contract_id\", params.contractId);\n\t\tif (params.types?.length) {\n\t\t\tsearchParams.set(\"types\", params.types.join(\",\"));\n\t\t}\n\n\t\tconst query = searchParams.toString();\n\t\treturn request<StreamsEventsEnvelope>(\n\t\t\t`/v1/streams/events${query ? `?${query}` : \"\"}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tevents: {\n\t\t\tlist: listEvents,\n\t\t\tbyTxId(txId: string) {\n\t\t\t\treturn request<StreamsEventsListEnvelope>(\n\t\t\t\t\t`/v1/streams/events/${encodeURIComponent(txId)}`,\n\t\t\t\t);\n\t\t\t},\n\t\t\tconsume(params: StreamsEventsConsumeParams) {\n\t\t\t\treturn consumeStreamsEvents({\n\t\t\t\t\tfromCursor: params.fromCursor,\n\t\t\t\t\tmode: params.mode,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\t\t\tfetchEvents,\n\t\t\t\t\tonBatch: params.onBatch,\n\t\t\t\t\temptyBackoffMs: params.emptyBackoffMs,\n\t\t\t\t\tmaxPages: params.maxPages,\n\t\t\t\t\tmaxEmptyPolls: params.maxEmptyPolls,\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t});\n\t\t\t},\n\t\t\tstream(params: StreamsEventsStreamParams = {}) {\n\t\t\t\treturn streamStreamsEvents({\n\t\t\t\t\tfromCursor: params.fromCursor,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\t\t\temptyBackoffMs: params.emptyBackoffMs,\n\t\t\t\t\tmaxPages: params.maxPages,\n\t\t\t\t\tmaxEmptyPolls: params.maxEmptyPolls,\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t\tfetchEvents,\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\tblocks: {\n\t\t\tevents(heightOrHash: number | string) {\n\t\t\t\treturn request<StreamsEventsListEnvelope>(\n\t\t\t\t\t`/v1/streams/blocks/${encodeURIComponent(String(heightOrHash))}/events`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\treorgs: {\n\t\t\tlist(params: StreamsReorgsListParams) {\n\t\t\t\tconst searchParams = new URLSearchParams();\n\t\t\t\tappendSearchParam(searchParams, \"since\", params.since);\n\t\t\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\t\t\tconst query = searchParams.toString();\n\t\t\t\treturn request<StreamsReorgsListEnvelope>(\n\t\t\t\t\t`/v1/streams/reorgs${query ? `?${query}` : \"\"}`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tcanonical(height: number) {\n\t\t\treturn request<StreamsCanonicalBlock>(`/v1/streams/canonical/${height}`);\n\t\t},\n\t\ttip() {\n\t\t\treturn request<StreamsTip>(\"/v1/streams/tip\");\n\t\t},\n\t};\n}\n",
8
8
  "import type { StreamsEvent } from \"./types.ts\";\n\nexport type FtTransferPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type FtTransferEvent = StreamsEvent & {\n\tevent_type: \"ft_transfer\";\n\tpayload: FtTransferPayload;\n};\n\nexport type DecodedFtTransferPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedFtTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_transfer\";\n\tdecoded_payload: DecodedFtTransferPayload;\n\tsource_cursor: string;\n};\n\nfunction requireString(\n\tpayload: Record<string, unknown>,\n\tfield: keyof FtTransferPayload,\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`ft_transfer payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nfunction parseAssetIdentifier(assetIdentifier: string): {\n\tcontract_id: string;\n\ttoken_name: string | null;\n} {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(\"ft_transfer payload has malformed asset_identifier\");\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\nexport function isFtTransfer(event: StreamsEvent): event is FtTransferEvent {\n\treturn event.event_type === \"ft_transfer\";\n}\n\nexport function decodeFtTransfer(event: StreamsEvent): DecodedFtTransfer {\n\tif (!isFtTransfer(event)) {\n\t\tthrow new Error(`Expected ft_transfer event, got ${event.event_type}`);\n\t}\n\n\tconst payload = event.payload;\n\tconst assetIdentifier = requireString(payload, \"asset_identifier\");\n\tconst sender = requireString(payload, \"sender\");\n\tconst recipient = requireString(payload, \"recipient\");\n\tconst amount = requireString(payload, \"amount\");\n\tif (!/^(0|[1-9]\\d*)$/.test(amount)) {\n\t\tthrow new Error(\"ft_transfer payload has malformed amount\");\n\t}\n\n\tconst { contract_id, token_name } = parseAssetIdentifier(assetIdentifier);\n\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: event.event_type,\n\t\tdecoded_payload: {\n\t\t\tasset_identifier: assetIdentifier,\n\t\t\tcontract_id: event.contract_id ?? contract_id,\n\t\t\ttoken_name,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tamount,\n\t\t},\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
9
9
  "import type { StreamsEvent } from \"./types.ts\";\n\nexport type NftTransferPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tvalue: string | { hex: string };\n};\n\nexport type NftTransferEvent = StreamsEvent & {\n\tevent_type: \"nft_transfer\";\n\tpayload: NftTransferPayload;\n};\n\nexport type DecodedNftTransferPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type DecodedNftTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_transfer\";\n\tdecoded_payload: DecodedNftTransferPayload;\n\tsource_cursor: string;\n};\n\nfunction requireString(\n\tpayload: Record<string, unknown>,\n\tfield: \"asset_identifier\" | \"sender\" | \"recipient\",\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`nft_transfer payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nfunction requireHexValue(payload: Record<string, unknown>): string {\n\t// Live streams emits the token id as a typed Clarity value at `value`\n\t// (e.g. `{UInt: 52}`) and the canonical hex at `raw_value`. Prefer raw_value\n\t// when available — mirrors the sbtc/bns decoder fix in indexer 1.3.7.\n\tconst rawValue = payload.raw_value;\n\tif (typeof rawValue === \"string\") {\n\t\tif (!/^0x[0-9a-fA-F]*$/.test(rawValue)) {\n\t\t\tthrow new Error(\"nft_transfer payload has malformed value\");\n\t\t}\n\t\treturn rawValue;\n\t}\n\n\tconst value = payload.value;\n\tconst hex =\n\t\ttypeof value === \"string\"\n\t\t\t? value\n\t\t\t: value &&\n\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t\t\t\t? (value as { hex: string }).hex\n\t\t\t\t: null;\n\n\tif (!hex) {\n\t\tthrow new Error(\"nft_transfer payload missing value\");\n\t}\n\tif (!/^0x[0-9a-fA-F]*$/.test(hex)) {\n\t\tthrow new Error(\"nft_transfer payload has malformed value\");\n\t}\n\treturn hex;\n}\n\nfunction parseAssetIdentifier(assetIdentifier: string): {\n\tcontract_id: string;\n\ttoken_name: string | null;\n} {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(\"nft_transfer payload has malformed asset_identifier\");\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\nexport function isNftTransfer(event: StreamsEvent): event is NftTransferEvent {\n\treturn event.event_type === \"nft_transfer\";\n}\n\nexport function decodeNftTransfer(event: StreamsEvent): DecodedNftTransfer {\n\tif (!isNftTransfer(event)) {\n\t\tthrow new Error(`Expected nft_transfer event, got ${event.event_type}`);\n\t}\n\n\tconst payload = event.payload;\n\tconst assetIdentifier = requireString(payload, \"asset_identifier\");\n\tconst sender = requireString(payload, \"sender\");\n\tconst recipient = requireString(payload, \"recipient\");\n\tconst value = requireHexValue(payload);\n\tconst { contract_id, token_name } = parseAssetIdentifier(assetIdentifier);\n\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: event.event_type,\n\t\tdecoded_payload: {\n\t\t\tasset_identifier: assetIdentifier,\n\t\t\tcontract_id: event.contract_id ?? contract_id,\n\t\t\ttoken_name,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tvalue,\n\t\t},\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
10
- "export const STREAMS_EVENT_TYPES = [\n\t\"stx_transfer\",\n\t\"stx_mint\",\n\t\"stx_burn\",\n\t\"stx_lock\",\n\t\"ft_transfer\",\n\t\"ft_mint\",\n\t\"ft_burn\",\n\t\"nft_transfer\",\n\t\"nft_mint\",\n\t\"nft_burn\",\n\t\"print\",\n] as const;\n\nexport type StreamsEventType = (typeof STREAMS_EVENT_TYPES)[number];\n\nexport type StreamsEventPayload = Record<string, unknown>;\n\nexport type StreamsEvent = {\n\tcursor: string;\n\tblock_height: number;\n\tindex_block_hash: string;\n\tburn_block_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: StreamsEventType;\n\tcontract_id: string | null;\n\tpayload: StreamsEventPayload;\n\tts: string;\n};\n\nexport type StreamsTip = {\n\tblock_height: number;\n\tindex_block_hash: string;\n\tburn_block_height: number;\n\tlag_seconds: number;\n};\n\nexport type StreamsCanonicalBlock = {\n\tblock_height: number;\n\tindex_block_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n\tis_canonical: true;\n};\n\nexport type StreamsReorg = {\n\tdetected_at: string;\n\tfork_point_height: number;\n\torphaned_range: { from: string; to: string };\n\tnew_canonical_tip: string;\n};\n\nexport type StreamsEventsEnvelope = {\n\tevents: StreamsEvent[];\n\tnext_cursor: string | null;\n\ttip: StreamsTip;\n\treorgs: StreamsReorg[];\n};\n\nexport type StreamsEventsListEnvelope = Omit<\n\tStreamsEventsEnvelope,\n\t\"next_cursor\"\n>;\n\nexport type StreamsReorgsListParams = {\n\tsince: string;\n\tlimit?: number;\n};\n\nexport type StreamsReorgsListEnvelope = {\n\treorgs: StreamsReorg[];\n\tnext_since: string | null;\n};\n\nexport type StreamsEventsListParams = {\n\tcursor?: string | null;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tlimit?: number;\n};\n\nexport type StreamsEventsStreamParams = {\n\tfromCursor?: string | null;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeParams = {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t) => Promise<string | null | undefined> | string | null | undefined;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeResult = {\n\tcursor: string | null;\n\tpages: number;\n\temptyPolls: number;\n};\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport type StreamsClient = {\n\tevents: {\n\t\tlist(params?: StreamsEventsListParams): Promise<StreamsEventsEnvelope>;\n\t\tbyTxId(txId: string): Promise<StreamsEventsListEnvelope>;\n\t\t/**\n\t\t * Pull pages from Streams and call `onBatch` after each page.\n\t\t *\n\t\t * Use `consume` for indexers and ETL jobs that own checkpointing. Return\n\t\t * the checkpoint cursor from `onBatch`. Default `mode: \"tail\"` keeps\n\t\t * polling when caught up; `mode: \"bounded\"` exits on the first empty page.\n\t\t * The consumer also exits when `maxPages`, `maxEmptyPolls`, or `signal`\n\t\t * stops it.\n\t\t */\n\t\tconsume(\n\t\t\tparams: StreamsEventsConsumeParams,\n\t\t): Promise<StreamsEventsConsumeResult>;\n\t\t/**\n\t\t * Follow Streams as an async iterator.\n\t\t *\n\t\t * Use `stream` for live processors and watch-style apps. It tails\n\t\t * indefinitely by default and stops when its `AbortSignal`, `maxPages`, or\n\t\t * `maxEmptyPolls` stops it.\n\t\t */\n\t\tstream(params?: StreamsEventsStreamParams): AsyncIterable<StreamsEvent>;\n\t};\n\tblocks: {\n\t\tevents(heightOrHash: number | string): Promise<StreamsEventsListEnvelope>;\n\t};\n\treorgs: {\n\t\tlist(params: StreamsReorgsListParams): Promise<StreamsReorgsListEnvelope>;\n\t};\n\tcanonical(height: number): Promise<StreamsCanonicalBlock>;\n\ttip(): Promise<StreamsTip>;\n};\n"
10
+ "export const STREAMS_EVENT_TYPES = [\n\t\"stx_transfer\",\n\t\"stx_mint\",\n\t\"stx_burn\",\n\t\"stx_lock\",\n\t\"ft_transfer\",\n\t\"ft_mint\",\n\t\"ft_burn\",\n\t\"nft_transfer\",\n\t\"nft_mint\",\n\t\"nft_burn\",\n\t\"print\",\n] as const;\n\nexport type StreamsEventType = (typeof STREAMS_EVENT_TYPES)[number];\n\nexport type StreamsEventPayload = Record<string, unknown>;\n\nexport type StreamsEvent = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: StreamsEventType;\n\tcontract_id: string | null;\n\tpayload: StreamsEventPayload;\n\tts: string;\n};\n\nexport type StreamsTip = {\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\tlag_seconds: number;\n};\n\nexport type StreamsCanonicalBlock = {\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n\tis_canonical: true;\n};\n\nexport type StreamsReorg = {\n\tdetected_at: string;\n\tfork_point_height: number;\n\torphaned_range: { from: string; to: string };\n\tnew_canonical_tip: string;\n};\n\nexport type StreamsEventsEnvelope = {\n\tevents: StreamsEvent[];\n\tnext_cursor: string | null;\n\ttip: StreamsTip;\n\treorgs: StreamsReorg[];\n};\n\nexport type StreamsEventsListEnvelope = Omit<\n\tStreamsEventsEnvelope,\n\t\"next_cursor\"\n>;\n\nexport type StreamsReorgsListParams = {\n\tsince: string;\n\tlimit?: number;\n};\n\nexport type StreamsReorgsListEnvelope = {\n\treorgs: StreamsReorg[];\n\tnext_since: string | null;\n};\n\nexport type StreamsEventsListParams = {\n\tcursor?: string | null;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tlimit?: number;\n};\n\nexport type StreamsEventsStreamParams = {\n\tfromCursor?: string | null;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeParams = {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t) => Promise<string | null | undefined> | string | null | undefined;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeResult = {\n\tcursor: string | null;\n\tpages: number;\n\temptyPolls: number;\n};\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport type StreamsClient = {\n\tevents: {\n\t\tlist(params?: StreamsEventsListParams): Promise<StreamsEventsEnvelope>;\n\t\tbyTxId(txId: string): Promise<StreamsEventsListEnvelope>;\n\t\t/**\n\t\t * Pull pages from Streams and call `onBatch` after each page.\n\t\t *\n\t\t * Use `consume` for indexers and ETL jobs that own checkpointing. Return\n\t\t * the checkpoint cursor from `onBatch`. Default `mode: \"tail\"` keeps\n\t\t * polling when caught up; `mode: \"bounded\"` exits on the first empty page.\n\t\t * The consumer also exits when `maxPages`, `maxEmptyPolls`, or `signal`\n\t\t * stops it.\n\t\t */\n\t\tconsume(\n\t\t\tparams: StreamsEventsConsumeParams,\n\t\t): Promise<StreamsEventsConsumeResult>;\n\t\t/**\n\t\t * Follow Streams as an async iterator.\n\t\t *\n\t\t * Use `stream` for live processors and watch-style apps. It tails\n\t\t * indefinitely by default and stops when its `AbortSignal`, `maxPages`, or\n\t\t * `maxEmptyPolls` stops it.\n\t\t */\n\t\tstream(params?: StreamsEventsStreamParams): AsyncIterable<StreamsEvent>;\n\t};\n\tblocks: {\n\t\tevents(heightOrHash: number | string): Promise<StreamsEventsListEnvelope>;\n\t};\n\treorgs: {\n\t\tlist(params: StreamsReorgsListParams): Promise<StreamsReorgsListEnvelope>;\n\t};\n\tcanonical(height: number): Promise<StreamsCanonicalBlock>;\n\ttip(): Promise<StreamsTip>;\n};\n"
11
11
  ],
12
12
  "mappings": "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",
13
13
  "debugId": "3AD67DCCDE78700764756E2164756E21",
@@ -197,7 +197,7 @@ type StreamsEventPayload = Record<string, unknown>;
197
197
  type StreamsEvent = {
198
198
  cursor: string
199
199
  block_height: number
200
- index_block_hash: string
200
+ block_hash: string
201
201
  burn_block_height: number
202
202
  tx_id: string
203
203
  tx_index: number
@@ -209,13 +209,13 @@ type StreamsEvent = {
209
209
  };
210
210
  type StreamsTip = {
211
211
  block_height: number
212
- index_block_hash: string
212
+ block_hash: string
213
213
  burn_block_height: number
214
214
  lag_seconds: number
215
215
  };
216
216
  type StreamsCanonicalBlock = {
217
217
  block_height: number
218
- index_block_hash: string
218
+ block_hash: string
219
219
  burn_block_height: number
220
220
  burn_block_hash: string | null
221
221
  is_canonical: true
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@secondlayer/sdk",
3
- "version": "4.0.2",
3
+ "version": "5.0.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",