@secondlayer/sdk 6.10.0 → 6.12.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.
@@ -390,8 +390,10 @@ type CreateStreamsClientOptions = {
390
390
  }
391
391
  /**
392
392
  * Verify the bulk dumps manifest's ed25519 signature in `client.dumps.list()`
393
- * before trusting any file sha256 (default off). Uses the same key source as
394
- * `verify`. Default off until historical manifests carry signatures.
393
+ * before trusting any file sha256 (default ON). Uses the same key source as
394
+ * `verify` (fetches `/public/streams/signing-key`, or a pinned PEM). Pass
395
+ * `false` to opt out. A missing or invalid signature throws
396
+ * `StreamsSignatureError`.
395
397
  */
396
398
  verifyDumpsManifest?: boolean
397
399
  };
@@ -581,7 +581,7 @@ function createStreamsClient(options) {
581
581
  const dumps = createStreamsDumps({
582
582
  baseUrl: options.dumpsBaseUrl,
583
583
  fetchImpl,
584
- verifyManifest: options.verifyDumpsManifest ?? false,
584
+ verifyManifest: options.verifyDumpsManifest ?? true,
585
585
  loadPublicKeyPem: async () => (await loadKey()).publicKeyPem
586
586
  });
587
587
  async function request(path) {
@@ -1068,5 +1068,5 @@ export {
1068
1068
  AuthError
1069
1069
  };
1070
1070
 
1071
- //# debugId=202DB745ED61199F64756E2164756E21
1071
+ //# debugId=12EEA92B91F2B3F064756E2164756E21
1072
1072
  //# sourceMappingURL=index.js.map
@@ -2,13 +2,13 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/streams/client.ts", "../src/errors.ts", "../src/base.ts", "../src/streams/errors.ts", "../src/streams/cursor.ts", "../src/streams/consumer.ts", "../src/streams/dumps.ts", "../src/streams/subscribe.ts", "../src/streams/_payload.ts", "../src/streams/ft-transfer.ts", "../src/streams/nft-transfer.ts", "../src/streams/stx-events.ts", "../src/streams/token-mint-burn.ts", "../src/clarity.ts", "../src/streams/print.ts", "../src/streams/types.ts"],
4
4
  "sourcesContent": [
5
- "import { ed25519 } from \"@secondlayer/shared\";\nimport { buildQuery } from \"../base.ts\";\nimport {\n\ttype StreamsEventsFetcher,\n\tconsumeStreamsEvents,\n\tstreamStreamsEvents,\n} from \"./consumer.ts\";\nimport { createStreamsDumps } from \"./dumps.ts\";\nimport {\n\tAuthError,\n\tRateLimitError,\n\tStreamsServerError,\n\tStreamsSignatureError,\n\tValidationError,\n} from \"./errors.ts\";\nimport { subscribeStreamsEvents } from \"./subscribe.ts\";\nimport type {\n\tFetchLike,\n\tStreamsCanonicalBlock,\n\tStreamsClient,\n\tStreamsEventsConsumeParams,\n\tStreamsEventsEnvelope,\n\tStreamsEventsListEnvelope,\n\tStreamsEventsListParams,\n\tStreamsEventsReplayParams,\n\tStreamsEventsStreamParams,\n\tStreamsEventsSubscribeParams,\n\tStreamsReorgsListEnvelope,\n\tStreamsReorgsListParams,\n\tStreamsTip,\n\tStreamsUsage,\n} from \"./types.ts\";\n\n/** Parse a `<block>:<index>` cursor; null sorts before genesis. */\nfunction cursorTuple(cursor: string | null): [number, number] {\n\tif (!cursor) return [-1, -1];\n\tconst parts = cursor.split(\":\");\n\tconst [block, index] = parts.map(Number);\n\tif (\n\t\tparts.length !== 2 ||\n\t\t!Number.isInteger(block) ||\n\t\t!Number.isInteger(index)\n\t) {\n\t\tthrow new ValidationError(\n\t\t\t`Invalid stream cursor \"${cursor}\"; expected \"<block>:<index>\" (e.g. \"951475:3\").`,\n\t\t\t400,\n\t\t);\n\t}\n\treturn [block, index];\n}\n\n/** The greater of two cursors (later in the stream). */\nfunction maxCursor(a: string | null, b: string | null): string | null {\n\tconst [ah, ai] = cursorTuple(a);\n\tconst [bh, bi] = cursorTuple(b);\n\treturn ah > bh || (ah === bh && ai >= bi) ? a : b;\n}\n\nconst DEFAULT_STREAMS_BASE_URL = \"https://api.secondlayer.tools\";\n\nexport type CreateStreamsClientOptions = {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tfetchImpl?: FetchLike;\n\t/**\n\t * Public base URL for bulk parquet dumps (the R2/CDN bucket root). Required\n\t * to use `client.dumps`. See `GET /public/streams/dumps/manifest`.\n\t */\n\tdumpsBaseUrl?: string;\n\t/**\n\t * Verify the ed25519 `X-Signature` on every response (default off). Pass\n\t * `true` to fetch the server's public key from\n\t * `/public/streams/signing-key`, or `{ publicKey }` to pin a known PEM. A\n\t * failed or missing signature throws `StreamsSignatureError`.\n\t */\n\tverify?: boolean | { publicKey: string };\n\t/**\n\t * Verify the bulk dumps manifest's ed25519 signature in `client.dumps.list()`\n\t * before trusting any file sha256 (default off). Uses the same key source as\n\t * `verify`. Default off until historical manifests carry signatures.\n\t */\n\tverifyDumpsManifest?: boolean;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n\treturn baseUrl.replace(/\\/+$/, \"\");\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\tconst verify = options.verify ?? false;\n\n\t// Lazily resolve and cache the verification key alongside its id, so a\n\t// rotation (signalled by a changed `X-Signature-KeyId`) can be detected.\n\ttype VerificationKey = {\n\t\tkeyId: string;\n\t\tpublicKeyPem: string;\n\t\tpublicKey: ReturnType<typeof ed25519.loadEd25519PublicKey>;\n\t};\n\tlet keyPromise: Promise<VerificationKey> | null = null;\n\tfunction loadKey(): Promise<VerificationKey> {\n\t\tif (keyPromise) return keyPromise;\n\t\tkeyPromise = (async () => {\n\t\t\tif (typeof verify === \"object\") {\n\t\t\t\treturn {\n\t\t\t\t\tkeyId: ed25519.ed25519KeyId(verify.publicKey),\n\t\t\t\t\tpublicKeyPem: verify.publicKey,\n\t\t\t\t\tpublicKey: ed25519.loadEd25519PublicKey(verify.publicKey),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst res = await fetchImpl(`${baseUrl}/public/streams/signing-key`);\n\t\t\tif (!res.ok) {\n\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t`Could not fetch signing key (${res.status}).`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst body = (await res.json()) as {\n\t\t\t\tpublic_key_pem?: string;\n\t\t\t\tkey_id?: string;\n\t\t\t};\n\t\t\tif (!body.public_key_pem) {\n\t\t\t\tthrow new StreamsSignatureError(\"Signing key response missing key.\");\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkeyId: body.key_id ?? ed25519.ed25519KeyId(body.public_key_pem),\n\t\t\t\tpublicKeyPem: body.public_key_pem,\n\t\t\t\tpublicKey: ed25519.loadEd25519PublicKey(body.public_key_pem),\n\t\t\t};\n\t\t})();\n\t\treturn keyPromise;\n\t}\n\n\tconst dumps = createStreamsDumps({\n\t\tbaseUrl: options.dumpsBaseUrl,\n\t\tfetchImpl,\n\t\tverifyManifest: options.verifyDumpsManifest ?? false,\n\t\tloadPublicKeyPem: async () => (await loadKey()).publicKeyPem,\n\t});\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\tconst text = await response.text();\n\t\tif (verify) {\n\t\t\tconst signature = response.headers.get(\"X-Signature\");\n\t\t\tif (!signature) {\n\t\t\t\tthrow new StreamsSignatureError(\"Response is missing X-Signature.\");\n\t\t\t}\n\t\t\tconst responseKeyId = response.headers.get(\"X-Signature-KeyId\");\n\t\t\tlet key = await loadKey();\n\t\t\t// The server rotated to a key we haven't seen.\n\t\t\tif (responseKeyId && responseKeyId !== key.keyId) {\n\t\t\t\tif (typeof verify === \"object\") {\n\t\t\t\t\t// Pinned key: a different id is never the pinned key — fail closed.\n\t\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\t`Response signed with key '${responseKeyId}', expected pinned key '${key.keyId}'.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Fetched key: refresh once. A still-mismatched id (no re-loop)\n\t\t\t\t// means the endpoint doesn't serve the signing key — fail closed.\n\t\t\t\tkeyPromise = null;\n\t\t\t\tkey = await loadKey();\n\t\t\t\tif (responseKeyId !== key.keyId) {\n\t\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\t`Response signed with key '${responseKeyId}' not served by the signing-key endpoint.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!ed25519.verifyEd25519(text, signature, key.publicKey)) {\n\t\t\t\tthrow new StreamsSignatureError();\n\t\t\t}\n\t\t}\n\t\treturn JSON.parse(text) as T;\n\t}\n\n\tconst fetchEvents: StreamsEventsFetcher = async ({\n\t\tcursor,\n\t\tlimit,\n\t\ttypes,\n\t\tnotTypes,\n\t\tcontractId,\n\t\tsender,\n\t\trecipient,\n\t\tassetIdentifier,\n\t}) => {\n\t\treturn listEvents({\n\t\t\tcursor,\n\t\t\tlimit,\n\t\t\ttypes,\n\t\t\tnotTypes,\n\t\t\tcontractId,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tassetIdentifier,\n\t\t});\n\t};\n\n\tasync function listEvents(\n\t\tparams: StreamsEventsListParams = {},\n\t): Promise<StreamsEventsEnvelope> {\n\t\treturn request<StreamsEventsEnvelope>(\n\t\t\t`/v1/streams/events${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tsender: params.sender,\n\t\t\t\trecipient: params.recipient,\n\t\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\t\ttypes: params.types,\n\t\t\t\tnot_types: params.notTypes,\n\t\t\t})}`,\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\tfinalizedOnly: params.finalizedOnly,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tnotTypes: params.notTypes,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tsender: params.sender,\n\t\t\t\t\trecipient: params.recipient,\n\t\t\t\t\tassetIdentifier: params.assetIdentifier,\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\tonReorg: params.onReorg,\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\tnotTypes: params.notTypes,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tsender: params.sender,\n\t\t\t\t\trecipient: params.recipient,\n\t\t\t\t\tassetIdentifier: params.assetIdentifier,\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\tsubscribe(params: StreamsEventsSubscribeParams) {\n\t\t\t\treturn subscribeStreamsEvents({\n\t\t\t\t\tbaseUrl,\n\t\t\t\t\tapiKey: options.apiKey,\n\t\t\t\t\tfetchImpl,\n\t\t\t\t\tverify: Boolean(verify),\n\t\t\t\t\tloadKey,\n\t\t\t\t\tparams,\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync replay(params: StreamsEventsReplayParams) {\n\t\t\t\tconst fromCursor =\n\t\t\t\t\tparams.from === \"genesis\" ? null : (params.from ?? null);\n\t\t\t\tconst fromBlock = fromCursor ? cursorTuple(fromCursor)[0] : 0;\n\t\t\t\tconst manifest = await dumps.list();\n\n\t\t\t\t// Hydrate finalized history from dumps, in block order.\n\t\t\t\tconst files = manifest.files\n\t\t\t\t\t.filter((file) => file.to_block >= fromBlock)\n\t\t\t\t\t.sort(\n\t\t\t\t\t\t(a, b) => a.from_block - b.from_block || a.to_block - b.to_block,\n\t\t\t\t\t);\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\tif (params.signal?.aborted) break;\n\t\t\t\t\tawait params.onDumpFile(file);\n\t\t\t\t}\n\n\t\t\t\t// Seam: tail live from just past the dumped coverage. Cursor input is\n\t\t\t\t// exclusive, so the first live event is strictly after the last dump.\n\t\t\t\tconst seam = maxCursor(fromCursor, manifest.latest_finalized_cursor);\n\t\t\t\treturn consumeStreamsEvents({\n\t\t\t\t\tfromCursor: seam,\n\t\t\t\t\tmode: params.mode ?? \"tail\",\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},\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\treturn request<StreamsReorgsListEnvelope>(\n\t\t\t\t\t`/v1/streams/reorgs${buildQuery({\n\t\t\t\t\t\tsince: params.since,\n\t\t\t\t\t\tlimit: params.limit,\n\t\t\t\t\t})}`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tdumps,\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\tusage() {\n\t\t\treturn request<StreamsUsage>(\"/v1/streams/usage\");\n\t\t},\n\t};\n}\n",
5
+ "import { ed25519 } from \"@secondlayer/shared\";\nimport { buildQuery } from \"../base.ts\";\nimport {\n\ttype StreamsEventsFetcher,\n\tconsumeStreamsEvents,\n\tstreamStreamsEvents,\n} from \"./consumer.ts\";\nimport { createStreamsDumps } from \"./dumps.ts\";\nimport {\n\tAuthError,\n\tRateLimitError,\n\tStreamsServerError,\n\tStreamsSignatureError,\n\tValidationError,\n} from \"./errors.ts\";\nimport { subscribeStreamsEvents } from \"./subscribe.ts\";\nimport type {\n\tFetchLike,\n\tStreamsCanonicalBlock,\n\tStreamsClient,\n\tStreamsEventsConsumeParams,\n\tStreamsEventsEnvelope,\n\tStreamsEventsListEnvelope,\n\tStreamsEventsListParams,\n\tStreamsEventsReplayParams,\n\tStreamsEventsStreamParams,\n\tStreamsEventsSubscribeParams,\n\tStreamsReorgsListEnvelope,\n\tStreamsReorgsListParams,\n\tStreamsTip,\n\tStreamsUsage,\n} from \"./types.ts\";\n\n/** Parse a `<block>:<index>` cursor; null sorts before genesis. */\nfunction cursorTuple(cursor: string | null): [number, number] {\n\tif (!cursor) return [-1, -1];\n\tconst parts = cursor.split(\":\");\n\tconst [block, index] = parts.map(Number);\n\tif (\n\t\tparts.length !== 2 ||\n\t\t!Number.isInteger(block) ||\n\t\t!Number.isInteger(index)\n\t) {\n\t\tthrow new ValidationError(\n\t\t\t`Invalid stream cursor \"${cursor}\"; expected \"<block>:<index>\" (e.g. \"951475:3\").`,\n\t\t\t400,\n\t\t);\n\t}\n\treturn [block, index];\n}\n\n/** The greater of two cursors (later in the stream). */\nfunction maxCursor(a: string | null, b: string | null): string | null {\n\tconst [ah, ai] = cursorTuple(a);\n\tconst [bh, bi] = cursorTuple(b);\n\treturn ah > bh || (ah === bh && ai >= bi) ? a : b;\n}\n\nconst DEFAULT_STREAMS_BASE_URL = \"https://api.secondlayer.tools\";\n\nexport type CreateStreamsClientOptions = {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tfetchImpl?: FetchLike;\n\t/**\n\t * Public base URL for bulk parquet dumps (the R2/CDN bucket root). Required\n\t * to use `client.dumps`. See `GET /public/streams/dumps/manifest`.\n\t */\n\tdumpsBaseUrl?: string;\n\t/**\n\t * Verify the ed25519 `X-Signature` on every response (default off). Pass\n\t * `true` to fetch the server's public key from\n\t * `/public/streams/signing-key`, or `{ publicKey }` to pin a known PEM. A\n\t * failed or missing signature throws `StreamsSignatureError`.\n\t */\n\tverify?: boolean | { publicKey: string };\n\t/**\n\t * Verify the bulk dumps manifest's ed25519 signature in `client.dumps.list()`\n\t * before trusting any file sha256 (default ON). Uses the same key source as\n\t * `verify` (fetches `/public/streams/signing-key`, or a pinned PEM). Pass\n\t * `false` to opt out. A missing or invalid signature throws\n\t * `StreamsSignatureError`.\n\t */\n\tverifyDumpsManifest?: boolean;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n\treturn baseUrl.replace(/\\/+$/, \"\");\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\tconst verify = options.verify ?? false;\n\n\t// Lazily resolve and cache the verification key alongside its id, so a\n\t// rotation (signalled by a changed `X-Signature-KeyId`) can be detected.\n\ttype VerificationKey = {\n\t\tkeyId: string;\n\t\tpublicKeyPem: string;\n\t\tpublicKey: ReturnType<typeof ed25519.loadEd25519PublicKey>;\n\t};\n\tlet keyPromise: Promise<VerificationKey> | null = null;\n\tfunction loadKey(): Promise<VerificationKey> {\n\t\tif (keyPromise) return keyPromise;\n\t\tkeyPromise = (async () => {\n\t\t\tif (typeof verify === \"object\") {\n\t\t\t\treturn {\n\t\t\t\t\tkeyId: ed25519.ed25519KeyId(verify.publicKey),\n\t\t\t\t\tpublicKeyPem: verify.publicKey,\n\t\t\t\t\tpublicKey: ed25519.loadEd25519PublicKey(verify.publicKey),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst res = await fetchImpl(`${baseUrl}/public/streams/signing-key`);\n\t\t\tif (!res.ok) {\n\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t`Could not fetch signing key (${res.status}).`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst body = (await res.json()) as {\n\t\t\t\tpublic_key_pem?: string;\n\t\t\t\tkey_id?: string;\n\t\t\t};\n\t\t\tif (!body.public_key_pem) {\n\t\t\t\tthrow new StreamsSignatureError(\"Signing key response missing key.\");\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkeyId: body.key_id ?? ed25519.ed25519KeyId(body.public_key_pem),\n\t\t\t\tpublicKeyPem: body.public_key_pem,\n\t\t\t\tpublicKey: ed25519.loadEd25519PublicKey(body.public_key_pem),\n\t\t\t};\n\t\t})();\n\t\treturn keyPromise;\n\t}\n\n\tconst dumps = createStreamsDumps({\n\t\tbaseUrl: options.dumpsBaseUrl,\n\t\tfetchImpl,\n\t\tverifyManifest: options.verifyDumpsManifest ?? true,\n\t\tloadPublicKeyPem: async () => (await loadKey()).publicKeyPem,\n\t});\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\tconst text = await response.text();\n\t\tif (verify) {\n\t\t\tconst signature = response.headers.get(\"X-Signature\");\n\t\t\tif (!signature) {\n\t\t\t\tthrow new StreamsSignatureError(\"Response is missing X-Signature.\");\n\t\t\t}\n\t\t\tconst responseKeyId = response.headers.get(\"X-Signature-KeyId\");\n\t\t\tlet key = await loadKey();\n\t\t\t// The server rotated to a key we haven't seen.\n\t\t\tif (responseKeyId && responseKeyId !== key.keyId) {\n\t\t\t\tif (typeof verify === \"object\") {\n\t\t\t\t\t// Pinned key: a different id is never the pinned key — fail closed.\n\t\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\t`Response signed with key '${responseKeyId}', expected pinned key '${key.keyId}'.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Fetched key: refresh once. A still-mismatched id (no re-loop)\n\t\t\t\t// means the endpoint doesn't serve the signing key — fail closed.\n\t\t\t\tkeyPromise = null;\n\t\t\t\tkey = await loadKey();\n\t\t\t\tif (responseKeyId !== key.keyId) {\n\t\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\t`Response signed with key '${responseKeyId}' not served by the signing-key endpoint.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!ed25519.verifyEd25519(text, signature, key.publicKey)) {\n\t\t\t\tthrow new StreamsSignatureError();\n\t\t\t}\n\t\t}\n\t\treturn JSON.parse(text) as T;\n\t}\n\n\tconst fetchEvents: StreamsEventsFetcher = async ({\n\t\tcursor,\n\t\tlimit,\n\t\ttypes,\n\t\tnotTypes,\n\t\tcontractId,\n\t\tsender,\n\t\trecipient,\n\t\tassetIdentifier,\n\t}) => {\n\t\treturn listEvents({\n\t\t\tcursor,\n\t\t\tlimit,\n\t\t\ttypes,\n\t\t\tnotTypes,\n\t\t\tcontractId,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tassetIdentifier,\n\t\t});\n\t};\n\n\tasync function listEvents(\n\t\tparams: StreamsEventsListParams = {},\n\t): Promise<StreamsEventsEnvelope> {\n\t\treturn request<StreamsEventsEnvelope>(\n\t\t\t`/v1/streams/events${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tsender: params.sender,\n\t\t\t\trecipient: params.recipient,\n\t\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\t\ttypes: params.types,\n\t\t\t\tnot_types: params.notTypes,\n\t\t\t})}`,\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\tfinalizedOnly: params.finalizedOnly,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tnotTypes: params.notTypes,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tsender: params.sender,\n\t\t\t\t\trecipient: params.recipient,\n\t\t\t\t\tassetIdentifier: params.assetIdentifier,\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\tonReorg: params.onReorg,\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\tnotTypes: params.notTypes,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tsender: params.sender,\n\t\t\t\t\trecipient: params.recipient,\n\t\t\t\t\tassetIdentifier: params.assetIdentifier,\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\tsubscribe(params: StreamsEventsSubscribeParams) {\n\t\t\t\treturn subscribeStreamsEvents({\n\t\t\t\t\tbaseUrl,\n\t\t\t\t\tapiKey: options.apiKey,\n\t\t\t\t\tfetchImpl,\n\t\t\t\t\tverify: Boolean(verify),\n\t\t\t\t\tloadKey,\n\t\t\t\t\tparams,\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync replay(params: StreamsEventsReplayParams) {\n\t\t\t\tconst fromCursor =\n\t\t\t\t\tparams.from === \"genesis\" ? null : (params.from ?? null);\n\t\t\t\tconst fromBlock = fromCursor ? cursorTuple(fromCursor)[0] : 0;\n\t\t\t\tconst manifest = await dumps.list();\n\n\t\t\t\t// Hydrate finalized history from dumps, in block order.\n\t\t\t\tconst files = manifest.files\n\t\t\t\t\t.filter((file) => file.to_block >= fromBlock)\n\t\t\t\t\t.sort(\n\t\t\t\t\t\t(a, b) => a.from_block - b.from_block || a.to_block - b.to_block,\n\t\t\t\t\t);\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\tif (params.signal?.aborted) break;\n\t\t\t\t\tawait params.onDumpFile(file);\n\t\t\t\t}\n\n\t\t\t\t// Seam: tail live from just past the dumped coverage. Cursor input is\n\t\t\t\t// exclusive, so the first live event is strictly after the last dump.\n\t\t\t\tconst seam = maxCursor(fromCursor, manifest.latest_finalized_cursor);\n\t\t\t\treturn consumeStreamsEvents({\n\t\t\t\t\tfromCursor: seam,\n\t\t\t\t\tmode: params.mode ?? \"tail\",\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},\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\treturn request<StreamsReorgsListEnvelope>(\n\t\t\t\t\t`/v1/streams/reorgs${buildQuery({\n\t\t\t\t\t\tsince: params.since,\n\t\t\t\t\t\tlimit: params.limit,\n\t\t\t\t\t})}`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tdumps,\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\tusage() {\n\t\t\treturn request<StreamsUsage>(\"/v1/streams/usage\");\n\t\t},\n\t};\n}\n",
6
6
  "/**\n * Error thrown by {@link SecondLayer} when an API request fails.\n * Includes the HTTP status code for programmatic error handling.\n *\n * @example\n * ```ts\n * try {\n * await client.subgraphs.get(\"my-subgraph\");\n * } catch (err) {\n * if (err instanceof ApiError && err.status === 404) {\n * console.log(\"Subgraph not found\");\n * }\n * }\n * ```\n */\nexport class ApiError extends Error {\n\tconstructor(\n\t\t/** HTTP status code (0 for network errors). */\n\t\tpublic status: number,\n\t\tmessage: string,\n\t\t/** Raw response body (parsed JSON if possible) — preserved for callers that need error details. */\n\t\tpublic body?: unknown,\n\t\t/** Stable machine-readable code from the API's `{error, code}` error envelope. */\n\t\tpublic code?: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ApiError\";\n\t}\n}\n\n/**\n * Thrown on optimistic-concurrency conflict when a deploy supplies an\n * `expectedVersion` that no longer matches the server's stored version.\n */\nexport class VersionConflictError extends ApiError {\n\tconstructor(\n\t\tpublic currentVersion: string,\n\t\tpublic expectedVersion: string,\n\t\tmessage = `Version conflict: expected ${expectedVersion}, current ${currentVersion}`,\n\t) {\n\t\tsuper(409, message, { currentVersion, expectedVersion });\n\t\tthis.name = \"VersionConflictError\";\n\t}\n}\n",
7
7
  "import { ApiError } from \"./errors.ts\";\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport interface SecondLayerOptions {\n\t/** Base URL of the Secondlayer platform API (trailing slashes are stripped). */\n\tbaseUrl: string;\n\t/** Bearer token for authenticated requests. */\n\tapiKey?: string;\n\t/** Fetch implementation. Tests and edge runtimes can provide their own. */\n\tfetchImpl?: FetchLike;\n\t/** Deploy origin label sent as `x-sl-origin` (telemetry). Defaults to `cli`. */\n\torigin?: \"cli\" | \"mcp\" | \"session\";\n}\n\nconst DEFAULT_BASE_URL = \"https://api.secondlayer.tools\";\n\n/** Build a query-string suffix from name→value pairs. Skips null/undefined and\n * empty values; arrays are comma-joined. Returns \"\" (never a dangling \"?\") or\n * \"?a=1&b=2\" — the one canonical builder every list endpoint shares, so the\n * empty-query guard can't be forgotten per call site. */\nexport function buildQuery(\n\tparams: Record<\n\t\tstring,\n\t\tnumber | string | readonly string[] | null | undefined\n\t>,\n): string {\n\tconst search = new URLSearchParams();\n\tfor (const [name, value] of Object.entries(params)) {\n\t\tif (value === undefined || value === null) continue;\n\t\tconst serialized = Array.isArray(value) ? value.join(\",\") : String(value);\n\t\tif (serialized.length === 0) continue;\n\t\tsearch.set(name, serialized);\n\t}\n\tconst query = search.toString();\n\treturn query ? `?${query}` : \"\";\n}\n\nexport abstract class BaseClient {\n\tprotected baseUrl: string;\n\tprotected apiKey?: string;\n\tprotected origin: \"cli\" | \"mcp\" | \"session\";\n\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tthis.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n\t\tthis.apiKey = options.apiKey;\n\t\tthis.origin = options.origin ?? \"cli\";\n\t}\n\n\tstatic authHeaders(apiKey?: string): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t};\n\t\tif (apiKey) {\n\t\t\theaders.Authorization = `Bearer ${apiKey}`;\n\t\t}\n\t\treturn headers;\n\t}\n\n\tprotected async request<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<T> {\n\t\tconst response = await this.fetchResponse(method, path, body);\n\t\tif (response.status === 204) {\n\t\t\treturn undefined as T;\n\t\t}\n\t\treturn response.json() as Promise<T>;\n\t}\n\n\tprotected async requestText(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<string> {\n\t\tconst response = await this.fetchResponse(method, path, body);\n\t\treturn response.text();\n\t}\n\n\tprivate async fetchResponse(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<Response> {\n\t\tconst url = `${this.baseUrl}${path}`;\n\t\tconst headers = BaseClient.authHeaders(this.apiKey);\n\t\theaders[\"x-sl-origin\"] = this.origin;\n\n\t\t// Serialize the body BEFORE the network try so a body-encoding error\n\t\t// (e.g. unsupported BigInt) isn't misreported as \"Cannot reach API\".\n\t\t// BigInts are stringified — server schemas accept jsonb so the value\n\t\t// reaches the server intact, and any field that needs an actual bigint\n\t\t// at runtime is rehydrated by the consuming module (subgraph handler\n\t\t// code preserves the literal). See packages/subgraphs source-matcher\n\t\t// for the post-load shape.\n\t\tlet serializedBody: string | undefined;\n\t\tif (body !== undefined && body !== null) {\n\t\t\ttry {\n\t\t\t\tserializedBody = JSON.stringify(body, (_key, value) =>\n\t\t\t\t\ttypeof value === \"bigint\" ? value.toString() : value,\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\tconst detail = err instanceof Error ? err.message : String(err);\n\t\t\t\tthrow new ApiError(0, `Failed to serialize request body: ${detail}`);\n\t\t\t}\n\t\t}\n\n\t\tlet response: Response;\n\t\ttry {\n\t\t\tresponse = await fetch(url, {\n\t\t\t\tmethod,\n\t\t\t\theaders,\n\t\t\t\tbody: serializedBody,\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new ApiError(\n\t\t\t\t0,\n\t\t\t\t`Cannot reach API at ${this.baseUrl}. Check your connection or try again.`,\n\t\t\t);\n\t\t}\n\n\t\tif (!response.ok) {\n\t\t\tif (response.status === 401) {\n\t\t\t\tthrow new ApiError(401, \"API key invalid or expired.\");\n\t\t\t}\n\n\t\t\tif (response.status === 429) {\n\t\t\t\tconst retryAfter = response.headers.get(\"Retry-After\");\n\t\t\t\tconst msg = retryAfter\n\t\t\t\t\t? `Rate limited. Wait ${retryAfter} seconds.`\n\t\t\t\t\t: \"Rate limited. Try again later.\";\n\t\t\t\tthrow new ApiError(429, msg);\n\t\t\t}\n\n\t\t\tif (response.status >= 500) {\n\t\t\t\tthrow new ApiError(\n\t\t\t\t\tresponse.status,\n\t\t\t\t\t`Server error. Try again or check status at ${this.baseUrl}/health`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst errorBody = await response.text();\n\t\t\tlet message = `HTTP ${response.status}`;\n\t\t\tlet parsedBody: unknown = errorBody;\n\t\t\tlet code: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst json = JSON.parse(errorBody);\n\t\t\t\tparsedBody = json;\n\t\t\t\tconst err = json.error ?? json.message;\n\t\t\t\tif (typeof err === \"string\") {\n\t\t\t\t\tmessage = err;\n\t\t\t\t} else if (err && typeof err === \"object\") {\n\t\t\t\t\tmessage = JSON.stringify(err);\n\t\t\t\t}\n\t\t\t\tif (typeof json.code === \"string\") {\n\t\t\t\t\tcode = json.code;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tif (errorBody) message = errorBody;\n\t\t\t}\n\t\t\tthrow new ApiError(response.status, message, parsedBody, code);\n\t\t}\n\n\t\treturn response;\n\t}\n}\n",
8
8
  "export class AuthError extends Error {\n\treadonly status = 401;\n\n\tconstructor(message = \"API key invalid or expired.\") {\n\t\tsuper(message);\n\t\tthis.name = \"AuthError\";\n\t}\n}\n\nexport class RateLimitError extends Error {\n\treadonly status = 429;\n\n\tconstructor(\n\t\tmessage = \"Rate limited. Try again later.\",\n\t\treadonly retryAfter?: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RateLimitError\";\n\t}\n}\n\nexport class ValidationError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\treadonly status: number,\n\t\treadonly body?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ValidationError\";\n\t}\n}\n\nexport class StreamsServerError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\treadonly status: number,\n\t\treadonly body?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"StreamsServerError\";\n\t}\n}\n\n/** Thrown when response signature verification is enabled and fails. */\nexport class StreamsSignatureError extends Error {\n\tconstructor(message = \"Streams response signature verification failed.\") {\n\t\tsuper(message);\n\t\tthis.name = \"StreamsSignatureError\";\n\t}\n}\n",
9
9
  "import { ValidationError } from \"./errors.ts\";\n\n/**\n * Helpers for Streams cursors. A cursor is the opaque `<block>:<index>` string\n * that marks a position in the event stream; treat the format as an\n * implementation detail and go through these helpers instead of string-building\n * it at call sites.\n */\nexport const Cursor = {\n\t/**\n\t * Cursor at the foot of `height`. Resuming from it re-reads every event\n\t * strictly above block `height` (cursors are exclusive), so this is the\n\t * position to rewind to after a reorg whose fork point is `height`.\n\t */\n\tatHeight(height: number): string {\n\t\treturn `${height}:0`;\n\t},\n\n\t/** Parse a `<block>:<index>` cursor. Throws `ValidationError` if malformed. */\n\tparse(cursor: string): { blockHeight: number; eventIndex: number } {\n\t\tconst parts = cursor.split(\":\");\n\t\tconst blockHeight = Number(parts[0]);\n\t\tconst eventIndex = Number(parts[1]);\n\t\tif (\n\t\t\tparts.length !== 2 ||\n\t\t\t!Number.isInteger(blockHeight) ||\n\t\t\t!Number.isInteger(eventIndex)\n\t\t) {\n\t\t\tthrow new ValidationError(\n\t\t\t\t`Invalid stream cursor \"${cursor}\"; expected \"<block>:<index>\" (e.g. \"951475:3\").`,\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t\treturn { blockHeight, eventIndex };\n\t},\n};\n",
10
10
  "import { Cursor } from \"./cursor.ts\";\nimport type {\n\tStreamsEvent,\n\tStreamsEventType,\n\tStreamsEventsEnvelope,\n\tStreamsFilterValue,\n\tStreamsReorg,\n} from \"./types.ts\";\n\n/** Stable identity of a reorg, for in-memory dedup across re-reported pages. */\nfunction reorgKey(reorg: StreamsReorg): string {\n\treturn `${reorg.detected_at}|${reorg.fork_point_height}|${reorg.new_canonical_tip}`;\n}\n\ntype StreamsEventsFetchParams = {\n\tcursor?: string | null;\n\tlimit: number;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n};\n\nexport type StreamsEventsFetcher = (\n\tparams: StreamsEventsFetchParams,\n) => Promise<StreamsEventsEnvelope>;\n\nexport type Sleep = (ms: number, signal?: AbortSignal) => Promise<void>;\n\nexport async function defaultSleep(\n\tms: number,\n\tsignal?: AbortSignal,\n): Promise<void> {\n\tif (signal?.aborted) return;\n\n\tawait new Promise<void>((resolve) => {\n\t\tconst timeout = setTimeout(resolve, ms);\n\t\tif (!signal) return;\n\t\tsignal.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tresolve();\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t});\n}\n\nexport async function consumeStreamsEvents(opts: {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\tfinalizedOnly?: boolean;\n\tbatchSize: number;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\tfetchEvents: StreamsEventsFetcher;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t\tctx: { cursor: string | null },\n\t) =>\n\t\t| void\n\t\t| string\n\t\t| null\n\t\t| undefined\n\t\t| Promise<void>\n\t\t| Promise<string | null | undefined>;\n\tonReorg?: (\n\t\treorg: StreamsReorg,\n\t\tctx: { cursor: string },\n\t) => Promise<void> | void;\n\tsleep?: Sleep;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n}): Promise<{ cursor: string | null; pages: number; emptyPolls: number }> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tconst mode = opts.mode ?? \"tail\";\n\tconst finalizedOnly = opts.finalizedOnly ?? false;\n\tconst emptyBackoffMs = opts.emptyBackoffMs ?? 500;\n\tconst maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;\n\tconst maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;\n\tlet cursor = opts.fromCursor ?? null;\n\t// In-memory only: rollback is idempotent, so a crash before the rewind is\n\t// re-detected and re-applied harmlessly on restart — no need to persist.\n\tconst handledReorgs = new Set<string>();\n\tlet pages = 0;\n\tlet emptyPolls = 0;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\tconst envelope = await opts.fetchEvents({\n\t\t\tcursor,\n\t\t\tlimit: opts.batchSize,\n\t\t\ttypes: opts.types,\n\t\t\tnotTypes: opts.notTypes,\n\t\t\tcontractId: opts.contractId,\n\t\t\tsender: opts.sender,\n\t\t\trecipient: opts.recipient,\n\t\t\tassetIdentifier: opts.assetIdentifier,\n\t\t});\n\t\tpages++;\n\n\t\t// Reorgs: roll back each new fork, then rewind to the lowest fork point\n\t\t// and re-read the now-canonical run. Finalized data never reorgs, so\n\t\t// `finalizedOnly` skips this entirely.\n\t\tif (!finalizedOnly && opts.onReorg) {\n\t\t\tconst fresh = envelope.reorgs\n\t\t\t\t.filter((reorg) => !handledReorgs.has(reorgKey(reorg)))\n\t\t\t\t.sort((a, b) => a.fork_point_height - b.fork_point_height);\n\t\t\tif (fresh.length > 0) {\n\t\t\t\tconst forkPoint = Math.min(\n\t\t\t\t\t...fresh.map((reorg) => reorg.fork_point_height),\n\t\t\t\t);\n\t\t\t\tconst rewind = Cursor.atHeight(forkPoint);\n\t\t\t\tfor (const reorg of fresh) {\n\t\t\t\t\tawait opts.onReorg(reorg, { cursor: rewind });\n\t\t\t\t\thandledReorgs.add(reorgKey(reorg));\n\t\t\t\t}\n\t\t\t\tcursor = rewind;\n\t\t\t\temptyPolls = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tconst emitted = finalizedOnly\n\t\t\t? envelope.events.filter((event) => event.finalized)\n\t\t\t: envelope.events;\n\t\t// Only advance to the last finalized event in finalizedOnly mode; the\n\t\t// unfinalized tail is re-read next poll until it settles.\n\t\tconst checkpoint = finalizedOnly\n\t\t\t? (emitted.at(-1)?.cursor ?? cursor)\n\t\t\t: envelope.next_cursor;\n\n\t\tconst returnedCursor = await opts.onBatch(emitted, envelope, {\n\t\t\tcursor: checkpoint,\n\t\t});\n\t\tconst nextCursor = returnedCursor ?? checkpoint;\n\n\t\tif (nextCursor && nextCursor !== cursor) {\n\t\t\tcursor = nextCursor;\n\t\t\temptyPolls = 0;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (emitted.length === 0) {\n\t\t\temptyPolls++;\n\t\t\tif (mode === \"bounded\") {\n\t\t\t\treturn { cursor, pages, emptyPolls };\n\t\t\t}\n\t\t\tawait sleep(emptyBackoffMs, opts.signal);\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn { cursor, pages, emptyPolls };\n\t}\n\n\treturn { cursor, pages, emptyPolls };\n}\n\nexport async function* streamStreamsEvents(opts: {\n\tfromCursor?: string | null;\n\tbatchSize: number;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\tfetchEvents: StreamsEventsFetcher;\n\tsleep?: Sleep;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n}): AsyncGenerator<StreamsEvent> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tconst emptyBackoffMs = opts.emptyBackoffMs ?? 500;\n\tconst maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;\n\tconst maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;\n\tlet cursor = opts.fromCursor ?? null;\n\tlet pages = 0;\n\tlet emptyPolls = 0;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\tconst envelope = await opts.fetchEvents({\n\t\t\tcursor,\n\t\t\tlimit: opts.batchSize,\n\t\t\ttypes: opts.types,\n\t\t\tnotTypes: opts.notTypes,\n\t\t\tcontractId: opts.contractId,\n\t\t\tsender: opts.sender,\n\t\t\trecipient: opts.recipient,\n\t\t\tassetIdentifier: opts.assetIdentifier,\n\t\t});\n\t\tpages++;\n\n\t\tfor (const event of envelope.events) {\n\t\t\tif (opts.signal?.aborted) return;\n\t\t\tyield event;\n\t\t}\n\n\t\tconst nextCursor = envelope.next_cursor;\n\t\tif (nextCursor && nextCursor !== cursor) {\n\t\t\tcursor = nextCursor;\n\t\t\temptyPolls = 0;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (envelope.events.length === 0) {\n\t\t\temptyPolls++;\n\t\t\tif (emptyPolls >= maxEmptyPolls || pages >= maxPages) return;\n\t\t\tawait sleep(emptyBackoffMs, opts.signal);\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn;\n\t}\n}\n",
11
- "import { createHash } from \"node:crypto\";\nimport { verifyStreamsBulkManifestSignature } from \"@secondlayer/shared/streams-bulk-manifest\";\nimport { StreamsServerError, StreamsSignatureError } from \"./errors.ts\";\nimport type {\n\tFetchLike,\n\tStreamsDumpFile,\n\tStreamsDumps,\n\tStreamsDumpsManifest,\n} from \"./types.ts\";\n\n/**\n * Bulk parquet dumps: the cold backfill path for \"download all the raw data\".\n *\n * The manifest lives at `<dumpsBaseUrl>/manifest/latest.json` and each file's\n * `path` is the object key under the same base. Downloads are verified against\n * the manifest sha256 so a truncated or tampered file is rejected.\n *\n * When `verifyManifest` is set, the manifest's own ed25519 signature is checked\n * (against the published Streams key) BEFORE any file sha256 is trusted — a\n * sha256 is only as trustworthy as the manifest it came from. Default off until\n * historical manifests have been backfilled with signatures.\n */\nexport function createStreamsDumps(opts: {\n\tbaseUrl?: string;\n\tfetchImpl: FetchLike;\n\tverifyManifest?: boolean;\n\tloadPublicKeyPem?: () => Promise<string>;\n}): StreamsDumps {\n\tconst baseUrl = opts.baseUrl?.replace(/\\/+$/, \"\");\n\n\tfunction requireBaseUrl(): string {\n\t\tif (!baseUrl) {\n\t\t\tthrow new StreamsServerError(\n\t\t\t\t\"Streams dumps require `dumpsBaseUrl` on createStreamsClient.\",\n\t\t\t\t0,\n\t\t\t);\n\t\t}\n\t\treturn baseUrl;\n\t}\n\n\tfunction fileUrl(file: StreamsDumpFile): string {\n\t\treturn `${requireBaseUrl()}/${file.path.replace(/^\\/+/, \"\")}`;\n\t}\n\n\tasync function list(): Promise<StreamsDumpsManifest> {\n\t\tconst url = `${requireBaseUrl()}/manifest/latest.json`;\n\t\tconst res = await opts.fetchImpl(url);\n\t\tif (!res.ok) {\n\t\t\tthrow new StreamsServerError(\n\t\t\t\t`Could not fetch dumps manifest (${res.status}).`,\n\t\t\t\tres.status,\n\t\t\t);\n\t\t}\n\t\tconst manifest = (await res.json()) as StreamsDumpsManifest;\n\t\tif (opts.verifyManifest) {\n\t\t\tif (!opts.loadPublicKeyPem) {\n\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\"Manifest verification is on but no signing key source is configured.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst publicKeyPem = await opts.loadPublicKeyPem();\n\t\t\tif (!verifyStreamsBulkManifestSignature(manifest, publicKeyPem)) {\n\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\"Dumps manifest signature is missing or invalid.\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn manifest;\n\t}\n\n\tasync function download(file: StreamsDumpFile): Promise<Uint8Array> {\n\t\tconst res = await opts.fetchImpl(fileUrl(file));\n\t\tif (!res.ok) {\n\t\t\tthrow new StreamsServerError(\n\t\t\t\t`Could not download dump ${file.path} (${res.status}).`,\n\t\t\t\tres.status,\n\t\t\t);\n\t\t}\n\t\tconst bytes = new Uint8Array(await res.arrayBuffer());\n\t\tconst digest = createHash(\"sha256\").update(bytes).digest(\"hex\");\n\t\tif (digest !== file.sha256) {\n\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t`Dump ${file.path} sha256 mismatch (expected ${file.sha256}, got ${digest}).`,\n\t\t\t);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\treturn { list, fileUrl, download };\n}\n",
11
+ "import { createHash } from \"node:crypto\";\nimport { verifyStreamsBulkManifestSignature } from \"@secondlayer/shared/streams-bulk-manifest\";\nimport { StreamsServerError, StreamsSignatureError } from \"./errors.ts\";\nimport type {\n\tFetchLike,\n\tStreamsDumpFile,\n\tStreamsDumps,\n\tStreamsDumpsManifest,\n} from \"./types.ts\";\n\n/**\n * Bulk parquet dumps: the cold backfill path for \"download all the raw data\".\n *\n * The manifest lives at `<dumpsBaseUrl>/manifest/latest.json` and each file's\n * `path` is the object key under the same base. Downloads are verified against\n * the manifest sha256 so a truncated or tampered file is rejected.\n *\n * When `verifyManifest` is set (the default), the manifest's own ed25519\n * signature is checked (against the published Streams key) BEFORE any file sha256\n * is trusted — a sha256 is only as trustworthy as the manifest it came from.\n */\nexport function createStreamsDumps(opts: {\n\tbaseUrl?: string;\n\tfetchImpl: FetchLike;\n\tverifyManifest?: boolean;\n\tloadPublicKeyPem?: () => Promise<string>;\n}): StreamsDumps {\n\tconst baseUrl = opts.baseUrl?.replace(/\\/+$/, \"\");\n\n\tfunction requireBaseUrl(): string {\n\t\tif (!baseUrl) {\n\t\t\tthrow new StreamsServerError(\n\t\t\t\t\"Streams dumps require `dumpsBaseUrl` on createStreamsClient.\",\n\t\t\t\t0,\n\t\t\t);\n\t\t}\n\t\treturn baseUrl;\n\t}\n\n\tfunction fileUrl(file: StreamsDumpFile): string {\n\t\treturn `${requireBaseUrl()}/${file.path.replace(/^\\/+/, \"\")}`;\n\t}\n\n\tasync function list(): Promise<StreamsDumpsManifest> {\n\t\tconst url = `${requireBaseUrl()}/manifest/latest.json`;\n\t\tconst res = await opts.fetchImpl(url);\n\t\tif (!res.ok) {\n\t\t\tthrow new StreamsServerError(\n\t\t\t\t`Could not fetch dumps manifest (${res.status}).`,\n\t\t\t\tres.status,\n\t\t\t);\n\t\t}\n\t\tconst manifest = (await res.json()) as StreamsDumpsManifest;\n\t\tif (opts.verifyManifest) {\n\t\t\tif (!opts.loadPublicKeyPem) {\n\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\"Manifest verification is on but no signing key source is configured.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst publicKeyPem = await opts.loadPublicKeyPem();\n\t\t\tif (!verifyStreamsBulkManifestSignature(manifest, publicKeyPem)) {\n\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\"Dumps manifest signature is missing or invalid.\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn manifest;\n\t}\n\n\tasync function download(file: StreamsDumpFile): Promise<Uint8Array> {\n\t\tconst res = await opts.fetchImpl(fileUrl(file));\n\t\tif (!res.ok) {\n\t\t\tthrow new StreamsServerError(\n\t\t\t\t`Could not download dump ${file.path} (${res.status}).`,\n\t\t\t\tres.status,\n\t\t\t);\n\t\t}\n\t\tconst bytes = new Uint8Array(await res.arrayBuffer());\n\t\tconst digest = createHash(\"sha256\").update(bytes).digest(\"hex\");\n\t\tif (digest !== file.sha256) {\n\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t`Dump ${file.path} sha256 mismatch (expected ${file.sha256}, got ${digest}).`,\n\t\t\t);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\treturn { list, fileUrl, download };\n}\n",
12
12
  "import { ed25519 } from \"@secondlayer/shared\";\nimport { buildQuery } from \"../base.ts\";\nimport { StreamsServerError, StreamsSignatureError } from \"./errors.ts\";\nimport type {\n\tFetchLike,\n\tStreamsEvent,\n\tStreamsEventsSubscribeParams,\n} from \"./types.ts\";\n\ntype VerificationKey = {\n\tpublicKey: ReturnType<typeof ed25519.loadEd25519PublicKey>;\n};\n\n/**\n * Subscribe to the Streams SSE push surface (`GET /v1/streams/events/stream`).\n *\n * A fetch-based reader (not `EventSource`) so it can send the mandatory\n * `Authorization` header — Streams is key-mandatory and `EventSource` can't set\n * headers. Works in browsers and Node 18+. Reconnects from the last delivered\n * cursor on a dropped connection until the caller's signal aborts.\n */\nexport function subscribeStreamsEvents(opts: {\n\tbaseUrl: string;\n\tapiKey: string;\n\tfetchImpl: FetchLike;\n\tverify: boolean;\n\tloadKey: () => Promise<VerificationKey>;\n\treconnectDelayMs?: number;\n\tparams: StreamsEventsSubscribeParams;\n}): () => void {\n\tconst { params } = opts;\n\tconst controller = new AbortController();\n\tconst external = params.signal;\n\tif (external) {\n\t\tif (external.aborted) controller.abort();\n\t\telse\n\t\t\texternal.addEventListener(\"abort\", () => controller.abort(), {\n\t\t\t\tonce: true,\n\t\t\t});\n\t}\n\tlet cursor = params.fromCursor ?? null;\n\tconst reconnectDelayMs = opts.reconnectDelayMs ?? 1000;\n\n\tconst run = async (): Promise<void> => {\n\t\twhile (!controller.signal.aborted) {\n\t\t\ttry {\n\t\t\t\tconst url = `${opts.baseUrl}/v1/streams/events/stream${buildQuery({\n\t\t\t\t\tfrom_cursor: cursor ?? undefined,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tnot_types: params.notTypes,\n\t\t\t\t\tcontract_id: params.contractId,\n\t\t\t\t\tsender: params.sender,\n\t\t\t\t\trecipient: params.recipient,\n\t\t\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\t\t})}`;\n\t\t\t\tconst res = await opts.fetchImpl(url, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAuthorization: `Bearer ${opts.apiKey}`,\n\t\t\t\t\t\tAccept: \"text/event-stream\",\n\t\t\t\t\t},\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t});\n\t\t\t\tif (!res.ok) {\n\t\t\t\t\tthrow new StreamsServerError(\n\t\t\t\t\t\t`Streams SSE returned ${res.status}.`,\n\t\t\t\t\t\tres.status,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (!res.body) {\n\t\t\t\t\tthrow new StreamsServerError(\"Streams SSE response has no body.\", 0);\n\t\t\t\t}\n\t\t\t\tfor await (const frame of parseSseFrames(res.body, controller.signal)) {\n\t\t\t\t\tif (frame.event === \"ping\" || !frame.data) continue;\n\t\t\t\t\tlet parsed: { event?: StreamsEvent; sig?: string };\n\t\t\t\t\ttry {\n\t\t\t\t\t\tparsed = JSON.parse(frame.data);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tcontinue; // ignore non-JSON frames\n\t\t\t\t\t}\n\t\t\t\t\tif (!parsed.event) continue;\n\t\t\t\t\tif (opts.verify) {\n\t\t\t\t\t\tconst key = await opts.loadKey();\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!parsed.sig ||\n\t\t\t\t\t\t\t!ed25519.verifyEd25519(\n\t\t\t\t\t\t\t\tJSON.stringify(parsed.event),\n\t\t\t\t\t\t\t\tparsed.sig,\n\t\t\t\t\t\t\t\tkey.publicKey,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\t\t\t\"Streams SSE frame signature is missing or invalid.\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcursor = (parsed.event as { cursor?: string }).cursor ?? cursor;\n\t\t\t\t\tawait params.onEvent(parsed.event);\n\t\t\t\t}\n\t\t\t\t// Clean end (server closed the stream): reconnect from `cursor`.\n\t\t\t} catch (err) {\n\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\tparams.onError?.(err);\n\t\t\t\tawait sleep(reconnectDelayMs, controller.signal);\n\t\t\t}\n\t\t}\n\t};\n\tvoid run();\n\treturn () => controller.abort();\n}\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n\treturn new Promise((resolve) => {\n\t\tif (signal.aborted) return resolve();\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tresolve();\n\t\t};\n\t\tconst timer = setTimeout(() => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nasync function* parseSseFrames(\n\tbody: ReadableStream<Uint8Array>,\n\tsignal: AbortSignal,\n): AsyncGenerator<{ event?: string; data?: string }> {\n\tconst reader = body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\ttry {\n\t\twhile (!signal.aborted) {\n\t\t\tconst { value, done } = await reader.read();\n\t\t\tif (done) break;\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tlet sep = buffer.indexOf(\"\\n\\n\");\n\t\t\twhile (sep !== -1) {\n\t\t\t\tyield parseFrame(buffer.slice(0, sep));\n\t\t\t\tbuffer = buffer.slice(sep + 2);\n\t\t\t\tsep = buffer.indexOf(\"\\n\\n\");\n\t\t\t}\n\t\t}\n\t} finally {\n\t\ttry {\n\t\t\tawait reader.cancel();\n\t\t} catch {\n\t\t\t// best-effort\n\t\t}\n\t}\n}\n\nfunction parseFrame(raw: string): { event?: string; data?: string } {\n\tlet event: string | undefined;\n\tconst data: string[] = [];\n\tfor (const line of raw.split(\"\\n\")) {\n\t\tif (line.startsWith(\"data:\")) {\n\t\t\tdata.push(line.slice(line.startsWith(\"data: \") ? 6 : 5));\n\t\t} else if (line.startsWith(\"event:\")) {\n\t\t\tevent = line.slice(line.startsWith(\"event: \") ? 7 : 6).trim();\n\t\t}\n\t}\n\treturn { event, data: data.length > 0 ? data.join(\"\\n\") : undefined };\n}\n",
13
13
  "import type { StreamsEvent } from \"./types.ts\";\n\n/** Superset of the columns the decoded_events table holds. Every decoded\n * event's `decoded_payload` is assignable to this, so the indexer's writer\n * can map columns generically instead of per-event-type. */\nexport type DecodedEventColumns = {\n\tcontract_id?: string | null;\n\tasset_identifier?: string | null;\n\tsender?: string | null;\n\trecipient?: string | null;\n\tamount?: string | null;\n\tvalue?: string | null;\n\tmemo?: string | null;\n\t/** JSONB overflow for non-flat types (e.g. print's decoded value). */\n\tpayload?: unknown;\n};\n\nexport function requireString(\n\tpayload: Record<string, unknown>,\n\tfield: string,\n\teventType: string,\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${eventType} payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nexport function optionalString(value: unknown): string | null {\n\treturn typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nexport function requireAmountField(\n\tpayload: Record<string, unknown>,\n\tfield: string,\n\teventType: string,\n): string {\n\tconst amount = requireString(payload, field, eventType);\n\tif (!/^(0|[1-9]\\d*)$/.test(amount)) {\n\t\tthrow new Error(`${eventType} payload has malformed ${field}`);\n\t}\n\treturn amount;\n}\n\nexport function requireAmount(\n\tpayload: Record<string, unknown>,\n\teventType: string,\n): string {\n\treturn requireAmountField(payload, \"amount\", eventType);\n}\n\nexport function parseAssetIdentifier(\n\tassetIdentifier: string,\n\teventType: string,\n): { contract_id: string; token_name: string | null } {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(`${eventType} 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\n/** NFT token id: live streams emits a typed Clarity value at `value` and the\n * canonical hex at `raw_value`; prefer raw_value when present. */\nexport function requireHexValue(\n\tpayload: Record<string, unknown>,\n\teventType: string,\n): string {\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(`${eventType} 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(`${eventType} payload missing value`);\n\t}\n\tif (!/^0x[0-9a-fA-F]*$/.test(hex)) {\n\t\tthrow new Error(`${eventType} payload has malformed value`);\n\t}\n\treturn hex;\n}\n\n/** Common envelope fields shared by every decoded event, lifted off the\n * source StreamsEvent. The decoder supplies event_type + decoded_payload. */\nexport function decodedRow<T extends string, P>(\n\tevent: StreamsEvent,\n\teventType: T,\n\tdecoded_payload: P,\n): {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: T;\n\tdecoded_payload: P;\n\tsource_cursor: string;\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: eventType,\n\t\tdecoded_payload,\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
14
14
  "import {\n\tdecodedRow,\n\tparseAssetIdentifier,\n\trequireAmount,\n\trequireString,\n} from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\nexport type { FtTransferPayload } from \"./types.ts\";\n\nexport type FtTransferEvent = Extract<\n\tStreamsEvent,\n\t{ event_type: \"ft_transfer\" }\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\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(\n\t\tpayload,\n\t\t\"asset_identifier\",\n\t\t\"ft_transfer\",\n\t);\n\tconst sender = requireString(payload, \"sender\", \"ft_transfer\");\n\tconst recipient = requireString(payload, \"recipient\", \"ft_transfer\");\n\tconst amount = requireAmount(payload, \"ft_transfer\");\n\tconst { contract_id, token_name } = parseAssetIdentifier(\n\t\tassetIdentifier,\n\t\t\"ft_transfer\",\n\t);\n\n\treturn decodedRow(event, \"ft_transfer\", {\n\t\tasset_identifier: assetIdentifier,\n\t\tcontract_id: event.contract_id ?? contract_id,\n\t\ttoken_name,\n\t\tsender,\n\t\trecipient,\n\t\tamount,\n\t});\n}\n",
@@ -19,7 +19,7 @@
19
19
  "import { decodeClarityValue, toJsonSafe } from \"../clarity.ts\";\nimport { decodedRow, optionalString } from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\n/** Decoded form of a Clarity `print` event:\n * - `topic`: the print topic, when the contract emits a `{ topic, ... }` tuple\n * - `value`: the Clarity value decoded to JSON (uints as strings, buffers as\n * `0x…` hex, tuples as objects)\n * - `raw_value`: the canonical serialized hex, for byte-exact consumers */\nexport type DecodedPrintValue = {\n\ttopic: string | null;\n\tvalue: unknown;\n\traw_value: string | null;\n};\n\nexport type DecodedPrintPayload = {\n\tcontract_id: string | null;\n\tpayload: DecodedPrintValue;\n};\n\nexport type DecodedPrint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"print\";\n\tdecoded_payload: DecodedPrintPayload;\n\tsource_cursor: string;\n};\n\nfunction printValueHex(payload: Record<string, unknown>): string | null {\n\tif (typeof payload.raw_value === \"string\") return payload.raw_value;\n\tconst value = payload.value;\n\tif (typeof value === \"string\" && value.startsWith(\"0x\")) return value;\n\tif (\n\t\tvalue &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t) {\n\t\treturn (value as { hex: string }).hex;\n\t}\n\treturn null;\n}\n\nexport function isPrint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"print\" } {\n\treturn event.event_type === \"print\";\n}\n\nexport function decodePrint(event: StreamsEvent): DecodedPrint {\n\tif (!isPrint(event)) {\n\t\tthrow new Error(`Expected print event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\tconst topic = optionalString(payload.topic);\n\tconst rawValue = printValueHex(payload);\n\n\tconst value = rawValue\n\t\t? decodeClarityValue(rawValue)\n\t\t: toJsonSafe(payload.value ?? null);\n\n\treturn decodedRow(event, \"print\", {\n\t\tcontract_id: event.contract_id ?? optionalString(payload.contract_id),\n\t\tpayload: { topic, value, raw_value: rawValue },\n\t});\n}\n",
20
20
  "// Canonical decoded event-type vocab lives in @secondlayer/shared; re-exported\n// here so the public Streams surface (StreamsEventType) is unchanged.\nimport {\n\tSTREAMS_EVENT_TYPES,\n\ttype StreamsEventType,\n} from \"@secondlayer/shared\";\n\nexport { STREAMS_EVENT_TYPES, type StreamsEventType };\n\n/** A Clarity value as Streams serves it: the canonical hex string, a typed\n * object carrying that hex (`{ hex }`), or a decoded Clarity-JSON object.\n * Decode helpers (`decodeNftTransfer`, etc.) resolve it to a concrete value. */\nexport type StreamsClarityValue =\n\t| string\n\t| { hex: string }\n\t| Record<string, unknown>;\n\nexport type StxTransferPayload = {\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n\tmemo?: string;\n};\nexport type StxMintPayload = { recipient: string; amount: string };\nexport type StxBurnPayload = { sender: string; amount: string };\nexport type StxLockPayload = {\n\tlocked_address: string;\n\tlocked_amount: string;\n\tunlock_height: string;\n};\nexport type FtTransferPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\nexport type FtMintPayload = {\n\tasset_identifier: string;\n\trecipient: string;\n\tamount: string;\n};\nexport type FtBurnPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\tamount: string;\n};\nexport type NftTransferPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tvalue: StreamsClarityValue;\n\t/** Canonical serialized hex of `value`, when the stream carries it. */\n\traw_value?: string;\n};\nexport type NftMintPayload = {\n\tasset_identifier: string;\n\trecipient: string;\n\tvalue: StreamsClarityValue;\n\traw_value?: string;\n};\nexport type NftBurnPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\tvalue: StreamsClarityValue;\n\traw_value?: string;\n};\nexport type PrintPayload = {\n\tcontract_id?: string | null;\n\ttopic?: string;\n\tvalue?: unknown;\n\traw_value?: string;\n};\n\n/** Union of every Streams payload shape, discriminated by `event_type` on the\n * parent `StreamsEvent`. */\nexport type StreamsEventPayload =\n\t| StxTransferPayload\n\t| StxMintPayload\n\t| StxBurnPayload\n\t| StxLockPayload\n\t| FtTransferPayload\n\t| FtMintPayload\n\t| FtBurnPayload\n\t| NftTransferPayload\n\t| NftMintPayload\n\t| NftBurnPayload\n\t| PrintPayload;\n\nexport type StreamsEventBase = {\n\t/**\n\t * Globally unique, monotonic position of this event (`<block>:<index>`). Use\n\t * it as the primary key of your projection rows — replaying a batch then\n\t * upserts cleanly. Don't synthesize your own id from `tx_id`/`event_index`.\n\t */\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\tcontract_id: string | null;\n\tts: string;\n\t/**\n\t * True when this event's block is past the finality boundary (immutable).\n\t * Optional for back-compat; the API always sets it on Streams responses.\n\t */\n\tfinalized?: boolean;\n};\n\ntype StreamsEventOf<T extends StreamsEventType, P> = StreamsEventBase & {\n\tevent_type: T;\n\tpayload: P;\n};\n\n/** A raw Streams event. Discriminated on `event_type`, so `event.payload`\n * narrows to the matching payload shape once the type is checked. */\nexport type StreamsEvent =\n\t| StreamsEventOf<\"stx_transfer\", StxTransferPayload>\n\t| StreamsEventOf<\"stx_mint\", StxMintPayload>\n\t| StreamsEventOf<\"stx_burn\", StxBurnPayload>\n\t| StreamsEventOf<\"stx_lock\", StxLockPayload>\n\t| StreamsEventOf<\"ft_transfer\", FtTransferPayload>\n\t| StreamsEventOf<\"ft_mint\", FtMintPayload>\n\t| StreamsEventOf<\"ft_burn\", FtBurnPayload>\n\t| StreamsEventOf<\"nft_transfer\", NftTransferPayload>\n\t| StreamsEventOf<\"nft_mint\", NftMintPayload>\n\t| StreamsEventOf<\"nft_burn\", NftBurnPayload>\n\t| StreamsEventOf<\"print\", PrintPayload>;\n\nexport type StreamsTip = {\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\t/**\n\t * Highest Stacks block past the burn-confirmation finality boundary.\n\t * Optional for back-compat; the API always sets it.\n\t */\n\tfinalized_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\n/** A filter that matches a single value or any value in a list. */\nexport type StreamsFilterValue = string | readonly string[];\n\nexport type StreamsEventsListParams = {\n\tcursor?: string | null;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\ttypes?: readonly StreamsEventType[];\n\t/** Event types to exclude (applied after `types`). */\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\tlimit?: number;\n};\n\nexport type StreamsEventsStreamParams = {\n\tfromCursor?: string | null;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\tbatchSize?: number;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsSubscribeParams = {\n\t/** Resume strictly after this cursor; omit to live-tail from the tip. */\n\tfromCursor?: string | null;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\t/** Abort to unsubscribe (the returned function does the same). */\n\tsignal?: AbortSignal;\n\t/** Called for each pushed event, in order. */\n\tonEvent: (event: StreamsEvent) => void | Promise<void>;\n\t/** Called on a connection error; the subscription auto-reconnects from the\n\t * last delivered cursor unless the signal has aborted. */\n\tonError?: (err: unknown) => void;\n};\n\n/**\n * The checkpoint the SDK computes for a batch. Persist `cursor` inside the same\n * transaction as your projection writes, then resume from it via `fromCursor`.\n * It is the position to advance to: `next_cursor` normally, or the last\n * finalized event when `finalizedOnly` is set.\n */\nexport type StreamsBatchContext = { cursor: string | null };\n\n/**\n * The checkpoint for a reorg rollback. Persist `cursor` (the rewind position)\n * inside the same transaction as your rollback so the two commit atomically.\n */\nexport type StreamsReorgContext = { cursor: string };\n\nexport type StreamsEventsConsumeParams = {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\t/**\n\t * Emit only finalized (immutable) events and never surface reorgs. The SDK\n\t * checkpoints at the last finalized event and re-reads the unfinalized tail\n\t * until it settles. Trades finality lag for zero reorg handling; `onReorg` is\n\t * ignored.\n\t */\n\tfinalizedOnly?: boolean;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\tbatchSize?: number;\n\t/**\n\t * Apply a page of canonical events. Persist `ctx.cursor` in the same\n\t * transaction as your writes. Returning a cursor overrides `ctx.cursor` as\n\t * the resume point (advanced manual control); returning nothing uses it.\n\t */\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t\tctx: StreamsBatchContext,\n\t) =>\n\t\t| void\n\t\t| string\n\t\t| null\n\t\t| undefined\n\t\t| Promise<void>\n\t\t| Promise<string | null | undefined>;\n\t/**\n\t * Roll your projection back to `reorg.fork_point_height`, persisting\n\t * `ctx.cursor` in the same transaction. Called once per *new* reorg\n\t * (deduped in-memory, fork-ascending) before the SDK rewinds and re-reads the\n\t * now-canonical events. Omit it to ignore reorgs (events stay canonical, but\n\t * stale rows from an orphaned fork are left in place).\n\t */\n\tonReorg?: (\n\t\treorg: StreamsReorg,\n\t\tctx: StreamsReorgContext,\n\t) => Promise<void> | void;\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 StreamsEventsReplayParams = {\n\t/** Start point: `\"genesis\"` (default) or a `<block>:<index>` cursor. */\n\tfrom?: \"genesis\" | string;\n\t/**\n\t * Called once per finalized dump file, in block order, before live tailing.\n\t * Process the parquet with your own tooling (e.g. DuckDB) — the SDK does not\n\t * decode parquet. Use `client.dumps.download(file)` to fetch + verify bytes.\n\t */\n\tonDumpFile: (file: StreamsDumpFile) => Promise<void> | void;\n\t/** Called per live page after the dump phase, like `consume`. */\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t) => Promise<string | null | undefined> | string | null | undefined;\n\tmode?: \"tail\" | \"bounded\";\n\tbatchSize?: number;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\n/** One bulk parquet file in the dumps manifest. `path` is the object key under\n * the dumps base URL. */\nexport type StreamsDumpFile = {\n\tpath: string;\n\tfrom_block: number;\n\tto_block: number;\n\tmin_cursor: string | null;\n\tmax_cursor: string | null;\n\trow_count: number;\n\tbyte_size: number;\n\tsha256: string;\n\tschema_version: number;\n\tcreated_at: string;\n};\n\nexport type StreamsDumpsManifest = {\n\tdataset: string;\n\tnetwork: string;\n\tversion: string;\n\tschema_version: number;\n\tgenerated_at: string;\n\tproducer_version: string;\n\tfinality_lag_blocks: number;\n\t/** Cursor at the end of the finalized bulk coverage — hand to live tailing. */\n\tlatest_finalized_cursor: string | null;\n\tcoverage: { from_block: number; to_block: number };\n\tfiles: StreamsDumpFile[];\n\t/** ed25519 signature over the manifest's canonical bytes. Absent on legacy\n\t * unsigned manifests. Verified by `list()` when `verifyDumpsManifest` is on. */\n\tsignature?: string;\n\t/** Short id of the signing public key. */\n\tkey_id?: string;\n};\n\nexport type StreamsDumps = {\n\t/** Fetch and parse the latest dumps manifest. */\n\tlist(): Promise<StreamsDumpsManifest>;\n\t/** Absolute URL for a manifest file. */\n\tfileUrl(file: StreamsDumpFile): string;\n\t/** Download a parquet file and verify its sha256 against the manifest. */\n\tdownload(file: StreamsDumpFile): Promise<Uint8Array>;\n};\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 * Backfill from bulk dumps, then continue live from the dump→live seam in\n\t\t * one call. Iterates finalized dump files (via `onDumpFile`) in block\n\t\t * order, then tails live from the manifest's `latest_finalized_cursor`\n\t\t * (exclusive input → no gap or duplicate at the seam). Requires\n\t\t * `dumpsBaseUrl`.\n\t\t */\n\t\treplay(\n\t\t\tparams: StreamsEventsReplayParams,\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\t/**\n\t\t * Subscribe to the real-time SSE push surface. Calls `onEvent` for each new\n\t\t * canonical event as the server pushes it (chain cadence, not poll-bounded),\n\t\t * and verifies each frame's inline ed25519 signature when the client was\n\t\t * created with `verify`. Returns an unsubscribe function.\n\t\t */\n\t\tsubscribe(params: StreamsEventsSubscribeParams): () => void;\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\t/** Bulk parquet dumps. Requires `dumpsBaseUrl` on the client. */\n\tdumps: StreamsDumps;\n\tcanonical(height: number): Promise<StreamsCanonicalBlock>;\n\ttip(): Promise<StreamsTip>;\n\t/** Your own Streams consumption (events today + this month) and tier limits. */\n\tusage(): Promise<StreamsUsage>;\n};\n\nexport type StreamsUsage = {\n\tproduct: \"streams\";\n\ttier: string;\n\tlimits: {\n\t\trate_limit_per_second: number | null;\n\t\tretention_days: number | null;\n\t};\n\tusage: { events_today: number; events_this_month: number };\n};\n"
21
21
  ],
22
- "mappings": "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",
23
- "debugId": "202DB745ED61199F64756E2164756E21",
22
+ "mappings": "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",
23
+ "debugId": "12EEA92B91F2B3F064756E2164756E21",
24
24
  "names": []
25
25
  }
@@ -332,6 +332,27 @@ type IndexTip = {
332
332
  block_height: number
333
333
  lag_seconds: number
334
334
  };
335
+ /**
336
+ * A chain reorg overlapping a returned page's height range. Height-keyed feeds
337
+ * (`/transactions`, `/contract-calls`, `/stacking`) populate this so a consumer
338
+ * can reconcile: roll back the rows whose `block_height:tx_index` cursor falls in
339
+ * `orphaned_range`, then re-fetch from `new_canonical_tip`. Empty when the page
340
+ * spans no reorg.
341
+ */
342
+ type IndexReorg = {
343
+ id: string
344
+ detected_at: string
345
+ fork_point_height: number
346
+ old_index_block_hash: string | null
347
+ new_index_block_hash: string | null
348
+ /** Orphaned cursor span `<block_height>:<tx_index>`, inclusive. */
349
+ orphaned_range: {
350
+ from: string
351
+ to: string
352
+ }
353
+ /** New canonical tip cursor to resume from. */
354
+ new_canonical_tip: string
355
+ };
335
356
  type IndexUsage = {
336
357
  product: "index"
337
358
  tier: string
@@ -360,7 +381,7 @@ type FtTransfersEnvelope = {
360
381
  events: FtTransfer[]
361
382
  next_cursor: string | null
362
383
  tip: IndexTip
363
- reorgs: never[]
384
+ reorgs: IndexReorg[]
364
385
  };
365
386
  type FtTransfersListParams = {
366
387
  cursor?: string | null
@@ -393,7 +414,7 @@ type NftTransfersEnvelope = {
393
414
  events: NftTransfer[]
394
415
  next_cursor: string | null
395
416
  tip: IndexTip
396
- reorgs: never[]
417
+ reorgs: IndexReorg[]
397
418
  };
398
419
  type NftTransfersListParams = {
399
420
  cursor?: string | null
@@ -497,7 +518,7 @@ type EventsEnvelope = {
497
518
  events: IndexEvent[]
498
519
  next_cursor: string | null
499
520
  tip: IndexTip
500
- reorgs: never[]
521
+ reorgs: IndexReorg[]
501
522
  };
502
523
  type EventsListParams = {
503
524
  /** Required. One of the decoded event types. */
@@ -534,7 +555,7 @@ type ContractCallsEnvelope = {
534
555
  contract_calls: IndexContractCall[]
535
556
  next_cursor: string | null
536
557
  tip: IndexTip
537
- reorgs: never[]
558
+ reorgs: IndexReorg[]
538
559
  };
539
560
  type ContractCallsListParams = {
540
561
  cursor?: string | null
@@ -677,7 +698,7 @@ type TransactionsEnvelope = {
677
698
  transactions: IndexTransaction[]
678
699
  next_cursor: string | null
679
700
  tip: IndexTip
680
- reorgs: never[]
701
+ reorgs: IndexReorg[]
681
702
  };
682
703
  type TransactionEnvelope = {
683
704
  transaction: IndexTransaction
@@ -726,7 +747,7 @@ type StackingEnvelope = {
726
747
  stacking: IndexStackingAction[]
727
748
  next_cursor: string | null
728
749
  tip: IndexTip
729
- reorgs: never[]
750
+ reorgs: IndexReorg[]
730
751
  /** Present only when the PoX-4 decoder is disabled, explaining an empty feed. */
731
752
  notes?: string
732
753
  };
@@ -1342,7 +1342,7 @@ function createStreamsClient(options) {
1342
1342
  const dumps = createStreamsDumps({
1343
1343
  baseUrl: options.dumpsBaseUrl,
1344
1344
  fetchImpl,
1345
- verifyManifest: options.verifyDumpsManifest ?? false,
1345
+ verifyManifest: options.verifyDumpsManifest ?? true,
1346
1346
  loadPublicKeyPem: async () => (await loadKey()).publicKeyPem
1347
1347
  });
1348
1348
  async function request(path) {
@@ -1638,5 +1638,5 @@ export {
1638
1638
  Subgraphs
1639
1639
  };
1640
1640
 
1641
- //# debugId=B6D6E26DCF0C5E6064756E2164756E21
1641
+ //# debugId=295A46486AE7961864756E2164756E21
1642
1642
  //# sourceMappingURL=index.js.map