@secondlayer/sdk 6.40.0 → 6.40.1
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/streams/index.js
CHANGED
|
@@ -399,7 +399,8 @@ async function consumeStreamsEvents(opts) {
|
|
|
399
399
|
const emptyBackoffMs = opts.emptyBackoffMs ?? 500;
|
|
400
400
|
const maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;
|
|
401
401
|
const maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;
|
|
402
|
-
|
|
402
|
+
const committedCursor = await opts.sink?.loadCursor() ?? null;
|
|
403
|
+
let cursor = opts.fromCursor ?? committedCursor;
|
|
403
404
|
const handledReorgs = new Set;
|
|
404
405
|
let pages = 0;
|
|
405
406
|
let emptyPolls = 0;
|
|
@@ -1483,5 +1484,5 @@ export {
|
|
|
1483
1484
|
AuthError
|
|
1484
1485
|
};
|
|
1485
1486
|
|
|
1486
|
-
//# debugId=
|
|
1487
|
+
//# debugId=93D7CDA8BB38740964756E2164756E21
|
|
1487
1488
|
//# sourceMappingURL=index.js.map
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"import {\n\tApiError,\n\tAuthError,\n\ttype ByoBreakingChangeDetails,\n\tByoBreakingChangeError,\n\tRateLimitError,\n\tisByoBreakingDetails,\n} 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/** Public base URL for Streams bulk parquet dumps (the cold backfill plane).\n\t * Required for `streams.dumps.*`; without it the dumps client falls back to\n\t * its built-in default. */\n\tdumpsBaseUrl?: string;\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/** Resolve the credential a client should use. An explicit `apiKey` option\n * always wins — including an explicit `\"\"`, which is how you opt a client\n * back into keyless reads on a machine that has a key exported. Otherwise\n * fall back to `SL_API_KEY`, the single credential var shared with the CLI\n * and MCP server, so `new Index()` picks up an already-exported key instead\n * of silently running keyless and 402-ing on the first deep-history read.\n * Guarded for browsers and edge runtimes, where `process` is undefined. */\nexport function resolveApiKey(apiKey?: string): string | undefined {\n\tif (apiKey !== undefined) return apiKey;\n\tif (typeof process === \"undefined\") return undefined;\n\treturn process.env?.SL_API_KEY || undefined;\n}\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 | boolean | 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\tprotected fetchImpl: FetchLike;\n\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tthis.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n\t\tthis.apiKey = resolveApiKey(options.apiKey);\n\t\tthis.origin = options.origin ?? \"cli\";\n\t\t// Bind the global so a bare `fetch` reference doesn't lose its Request\n\t\t// context on runtimes where fetch is a method (workerd, older Node).\n\t\tthis.fetchImpl = options.fetchImpl ?? ((...args) => fetch(...args));\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\t/** Like `request`, but maps a 404 to `null` instead of throwing — the one\n\t * place that owns the \"absent resource\" rule for `get*` accessors. */\n\tprotected async requestOrNull<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<T | null> {\n\t\ttry {\n\t\t\treturn await this.request<T>(method, path, body);\n\t\t} catch (err) {\n\t\t\tif (err instanceof ApiError && err.status === 404) return null;\n\t\t\tthrow err;\n\t\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\t// Not retryable: the same body will fail to serialize again.\n\t\t\t\tthrow new ApiError(\n\t\t\t\t\t0,\n\t\t\t\t\t`Failed to serialize request body: ${detail}`,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\t{ retryable: false },\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tlet response: Response;\n\t\ttry {\n\t\t\tresponse = await this.fetchImpl(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 (err) {\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\tundefined,\n\t\t\t\tundefined,\n\t\t\t\t{ retryable: true, cause: err instanceof Error ? err : undefined },\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 AuthError();\n\t\t\t}\n\n\t\t\tif (response.status === 429) {\n\t\t\t\t// The header is preserved as `retryAfterSeconds` (not just prose) so\n\t\t\t\t// the consume loops can honor it.\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 RateLimitError(msg, retryAfter ?? undefined);\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\tif (\n\t\t\t\tresponse.status === 422 &&\n\t\t\t\tcode === \"BYO_BREAKING_CHANGE\" &&\n\t\t\t\tparsedBody &&\n\t\t\t\ttypeof parsedBody === \"object\" &&\n\t\t\t\tisByoBreakingDetails((parsedBody as { details?: unknown }).details)\n\t\t\t) {\n\t\t\t\tthrow new ByoBreakingChangeError(\n\t\t\t\t\tmessage,\n\t\t\t\t\t(parsedBody as { details: ByoBreakingChangeDetails }).details,\n\t\t\t\t);\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
|
"// AuthError / RateLimitError / ValidationError are shared across the whole SDK\n// (Index and the platform clients throw them too) and live in ../errors.ts —\n// re-exported here so `@secondlayer/sdk/streams` imports keep working.\nimport { ApiError, SecondLayerError } from \"../errors.ts\";\n\nexport { AuthError, RateLimitError, ValidationError } from \"../errors.ts\";\n\n/** Thrown on a 5xx from the Streams API. `retryable`. */\nexport class StreamsServerError extends ApiError {\n\tconstructor(message: string, status: number, body?: unknown) {\n\t\tsuper(status, message, body, undefined, { retryable: true });\n\t\tthis.name = \"StreamsServerError\";\n\t}\n}\n\n/** Thrown when response signature verification is enabled and fails. */\nexport class StreamsSignatureError extends SecondLayerError {\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 * Largest value the `event_index` / `tx_index` cursor component can take —\n * Postgres int4 max. Used as the foot-of-block sentinel in {@link Cursor.atHeight}\n * so a rewind cursor sorts just below `height:0`. Mirrors the same int4-max\n * sentinel the server uses for reorg height-range scans and empty-range advance.\n */\nconst REWIND_FOOT_INDEX_SENTINEL = 2_147_483_647;\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` — a position that sorts strictly below the\n\t * first event of block `height` (`height:0`) and strictly above every event\n\t * of block `height - 1`. Cursors are exclusive (`(bh,ei) > after`), so\n\t * resuming from it re-reads the entire canonical run starting at `height:0`\n\t * inclusive. This is the position to rewind to after a reorg whose fork point\n\t * is `height`: the new canonical block at `height` carries a fresh first\n\t * event at `(height, 0)` that the consumer MUST re-read.\n\t *\n\t * Encoded as `${height-1}:${SENTINEL}` rather than the seemingly-natural\n\t * `${height}:0` — that earlier form was an off-by-one: being exclusive, it\n\t * skipped `(height, 0)`, silently dropping the fork block's first row on\n\t * every reorg. The sentinel is int4 max (the `event_index`/`tx_index` column\n\t * type), larger than any real index, so nothing at `height - 1` survives the\n\t * keyset and the next returned row is exactly `(height, 0)`.\n\t */\n\tatHeight(height: number): string {\n\t\t// Genesis can't reorg; degenerate-guard so `height - 1` never goes negative\n\t\t// (the cursor parsers reject negative components).\n\t\tif (height <= 0) return \"0:0\";\n\t\treturn `${height - 1}:${REWIND_FOOT_INDEX_SENTINEL}`;\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
|
-
"import type { ConsumerSink, WithSinkTx } from \"../sinks/types.ts\";\nimport { Cursor } from \"./cursor.ts\";\nimport { ValidationError } from \"./errors.ts\";\nimport type {\n\tConsumerBatchContext,\n\tStreamsBatch,\n\tStreamsEvent,\n\tStreamsEventType,\n\tStreamsEventsEnvelope,\n\tStreamsFilterMap,\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\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\n};\n\nexport type StreamsEventsFetcher = (\n\tparams: StreamsEventsFetchParams,\n) => Promise<StreamsEventsEnvelope>;\n\nexport type Sleep = (ms: number, signal?: AbortSignal) => Promise<void>;\n\n/**\n * Guard the `finalizedOnly` checkpoint contract. Shared by both loops.\n *\n * In `finalizedOnly` mode the unfinalized tail is filtered OUT of the batch\n * and re-read next poll — and `onReorg` is skipped entirely, so nothing ever\n * re-reads a range the cursor has passed. Returning a cursor above the last\n * delivered finalized event (e.g. `envelope.next_cursor`, which points past\n * the filtered tail) therefore drops those events permanently and silently.\n * Throw instead: this is the one wrong return the loop can detect.\n */\nexport function assertFinalizedCheckpoint(\n\t// biome-ignore lint/suspicious/noConfusingVoidType: mirrors the onBatch return union it validates\n\treturned: string | null | undefined | void,\n\tcheckpoint: string | null,\n): void {\n\tif (returned === null || returned === undefined) return;\n\tif (returned === checkpoint) return;\n\tconst r = Cursor.parse(returned);\n\tconst c = checkpoint === null ? null : Cursor.parse(checkpoint);\n\tconst above =\n\t\tc === null ||\n\t\tr.blockHeight > c.blockHeight ||\n\t\t(r.blockHeight === c.blockHeight && r.eventIndex > c.eventIndex);\n\tif (above) {\n\t\tconst boundary = c ? ` (\"${checkpoint}\")` : \" (none delivered yet)\";\n\t\tthrow new ValidationError(\n\t\t\t`onBatch returned cursor \"${returned}\", above the last delivered finalized event${boundary}. With finalizedOnly, events past that point were filtered out and will be re-read once finalized — committing beyond it skips them permanently. Return ctx.cursor (or nothing); never envelope.next_cursor.`,\n\t\t\t400,\n\t\t);\n\t}\n}\n\n/** Build the ctx handed to `onBatch`. Shared by the Streams and Index loops so\n * the two can't drift on what \"progress\" means. */\nexport function batchContext(\n\tcursor: string | null,\n\theight: number | null,\n\ttipHeight: number,\n): ConsumerBatchContext {\n\treturn {\n\t\tcursor,\n\t\theight,\n\t\ttipHeight,\n\t\tblocksBehind: height === null ? null : Math.max(0, tipHeight - height),\n\t};\n}\n\n/** Options shared by both consume loops' page-fetch retry. Vocabulary matches\n * `@secondlayer/stacks` transports (`retryCount`/`retryDelay`) — one retry\n * language across the family, not a third. */\nexport type PageRetryOptions = {\n\t/** Retries after the first failure. Default 3; `0` disables. */\n\tretryCount?: number;\n\t/** Base delay in ms; the n-th retry waits `retryDelay * n` (matches the\n\t * stacks transport). A server `Retry-After` overrides it. Default 1000. */\n\tretryDelay?: number;\n\t/** Void observer, called before each retry sleep (metrics/logging). The\n\t * retry policy owns the decision; this cannot change it. */\n\tonError?: (\n\t\terr: unknown,\n\t\tctx: { attempt: number; retriesLeft: number; delayMs: number },\n\t) => void;\n};\n\n/** Retry-After above this is treated as \"give up now, resume later\". */\nconst MAX_RETRY_AFTER_MS = 300_000;\n\nfunction errRetryable(err: unknown): boolean {\n\t// SecondLayerError family carries an explicit signal; a bare TypeError is\n\t// the raw fetch network failure (Streams' fetchImpl isn't wrapped).\n\tif (err && typeof err === \"object\" && \"retryable\" in err) {\n\t\treturn (err as { retryable: unknown }).retryable === true;\n\t}\n\treturn err instanceof TypeError;\n}\n\nfunction errRetryAfterMs(err: unknown): number | undefined {\n\tif (err && typeof err === \"object\" && \"retryAfterSeconds\" in err) {\n\t\tconst seconds = (err as { retryAfterSeconds: unknown }).retryAfterSeconds;\n\t\tif (typeof seconds === \"number\" && Number.isFinite(seconds)) {\n\t\t\treturn Math.min(seconds * 1000, MAX_RETRY_AFTER_MS);\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/**\n * Run one page fetch with retries. Scoped to the FETCH only — never the loop\n * body: retrying after an `onReorg`/`onBatch` throw would re-enter with\n * `handledReorgs` partially mutated and skip a rollback silently. `onBatch`\n * and `onReorg` throws always propagate to the caller.\n */\nexport async function fetchPageWithRetry<T>(\n\tfetchPage: () => Promise<T>,\n\topts: PageRetryOptions & { sleep: Sleep; signal?: AbortSignal },\n): Promise<T> {\n\tconst retryCount = opts.retryCount ?? 3;\n\tconst retryDelay = opts.retryDelay ?? 1000;\n\tfor (let attempt = 0; ; attempt++) {\n\t\ttry {\n\t\t\treturn await fetchPage();\n\t\t} catch (err) {\n\t\t\tconst retriesLeft = retryCount - attempt;\n\t\t\tif (retriesLeft <= 0 || !errRetryable(err) || opts.signal?.aborted) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tconst delayMs = errRetryAfterMs(err) ?? retryDelay * (attempt + 1);\n\t\t\topts.onError?.(err, { attempt, retriesLeft, delayMs });\n\t\t\tawait opts.sleep(delayMs, opts.signal);\n\t\t\t// Aborted mid-sleep: surface the original failure, not a fresh fetch.\n\t\t\tif (opts.signal?.aborted) throw err;\n\t\t}\n\t}\n}\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<TTx = never>(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\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\n\tfetchEvents: StreamsEventsFetcher;\n\t/** Destination adapter owning checkpoint + rollback (see IndexConsumeOptions.sink). */\n\tsink?: ConsumerSink<TTx>;\n\t/** Fires once per page, before `onBatch` and any early return. */\n\tonProgress?: (ctx: ConsumerBatchContext) => void;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t\tctx: ConsumerBatchContext & WithSinkTx<TTx>,\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\tretryCount?: number;\n\tretryDelay?: number;\n\tonError?: PageRetryOptions[\"onError\"];\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\t// Resume order: explicit fromCursor, then the sink's committed checkpoint.\n\tlet cursor = opts.fromCursor ?? (await opts.sink?.loadCursor()) ?? 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\t// Highest block reached, carried across empty pages so a caught-up tail\n\t// keeps reporting its position instead of dropping to null.\n\tlet height: number | null = null;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\t// Retry wraps ONLY the page fetch: one transient 429/5xx must not kill\n\t\t// an hours-long backfill, and handler throws must never be re-entered.\n\t\tconst envelope = await fetchPageWithRetry(\n\t\t\t() =>\n\t\t\t\topts.fetchEvents({\n\t\t\t\t\tcursor,\n\t\t\t\t\tlimit: opts.batchSize,\n\t\t\t\t\ttypes: opts.types,\n\t\t\t\t\tnotTypes: opts.notTypes,\n\t\t\t\t\tcontractId: opts.contractId,\n\t\t\t\t\tsender: opts.sender,\n\t\t\t\t\trecipient: opts.recipient,\n\t\t\t\t\tassetIdentifier: opts.assetIdentifier,\n\t\t\t\t\tfilters: opts.filters,\n\t\t\t\t}),\n\t\t\t{\n\t\t\t\tretryCount: opts.retryCount,\n\t\t\t\tretryDelay: opts.retryDelay,\n\t\t\t\tonError: opts.onError,\n\t\t\t\tsleep,\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\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. A sink makes rollback\n\t\t// UNCONDITIONAL — omitting `onReorg` used to skip reorgs silently.\n\t\tif (!finalizedOnly && (opts.onReorg || opts.sink)) {\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.sink?.rollback(reorg.fork_point_height, rewind);\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\t// Everything at and above the fork is no longer canonical, so the\n\t\t\t\t// reached height rolls back with it.\n\t\t\t\theight = forkPoint > 0 ? forkPoint - 1 : null;\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\t\t// Ascending cursor order, so the last row is the highest block this page\n\t\t// reached; an empty page keeps the previous value.\n\t\theight = emitted.at(-1)?.block_height ?? height;\n\n\t\tconst ctx = batchContext(checkpoint, height, envelope.tip.block_height);\n\t\t// Before any early return: an empty page still proves the loop is alive.\n\t\topts.onProgress?.(ctx);\n\n\t\tlet nextCursor: string | null;\n\t\tif (opts.sink) {\n\t\t\tconst sink = opts.sink;\n\t\t\t// Rows and cursor commit in ONE transaction; a handler throw aborts\n\t\t\t// both. Nothing moved → nothing to commit, handler not invoked.\n\t\t\tif (\n\t\t\t\tcheckpoint !== null &&\n\t\t\t\t(checkpoint !== cursor || emitted.length > 0)\n\t\t\t) {\n\t\t\t\tawait sink.commitBatch(checkpoint, async (tx) => {\n\t\t\t\t\tawait opts.onBatch(emitted, envelope, {\n\t\t\t\t\t\t...ctx,\n\t\t\t\t\t\ttx,\n\t\t\t\t\t} as ConsumerBatchContext & WithSinkTx<TTx>);\n\t\t\t\t});\n\t\t\t}\n\t\t\tnextCursor = checkpoint;\n\t\t} else {\n\t\t\tconst returnedCursor = await opts.onBatch(\n\t\t\t\temitted,\n\t\t\t\tenvelope,\n\t\t\t\tctx as ConsumerBatchContext & WithSinkTx<TTx>,\n\t\t\t);\n\t\t\tif (finalizedOnly) assertFinalizedCheckpoint(returnedCursor, checkpoint);\n\t\t\tnextCursor = returnedCursor ?? checkpoint;\n\t\t}\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\n/**\n * Async-iterator form of the Streams pull loop, yielding one {@link StreamsBatch}\n * per fetched page. Each yield maps 1:1 onto a `GET /v1/streams/events` envelope\n * (`{ events, next_cursor, tip, reorgs }` → `{ events, cursor, tip, reorgs }`) —\n * no extra API calls, no regrouping. Pages with no events and no reorgs are not\n * yielded; the iterator sleeps `intervalMs` and re-polls the tip instead.\n */\nexport async function* iterateStreamsBatches(opts: {\n\tfromCursor?: string | null;\n\tbatchSize: number;\n\tintervalMs: number;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\n\tfetchEvents: StreamsEventsFetcher;\n\tsleep?: Sleep;\n\tsignal?: AbortSignal;\n}): AsyncGenerator<StreamsBatch> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tlet cursor = opts.fromCursor ?? null;\n\n\twhile (!opts.signal?.aborted) {\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\tfilters: opts.filters,\n\t\t});\n\n\t\tconst checkpoint = envelope.next_cursor ?? cursor;\n\t\tif (envelope.events.length > 0 || envelope.reorgs.length > 0) {\n\t\t\tyield {\n\t\t\t\tevents: envelope.events,\n\t\t\t\tcursor: checkpoint,\n\t\t\t\ttip: envelope.tip,\n\t\t\t\treorgs: envelope.reorgs,\n\t\t\t};\n\t\t}\n\n\t\tconst advanced = checkpoint !== null && checkpoint !== cursor;\n\t\tcursor = checkpoint;\n\t\t// Caught up at the tip: wait one poll interval before re-reading.\n\t\tif (!advanced && envelope.events.length === 0) {\n\t\t\tif (opts.signal?.aborted) return;\n\t\t\tawait sleep(opts.intervalMs, opts.signal);\n\t\t}\n\t}\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\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\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\tfilters: opts.filters,\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",
|
|
10
|
+
"import type { ConsumerSink, WithSinkTx } from \"../sinks/types.ts\";\nimport { Cursor } from \"./cursor.ts\";\nimport { ValidationError } from \"./errors.ts\";\nimport type {\n\tConsumerBatchContext,\n\tStreamsBatch,\n\tStreamsEvent,\n\tStreamsEventType,\n\tStreamsEventsEnvelope,\n\tStreamsFilterMap,\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\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\n};\n\nexport type StreamsEventsFetcher = (\n\tparams: StreamsEventsFetchParams,\n) => Promise<StreamsEventsEnvelope>;\n\nexport type Sleep = (ms: number, signal?: AbortSignal) => Promise<void>;\n\n/**\n * Guard the `finalizedOnly` checkpoint contract. Shared by both loops.\n *\n * In `finalizedOnly` mode the unfinalized tail is filtered OUT of the batch\n * and re-read next poll — and `onReorg` is skipped entirely, so nothing ever\n * re-reads a range the cursor has passed. Returning a cursor above the last\n * delivered finalized event (e.g. `envelope.next_cursor`, which points past\n * the filtered tail) therefore drops those events permanently and silently.\n * Throw instead: this is the one wrong return the loop can detect.\n */\nexport function assertFinalizedCheckpoint(\n\t// biome-ignore lint/suspicious/noConfusingVoidType: mirrors the onBatch return union it validates\n\treturned: string | null | undefined | void,\n\tcheckpoint: string | null,\n): void {\n\tif (returned === null || returned === undefined) return;\n\tif (returned === checkpoint) return;\n\tconst r = Cursor.parse(returned);\n\tconst c = checkpoint === null ? null : Cursor.parse(checkpoint);\n\tconst above =\n\t\tc === null ||\n\t\tr.blockHeight > c.blockHeight ||\n\t\t(r.blockHeight === c.blockHeight && r.eventIndex > c.eventIndex);\n\tif (above) {\n\t\tconst boundary = c ? ` (\"${checkpoint}\")` : \" (none delivered yet)\";\n\t\tthrow new ValidationError(\n\t\t\t`onBatch returned cursor \"${returned}\", above the last delivered finalized event${boundary}. With finalizedOnly, events past that point were filtered out and will be re-read once finalized — committing beyond it skips them permanently. Return ctx.cursor (or nothing); never envelope.next_cursor.`,\n\t\t\t400,\n\t\t);\n\t}\n}\n\n/** Build the ctx handed to `onBatch`. Shared by the Streams and Index loops so\n * the two can't drift on what \"progress\" means. */\nexport function batchContext(\n\tcursor: string | null,\n\theight: number | null,\n\ttipHeight: number,\n): ConsumerBatchContext {\n\treturn {\n\t\tcursor,\n\t\theight,\n\t\ttipHeight,\n\t\tblocksBehind: height === null ? null : Math.max(0, tipHeight - height),\n\t};\n}\n\n/** Options shared by both consume loops' page-fetch retry. Vocabulary matches\n * `@secondlayer/stacks` transports (`retryCount`/`retryDelay`) — one retry\n * language across the family, not a third. */\nexport type PageRetryOptions = {\n\t/** Retries after the first failure. Default 3; `0` disables. */\n\tretryCount?: number;\n\t/** Base delay in ms; the n-th retry waits `retryDelay * n` (matches the\n\t * stacks transport). A server `Retry-After` overrides it. Default 1000. */\n\tretryDelay?: number;\n\t/** Void observer, called before each retry sleep (metrics/logging). The\n\t * retry policy owns the decision; this cannot change it. */\n\tonError?: (\n\t\terr: unknown,\n\t\tctx: { attempt: number; retriesLeft: number; delayMs: number },\n\t) => void;\n};\n\n/** Retry-After above this is treated as \"give up now, resume later\". */\nconst MAX_RETRY_AFTER_MS = 300_000;\n\nfunction errRetryable(err: unknown): boolean {\n\t// SecondLayerError family carries an explicit signal; a bare TypeError is\n\t// the raw fetch network failure (Streams' fetchImpl isn't wrapped).\n\tif (err && typeof err === \"object\" && \"retryable\" in err) {\n\t\treturn (err as { retryable: unknown }).retryable === true;\n\t}\n\treturn err instanceof TypeError;\n}\n\nfunction errRetryAfterMs(err: unknown): number | undefined {\n\tif (err && typeof err === \"object\" && \"retryAfterSeconds\" in err) {\n\t\tconst seconds = (err as { retryAfterSeconds: unknown }).retryAfterSeconds;\n\t\tif (typeof seconds === \"number\" && Number.isFinite(seconds)) {\n\t\t\treturn Math.min(seconds * 1000, MAX_RETRY_AFTER_MS);\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/**\n * Run one page fetch with retries. Scoped to the FETCH only — never the loop\n * body: retrying after an `onReorg`/`onBatch` throw would re-enter with\n * `handledReorgs` partially mutated and skip a rollback silently. `onBatch`\n * and `onReorg` throws always propagate to the caller.\n */\nexport async function fetchPageWithRetry<T>(\n\tfetchPage: () => Promise<T>,\n\topts: PageRetryOptions & { sleep: Sleep; signal?: AbortSignal },\n): Promise<T> {\n\tconst retryCount = opts.retryCount ?? 3;\n\tconst retryDelay = opts.retryDelay ?? 1000;\n\tfor (let attempt = 0; ; attempt++) {\n\t\ttry {\n\t\t\treturn await fetchPage();\n\t\t} catch (err) {\n\t\t\tconst retriesLeft = retryCount - attempt;\n\t\t\tif (retriesLeft <= 0 || !errRetryable(err) || opts.signal?.aborted) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tconst delayMs = errRetryAfterMs(err) ?? retryDelay * (attempt + 1);\n\t\t\topts.onError?.(err, { attempt, retriesLeft, delayMs });\n\t\t\tawait opts.sleep(delayMs, opts.signal);\n\t\t\t// Aborted mid-sleep: surface the original failure, not a fresh fetch.\n\t\t\tif (opts.signal?.aborted) throw err;\n\t\t}\n\t}\n}\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<TTx = never>(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\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\n\tfetchEvents: StreamsEventsFetcher;\n\t/** Destination adapter owning checkpoint + rollback (see IndexConsumeOptions.sink). */\n\tsink?: ConsumerSink<TTx>;\n\t/** Fires once per page, before `onBatch` and any early return. */\n\tonProgress?: (ctx: ConsumerBatchContext) => void;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t\tctx: ConsumerBatchContext & WithSinkTx<TTx>,\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\tretryCount?: number;\n\tretryDelay?: number;\n\tonError?: PageRetryOptions[\"onError\"];\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\t// Resume order: explicit fromCursor, then the sink's committed checkpoint.\n\t// `loadCursor` is also the sink's INIT — it creates the checkpoint table and\n\t// validates the rollback precondition. Short-circuiting it on an explicit\n\t// `fromCursor` meant a replay-from-cursor run crashed on its first commit,\n\t// and skipped the height-column check that keeps reorg rollback from being\n\t// a silent no-op. Always initialize; `fromCursor` still wins as the resume\n\t// position.\n\tconst committedCursor = (await opts.sink?.loadCursor()) ?? null;\n\tlet cursor = opts.fromCursor ?? committedCursor;\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\t// Highest block reached, carried across empty pages so a caught-up tail\n\t// keeps reporting its position instead of dropping to null.\n\tlet height: number | null = null;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\t// Retry wraps ONLY the page fetch: one transient 429/5xx must not kill\n\t\t// an hours-long backfill, and handler throws must never be re-entered.\n\t\tconst envelope = await fetchPageWithRetry(\n\t\t\t() =>\n\t\t\t\topts.fetchEvents({\n\t\t\t\t\tcursor,\n\t\t\t\t\tlimit: opts.batchSize,\n\t\t\t\t\ttypes: opts.types,\n\t\t\t\t\tnotTypes: opts.notTypes,\n\t\t\t\t\tcontractId: opts.contractId,\n\t\t\t\t\tsender: opts.sender,\n\t\t\t\t\trecipient: opts.recipient,\n\t\t\t\t\tassetIdentifier: opts.assetIdentifier,\n\t\t\t\t\tfilters: opts.filters,\n\t\t\t\t}),\n\t\t\t{\n\t\t\t\tretryCount: opts.retryCount,\n\t\t\t\tretryDelay: opts.retryDelay,\n\t\t\t\tonError: opts.onError,\n\t\t\t\tsleep,\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\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. A sink makes rollback\n\t\t// UNCONDITIONAL — omitting `onReorg` used to skip reorgs silently.\n\t\tif (!finalizedOnly && (opts.onReorg || opts.sink)) {\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.sink?.rollback(reorg.fork_point_height, rewind);\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\t// Everything at and above the fork is no longer canonical, so the\n\t\t\t\t// reached height rolls back with it.\n\t\t\t\theight = forkPoint > 0 ? forkPoint - 1 : null;\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\t\t// Ascending cursor order, so the last row is the highest block this page\n\t\t// reached; an empty page keeps the previous value.\n\t\theight = emitted.at(-1)?.block_height ?? height;\n\n\t\tconst ctx = batchContext(checkpoint, height, envelope.tip.block_height);\n\t\t// Before any early return: an empty page still proves the loop is alive.\n\t\topts.onProgress?.(ctx);\n\n\t\tlet nextCursor: string | null;\n\t\tif (opts.sink) {\n\t\t\tconst sink = opts.sink;\n\t\t\t// Rows and cursor commit in ONE transaction; a handler throw aborts\n\t\t\t// both. Nothing moved → nothing to commit, handler not invoked.\n\t\t\tif (\n\t\t\t\tcheckpoint !== null &&\n\t\t\t\t(checkpoint !== cursor || emitted.length > 0)\n\t\t\t) {\n\t\t\t\tawait sink.commitBatch(checkpoint, async (tx) => {\n\t\t\t\t\tawait opts.onBatch(emitted, envelope, {\n\t\t\t\t\t\t...ctx,\n\t\t\t\t\t\ttx,\n\t\t\t\t\t} as ConsumerBatchContext & WithSinkTx<TTx>);\n\t\t\t\t});\n\t\t\t}\n\t\t\tnextCursor = checkpoint;\n\t\t} else {\n\t\t\tconst returnedCursor = await opts.onBatch(\n\t\t\t\temitted,\n\t\t\t\tenvelope,\n\t\t\t\tctx as ConsumerBatchContext & WithSinkTx<TTx>,\n\t\t\t);\n\t\t\tif (finalizedOnly) assertFinalizedCheckpoint(returnedCursor, checkpoint);\n\t\t\tnextCursor = returnedCursor ?? checkpoint;\n\t\t}\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\n/**\n * Async-iterator form of the Streams pull loop, yielding one {@link StreamsBatch}\n * per fetched page. Each yield maps 1:1 onto a `GET /v1/streams/events` envelope\n * (`{ events, next_cursor, tip, reorgs }` → `{ events, cursor, tip, reorgs }`) —\n * no extra API calls, no regrouping. Pages with no events and no reorgs are not\n * yielded; the iterator sleeps `intervalMs` and re-polls the tip instead.\n */\nexport async function* iterateStreamsBatches(opts: {\n\tfromCursor?: string | null;\n\tbatchSize: number;\n\tintervalMs: number;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\n\tfetchEvents: StreamsEventsFetcher;\n\tsleep?: Sleep;\n\tsignal?: AbortSignal;\n}): AsyncGenerator<StreamsBatch> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tlet cursor = opts.fromCursor ?? null;\n\n\twhile (!opts.signal?.aborted) {\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\tfilters: opts.filters,\n\t\t});\n\n\t\tconst checkpoint = envelope.next_cursor ?? cursor;\n\t\tif (envelope.events.length > 0 || envelope.reorgs.length > 0) {\n\t\t\tyield {\n\t\t\t\tevents: envelope.events,\n\t\t\t\tcursor: checkpoint,\n\t\t\t\ttip: envelope.tip,\n\t\t\t\treorgs: envelope.reorgs,\n\t\t\t};\n\t\t}\n\n\t\tconst advanced = checkpoint !== null && checkpoint !== cursor;\n\t\tcursor = checkpoint;\n\t\t// Caught up at the tip: wait one poll interval before re-reading.\n\t\tif (!advanced && envelope.events.length === 0) {\n\t\t\tif (opts.signal?.aborted) return;\n\t\t\tawait sleep(opts.intervalMs, opts.signal);\n\t\t}\n\t}\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\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\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\tfilters: opts.filters,\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
11
|
"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",
|
|
12
12
|
"import type { IndexEvent } from \"../index-api/client.ts\";\nimport {\n\toptionalString,\n\trequireAmountField,\n\trequireHexValue,\n\trequireString,\n} from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\n/**\n * Decode a raw Streams event into the SAME flat, `event_type`-discriminated\n * row shape Index serves — so Streams consumption reads identically to Index\n * consumption, with one call instead of eleven guard+decode pairs.\n *\n * ```ts\n * for (const event of envelope.events) {\n * const row = decode(event);\n * if (row.event_type === \"ft_transfer\") row.amount; // string, narrowed\n * }\n * ```\n *\n * Prefer `decoded: true` on `streams.events.consume` — then decoding never\n * appears in your code at all.\n */\nexport function decode(event: StreamsEvent): IndexEvent {\n\tconst base = {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\tblock_time: event.ts,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tcontract_id: event.contract_id,\n\t};\n\t// Payloads are validated field-by-field (never trusted casts): a malformed\n\t// payload throws with the event type and field named.\n\tconst p = event.payload as Record<string, unknown>;\n\tswitch (event.event_type) {\n\t\tcase \"stx_transfer\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tevent_type: \"stx_transfer\",\n\t\t\t\tsender: requireString(p, \"sender\", event.event_type),\n\t\t\t\trecipient: requireString(p, \"recipient\", event.event_type),\n\t\t\t\tamount: requireAmountField(p, \"amount\", event.event_type),\n\t\t\t\tmemo: optionalString(p.memo),\n\t\t\t};\n\t\tcase \"stx_mint\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tevent_type: \"stx_mint\",\n\t\t\t\trecipient: requireString(p, \"recipient\", event.event_type),\n\t\t\t\tamount: requireAmountField(p, \"amount\", event.event_type),\n\t\t\t};\n\t\tcase \"stx_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tevent_type: \"stx_burn\",\n\t\t\t\tsender: requireString(p, \"sender\", event.event_type),\n\t\t\t\tamount: requireAmountField(p, \"amount\", event.event_type),\n\t\t\t};\n\t\tcase \"stx_lock\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tevent_type: \"stx_lock\",\n\t\t\t\tsender: requireString(p, \"locked_address\", event.event_type),\n\t\t\t\tamount: requireAmountField(p, \"locked_amount\", event.event_type),\n\t\t\t\tpayload: { unlock_height: optionalString(p.unlock_height) },\n\t\t\t};\n\t\tcase \"ft_transfer\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tevent_type: \"ft_transfer\",\n\t\t\t\tasset_identifier: requireString(\n\t\t\t\t\tp,\n\t\t\t\t\t\"asset_identifier\",\n\t\t\t\t\tevent.event_type,\n\t\t\t\t),\n\t\t\t\tsender: requireString(p, \"sender\", event.event_type),\n\t\t\t\trecipient: requireString(p, \"recipient\", event.event_type),\n\t\t\t\tamount: requireAmountField(p, \"amount\", event.event_type),\n\t\t\t};\n\t\tcase \"ft_mint\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tevent_type: \"ft_mint\",\n\t\t\t\tasset_identifier: requireString(\n\t\t\t\t\tp,\n\t\t\t\t\t\"asset_identifier\",\n\t\t\t\t\tevent.event_type,\n\t\t\t\t),\n\t\t\t\trecipient: requireString(p, \"recipient\", event.event_type),\n\t\t\t\tamount: requireAmountField(p, \"amount\", event.event_type),\n\t\t\t};\n\t\tcase \"ft_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tevent_type: \"ft_burn\",\n\t\t\t\tasset_identifier: requireString(\n\t\t\t\t\tp,\n\t\t\t\t\t\"asset_identifier\",\n\t\t\t\t\tevent.event_type,\n\t\t\t\t),\n\t\t\t\tsender: requireString(p, \"sender\", event.event_type),\n\t\t\t\tamount: requireAmountField(p, \"amount\", event.event_type),\n\t\t\t};\n\t\tcase \"nft_transfer\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tevent_type: \"nft_transfer\",\n\t\t\t\tasset_identifier: requireString(\n\t\t\t\t\tp,\n\t\t\t\t\t\"asset_identifier\",\n\t\t\t\t\tevent.event_type,\n\t\t\t\t),\n\t\t\t\tsender: requireString(p, \"sender\", event.event_type),\n\t\t\t\trecipient: requireString(p, \"recipient\", event.event_type),\n\t\t\t\tvalue: requireHexValue(p, event.event_type),\n\t\t\t};\n\t\tcase \"nft_mint\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tevent_type: \"nft_mint\",\n\t\t\t\tasset_identifier: requireString(\n\t\t\t\t\tp,\n\t\t\t\t\t\"asset_identifier\",\n\t\t\t\t\tevent.event_type,\n\t\t\t\t),\n\t\t\t\trecipient: requireString(p, \"recipient\", event.event_type),\n\t\t\t\tvalue: requireHexValue(p, event.event_type),\n\t\t\t};\n\t\tcase \"nft_burn\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tevent_type: \"nft_burn\",\n\t\t\t\tasset_identifier: requireString(\n\t\t\t\t\tp,\n\t\t\t\t\t\"asset_identifier\",\n\t\t\t\t\tevent.event_type,\n\t\t\t\t),\n\t\t\t\tsender: requireString(p, \"sender\", event.event_type),\n\t\t\t\tvalue: requireHexValue(p, event.event_type),\n\t\t\t};\n\t\tcase \"print\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tevent_type: \"print\",\n\t\t\t\tpayload: {\n\t\t\t\t\ttopic: optionalString(p.topic),\n\t\t\t\t\tvalue: p.value,\n\t\t\t\t\traw_value: optionalString(p.raw_value),\n\t\t\t\t},\n\t\t\t};\n\t}\n}\n",
|
|
13
13
|
"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\tconst base = requireBaseUrl();\n\t\tconst path = file.path.replace(/^\\/+/, \"\");\n\t\t// Manifest file paths are bucket-root-absolute (they embed the dataset\n\t\t// prefix), while `baseUrl` already ends with that prefix — strip the\n\t\t// overlap so both the manifest and its files resolve from one base URL.\n\t\ttry {\n\t\t\tconst basePath = new URL(base).pathname.replace(/^\\/+|\\/+$/g, \"\");\n\t\t\tif (basePath && path.startsWith(`${basePath}/`)) {\n\t\t\t\treturn `${base}/${path.slice(basePath.length + 1)}`;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Non-URL base (tests, relative proxies): fall through to plain join.\n\t\t}\n\t\treturn `${base}/${path}`;\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",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"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",
|
|
21
21
|
"// 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\";\nimport type { IndexEvent } from \"../index-api/client.ts\";\nimport type { ConsumerSink, WithSinkTx } from \"../sinks/types.ts\";\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\t/**\n\t * Labels whose filter group this event satisfied, present only when the\n\t * request used a labelled `filters` map. The SDK dispatches on it for you\n\t * (`on.<label>`), so handlers rarely read it directly.\n\t */\n\tmatched?: string[];\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\t/**\n\t * Oldest height still seekable on the live API for the caller's tier\n\t * (`tip - retention`). `null` = unlimited retention. Older reads must use the\n\t * cold dumps lane. Optional for back-compat.\n\t */\n\toldest_seekable_height?: number | null;\n\t/** Oldest seekable cursor (`<oldest_seekable_height>:0`); `null` = unlimited. */\n\toldest_cursor?: string | null;\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\t/**\n\t * First position of the new canonical chain at the fork, `fork:0`\n\t * (INCLUSIVE). Not an exclusive resume token — resuming directly from it\n\t * skips `fork:0`. The consumer rewinds to the foot of `fork_point_height`\n\t * (`Cursor.atHeight`) to re-read the new run from `fork:0` inclusive.\n\t */\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\n/**\n * One labelled filter group. Fields inside a group AND together; groups in a\n * map OR together server-side.\n */\nexport type StreamsLabelledFilter = {\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n};\n\n/** A map of label → filter group. Labels are yours; the server echoes them. */\nexport type StreamsFilterMap = Record<string, StreamsLabelledFilter>;\n\n/**\n * The events one label can yield. A group that declares `types` narrows to\n * exactly those variants, so a per-label handler needs no `event_type` guard;\n * a group without `types` keeps the full union.\n */\nexport type StreamsEventForFilter<F, D extends boolean = false> = F extends {\n\ttypes: readonly (infer T extends StreamsEventType)[];\n}\n\t? D extends true\n\t\t? Extract<IndexEvent, { event_type: T }>\n\t\t: Extract<StreamsEvent, { event_type: T }>\n\t: D extends true\n\t\t? IndexEvent\n\t\t: StreamsEvent;\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\t/**\n\t * Labelled filter groups. The groups OR together in one scan and each\n\t * returned event carries the labels it matched (`event.matched`) — two\n\t * unrelated concerns share one page, one cursor, one checkpoint.\n\t */\n\tfilters?: StreamsFilterMap;\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\t/** Labelled filter groups; see {@link StreamsEventsListParams.filters}. */\n\tfilters?: StreamsFilterMap;\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/** Labelled filter groups; see {@link StreamsEventsListParams.filters}. */\n\tfilters?: StreamsFilterMap;\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 */\n/**\n * What the loop knows at the end of a page, handed to `onBatch`.\n *\n * `cursor` is the position to commit. The rest answers \"how far along am I,\n * and am I still moving\" — the question every deployed consumer has to expose\n * for a health check.\n *\n * Progress is reported here rather than left to callers because only the loop\n * can get it right: `height` has to survive empty pages (normal at the tip)\n * and has to roll back to `fork_point_height - 1` after a reorg rewind.\n * Deriving it from `cursor` is wrong — `Cursor.atHeight` encodes the foot of a\n * block as `${height - 1}:<sentinel>`, so a rewound cursor parses to a\n * position that was never reached.\n */\nexport type ConsumerBatchContext = {\n\t/** Checkpoint to commit alongside your rows. */\n\tcursor: string | null;\n\t/** Highest canonical block the sweep has reached. `null` before the first\n\t * row of a fresh consume. */\n\theight: number | null;\n\t/** Chain tip as of this page's read. */\n\ttipHeight: number;\n\t/** `tipHeight - height`, floored at 0. `null` until `height` is known. */\n\tblocksBehind: number | null;\n};\n\n/** @deprecated Use {@link ConsumerBatchContext} — the Index and Streams loops\n * share one shape now. Kept as an alias so existing annotations compile. */\nexport type StreamsBatchContext = ConsumerBatchContext;\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\tTTx = never,\n\tD extends boolean = false,\n\tF extends StreamsFilterMap = Record<never, never>,\n> = {\n\tfromCursor?: string | null;\n\t/**\n\t * Deliver events pre-decoded as the flat, `event_type`-discriminated rows\n\t * Index serves (`IndexEvent`), so Streams consumption reads identically\n\t * to Index consumption — no guard+decode pairs in your handler.\n\t */\n\tdecoded?: D;\n\t/**\n\t * Destination adapter that owns the checkpoint + rollback transaction\n\t * (e.g. `kyselySink` from `@secondlayer/sdk/sinks/kysely`). With a sink:\n\t * the loop resumes from the sink's committed cursor, `onBatch` receives\n\t * `ctx.tx` and must write ONLY through it (rows and cursor commit in one\n\t * transaction), reorg rollback is automatic, and `onBatch`'s return value\n\t * is ignored.\n\t */\n\tsink?: ConsumerSink<TTx>;\n\t/** Fires once per page, before `onBatch` and before any early return. */\n\tonProgress?: (ctx: ConsumerBatchContext) => void;\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\t/**\n\t * Labelled filter groups. The groups OR together in ONE server-side scan,\n\t * so two unrelated concerns share one page, one cursor, and one checkpoint\n\t * instead of two consume loops. Pair with `on` to handle each label.\n\t */\n\tfilters?: F;\n\t/**\n\t * One handler per label in `filters`. Every label must be handled, so\n\t * adding a label is a compile error until its handler exists.\n\t *\n\t * A label's declared `types` narrows its handler's events, so `payload` is\n\t * typed without an `event_type` guard. Labels are dispatched in declaration\n\t * order: a label's own events stay in cursor order, but events of different\n\t * labels do not interleave within a page — add `onBatch` when you need\n\t * strict global order across labels.\n\t */\n\ton?: {\n\t\t[K in keyof F]: (\n\t\t\tevents: StreamsEventForFilter<F[K], D>[],\n\t\t\tctx: StreamsBatchContext & WithSinkTx<TTx>,\n\t\t) => void | Promise<void>;\n\t};\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\t * Optional only when `on` handles the page instead; a consume call with\n\t * neither throws.\n\t */\n\tonBatch?: (\n\t\tevents: D extends true ? IndexEvent[] : StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t\tctx: StreamsBatchContext & WithSinkTx<TTx>,\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\t/** Page-fetch retries after the first failure (429/5xx/network only —\n\t * 4xx and handler throws always propagate). Default 3; `0` disables. */\n\tretryCount?: number;\n\t/** Base retry delay in ms; the n-th retry waits `retryDelay * n`. A server\n\t * `Retry-After` overrides it. Default 1000. */\n\tretryDelay?: number;\n\t/** Void observer, called before each retry sleep (metrics/logging). */\n\tonError?: (\n\t\terr: unknown,\n\t\tctx: { attempt: number; retriesLeft: number; delayMs: number },\n\t) => void;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\n/**\n * One yielded page from {@link StreamsClient.consume} — the\n * `GET /v1/streams/events` envelope verbatim, with `next_cursor` renamed to\n * `cursor` (the checkpoint to persist and resume from).\n */\nexport type StreamsBatch = {\n\t/** Canonical events of this page, in cursor order. */\n\tevents: StreamsEvent[];\n\t/** Checkpoint after this page — pass back as `consume({ cursor })` to resume. */\n\tcursor: string | null;\n\ttip: StreamsTip;\n\t/** Chain reorgs reported alongside this page; empty when none. */\n\treorgs: StreamsReorg[];\n};\n\nexport type StreamsConsumeParams = {\n\t/** Resume strictly after this cursor; omit to start from the oldest seekable page. */\n\tcursor?: string | null;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\t/** Events per page (the `limit` query param). Default 100. */\n\tbatchSize?: number;\n\t/** Poll interval while caught up at the tip, in ms. Default 2000. */\n\tintervalMs?: number;\n\t/** Abort to end the iteration. */\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\t/**\n\t * Called when the live-tail phase (after the dump backfill) crosses a reorg,\n\t * before the cursor rewinds and re-reads the now-canonical events — same\n\t * contract as `consume`. The dump-backfill phase is finalized and never\n\t * reorgs; omit this to leave stale rows from an orphaned fork in place.\n\t */\n\tonReorg?: (\n\t\treorg: StreamsReorg,\n\t\tctx: StreamsReorgContext,\n\t) => Promise<void> | void;\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\t/**\n\t * Follow Streams as an async iterator of page batches.\n\t *\n\t * Yields one {@link StreamsBatch} per `GET /v1/streams/events` page — the\n\t * existing envelope (`events`, `next_cursor` → `cursor`, `tip`, `reorgs`)\n\t * with zero extra API calls. Batches are chosen over per-block groupings\n\t * because the envelope is page-keyed, so every yield is exactly one fetch.\n\t * Empty pages are skipped; at the tip the iterator re-polls every\n\t * `intervalMs` (default 2000) until aborted via `signal`.\n\t *\n\t * Reorgs are surfaced on the batch (`batch.reorgs`) but the cursor is not\n\t * rewound automatically — use `events.consume` with `onReorg` for managed\n\t * rollback semantics.\n\t */\n\tconsume(params?: StreamsConsumeParams): AsyncIterableIterator<StreamsBatch>;\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\tconst F extends StreamsFilterMap = Record<never, never>,\n\t\t\tTTx = never,\n\t\t\tD extends boolean = false,\n\t\t>(\n\t\t\t// The redundant `sink` member gives TS a DIRECT inference site for\n\t\t\t// TTx — inference does not reliably traverse the params alias.\n\t\t\tparams: StreamsEventsConsumeParams<TTx, D, F> & {\n\t\t\t\tsink?: ConsumerSink<TTx>;\n\t\t\t},\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"
|
|
22
22
|
],
|
|
23
|
-
"mappings": ";AAAA,oBAAS;;;ACIT,IAAM,YAAY;AAAA;AA8BX,MAAM,yBAAyB,MAAM;AAAA,EAClC,OAAO;AAAA,EAEhB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,WAAW,CAAC,cAAsB,UAAmC,CAAC,GAAG;AAAA,IACxE,MAAM,eAAe;AAAA,MACpB,GAAI,QAAQ,gBAAgB,CAAC;AAAA,MAC7B,GAAI,QAAQ,UAAU,CAAC,QAAQ,OAAO,IAAI,CAAC;AAAA,MAC3C,GAAI,QAAQ,UAAU,CAAC,SAAS,QAAQ,SAAS,IAAI,CAAC;AAAA,IACvD;AAAA,IACA,MAAM,UAAU;AAAA,MACf;AAAA,MACA,aAAa,SAAS,IAAI;AAAA,EAAK,aAAa,KAAK;AAAA,CAAI,MAAM;AAAA,IAC5D,EAAE,KAAK,EAAE;AAAA,IACT,MAAM,SAAS,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,SAAS;AAAA,IACnE,KAAK,eAAe;AAAA,IACpB,KAAK,OAAO,QAAQ;AAAA,IACpB,KAAK,UAAU,QAAQ;AAAA,IACvB,KAAK,eAAe,QAAQ;AAAA,IAC5B,KAAK,YAAY,QAAQ,aAAa;AAAA,IACtC,KAAK,oBAAoB,QAAQ;AAAA;AAAA,EAQlC,IAAI,CAAC,IAAyC;AAAA,IAE7C,IAAI,MAAW;AAAA,IACf,IAAI,OAAgB;AAAA,IACpB,OAAO,OAAO,MAAM;AAAA,MACnB,IAAI,KAAK,GAAG;AAAA,QAAG,OAAO;AAAA,MACtB,OAAO;AAAA,MACP,MAAM,IAAI;AAAA,IACX;AAAA,IACA,OAAO,KAAK,OAAO;AAAA;AAAA,EAGpB,MAAM,GASJ;AAAA,IACD,OAAO;AAAA,MACN,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,cAAc,KAAK;AAAA,MACnB,OAAO,KAAK,iBAAiB,QAAQ,KAAK,MAAM,UAAU;AAAA,MAC1D,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,WAAW,KAAK;AAAA,MAChB,mBAAmB,KAAK;AAAA,IACzB;AAAA;AAEF;AAGA,SAAS,eAAe,CAAC,QAAyB;AAAA,EACjD,OAAO,WAAW,OAAO,UAAU;AAAA;AAIpC,SAAS,OAAO,CAAC,QAAgB,MAAmC;AAAA,EACnE,IAAI,SAAS,sBAAsB,SAAS,mBAAmB,WAAW;AAAA,IACzE,OAAO,GAAG;AAAA,EACX,IAAI,WAAW,OAAO,WAAW;AAAA,IAChC,OAAO,GAAG;AAAA,EACX;AAAA;AAAA;AAkBM,MAAM,iBAAiB,iBAAiB;AAAA,EAGtC;AAAA,EAGA;AAAA,EALR,WAAW,CAEH,QACP,SAEO,MAEP,MACA,UAAmC,CAAC,GACnC;AAAA,IACD,MAAM,SAAS;AAAA,MACd;AAAA,MACA,WAAW,QAAQ,aAAa,gBAAgB,MAAM;AAAA,MACtD,SAAS,QAAQ,WAAW,QAAQ,QAAQ,IAAI;AAAA,SAC5C,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,SAC5C,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,SAClD,QAAQ,eAAe,EAAE,cAAc,QAAQ,aAAa,IAAI,CAAC;AAAA,SACjE,QAAQ,sBAAsB,YAC/B,EAAE,mBAAmB,QAAQ,kBAAkB,IAC/C,CAAC;AAAA,IACL,CAAC;AAAA,IAlBM;AAAA,IAGA;AAAA,IAgBP,KAAK,OAAO;AAAA;AAEd;AAAA;AAGO,MAAM,kBAAkB,SAAS;AAAA,EACrB,SAAS;AAAA,EAE3B,WAAW,CAAC,UAAU,+BAA+B;AAAA,IACpD,MAAM,KAAK,OAAO;AAAA,IAClB,KAAK,OAAO;AAAA;AAEd;AAAA;AAIO,MAAM,uBAAuB,SAAS;AAAA,EAMlC;AAAA,EALQ,SAAS;AAAA,EAE3B,WAAW,CACV,UAAU,kCAED,YACR;AAAA,IACD,MAAM,KAAK,SAAS,WAAW,WAAW;AAAA,MACzC,WAAW;AAAA,MACX,mBAAmB,gBAAgB,UAAU;AAAA,IAC9C,CAAC;AAAA,IALQ;AAAA,IAMT,KAAK,OAAO;AAAA;AAEd;AAAA;AAGO,MAAM,wBAAwB,SAAS;AAAA,EAC7C,WAAW,CAAC,SAAiB,QAAgB,MAAgB;AAAA,IAC5D,MAAM,QAAQ,SAAS,MAAM,WAAW,EAAE,WAAW,MAAM,CAAC;AAAA,IAC5D,KAAK,OAAO;AAAA;AAEd;AAGO,SAAS,eAAe,CAAC,OAA2C;AAAA,EAC1E,IAAI,CAAC;AAAA,IAAO;AAAA,EACZ,MAAM,UAAU,OAAO,KAAK;AAAA,EAC5B,IAAI,OAAO,SAAS,OAAO,KAAK,WAAW;AAAA,IAAG,OAAO;AAAA,EACrD,MAAM,OAAO,KAAK,MAAM,KAAK;AAAA,EAC7B,IAAI,CAAC,OAAO,MAAM,IAAI;AAAA,IAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,KAAK,IAAI;AAAA,EACtE;AAAA;AAAA;AAOM,MAAM,6BAA6B,SAAS;AAAA,EAE1C;AAAA,EACA;AAAA,EAFR,WAAW,CACH,gBACA,iBACP,UAAU,8BAA8B,4BAA4B,kBACnE;AAAA,IACD,MAAM,KAAK,SAAS,EAAE,gBAAgB,gBAAgB,CAAC;AAAA,IAJhD;AAAA,IACA;AAAA,IAIP,KAAK,OAAO;AAAA;AAEd;AAAA;AAqBO,MAAM,+BAA+B,SAAS;AAAA,EAC3C;AAAA,EACT,WAAW,CAAC,SAAiB,SAAmC;AAAA,IAC/D,MAAM,KAAK,SAAS,SAAS,uBAAuB;AAAA,MACnD,cAAc;AAAA,QACb;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,GAAG,QAAQ,KAAK;AAAA,MACjB;AAAA,IACD,CAAC;AAAA,IACD,KAAK,OAAO;AAAA,IACZ,KAAK,UAAU;AAAA;AAEjB;AAGO,SAAS,oBAAoB,CACnC,GACgC;AAAA,EAChC,IAAI,CAAC,KAAK,OAAO,MAAM;AAAA,IAAU,OAAO;AAAA,EACxC,MAAM,IAAI;AAAA,EACV,MAAM,OAAO,EAAE;AAAA,EACf,OACC,MAAM,QAAQ,EAAE,OAAO,KACvB,CAAC,CAAC,QACF,OAAO,SAAS,YAChB,OAAO,KAAK,kBAAkB;AAAA;;;AC3OhC,IAAM,mBAAmB;AASlB,SAAS,aAAa,CAAC,QAAqC;AAAA,EAClE,IAAI,WAAW;AAAA,IAAW,OAAO;AAAA,EACjC,IAAI,OAAO,YAAY;AAAA,IAAa;AAAA,EACpC,OAAO,QAAQ,KAAK,cAAc;AAAA;AAO5B,SAAS,UAAU,CACzB,QAIS;AAAA,EACT,MAAM,SAAS,IAAI;AAAA,EACnB,YAAY,MAAM,UAAU,OAAO,QAAQ,MAAM,GAAG;AAAA,IACnD,IAAI,UAAU,aAAa,UAAU;AAAA,MAAM;AAAA,IAC3C,MAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,KAAK;AAAA,IACxE,IAAI,WAAW,WAAW;AAAA,MAAG;AAAA,IAC7B,OAAO,IAAI,MAAM,UAAU;AAAA,EAC5B;AAAA,EACA,MAAM,QAAQ,OAAO,SAAS;AAAA,EAC9B,OAAO,QAAQ,IAAI,UAAU;AAAA;AAAA;AAGvB,MAAe,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEV,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,KAAK,WAAW,QAAQ,WAAW,kBAAkB,QAAQ,QAAQ,EAAE;AAAA,IACvE,KAAK,SAAS,cAAc,QAAQ,MAAM;AAAA,IAC1C,KAAK,SAAS,QAAQ,UAAU;AAAA,IAGhC,KAAK,YAAY,QAAQ,cAAc,IAAI,SAAS,MAAM,GAAG,IAAI;AAAA;AAAA,SAG3D,WAAW,CAAC,QAAyC;AAAA,IAC3D,MAAM,UAAkC;AAAA,MACvC,gBAAgB;AAAA,IACjB;AAAA,IACA,IAAI,QAAQ;AAAA,MACX,QAAQ,gBAAgB,UAAU;AAAA,IACnC;AAAA,IACA,OAAO;AAAA;AAAA,OAGQ,QAAU,CACzB,QACA,MACA,MACa;AAAA,IACb,MAAM,WAAW,MAAM,KAAK,cAAc,QAAQ,MAAM,IAAI;AAAA,IAC5D,IAAI,SAAS,WAAW,KAAK;AAAA,MAC5B;AAAA,IACD;AAAA,IACA,OAAO,SAAS,KAAK;AAAA;AAAA,OAKN,cAAgB,CAC/B,QACA,MACA,MACoB;AAAA,IACpB,IAAI;AAAA,MACH,OAAO,MAAM,KAAK,QAAW,QAAQ,MAAM,IAAI;AAAA,MAC9C,OAAO,KAAK;AAAA,MACb,IAAI,eAAe,YAAY,IAAI,WAAW;AAAA,QAAK,OAAO;AAAA,MAC1D,MAAM;AAAA;AAAA;AAAA,OAIQ,YAAW,CAC1B,QACA,MACA,MACkB;AAAA,IAClB,MAAM,WAAW,MAAM,KAAK,cAAc,QAAQ,MAAM,IAAI;AAAA,IAC5D,OAAO,SAAS,KAAK;AAAA;AAAA,OAGR,cAAa,CAC1B,QACA,MACA,MACoB;AAAA,IACpB,MAAM,MAAM,GAAG,KAAK,UAAU;AAAA,IAC9B,MAAM,UAAU,WAAW,YAAY,KAAK,MAAM;AAAA,IAClD,QAAQ,iBAAiB,KAAK;AAAA,IAS9B,IAAI;AAAA,IACJ,IAAI,SAAS,aAAa,SAAS,MAAM;AAAA,MACxC,IAAI;AAAA,QACH,iBAAiB,KAAK,UAAU,MAAM,CAAC,MAAM,UAC5C,OAAO,UAAU,WAAW,MAAM,SAAS,IAAI,KAChD;AAAA,QACC,OAAO,KAAK;AAAA,QACb,MAAM,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,QAE9D,MAAM,IAAI,SACT,GACA,qCAAqC,UACrC,WACA,WACA,EAAE,WAAW,MAAM,CACpB;AAAA;AAAA,IAEF;AAAA,IAEA,IAAI;AAAA,IACJ,IAAI;AAAA,MACH,WAAW,MAAM,KAAK,UAAU,KAAK;AAAA,QACpC;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACP,CAAC;AAAA,MACA,OAAO,KAAK;AAAA,MACb,MAAM,IAAI,SACT,GACA,uBAAuB,KAAK,gDAC5B,WACA,WACA,EAAE,WAAW,MAAM,OAAO,eAAe,QAAQ,MAAM,UAAU,CAClE;AAAA;AAAA,IAGD,IAAI,CAAC,SAAS,IAAI;AAAA,MACjB,IAAI,SAAS,WAAW,KAAK;AAAA,QAC5B,MAAM,IAAI;AAAA,MACX;AAAA,MAEA,IAAI,SAAS,WAAW,KAAK;AAAA,QAG5B,MAAM,aAAa,SAAS,QAAQ,IAAI,aAAa;AAAA,QACrD,MAAM,MAAM,aACT,sBAAsB,wBACtB;AAAA,QACH,MAAM,IAAI,eAAe,KAAK,cAAc,SAAS;AAAA,MACtD;AAAA,MAEA,IAAI,SAAS,UAAU,KAAK;AAAA,QAC3B,MAAM,IAAI,SACT,SAAS,QACT,8CAA8C,KAAK,gBACpD;AAAA,MACD;AAAA,MAEA,MAAM,YAAY,MAAM,SAAS,KAAK;AAAA,MACtC,IAAI,UAAU,QAAQ,SAAS;AAAA,MAC/B,IAAI,aAAsB;AAAA,MAC1B,IAAI;AAAA,MACJ,IAAI;AAAA,QACH,MAAM,OAAO,KAAK,MAAM,SAAS;AAAA,QACjC,aAAa;AAAA,QACb,MAAM,MAAM,KAAK,SAAS,KAAK;AAAA,QAC/B,IAAI,OAAO,QAAQ,UAAU;AAAA,UAC5B,UAAU;AAAA,QACX,EAAO,SAAI,OAAO,OAAO,QAAQ,UAAU;AAAA,UAC1C,UAAU,KAAK,UAAU,GAAG;AAAA,QAC7B;AAAA,QACA,IAAI,OAAO,KAAK,SAAS,UAAU;AAAA,UAClC,OAAO,KAAK;AAAA,QACb;AAAA,QACC,MAAM;AAAA,QACP,IAAI;AAAA,UAAW,UAAU;AAAA;AAAA,MAE1B,IACC,SAAS,WAAW,OACpB,SAAS,yBACT,cACA,OAAO,eAAe,YACtB,qBAAsB,WAAqC,OAAO,GACjE;AAAA,QACD,MAAM,IAAI,uBACT,SACC,WAAqD,OACvD;AAAA,MACD;AAAA,MACA,MAAM,IAAI,SAAS,SAAS,QAAQ,SAAS,YAAY,IAAI;AAAA,IAC9D;AAAA,IAEA,OAAO;AAAA;AAET;;;ACpOO,MAAM,2BAA2B,SAAS;AAAA,EAChD,WAAW,CAAC,SAAiB,QAAgB,MAAgB;AAAA,IAC5D,MAAM,QAAQ,SAAS,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC3D,KAAK,OAAO;AAAA;AAEd;AAAA;AAGO,MAAM,8BAA8B,iBAAiB;AAAA,EAC3D,WAAW,CAAC,UAAU,mDAAmD;AAAA,IACxE,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA;AAEd;;;ACbA,IAAM,6BAA6B;AAQ5B,IAAM,SAAS;AAAA,EAiBrB,QAAQ,CAAC,QAAwB;AAAA,IAGhC,IAAI,UAAU;AAAA,MAAG,OAAO;AAAA,IACxB,OAAO,GAAG,SAAS,KAAK;AAAA;AAAA,EAIzB,KAAK,CAAC,QAA6D;AAAA,IAClE,MAAM,QAAQ,OAAO,MAAM,GAAG;AAAA,IAC9B,MAAM,cAAc,OAAO,MAAM,EAAE;AAAA,IACnC,MAAM,aAAa,OAAO,MAAM,EAAE;AAAA,IAClC,IACC,MAAM,WAAW,KACjB,CAAC,OAAO,UAAU,WAAW,KAC7B,CAAC,OAAO,UAAU,UAAU,GAC3B;AAAA,MACD,MAAM,IAAI,gBACT,0BAA0B,0DAC1B,GACD;AAAA,IACD;AAAA,IACA,OAAO,EAAE,aAAa,WAAW;AAAA;AAEnC;;;AC1CA,SAAS,QAAQ,CAAC,OAA6B;AAAA,EAC9C,OAAO,GAAG,MAAM,eAAe,MAAM,qBAAqB,MAAM;AAAA;AAgC1D,SAAS,yBAAyB,CAExC,UACA,YACO;AAAA,EACP,IAAI,aAAa,QAAQ,aAAa;AAAA,IAAW;AAAA,EACjD,IAAI,aAAa;AAAA,IAAY;AAAA,EAC7B,MAAM,IAAI,OAAO,MAAM,QAAQ;AAAA,EAC/B,MAAM,IAAI,eAAe,OAAO,OAAO,OAAO,MAAM,UAAU;AAAA,EAC9D,MAAM,QACL,MAAM,QACN,EAAE,cAAc,EAAE,eACjB,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE;AAAA,EACtD,IAAI,OAAO;AAAA,IACV,MAAM,WAAW,IAAI,MAAM,iBAAiB;AAAA,IAC5C,MAAM,IAAI,gBACT,4BAA4B,sDAAsD,wNAClF,GACD;AAAA,EACD;AAAA;AAKM,SAAS,YAAY,CAC3B,QACA,QACA,WACuB;AAAA,EACvB,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,WAAW,OAAO,OAAO,KAAK,IAAI,GAAG,YAAY,MAAM;AAAA,EACtE;AAAA;AAqBD,IAAM,qBAAqB;AAE3B,SAAS,YAAY,CAAC,KAAuB;AAAA,EAG5C,IAAI,OAAO,OAAO,QAAQ,YAAY,eAAe,KAAK;AAAA,IACzD,OAAQ,IAA+B,cAAc;AAAA,EACtD;AAAA,EACA,OAAO,eAAe;AAAA;AAGvB,SAAS,eAAe,CAAC,KAAkC;AAAA,EAC1D,IAAI,OAAO,OAAO,QAAQ,YAAY,uBAAuB,KAAK;AAAA,IACjE,MAAM,UAAW,IAAuC;AAAA,IACxD,IAAI,OAAO,YAAY,YAAY,OAAO,SAAS,OAAO,GAAG;AAAA,MAC5D,OAAO,KAAK,IAAI,UAAU,MAAM,kBAAkB;AAAA,IACnD;AAAA,EACD;AAAA,EACA;AAAA;AASD,eAAsB,kBAAqB,CAC1C,WACA,MACa;AAAA,EACb,MAAM,aAAa,KAAK,cAAc;AAAA,EACtC,MAAM,aAAa,KAAK,cAAc;AAAA,EACtC,SAAS,UAAU,IAAK,WAAW;AAAA,IAClC,IAAI;AAAA,MACH,OAAO,MAAM,UAAU;AAAA,MACtB,OAAO,KAAK;AAAA,MACb,MAAM,cAAc,aAAa;AAAA,MACjC,IAAI,eAAe,KAAK,CAAC,aAAa,GAAG,KAAK,KAAK,QAAQ,SAAS;AAAA,QACnE,MAAM;AAAA,MACP;AAAA,MACA,MAAM,UAAU,gBAAgB,GAAG,KAAK,cAAc,UAAU;AAAA,MAChE,KAAK,UAAU,KAAK,EAAE,SAAS,aAAa,QAAQ,CAAC;AAAA,MACrD,MAAM,KAAK,MAAM,SAAS,KAAK,MAAM;AAAA,MAErC,IAAI,KAAK,QAAQ;AAAA,QAAS,MAAM;AAAA;AAAA,EAElC;AAAA;AAGD,eAAsB,YAAY,CACjC,IACA,QACgB;AAAA,EAChB,IAAI,QAAQ;AAAA,IAAS;AAAA,EAErB,MAAM,IAAI,QAAc,CAAC,YAAY;AAAA,IACpC,MAAM,UAAU,WAAW,SAAS,EAAE;AAAA,IACtC,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,OAAO,iBACN,SACA,MAAM;AAAA,MACL,aAAa,OAAO;AAAA,MACpB,QAAQ;AAAA,OAET,EAAE,MAAM,KAAK,CACd;AAAA,GACA;AAAA;AAGF,eAAsB,oBAAiC,CAAC,MAyCkB;AAAA,EACzE,MAAM,QAAQ,KAAK,SAAS;AAAA,EAC5B,MAAM,OAAO,KAAK,QAAQ;AAAA,EAC1B,MAAM,gBAAgB,KAAK,iBAAiB;AAAA,EAC5C,MAAM,iBAAiB,KAAK,kBAAkB;AAAA,EAC9C,MAAM,WAAW,KAAK,YAAY,OAAO;AAAA,EACzC,MAAM,gBAAgB,KAAK,iBAAiB,OAAO;AAAA,EAEnD,IAAI,SAAS,KAAK,cAAe,MAAM,KAAK,MAAM,WAAW,KAAM;AAAA,EAGnE,MAAM,gBAAgB,IAAI;AAAA,EAC1B,IAAI,QAAQ;AAAA,EACZ,IAAI,aAAa;AAAA,EAGjB,IAAI,SAAwB;AAAA,EAE5B,OACC,QAAQ,YACR,aAAa,iBACb,CAAC,KAAK,QAAQ,SACb;AAAA,IAGD,MAAM,WAAW,MAAM,mBACtB,MACC,KAAK,YAAY;AAAA,MAChB;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,IACf,CAAC,GACF;AAAA,MACC,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,MACjB,SAAS,KAAK;AAAA,MACd;AAAA,MACA,QAAQ,KAAK;AAAA,IACd,CACD;AAAA,IACA;AAAA,IAMA,IAAI,CAAC,kBAAkB,KAAK,WAAW,KAAK,OAAO;AAAA,MAClD,MAAM,QAAQ,SAAS,OACrB,OAAO,CAAC,UAAU,CAAC,cAAc,IAAI,SAAS,KAAK,CAAC,CAAC,EACrD,KAAK,CAAC,GAAG,MAAM,EAAE,oBAAoB,EAAE,iBAAiB;AAAA,MAC1D,IAAI,MAAM,SAAS,GAAG;AAAA,QACrB,MAAM,YAAY,KAAK,IACtB,GAAG,MAAM,IAAI,CAAC,UAAU,MAAM,iBAAiB,CAChD;AAAA,QACA,MAAM,SAAS,OAAO,SAAS,SAAS;AAAA,QACxC,WAAW,SAAS,OAAO;AAAA,UAC1B,MAAM,KAAK,MAAM,SAAS,MAAM,mBAAmB,MAAM;AAAA,UACzD,MAAM,KAAK,UAAU,OAAO,EAAE,QAAQ,OAAO,CAAC;AAAA,UAC9C,cAAc,IAAI,SAAS,KAAK,CAAC;AAAA,QAClC;AAAA,QACA,SAAS;AAAA,QAGT,SAAS,YAAY,IAAI,YAAY,IAAI;AAAA,QACzC,aAAa;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAAA,IAEA,MAAM,UAAU,gBACb,SAAS,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,IACjD,SAAS;AAAA,IAGZ,MAAM,aAAa,gBACf,QAAQ,GAAG,EAAE,GAAG,UAAU,SAC3B,SAAS;AAAA,IAGZ,SAAS,QAAQ,GAAG,EAAE,GAAG,gBAAgB;AAAA,IAEzC,MAAM,MAAM,aAAa,YAAY,QAAQ,SAAS,IAAI,YAAY;AAAA,IAEtE,KAAK,aAAa,GAAG;AAAA,IAErB,IAAI;AAAA,IACJ,IAAI,KAAK,MAAM;AAAA,MACd,MAAM,OAAO,KAAK;AAAA,MAGlB,IACC,eAAe,SACd,eAAe,UAAU,QAAQ,SAAS,IAC1C;AAAA,QACD,MAAM,KAAK,YAAY,YAAY,OAAO,OAAO;AAAA,UAChD,MAAM,KAAK,QAAQ,SAAS,UAAU;AAAA,eAClC;AAAA,YACH;AAAA,UACD,CAA2C;AAAA,SAC3C;AAAA,MACF;AAAA,MACA,aAAa;AAAA,IACd,EAAO;AAAA,MACN,MAAM,iBAAiB,MAAM,KAAK,QACjC,SACA,UACA,GACD;AAAA,MACA,IAAI;AAAA,QAAe,0BAA0B,gBAAgB,UAAU;AAAA,MACvE,aAAa,kBAAkB;AAAA;AAAA,IAGhC,IAAI,cAAc,eAAe,QAAQ;AAAA,MACxC,SAAS;AAAA,MACT,aAAa;AAAA,MACb;AAAA,IACD;AAAA,IAEA,IAAI,QAAQ,WAAW,GAAG;AAAA,MACzB;AAAA,MACA,IAAI,SAAS,WAAW;AAAA,QACvB,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA,MACpC;AAAA,MACA,MAAM,MAAM,gBAAgB,KAAK,MAAM;AAAA,MACvC;AAAA,IACD;AAAA,IAEA,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA,EACpC;AAAA,EAEA,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA;AAUpC,gBAAuB,qBAAqB,CAAC,MAeZ;AAAA,EAChC,MAAM,QAAQ,KAAK,SAAS;AAAA,EAC5B,IAAI,SAAS,KAAK,cAAc;AAAA,EAEhC,OAAO,CAAC,KAAK,QAAQ,SAAS;AAAA,IAC7B,MAAM,WAAW,MAAM,KAAK,YAAY;AAAA,MACvC;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,IACf,CAAC;AAAA,IAED,MAAM,aAAa,SAAS,eAAe;AAAA,IAC3C,IAAI,SAAS,OAAO,SAAS,KAAK,SAAS,OAAO,SAAS,GAAG;AAAA,MAC7D,MAAM;AAAA,QACL,QAAQ,SAAS;AAAA,QACjB,QAAQ;AAAA,QACR,KAAK,SAAS;AAAA,QACd,QAAQ,SAAS;AAAA,MAClB;AAAA,IACD;AAAA,IAEA,MAAM,WAAW,eAAe,QAAQ,eAAe;AAAA,IACvD,SAAS;AAAA,IAET,IAAI,CAAC,YAAY,SAAS,OAAO,WAAW,GAAG;AAAA,MAC9C,IAAI,KAAK,QAAQ;AAAA,QAAS;AAAA,MAC1B,MAAM,MAAM,KAAK,YAAY,KAAK,MAAM;AAAA,IACzC;AAAA,EACD;AAAA;AAGD,gBAAuB,mBAAmB,CAAC,MAiBV;AAAA,EAChC,MAAM,QAAQ,KAAK,SAAS;AAAA,EAC5B,MAAM,iBAAiB,KAAK,kBAAkB;AAAA,EAC9C,MAAM,WAAW,KAAK,YAAY,OAAO;AAAA,EACzC,MAAM,gBAAgB,KAAK,iBAAiB,OAAO;AAAA,EACnD,IAAI,SAAS,KAAK,cAAc;AAAA,EAChC,IAAI,QAAQ;AAAA,EACZ,IAAI,aAAa;AAAA,EAEjB,OACC,QAAQ,YACR,aAAa,iBACb,CAAC,KAAK,QAAQ,SACb;AAAA,IACD,MAAM,WAAW,MAAM,KAAK,YAAY;AAAA,MACvC;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,IACf,CAAC;AAAA,IACD;AAAA,IAEA,WAAW,SAAS,SAAS,QAAQ;AAAA,MACpC,IAAI,KAAK,QAAQ;AAAA,QAAS;AAAA,MAC1B,MAAM;AAAA,IACP;AAAA,IAEA,MAAM,aAAa,SAAS;AAAA,IAC5B,IAAI,cAAc,eAAe,QAAQ;AAAA,MACxC,SAAS;AAAA,MACT,aAAa;AAAA,MACb;AAAA,IACD;AAAA,IAEA,IAAI,SAAS,OAAO,WAAW,GAAG;AAAA,MACjC;AAAA,MACA,IAAI,cAAc,iBAAiB,SAAS;AAAA,QAAU;AAAA,MACtD,MAAM,MAAM,gBAAgB,KAAK,MAAM;AAAA,MACvC;AAAA,IACD;AAAA,IAEA;AAAA,EACD;AAAA;;;AC3cM,SAAS,aAAa,CAC5B,SACA,OACA,WACS;AAAA,EACT,MAAM,QAAQ,QAAQ;AAAA,EACtB,IAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AAAA,IACpD,MAAM,IAAI,MAAM,GAAG,6BAA6B,OAAO;AAAA,EACxD;AAAA,EACA,OAAO;AAAA;AAGD,SAAS,cAAc,CAAC,OAA+B;AAAA,EAC7D,OAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AAAA;AAGzD,SAAS,kBAAkB,CACjC,SACA,OACA,WACS;AAAA,EACT,MAAM,SAAS,cAAc,SAAS,OAAO,SAAS;AAAA,EACtD,IAAI,CAAC,iBAAiB,KAAK,MAAM,GAAG;AAAA,IACnC,MAAM,IAAI,MAAM,GAAG,mCAAmC,OAAO;AAAA,EAC9D;AAAA,EACA,OAAO;AAAA;AAGD,SAAS,aAAa,CAC5B,SACA,WACS;AAAA,EACT,OAAO,mBAAmB,SAAS,UAAU,SAAS;AAAA;AAGhD,SAAS,oBAAoB,CACnC,iBACA,WACqD;AAAA,EACrD,OAAO,YAAY,aAAa,gBAAgB,MAAM,IAAI;AAAA,EAC1D,IAAI,CAAC,YAAY;AAAA,IAChB,MAAM,IAAI,MAAM,GAAG,kDAAkD;AAAA,EACtE;AAAA,EACA,OAAO;AAAA,IACN,aAAa;AAAA,IACb,YAAY,aAAa,UAAU,SAAS,IAAI,YAAY;AAAA,EAC7D;AAAA;AAKM,SAAS,eAAe,CAC9B,SACA,WACS;AAAA,EACT,MAAM,WAAW,QAAQ;AAAA,EACzB,IAAI,OAAO,aAAa,UAAU;AAAA,IACjC,IAAI,CAAC,mBAAmB,KAAK,QAAQ,GAAG;AAAA,MACvC,MAAM,IAAI,MAAM,GAAG,uCAAuC;AAAA,IAC3D;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EAEA,MAAM,QAAQ,QAAQ;AAAA,EACtB,MAAM,MACL,OAAO,UAAU,WACd,QACA,SACA,OAAO,UAAU,YACjB,OAAQ,MAA4B,QAAQ,WAC1C,MAA0B,MAC3B;AAAA,EAEL,IAAI,CAAC,KAAK;AAAA,IACT,MAAM,IAAI,MAAM,GAAG,iCAAiC;AAAA,EACrD;AAAA,EACA,IAAI,CAAC,mBAAmB,KAAK,GAAG,GAAG;AAAA,IAClC,MAAM,IAAI,MAAM,GAAG,uCAAuC;AAAA,EAC3D;AAAA,EACA,OAAO;AAAA;AAKD,SAAS,UAA+B,CAC9C,OACA,WACA,iBAUC;AAAA,EACD,OAAO;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,cAAc,MAAM;AAAA,IACpB,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB,aAAa,MAAM;AAAA,IACnB,YAAY;AAAA,IACZ;AAAA,IACA,eAAe,MAAM;AAAA,EACtB;AAAA;;;ACpGM,SAAS,MAAM,CAAC,OAAiC;AAAA,EACvD,MAAM,OAAO;AAAA,IACZ,QAAQ,MAAM;AAAA,IACd,cAAc,MAAM;AAAA,IACpB,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB,aAAa,MAAM;AAAA,IACnB,aAAa,MAAM;AAAA,EACpB;AAAA,EAGA,MAAM,IAAI,MAAM;AAAA,EAChB,QAAQ,MAAM;AAAA,SACR;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,QACxD,MAAM,eAAe,EAAE,IAAI;AAAA,MAC5B;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,MACzD;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,MACzD;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,QAAQ,cAAc,GAAG,kBAAkB,MAAM,UAAU;AAAA,QAC3D,QAAQ,mBAAmB,GAAG,iBAAiB,MAAM,UAAU;AAAA,QAC/D,SAAS,EAAE,eAAe,eAAe,EAAE,aAAa,EAAE;AAAA,MAC3D;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,MACzD;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,MACzD;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,MACzD;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,OAAO,gBAAgB,GAAG,MAAM,UAAU;AAAA,MAC3C;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,OAAO,gBAAgB,GAAG,MAAM,UAAU;AAAA,MAC3C;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,OAAO,gBAAgB,GAAG,MAAM,UAAU;AAAA,MAC3C;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,SAAS;AAAA,UACR,OAAO,eAAe,EAAE,KAAK;AAAA,UAC7B,OAAO,EAAE;AAAA,UACT,WAAW,eAAe,EAAE,SAAS;AAAA,QACtC;AAAA,MACD;AAAA;AAAA;;;ACxJH;AACA;AAoBO,SAAS,kBAAkB,CAAC,MAKlB;AAAA,EAChB,MAAM,UAAU,KAAK,SAAS,QAAQ,QAAQ,EAAE;AAAA,EAEhD,SAAS,cAAc,GAAW;AAAA,IACjC,IAAI,CAAC,SAAS;AAAA,MACb,MAAM,IAAI,mBACT,gEACA,CACD;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,SAAS,OAAO,CAAC,MAA+B;AAAA,IAC/C,MAAM,OAAO,eAAe;AAAA,IAC5B,MAAM,OAAO,KAAK,KAAK,QAAQ,QAAQ,EAAE;AAAA,IAIzC,IAAI;AAAA,MACH,MAAM,WAAW,IAAI,IAAI,IAAI,EAAE,SAAS,QAAQ,cAAc,EAAE;AAAA,MAChE,IAAI,YAAY,KAAK,WAAW,GAAG,WAAW,GAAG;AAAA,QAChD,OAAO,GAAG,QAAQ,KAAK,MAAM,SAAS,SAAS,CAAC;AAAA,MACjD;AAAA,MACC,MAAM;AAAA,IAGR,OAAO,GAAG,QAAQ;AAAA;AAAA,EAGnB,eAAe,IAAI,GAAkC;AAAA,IACpD,MAAM,MAAM,GAAG,eAAe;AAAA,IAC9B,MAAM,MAAM,MAAM,KAAK,UAAU,GAAG;AAAA,IACpC,IAAI,CAAC,IAAI,IAAI;AAAA,MACZ,MAAM,IAAI,mBACT,mCAAmC,IAAI,YACvC,IAAI,MACL;AAAA,IACD;AAAA,IACA,MAAM,WAAY,MAAM,IAAI,KAAK;AAAA,IACjC,IAAI,KAAK,gBAAgB;AAAA,MACxB,IAAI,CAAC,KAAK,kBAAkB;AAAA,QAC3B,MAAM,IAAI,sBACT,sEACD;AAAA,MACD;AAAA,MACA,MAAM,eAAe,MAAM,KAAK,iBAAiB;AAAA,MACjD,IAAI,CAAC,mCAAmC,UAAU,YAAY,GAAG;AAAA,QAChE,MAAM,IAAI,sBACT,iDACD;AAAA,MACD;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,eAAe,QAAQ,CAAC,MAA4C;AAAA,IACnE,MAAM,MAAM,MAAM,KAAK,UAAU,QAAQ,IAAI,CAAC;AAAA,IAC9C,IAAI,CAAC,IAAI,IAAI;AAAA,MACZ,MAAM,IAAI,mBACT,2BAA2B,KAAK,SAAS,IAAI,YAC7C,IAAI,MACL;AAAA,IACD;AAAA,IACA,MAAM,QAAQ,IAAI,WAAW,MAAM,IAAI,YAAY,CAAC;AAAA,IACpD,MAAM,SAAS,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,IAC9D,IAAI,WAAW,KAAK,QAAQ;AAAA,MAC3B,MAAM,IAAI,sBACT,QAAQ,KAAK,kCAAkC,KAAK,eAAe,UACpE;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,OAAO,EAAE,MAAM,SAAS,SAAS;AAAA;;;ACpGlC;AAqBO,SAAS,sBAAsB,CAAC,MAcxB;AAAA,EACd,QAAQ,WAAW;AAAA,EACnB,MAAM,aAAa,IAAI;AAAA,EACvB,MAAM,WAAW,OAAO;AAAA,EACxB,IAAI,UAAU;AAAA,IACb,IAAI,SAAS;AAAA,MAAS,WAAW,MAAM;AAAA,IAEtC;AAAA,eAAS,iBAAiB,SAAS,MAAM,WAAW,MAAM,GAAG;AAAA,QAC5D,MAAM;AAAA,MACP,CAAC;AAAA,EACH;AAAA,EACA,IAAI,SAAS,OAAO,cAAc;AAAA,EAClC,MAAM,mBAAmB,KAAK,oBAAoB;AAAA,EAElD,MAAM,MAAM,YAA2B;AAAA,IACtC,OAAO,CAAC,WAAW,OAAO,SAAS;AAAA,MAClC,IAAI;AAAA,QACH,MAAM,MAAM,GAAG,KAAK,mCAAmC,WAAW;AAAA,UACjE,aAAa,UAAU;AAAA,UACvB,OAAO,OAAO;AAAA,UACd,WAAW,OAAO;AAAA,UAClB,aAAa,OAAO;AAAA,UACpB,QAAQ,OAAO;AAAA,UACf,WAAW,OAAO;AAAA,UAClB,kBAAkB,OAAO;AAAA,UAGzB,SAAS,OAAO,UAAU,KAAK,UAAU,OAAO,OAAO,IAAI;AAAA,QAC5D,CAAC;AAAA,QACD,MAAM,MAAM,MAAM,KAAK,UAAU,KAAK;AAAA,UACrC,SAAS;AAAA,YACR,eAAe,UAAU,KAAK;AAAA,YAC9B,QAAQ;AAAA,UACT;AAAA,UACA,QAAQ,WAAW;AAAA,QACpB,CAAC;AAAA,QACD,IAAI,CAAC,IAAI,IAAI;AAAA,UACZ,MAAM,IAAI,mBACT,wBAAwB,IAAI,WAC5B,IAAI,MACL;AAAA,QACD;AAAA,QACA,IAAI,CAAC,IAAI,MAAM;AAAA,UACd,MAAM,IAAI,mBAAmB,qCAAqC,CAAC;AAAA,QACpE;AAAA,QACA,iBAAiB,SAAS,eAAe,IAAI,MAAM,WAAW,MAAM,GAAG;AAAA,UACtE,IAAI,MAAM,UAAU,UAAU,CAAC,MAAM;AAAA,YAAM;AAAA,UAC3C,IAAI;AAAA,UACJ,IAAI;AAAA,YACH,SAAS,KAAK,MAAM,MAAM,IAAI;AAAA,YAC7B,MAAM;AAAA,YACP;AAAA;AAAA,UAED,IAAI,CAAC,OAAO;AAAA,YAAO;AAAA,UACnB,IAAI,KAAK,WAAW,OAAO;AAAA,YAC1B,IAAI,CAAC,OAAO,KAAK;AAAA,cAGhB,IAAI,KAAK,WAAW,UAAU;AAAA,gBAC7B,MAAM,IAAI,sBACT,yCACD;AAAA,cACD;AAAA,YACD,EAAO;AAAA,cACN,MAAM,MAAM,MAAM,KAAK,QAAQ;AAAA,cAG/B,IACC,CAAC,QAAQ,cACR,KAAK,UAAU,OAAO,KAAK,GAC3B,OAAO,KACP,IAAI,SACL,GACC;AAAA,gBACD,MAAM,IAAI,sBACT,yCACD;AAAA,cACD;AAAA;AAAA,UAEF;AAAA,UACA,SAAU,OAAO,MAA8B,UAAU;AAAA,UACzD,MAAM,OAAO,QAAQ,OAAO,KAAK;AAAA,QAClC;AAAA,QAEC,OAAO,KAAK;AAAA,QACb,IAAI,WAAW,OAAO;AAAA,UAAS;AAAA,QAC/B,OAAO,UAAU,GAAG;AAAA,QACpB,MAAM,MAAM,kBAAkB,WAAW,MAAM;AAAA;AAAA,IAEjD;AAAA;AAAA,EAEI,IAAI;AAAA,EACT,OAAO,MAAM,WAAW,MAAM;AAAA;AAG/B,SAAS,KAAK,CAAC,IAAY,QAAoC;AAAA,EAC9D,OAAO,IAAI,QAAQ,CAAC,YAAY;AAAA,IAC/B,IAAI,OAAO;AAAA,MAAS,OAAO,QAAQ;AAAA,IACnC,MAAM,UAAU,MAAM;AAAA,MACrB,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA;AAAA,IAET,MAAM,QAAQ,WAAW,MAAM;AAAA,MAC9B,OAAO,oBAAoB,SAAS,OAAO;AAAA,MAC3C,QAAQ;AAAA,OACN,EAAE;AAAA,IACL,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,GACxD;AAAA;AAGF,gBAAgB,cAAc,CAC7B,MACA,QACoD;AAAA,EACpD,MAAM,SAAS,KAAK,UAAU;AAAA,EAC9B,MAAM,UAAU,IAAI;AAAA,EACpB,IAAI,SAAS;AAAA,EACb,IAAI;AAAA,IACH,OAAO,CAAC,OAAO,SAAS;AAAA,MACvB,QAAQ,OAAO,SAAS,MAAM,OAAO,KAAK;AAAA,MAC1C,IAAI;AAAA,QAAM;AAAA,MACV,UAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAAA,MAChD,IAAI,MAAM,OAAO,QAAQ;AAAA;AAAA,CAAM;AAAA,MAC/B,OAAO,QAAQ,IAAI;AAAA,QAClB,MAAM,WAAW,OAAO,MAAM,GAAG,GAAG,CAAC;AAAA,QACrC,SAAS,OAAO,MAAM,MAAM,CAAC;AAAA,QAC7B,MAAM,OAAO,QAAQ;AAAA;AAAA,CAAM;AAAA,MAC5B;AAAA,IACD;AAAA,YACC;AAAA,IACD,IAAI;AAAA,MACH,MAAM,OAAO,OAAO;AAAA,MACnB,MAAM;AAAA;AAAA;AAMV,SAAS,UAAU,CAAC,KAAgD;AAAA,EACnE,IAAI;AAAA,EACJ,MAAM,OAAiB,CAAC;AAAA,EACxB,WAAW,QAAQ,IAAI,MAAM;AAAA,CAAI,GAAG;AAAA,IACnC,IAAI,KAAK,WAAW,OAAO,GAAG;AAAA,MAC7B,KAAK,KAAK,KAAK,MAAM,KAAK,WAAW,QAAQ,IAAI,IAAI,CAAC,CAAC;AAAA,IACxD,EAAO,SAAI,KAAK,WAAW,QAAQ,GAAG;AAAA,MACrC,QAAQ,KAAK,MAAM,KAAK,WAAW,SAAS,IAAI,IAAI,CAAC,EAAE,KAAK;AAAA,IAC7D;AAAA,EACD;AAAA,EACA,OAAO,EAAE,OAAO,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK;AAAA,CAAI,IAAI,UAAU;AAAA;;;AT7IrE,SAAS,WAAW,CAAC,QAAyC;AAAA,EAC7D,IAAI,CAAC;AAAA,IAAQ,OAAO,CAAC,IAAI,EAAE;AAAA,EAC3B,MAAM,QAAQ,OAAO,MAAM,GAAG;AAAA,EAC9B,OAAO,OAAO,SAAS,MAAM,IAAI,MAAM;AAAA,EACvC,IACC,MAAM,WAAW,KACjB,CAAC,OAAO,UAAU,KAAK,KACvB,CAAC,OAAO,UAAU,KAAK,GACtB;AAAA,IACD,MAAM,IAAI,gBACT,0BAA0B,0DAC1B,GACD;AAAA,EACD;AAAA,EACA,OAAO,CAAC,OAAO,KAAK;AAAA;AAIrB,SAAS,SAAS,CAAC,GAAkB,GAAiC;AAAA,EACrE,OAAO,IAAI,MAAM,YAAY,CAAC;AAAA,EAC9B,OAAO,IAAI,MAAM,YAAY,CAAC;AAAA,EAC9B,OAAO,KAAK,MAAO,OAAO,MAAM,MAAM,KAAM,IAAI;AAAA;AAGjD,IAAM,2BAA2B;AAuCjC,SAAS,gBAAgB,CAAC,SAAyB;AAAA,EAClD,OAAO,QAAQ,QAAQ,QAAQ,EAAE;AAAA;AAGlC,eAAe,YAAY,CAAC,UAAsC;AAAA,EACjE,MAAM,OAAO,MAAM,SAAS,KAAK;AAAA,EACjC,IAAI,KAAK,WAAW;AAAA,IAAG;AAAA,EACvB,IAAI;AAAA,IACH,OAAO,KAAK,MAAM,IAAI;AAAA,IACrB,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIT,SAAS,YAAY,CAAC,MAAe,UAA0B;AAAA,EAC9D,IAAI,QAAQ,OAAO,SAAS,UAAU;AAAA,IACrC,MAAM,SAAS;AAAA,IACf,MAAM,UAAU,OAAO,SAAS,OAAO;AAAA,IACvC,IAAI,OAAO,YAAY,YAAY,QAAQ,SAAS;AAAA,MAAG,OAAO;AAAA,EAC/D;AAAA,EACA,IAAI,OAAO,SAAS,YAAY,KAAK,SAAS;AAAA,IAAG,OAAO;AAAA,EACxD,OAAO;AAAA;AAGR,eAAe,eAAe,CAAC,UAAoC;AAAA,EAClE,MAAM,OAAO,MAAM,aAAa,QAAQ;AAAA,EAExC,IAAI,SAAS,WAAW,KAAK;AAAA,IAC5B,MAAM,IAAI,UAAU,aAAa,MAAM,6BAA6B,CAAC;AAAA,EACtE;AAAA,EAEA,IAAI,SAAS,WAAW,KAAK;AAAA,IAC5B,MAAM,aAAa,SAAS,QAAQ,IAAI,aAAa,KAAK;AAAA,IAC1D,MAAM,IAAI,eACT,aAAa,MAAM,gCAAgC,GACnD,UACD;AAAA,EACD;AAAA,EAEA,IAAI,SAAS,UAAU,KAAK;AAAA,IAC3B,MAAM,IAAI,mBACT,aAAa,MAAM,2BAA2B,SAAS,SAAS,GAChE,SAAS,QACT,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,gBACT,aAAa,MAAM,4BAA4B,SAAS,SAAS,GACjE,SAAS,QACT,IACD;AAAA;AAGM,SAAS,mBAAmB,CAClC,SACgB;AAAA,EAChB,MAAM,UAAU,iBAAiB,QAAQ,WAAW,wBAAwB;AAAA,EAC5E,MAAM,YAAY,QAAQ,cAAc,CAAC,OAAO,SAAS,MAAM,OAAO,IAAI;AAAA,EAC1E,MAAM,SAAS,QAAQ;AAAA,EAOvB,MAAM,aACL,WAAW,QAAQ,QAAQ,WAAW,YAAY,YAAY;AAAA,EAS/D,IAAI,aAA8C;AAAA,EAClD,SAAS,OAAO,GAA6B;AAAA,IAC5C,IAAI;AAAA,MAAY,OAAO;AAAA,IACvB,cAAc,YAAY;AAAA,MACzB,IAAI,OAAO,WAAW,UAAU;AAAA,QAC/B,OAAO;AAAA,UACN,OAAO,SAAQ,aAAa,OAAO,SAAS;AAAA,UAC5C,cAAc,OAAO;AAAA,UACrB,WAAW,SAAQ,qBAAqB,OAAO,SAAS;AAAA,QACzD;AAAA,MACD;AAAA,MACA,MAAM,MAAM,MAAM,UAAU,GAAG,oCAAoC;AAAA,MACnE,IAAI,CAAC,IAAI,IAAI;AAAA,QACZ,MAAM,IAAI,sBACT,gCAAgC,IAAI,UACrC;AAAA,MACD;AAAA,MACA,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAI7B,IAAI,CAAC,KAAK,gBAAgB;AAAA,QACzB,MAAM,IAAI,sBAAsB,mCAAmC;AAAA,MACpE;AAAA,MACA,OAAO;AAAA,QACN,OAAO,KAAK,UAAU,SAAQ,aAAa,KAAK,cAAc;AAAA,QAC9D,cAAc,KAAK;AAAA,QACnB,WAAW,SAAQ,qBAAqB,KAAK,cAAc;AAAA,MAC5D;AAAA,OACE;AAAA,IACH,OAAO;AAAA;AAAA,EAGR,MAAM,QAAQ,mBAAmB;AAAA,IAChC,SAAS,QAAQ;AAAA,IACjB;AAAA,IACA,gBAAgB,QAAQ,uBAAuB;AAAA,IAC/C,kBAAkB,aAAa,MAAM,QAAQ,GAAG;AAAA,EACjD,CAAC;AAAA,EAED,eAAe,OAAU,CAAC,MAA0B;AAAA,IACnD,MAAM,WAAW,MAAM,UAAU,GAAG,UAAU,QAAQ;AAAA,MACrD,SAAS,EAAE,eAAe,UAAU,QAAQ,SAAS;AAAA,IACtD,CAAC;AAAA,IACD,IAAI,CAAC,SAAS;AAAA,MAAI,MAAM,gBAAgB,QAAQ;AAAA,IAChD,MAAM,OAAO,MAAM,SAAS,KAAK;AAAA,IACjC,IAAI,eAAe,OAAO;AAAA,MACzB,MAAM,YAAY,SAAS,QAAQ,IAAI,aAAa;AAAA,MACpD,IAAI,CAAC,WAAW;AAAA,QAGf,IAAI,eAAe,UAAU;AAAA,UAC5B,MAAM,IAAI,sBAAsB,kCAAkC;AAAA,QACnE;AAAA,MACD,EAAO;AAAA,QACN,MAAM,gBAAgB,SAAS,QAAQ,IAAI,mBAAmB;AAAA,QAC9D,IAAI,MAAM,MAAM,QAAQ;AAAA,QAExB,IAAI,iBAAiB,kBAAkB,IAAI,OAAO;AAAA,UACjD,IAAI,OAAO,WAAW,UAAU;AAAA,YAE/B,MAAM,IAAI,sBACT,6BAA6B,wCAAwC,IAAI,SAC1E;AAAA,UACD;AAAA,UAGA,aAAa;AAAA,UACb,MAAM,MAAM,QAAQ;AAAA,UACpB,IAAI,kBAAkB,IAAI,OAAO;AAAA,YAChC,MAAM,IAAI,sBACT,6BAA6B,wDAC9B;AAAA,UACD;AAAA,QACD;AAAA,QAGA,IAAI,CAAC,SAAQ,cAAc,MAAM,WAAW,IAAI,SAAS,GAAG;AAAA,UAC3D,MAAM,IAAI;AAAA,QACX;AAAA;AAAA,IAEF;AAAA,IACA,OAAO,KAAK,MAAM,IAAI;AAAA;AAAA,EAGvB,MAAM,cAAoC;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,QACK;AAAA,IACL,OAAO,WAAW;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC;AAAA;AAAA,EAGF,SAAS,aAAa,CAAC,SAAuC;AAAA,IAC7D,OAAO,UAAU,KAAK,UAAU,OAAO,IAAI;AAAA;AAAA,EAG5C,eAAe,UAAU,CACxB,SAAkC,CAAC,GACF;AAAA,IACjC,OAAO,QACN,qBAAqB,WAAW;AAAA,MAC/B,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,MAClB,kBAAkB,OAAO;AAAA,MACzB,OAAO,OAAO;AAAA,MACd,WAAW,OAAO;AAAA,MAClB,SAAS,cAAc,OAAO,OAAO;AAAA,IACtC,CAAC,GACF;AAAA;AAAA,EASD,SAAS,aAIR,CAGA,QAGsC;AAAA,IACtC,MAAM,SAAS,OAAO,UAAU,OAAO,KAAK,OAAO,OAAO,IAAI,CAAC;AAAA,IAI/D,IAAI,OAAO,WAAW,KAAK,CAAC,OAAO,SAAS;AAAA,MAC3C,MAAM,IAAI,gBACT,uDACA,GACD;AAAA,IACD;AAAA,IACA,IAAI,OAAO,SAAS,KAAK,CAAC,OAAO,MAAM,CAAC,OAAO,SAAS;AAAA,MACvD,MAAM,IAAI,gBACT,2DACA,GACD;AAAA,IACD;AAAA,IACA,MAAM,WAAW,OAAO;AAAA,IAcxB,MAAM,UAAU,CAAC,WAChB,OAAO,UAAU,OAAO,IAAI,MAAM,IAAI;AAAA,IAEvC,MAAM,UAAsD,OAC3D,QACA,UACA,QACI;AAAA,MAGJ,WAAW,SAAS,QAAQ;AAAA,QAC3B,MAAM,WAAW,OAAO,OAAO,CAAC,UAC/B,MAAM,SAAS,SAAS,KAAK,CAC9B;AAAA,QACA,IAAI,SAAS,WAAW;AAAA,UAAG;AAAA,QAC3B,MAAM,WAAW,SAAS,QAAQ,QAAQ,GAAG,GAAG;AAAA,MACjD;AAAA,MAKA,MAAM,cAAc,OAAO;AAAA,MAM3B,OAAQ,MAAM,cAAc,QAAQ,MAAM,GAAG,UAAU,GAAG;AAAA;AAAA,IAM3D,OAAO,qBAA0B;AAAA,MAChC,YAAY,OAAO;AAAA,MACnB,MAAM,OAAO;AAAA,MACb,YAAY,OAAO;AAAA,MACnB,MAAM,OAAO;AAAA,MACb,eAAe,OAAO;AAAA,MACtB,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,MACjB,YAAY,OAAO;AAAA,MACnB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,MAClB,iBAAiB,OAAO;AAAA,MACxB,SAAS,OAAO;AAAA,MAChB,WAAW,OAAO,aAAa;AAAA,MAC/B;AAAA,MACA;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,gBAAgB,OAAO;AAAA,MACvB,UAAU,OAAO;AAAA,MACjB,eAAe,OAAO;AAAA,MACtB,QAAQ,OAAO;AAAA,MACf,YAAY,OAAO;AAAA,MACnB,YAAY,OAAO;AAAA,MACnB,SAAS,OAAO;AAAA,IACjB,CAAC;AAAA;AAAA,EAGF,OAAO;AAAA,IACN,OAAO,CAAC,SAA+B,CAAC,GAAG;AAAA,MAC1C,OAAO,sBAAsB;AAAA,QAC5B,YAAY,OAAO;AAAA,QACnB,WAAW,OAAO,aAAa;AAAA,QAC/B,YAAY,OAAO,cAAc;AAAA,QACjC,OAAO,OAAO;AAAA,QACd,UAAU,OAAO;AAAA,QACjB,YAAY,OAAO;AAAA,QACnB,QAAQ,OAAO;AAAA,QACf,WAAW,OAAO;AAAA,QAClB,iBAAiB,OAAO;AAAA,QACxB,QAAQ,OAAO;AAAA,QACf;AAAA,MACD,CAAC;AAAA;AAAA,IAEF,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,MAAM,CAAC,MAAc;AAAA,QACpB,OAAO,QACN,sBAAsB,mBAAmB,IAAI,GAC9C;AAAA;AAAA,MAED,SAAS;AAAA,MACT,MAAM,CAAC,SAAoC,CAAC,GAAG;AAAA,QAC9C,OAAO,oBAAoB;AAAA,UAC1B,YAAY,OAAO;AAAA,UACnB,OAAO,OAAO;AAAA,UACd,UAAU,OAAO;AAAA,UACjB,YAAY,OAAO;AAAA,UACnB,QAAQ,OAAO;AAAA,UACf,WAAW,OAAO;AAAA,UAClB,iBAAiB,OAAO;AAAA,UACxB,WAAW,OAAO,aAAa;AAAA,UAC/B,gBAAgB,OAAO;AAAA,UACvB,UAAU,OAAO;AAAA,UACjB,eAAe,OAAO;AAAA,UACtB,QAAQ,OAAO;AAAA,UACf;AAAA,QACD,CAAC;AAAA;AAAA,MAEF,SAAS,CAAC,QAAsC;AAAA,QAC/C,OAAO,uBAAuB;AAAA,UAC7B;AAAA,UACA,QAAQ,QAAQ;AAAA,UAChB;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,QACD,CAAC;AAAA;AAAA,WAEI,OAAM,CAAC,QAAmC;AAAA,QAC/C,MAAM,aACL,OAAO,SAAS,YAAY,OAAQ,OAAO,QAAQ;AAAA,QACpD,MAAM,YAAY,aAAa,YAAY,UAAU,EAAE,KAAK;AAAA,QAC5D,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QAGlC,MAAM,QAAQ,SAAS,MACrB,OAAO,CAAC,SAAS,KAAK,YAAY,SAAS,EAC3C,KACA,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,QACzD;AAAA,QACD,WAAW,QAAQ,OAAO;AAAA,UACzB,IAAI,OAAO,QAAQ;AAAA,YAAS;AAAA,UAC5B,MAAM,OAAO,WAAW,IAAI;AAAA,QAC7B;AAAA,QAIA,MAAM,OAAO,UAAU,YAAY,SAAS,uBAAuB;AAAA,QACnE,OAAO,qBAAqB;AAAA,UAC3B,YAAY;AAAA,UACZ,MAAM,OAAO,QAAQ;AAAA,UACrB,WAAW,OAAO,aAAa;AAAA,UAC/B;AAAA,UACA,SAAS,OAAO;AAAA,UAChB,SAAS,OAAO;AAAA,UAChB,gBAAgB,OAAO;AAAA,UACvB,UAAU,OAAO;AAAA,UACjB,eAAe,OAAO;AAAA,UACtB,QAAQ,OAAO;AAAA,QAChB,CAAC;AAAA;AAAA,IAEH;AAAA,IACA,QAAQ;AAAA,MACP,MAAM,CAAC,cAA+B;AAAA,QACrC,OAAO,QACN,sBAAsB,mBAAmB,OAAO,YAAY,CAAC,UAC9D;AAAA;AAAA,IAEF;AAAA,IACA,QAAQ;AAAA,MACP,IAAI,CAAC,QAAiC;AAAA,QACrC,OAAO,QACN,qBAAqB,WAAW;AAAA,UAC/B,OAAO,OAAO;AAAA,UACd,OAAO,OAAO;AAAA,QACf,CAAC,GACF;AAAA;AAAA,IAEF;AAAA,IACA;AAAA,IACA,SAAS,CAAC,QAAgB;AAAA,MACzB,OAAO,QAA+B,yBAAyB,QAAQ;AAAA;AAAA,IAExE,GAAG,GAAG;AAAA,MACL,OAAO,QAAoB,iBAAiB;AAAA;AAAA,IAE7C,KAAK,GAAG;AAAA,MACP,OAAO,QAAsB,mBAAmB;AAAA;AAAA,EAElD;AAAA;;AUlfM,SAAS,YAAY,CAAC,OAA+C;AAAA,EAC3E,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,gBAAgB,CAAC,OAAwC;AAAA,EACxE,IAAI,CAAC,aAAa,KAAK,GAAG;AAAA,IACzB,MAAM,IAAI,MAAM,mCAAmC,MAAM,YAAY;AAAA,EACtE;AAAA,EAEA,MAAM,UAAU,MAAM;AAAA,EACtB,MAAM,kBAAkB,cACvB,SACA,oBACA,aACD;AAAA,EACA,MAAM,SAAS,cAAc,SAAS,UAAU,aAAa;AAAA,EAC7D,MAAM,YAAY,cAAc,SAAS,aAAa,aAAa;AAAA,EACnE,MAAM,SAAS,cAAc,SAAS,aAAa;AAAA,EACnD,QAAQ,aAAa,eAAe,qBACnC,iBACA,aACD;AAAA,EAEA,OAAO,WAAW,OAAO,eAAe;AAAA,IACvC,kBAAkB;AAAA,IAClB,aAAa,MAAM,eAAe;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA;;AC9BK,SAAS,aAAa,CAAC,OAAgD;AAAA,EAC7E,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,iBAAiB,CAAC,OAAyC;AAAA,EAC1E,IAAI,CAAC,cAAc,KAAK,GAAG;AAAA,IAC1B,MAAM,IAAI,MAAM,oCAAoC,MAAM,YAAY;AAAA,EACvE;AAAA,EAEA,MAAM,UAAU,MAAM;AAAA,EACtB,MAAM,kBAAkB,cACvB,SACA,oBACA,cACD;AAAA,EACA,MAAM,SAAS,cAAc,SAAS,UAAU,cAAc;AAAA,EAC9D,MAAM,YAAY,cAAc,SAAS,aAAa,cAAc;AAAA,EACpE,MAAM,QAAQ,gBAAgB,SAAS,cAAc;AAAA,EACrD,QAAQ,aAAa,eAAe,qBACnC,iBACA,cACD;AAAA,EAEA,OAAO,WAAW,OAAO,gBAAgB;AAAA,IACxC,kBAAkB;AAAA,IAClB,aAAa,MAAM,eAAe;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA;;ACNK,SAAS,aAAa,CAC5B,OACyD;AAAA,EACzD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,iBAAiB,CAAC,OAAyC;AAAA,EAC1E,IAAI,CAAC,cAAc,KAAK,GAAG;AAAA,IAC1B,MAAM,IAAI,MAAM,oCAAoC,MAAM,YAAY;AAAA,EACvE;AAAA,EACA,MAAM,UAAU,MAAM;AAAA,EACtB,OAAO,WAAW,OAAO,gBAAgB;AAAA,IACxC,QAAQ,cAAc,SAAS,UAAU,cAAc;AAAA,IACvD,WAAW,cAAc,SAAS,aAAa,cAAc;AAAA,IAC7D,QAAQ,cAAc,SAAS,cAAc;AAAA,IAC7C,MAAM,eAAe,QAAQ,IAAI;AAAA,EAClC,CAAC;AAAA;AAGK,SAAS,SAAS,CACxB,OACqD;AAAA,EACrD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,aAAa,CAAC,OAAqC;AAAA,EAClE,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,gCAAgC,MAAM,YAAY;AAAA,EACnE;AAAA,EACA,MAAM,UAAU,MAAM;AAAA,EACtB,OAAO,WAAW,OAAO,YAAY;AAAA,IACpC,WAAW,cAAc,SAAS,aAAa,UAAU;AAAA,IACzD,QAAQ,cAAc,SAAS,UAAU;AAAA,EAC1C,CAAC;AAAA;AAGK,SAAS,SAAS,CACxB,OACqD;AAAA,EACrD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,aAAa,CAAC,OAAqC;AAAA,EAClE,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,gCAAgC,MAAM,YAAY;AAAA,EACnE;AAAA,EACA,MAAM,UAAU,MAAM;AAAA,EACtB,OAAO,WAAW,OAAO,YAAY;AAAA,IACpC,QAAQ,cAAc,SAAS,UAAU,UAAU;AAAA,IACnD,QAAQ,cAAc,SAAS,UAAU;AAAA,EAC1C,CAAC;AAAA;AAuBK,SAAS,SAAS,CACxB,OACqD;AAAA,EACrD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,aAAa,CAAC,OAAqC;AAAA,EAClE,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,gCAAgC,MAAM,YAAY;AAAA,EACnE;AAAA,EACA,MAAM,UAAU,MAAM;AAAA,EACtB,OAAO,WAAW,OAAO,YAAY;AAAA,IACpC,QAAQ,cAAc,SAAS,kBAAkB,UAAU;AAAA,IAC3D,QAAQ,mBAAmB,SAAS,iBAAiB,UAAU;AAAA,IAC/D,SAAS,EAAE,eAAe,eAAe,QAAQ,aAAa,EAAE;AAAA,EACjE,CAAC;AAAA;;AC9DF,SAAS,WAAW,CAAC,OAAqB,WAAmB;AAAA,EAC5D,MAAM,kBAAkB,cACvB,MAAM,SACN,oBACA,SACD;AAAA,EACA,QAAQ,aAAa,eAAe,qBACnC,iBACA,SACD;AAAA,EACA,OAAO;AAAA,IACN,kBAAkB;AAAA,IAClB,aAAa,MAAM,eAAe;AAAA,IAClC;AAAA,EACD;AAAA;AAGM,SAAS,QAAQ,CACvB,OACoD;AAAA,EACpD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,YAAY,CAAC,OAAoC;AAAA,EAChE,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,IACrB,MAAM,IAAI,MAAM,+BAA+B,MAAM,YAAY;AAAA,EAClE;AAAA,EACA,OAAO,WAAW,OAAO,WAAW;AAAA,OAChC,YAAY,OAAO,SAAS;AAAA,IAC/B,WAAW,cAAc,MAAM,SAAS,aAAa,SAAS;AAAA,IAC9D,QAAQ,cAAc,MAAM,SAAS,SAAS;AAAA,EAC/C,CAAC;AAAA;AAGK,SAAS,QAAQ,CACvB,OACoD;AAAA,EACpD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,YAAY,CAAC,OAAoC;AAAA,EAChE,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,IACrB,MAAM,IAAI,MAAM,+BAA+B,MAAM,YAAY;AAAA,EAClE;AAAA,EACA,OAAO,WAAW,OAAO,WAAW;AAAA,OAChC,YAAY,OAAO,SAAS;AAAA,IAC/B,QAAQ,cAAc,MAAM,SAAS,UAAU,SAAS;AAAA,IACxD,QAAQ,cAAc,MAAM,SAAS,SAAS;AAAA,EAC/C,CAAC;AAAA;AAGK,SAAS,SAAS,CACxB,OACqD;AAAA,EACrD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,aAAa,CAAC,OAAqC;AAAA,EAClE,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,gCAAgC,MAAM,YAAY;AAAA,EACnE;AAAA,EACA,OAAO,WAAW,OAAO,YAAY;AAAA,OACjC,YAAY,OAAO,UAAU;AAAA,IAChC,WAAW,cAAc,MAAM,SAAS,aAAa,UAAU;AAAA,IAC/D,OAAO,gBAAgB,MAAM,SAAS,UAAU;AAAA,EACjD,CAAC;AAAA;AAGK,SAAS,SAAS,CACxB,OACqD;AAAA,EACrD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,aAAa,CAAC,OAAqC;AAAA,EAClE,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,gCAAgC,MAAM,YAAY;AAAA,EACnE;AAAA,EACA,OAAO,WAAW,OAAO,YAAY;AAAA,OACjC,YAAY,OAAO,UAAU;AAAA,IAChC,QAAQ,cAAc,MAAM,SAAS,UAAU,UAAU;AAAA,IACzD,OAAO,gBAAgB,MAAM,SAAS,UAAU;AAAA,EACjD,CAAC;AAAA;;ACvKF;AAIO,SAAS,UAAU,CAAC,OAAyB;AAAA,EACnD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,MAAM,SAAS;AAAA,EACrD,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,MAAM,IAAI,UAAU;AAAA,EACrD,IAAI,SAAS,OAAO,UAAU,UAAU;AAAA,IACvC,MAAM,MAA+B,CAAC;AAAA,IACtC,YAAY,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,MAC/C,IAAI,OAAO,WAAW,GAAG;AAAA,IAC1B;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EACA,OAAO;AAAA;AAKD,SAAS,kBAAkB,CAAC,KAAsB;AAAA,EACxD,IAAI;AAAA,IACH,MAAM,QAAQ,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IACpD,OAAO,WAAW,UAAU,cAAc,KAAK,CAAC,CAAC;AAAA,IAChD,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;;;ACOT,SAAS,aAAa,CAAC,SAAiD;AAAA,EACvE,IAAI,OAAO,QAAQ,cAAc;AAAA,IAAU,OAAO,QAAQ;AAAA,EAC1D,MAAM,QAAQ,QAAQ;AAAA,EACtB,IAAI,OAAO,UAAU,YAAY,MAAM,WAAW,IAAI;AAAA,IAAG,OAAO;AAAA,EAChE,IACC,SACA,OAAO,UAAU,YACjB,OAAQ,MAA4B,QAAQ,UAC3C;AAAA,IACD,OAAQ,MAA0B;AAAA,EACnC;AAAA,EACA,OAAO;AAAA;AAGD,SAAS,OAAO,CACtB,OACkD;AAAA,EAClD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,WAAW,CAAC,OAAmC;AAAA,EAC9D,IAAI,CAAC,QAAQ,KAAK,GAAG;AAAA,IACpB,MAAM,IAAI,MAAM,6BAA6B,MAAM,YAAY;AAAA,EAChE;AAAA,EACA,MAAM,UAAU,MAAM;AAAA,EACtB,MAAM,QAAQ,eAAe,QAAQ,KAAK;AAAA,EAC1C,MAAM,WAAW,cAAc,OAAO;AAAA,EAEtC,MAAM,QAAQ,WACX,mBAAmB,QAAQ,IAC3B,WAAW,QAAQ,SAAS,IAAI;AAAA,EAEnC,OAAO,WAAW,OAAO,SAAS;AAAA,IACjC,aAAa,MAAM,eAAe,eAAe,QAAQ,WAAW;AAAA,IACpE,SAAS,EAAE,OAAO,OAAO,WAAW,SAAS;AAAA,EAC9C,CAAC;AAAA;;AChEF;AAAA;AAAA;",
|
|
24
|
-
"debugId": "
|
|
23
|
+
"mappings": "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",
|
|
24
|
+
"debugId": "93D7CDA8BB38740964756E2164756E21",
|
|
25
25
|
"names": []
|
|
26
26
|
}
|
package/dist/subgraphs/index.js
CHANGED
|
@@ -655,7 +655,8 @@ async function consumeStreamsEvents(opts) {
|
|
|
655
655
|
const emptyBackoffMs = opts.emptyBackoffMs ?? 500;
|
|
656
656
|
const maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;
|
|
657
657
|
const maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;
|
|
658
|
-
|
|
658
|
+
const committedCursor = await opts.sink?.loadCursor() ?? null;
|
|
659
|
+
let cursor = opts.fromCursor ?? committedCursor;
|
|
659
660
|
const handledReorgs = new Set;
|
|
660
661
|
let pages = 0;
|
|
661
662
|
let emptyPolls = 0;
|
|
@@ -820,7 +821,8 @@ async function consumeIndexFeed(opts) {
|
|
|
820
821
|
const emptyBackoffMs = opts.emptyBackoffMs ?? 500;
|
|
821
822
|
const maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;
|
|
822
823
|
const maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;
|
|
823
|
-
|
|
824
|
+
const committedCursor = await opts.sink?.loadCursor() ?? null;
|
|
825
|
+
let cursor = opts.fromCursor ?? committedCursor;
|
|
824
826
|
const handledReorgs = new Set;
|
|
825
827
|
let pages = 0;
|
|
826
828
|
let emptyPolls = 0;
|
|
@@ -2179,5 +2181,5 @@ export {
|
|
|
2179
2181
|
Subgraphs
|
|
2180
2182
|
};
|
|
2181
2183
|
|
|
2182
|
-
//# debugId=
|
|
2184
|
+
//# debugId=DFB0B68975AF337564756E2164756E21
|
|
2183
2185
|
//# sourceMappingURL=index.js.map
|