@secondlayer/sdk 14.5.0 → 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -37
- package/dist/index.d.ts +10 -17
- package/dist/index.js +4 -24
- package/dist/index.js.map +6 -6
- package/dist/sinks/bun-sqlite.js +2 -2
- package/dist/sinks/bun-sqlite.js.map +2 -2
- package/dist/sinks/core.js +2 -2
- package/dist/sinks/core.js.map +2 -2
- package/dist/sinks/drizzle.js +2 -2
- package/dist/sinks/drizzle.js.map +2 -2
- package/dist/sinks/kysely.js +2 -2
- package/dist/sinks/kysely.js.map +2 -2
- package/dist/streams/index.js +2 -2
- package/dist/streams/index.js.map +2 -2
- package/dist/subgraphs/index.d.ts +7 -3
- package/dist/subgraphs/index.js +2 -2
- package/dist/subgraphs/index.js.map +5 -5
- package/dist/webhooks/doctor.d.ts +1 -12
- package/dist/webhooks/doctor.js +3 -23
- package/dist/webhooks/doctor.js.map +3 -3
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"sources": ["src/archive/client.ts", "src/errors.ts", "src/base.ts", "src/archive/instance.ts", "src/contracts/client.ts", "src/streams/cursor.ts", "src/streams/errors.ts", "src/streams/consumer.ts", "src/index-api/consumer.ts", "src/index-api/client.ts", "src/streams/client.ts", "src/streams/decode.ts", "src/streams/dumps.ts", "src/streams/subscribe.ts", "src/subgraphs/serialize.ts", "src/subgraphs/client.ts", "src/webhooks/client.ts", "src/client.ts", "src/subgraphs/get-subgraph.ts", "src/webhooks/doctor.ts", "src/consumer-ops.ts", "src/webhooks/verify.ts", "src/proofs.ts", "src/streams/index.ts", "src/streams/types.ts", "src/clarity.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { createHash } from \"node:crypto\";\nimport {\n\tcheckSignature,\n\tloadReference,\n} from \"@secondlayer/shared/archive/reference\";\nimport type { ArchiveStatus } from \"@secondlayer/shared/archive/status\";\nimport {\n\ttype FetchLike,\n\tparseErrorEnvelope,\n\tresolveAccountKey,\n} from \"../base.ts\";\nimport {\n\tApiError,\n\tArchiveAuthError,\n\tArchiveGateNotConfiguredError,\n\tArchiveSignatureError,\n\tInsufficientArchiveCreditsError,\n\tValidationError,\n} from \"../errors.ts\";\nimport type {\n\tArchiveClient,\n\tArchiveCreditsBalance,\n\tArchiveDataset,\n\tArchiveFetchItem,\n\tArchiveFetchResult,\n\tArchiveFlow,\n\tArchiveLoadOptions,\n\tArchivePartition,\n\tArchiveQuote,\n\tLoadedArchive,\n} from \"./types.ts\";\n\n/** Official hosted archive. Partition bytes on this host are gated — download\n * without a presigned URL from `fetch()` is refused. Same host string as\n * `OFFICIAL_ARCHIVE_HOST` in the CLI gate. */\nconst OFFICIAL_ARCHIVE_HOST = \"archive.secondlayer.tools\";\n\nconst DEFAULT_ARCHIVE_BASE_URL = \"https://archive.secondlayer.tools\";\nconst DEFAULT_ARCHIVE_OPS_URL = \"https://api.secondlayer.tools\";\nconst MAX_FETCH_BATCH = 64;\n\n/** Match CLI: hosted account keys are `sk-sl_*` or `ss-sl_*`. */\nconst ARCHIVE_CREDENTIAL_RE = /^s[ks]-sl_/;\n\nexport type CreateArchiveClientOptions = {\n\t/** @deprecated Prefer `accountKey`. Kept one release as an alias. */\n\tapiKey?: string;\n\taccountKey?: string;\n\tfetchImpl?: FetchLike;\n\tarchiveBaseUrl?: string;\n\tarchiveOpsUrl?: string;\n\tverifyManifest?: boolean;\n\tpublicKeyPem?: string;\n};\n\ntype QuoteResponseBody = {\n\tpartitions: number;\n\tbundles: number;\n\tusd_micros: number;\n\tusd: string;\n\tfree_allowance_applied_micros: number;\n\tallowance_remaining_bundles: number;\n\tbalance_usd_micros: number;\n\tsufficient: boolean;\n};\n\ntype FetchResponseBody = {\n\turls: Array<{\n\t\tpath: string;\n\t\turl: string;\n\t\texpires_at: string;\n\t\tcharged_usd_micros: number;\n\t}>;\n\tcharged_total_usd_micros: number;\n\tbalance_after_usd_micros: number;\n};\n\nfunction quoteFromBody(body: QuoteResponseBody): ArchiveQuote {\n\treturn {\n\t\tpartitions: body.partitions,\n\t\tbundles: body.bundles,\n\t\tusdMicros: body.usd_micros,\n\t\tusd: body.usd,\n\t\tfreeAllowanceAppliedMicros: body.free_allowance_applied_micros,\n\t\tallowanceRemainingBundles: body.allowance_remaining_bundles,\n\t\tbalanceUsdMicros: body.balance_usd_micros,\n\t\tsufficient: body.sufficient,\n\t};\n}\n\nfunction stripSlash(url: string): string {\n\treturn url.replace(/\\/+$/, \"\");\n}\n\nexport function createArchiveClient(\n\toptions: CreateArchiveClientOptions = {},\n): ArchiveClient {\n\tconst accountKey = resolveAccountKey(options.accountKey ?? options.apiKey);\n\tconst fetchImpl: FetchLike =\n\t\toptions.fetchImpl ?? ((input, init) => fetch(input, init));\n\tconst archiveBaseUrl = stripSlash(\n\t\toptions.archiveBaseUrl ?? DEFAULT_ARCHIVE_BASE_URL,\n\t);\n\tconst archiveOpsUrl = stripSlash(\n\t\toptions.archiveOpsUrl ?? DEFAULT_ARCHIVE_OPS_URL,\n\t);\n\tconst verifyManifest = options.verifyManifest ?? true;\n\tconst pinnedPem = options.publicKeyPem;\n\n\tlet keyPromise: Promise<string> | null = null;\n\n\tasync function fetchSigningKey(): Promise<string> {\n\t\tif (pinnedPem) return pinnedPem;\n\t\tif (keyPromise) return keyPromise;\n\t\tconst pending = (async () => {\n\t\t\tconst res = await fetchImpl(\n\t\t\t\t`${archiveOpsUrl}/public/streams/signing-key`,\n\t\t\t);\n\t\t\tif (!res.ok) {\n\t\t\t\tthrow new ArchiveSignatureError(\n\t\t\t\t\t`Could not fetch archive signing key (${res.status}).`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst body = (await res.json()) as { public_key_pem?: string };\n\t\t\tif (typeof body.public_key_pem !== \"string\") {\n\t\t\t\tthrow new ArchiveSignatureError(\"Signing key response missing key.\");\n\t\t\t}\n\t\t\treturn body.public_key_pem;\n\t\t})();\n\t\tkeyPromise = pending;\n\t\tpending.catch(() => {\n\t\t\tif (keyPromise === pending) keyPromise = null;\n\t\t});\n\t\treturn pending;\n\t}\n\n\tasync function throwOpsError(response: Response): Promise<never> {\n\t\tconst envelope = parseErrorEnvelope(await response.text());\n\t\tif (response.status === 401) {\n\t\t\tthrow new ArchiveAuthError(\n\t\t\t\tenvelope.message ?? \"Archive ops request was not authenticated.\",\n\t\t\t);\n\t\t}\n\t\tif (response.status === 402) {\n\t\t\tconst raw =\n\t\t\t\tenvelope.body &&\n\t\t\t\ttypeof envelope.body === \"object\" &&\n\t\t\t\t\"shortfall_usd_micros\" in envelope.body\n\t\t\t\t\t? Number(\n\t\t\t\t\t\t\t(envelope.body as { shortfall_usd_micros?: unknown })\n\t\t\t\t\t\t\t\t.shortfall_usd_micros,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\t\t\tthrow new InsufficientArchiveCreditsError(\n\t\t\t\tenvelope.message ?? \"Insufficient archive credits.\",\n\t\t\t\tNumber.isFinite(raw) ? raw : undefined,\n\t\t\t);\n\t\t}\n\t\tif (response.status === 503) {\n\t\t\tthrow new ArchiveGateNotConfiguredError(\n\t\t\t\tenvelope.message ?? \"The archive gate is not configured on the server.\",\n\t\t\t);\n\t\t}\n\t\tthrow new ApiError(\n\t\t\tresponse.status,\n\t\t\tenvelope.message ?? `Archive ops returned ${response.status}.`,\n\t\t\tenvelope.body,\n\t\t\tenvelope.code,\n\t\t);\n\t}\n\n\tasync function opsRequest<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t\tauthed = true,\n\t): Promise<T> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t};\n\t\tif (authed && accountKey) {\n\t\t\tif (!ARCHIVE_CREDENTIAL_RE.test(accountKey)) {\n\t\t\t\tthrow new ArchiveAuthError(\n\t\t\t\t\t\"archive ops need SECONDLAYER_API_KEY (sk-sl_*), not INSTANCE_TOKEN\",\n\t\t\t\t);\n\t\t\t}\n\t\t\theaders.Authorization = `Bearer ${accountKey}`;\n\t\t}\n\t\tconst response = await fetchImpl(`${archiveOpsUrl}${path}`, {\n\t\t\tmethod,\n\t\t\theaders,\n\t\t\tbody: body !== undefined ? JSON.stringify(body) : undefined,\n\t\t});\n\t\tif (!response.ok) await throwOpsError(response);\n\t\treturn (await response.json()) as T;\n\t}\n\n\tasync function load(\n\t\tagainst: string,\n\t\topts: ArchiveLoadOptions = {},\n\t): Promise<LoadedArchive> {\n\t\tif (!/^https?:\\/\\//i.test(against)) {\n\t\t\tthrow new ValidationError(\n\t\t\t\t\"archive.load() accepts only http(s) URLs; local paths stay on the CLI.\",\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t\tconst insecure = opts.insecure === true;\n\t\tconst publicKeyPem =\n\t\t\tpinnedPem ??\n\t\t\t(verifyManifest && !insecure ? await fetchSigningKey() : undefined);\n\t\tconst ref = await loadReference(against, {\n\t\t\tpublicKeyPem,\n\t\t\tfetchImpl,\n\t\t});\n\t\tconst signature = checkSignature(ref.manifest, publicKeyPem, insecure);\n\t\tif (verifyManifest && !insecure && !signature.verified) {\n\t\t\tthrow new ArchiveSignatureError(\n\t\t\t\tsignature.reason ?? \"Archive manifest signature is missing or invalid.\",\n\t\t\t);\n\t\t}\n\t\treturn { ...ref, signature };\n\t}\n\n\tasync function latest(\n\t\tagainst?: string,\n\t\topts: ArchiveLoadOptions = {},\n\t): Promise<LoadedArchive> {\n\t\treturn load(against ?? `${archiveBaseUrl}/latest.json`, opts);\n\t}\n\n\tasync function status(): Promise<ArchiveStatus> {\n\t\tconst response = await fetchImpl(`${archiveBaseUrl}/status.json`);\n\t\tif (!response.ok) {\n\t\t\tthrow new ApiError(\n\t\t\t\tresponse.status,\n\t\t\t\t`Could not fetch archive status (${response.status}).`,\n\t\t\t);\n\t\t}\n\t\treturn (await response.json()) as ArchiveStatus;\n\t}\n\n\tfunction partitions(\n\t\tref: LoadedArchive,\n\t\tfilter?: {\n\t\t\tdataset?: ArchiveDataset;\n\t\t\tfromBlock?: number;\n\t\t\ttoBlock?: number;\n\t\t},\n\t): ArchivePartition[] {\n\t\tlet list = ref.manifest.partitions ?? [];\n\t\tif (!filter) return list;\n\t\tif (filter.dataset) {\n\t\t\tlist = list.filter((p) => p.dataset === filter.dataset);\n\t\t}\n\t\tconst fromBlock = filter.fromBlock;\n\t\tif (fromBlock !== undefined) {\n\t\t\tlist = list.filter((p) => p.to_block >= fromBlock);\n\t\t}\n\t\tconst toBlock = filter.toBlock;\n\t\tif (toBlock !== undefined) {\n\t\t\tlist = list.filter((p) => p.from_block <= toBlock);\n\t\t}\n\t\treturn list;\n\t}\n\n\tasync function quote(input: {\n\t\tpaths: string[];\n\t\tflow: ArchiveFlow;\n\t}): Promise<ArchiveQuote> {\n\t\tconst body = await opsRequest<QuoteResponseBody>(\n\t\t\t\"POST\",\n\t\t\t\"/api/archive/quote\",\n\t\t\t{ paths: input.paths, flow: input.flow },\n\t\t);\n\t\treturn quoteFromBody(body);\n\t}\n\n\tasync function fetchPartitions(input: {\n\t\tpaths: string[];\n\t\tflow: ArchiveFlow;\n\t}): Promise<ArchiveFetchResult> {\n\t\tconst urls: ArchiveFetchItem[] = [];\n\t\tlet chargedTotalUsdMicros = 0;\n\t\tlet balanceAfterUsdMicros = 0;\n\t\tfor (let i = 0; i < input.paths.length; i += MAX_FETCH_BATCH) {\n\t\t\tconst chunk = input.paths.slice(i, i + MAX_FETCH_BATCH);\n\t\t\tconst body = await opsRequest<FetchResponseBody>(\n\t\t\t\t\"POST\",\n\t\t\t\t\"/api/archive/fetch\",\n\t\t\t\t{ paths: chunk, flow: input.flow },\n\t\t\t);\n\t\t\tfor (const item of body.urls) {\n\t\t\t\turls.push({\n\t\t\t\t\tpath: item.path,\n\t\t\t\t\turl: item.url,\n\t\t\t\t\texpiresAt: item.expires_at,\n\t\t\t\t\tchargedUsdMicros: item.charged_usd_micros,\n\t\t\t\t});\n\t\t\t}\n\t\t\tchargedTotalUsdMicros += body.charged_total_usd_micros;\n\t\t\tbalanceAfterUsdMicros = body.balance_after_usd_micros;\n\t\t}\n\t\treturn { urls, chargedTotalUsdMicros, balanceAfterUsdMicros };\n\t}\n\n\tasync function download(\n\t\tpartition: ArchivePartition,\n\t\topts?: { url?: string },\n\t): Promise<Uint8Array> {\n\t\tlet url = opts?.url;\n\t\tif (!url) {\n\t\t\tlet official = false;\n\t\t\ttry {\n\t\t\t\tofficial = new URL(archiveBaseUrl).hostname === OFFICIAL_ARCHIVE_HOST;\n\t\t\t} catch {\n\t\t\t\tofficial = false;\n\t\t\t}\n\t\t\tif (official) {\n\t\t\t\tthrow new ValidationError(\n\t\t\t\t\t\"Official archive host requires a presigned URL from archive.fetch() before download.\",\n\t\t\t\t\t400,\n\t\t\t\t);\n\t\t\t}\n\t\t\turl = `${archiveBaseUrl}/${partition.path.replace(/^\\/+/, \"\")}`;\n\t\t}\n\t\tconst response = await fetchImpl(url);\n\t\tif (!response.ok) {\n\t\t\tthrow new ApiError(\n\t\t\t\tresponse.status,\n\t\t\t\t`Could not download ${partition.path} (${response.status}).`,\n\t\t\t);\n\t\t}\n\t\tconst bytes = new Uint8Array(await response.arrayBuffer());\n\t\tconst digest = createHash(\"sha256\").update(bytes).digest(\"hex\");\n\t\tif (digest !== partition.sha256) {\n\t\t\tthrow new ArchiveSignatureError(\n\t\t\t\t`${partition.path} sha256 mismatch (expected ${partition.sha256}, got ${digest}).`,\n\t\t\t);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\treturn {\n\t\tlatest,\n\t\tload,\n\t\tstatus,\n\t\tpartitions,\n\t\tquote,\n\t\tfetch: fetchPartitions,\n\t\tdownload,\n\t\tcredits: {\n\t\t\tasync balance(): Promise<ArchiveCreditsBalance> {\n\t\t\t\tconst body = await opsRequest<{\n\t\t\t\t\tcreditsUsdMicros: string;\n\t\t\t\t\trefill: ArchiveCreditsBalance[\"refill\"];\n\t\t\t\t}>(\"GET\", \"/api/billing/status\");\n\t\t\t\treturn {\n\t\t\t\t\tcreditsUsdMicros: body.creditsUsdMicros,\n\t\t\t\t\trefill: body.refill,\n\t\t\t\t};\n\t\t\t},\n\t\t\tasync checkout(input: {\n\t\t\t\temail: string;\n\t\t\t\tpack: 10 | 25 | 50 | 100;\n\t\t\t}): Promise<{ url: string }> {\n\t\t\t\tconst body = await opsRequest<{ url: string }>(\n\t\t\t\t\t\"POST\",\n\t\t\t\t\t\"/api/public/credits/checkout\",\n\t\t\t\t\t{ email: input.email, amount: input.pack },\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t\treturn { url: body.url };\n\t\t\t},\n\t\t\tasync refill(\n\t\t\t\tinput:\n\t\t\t\t\t| { belowUsd: number; packUsd: 10 | 25 | 50 | 100 }\n\t\t\t\t\t| { off: true },\n\t\t\t): Promise<{ belowUsd: number | null; packUsd: number | null }> {\n\t\t\t\tconst payload =\n\t\t\t\t\t\"off\" in input && input.off\n\t\t\t\t\t\t? { belowUsd: null }\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tbelowUsd: (input as { belowUsd: number }).belowUsd,\n\t\t\t\t\t\t\t\tpackUsd: (input as { packUsd: 10 | 25 | 50 | 100 }).packUsd,\n\t\t\t\t\t\t\t};\n\t\t\t\tconst body = await opsRequest<{\n\t\t\t\t\tbelowUsd: number | null;\n\t\t\t\t\tpackUsd: number | null;\n\t\t\t\t}>(\"POST\", \"/api/billing/refill\", payload);\n\t\t\t\treturn { belowUsd: body.belowUsd, packUsd: body.packUsd };\n\t\t\t},\n\t\t},\n\t};\n}\n",
|
|
6
|
-
"const DOCS_BASE = \"https://www.secondlayer.tools\";\n\n/** Options accepted by every error in the family. */\nexport interface SecondLayerErrorOptions {\n\tcause?: Error;\n\tdetails?: string;\n\t/** Stable machine-readable code (e.g. `UPGRADE_REQUIRED`). */\n\tcode?: string;\n\t/** Docs page that explains this failure and its fix. */\n\tdocsUrl?: string;\n\t/** Extra context lines appended to the message (DDL to run, next steps). */\n\tmetaMessages?: string[];\n\t/** Whether retrying the SAME request can succeed (429/5xx/network). */\n\tretryable?: boolean;\n\t/** Parsed `Retry-After`, in seconds — set on rate limits that carry it. */\n\tretryAfterSeconds?: number;\n}\n\n/**\n * Root of the SDK error family. Implements the same protocol as `BaseError`\n * in `@secondlayer/stacks` (`shortMessage`, `cause`, `toJSON`) so a failed\n * chain read and a failed platform read serialize and introspect identically.\n * It intentionally does NOT extend that class: cross-package `instanceof` is\n * unreliable under per-package bundling anyway (match on `code`/`name` across\n * packages).\n *\n * `retryable` is the signal the consume loops act on: 429/5xx/network are\n * retryable, 4xx and body-serialization failures are not.\n */\nexport class SecondLayerError extends Error {\n\toverride name = \"SecondLayerError\";\n\t/** The one-line failure, without the appended context blocks. */\n\tshortMessage: string;\n\tcode?: string;\n\tdocsUrl?: string;\n\tmetaMessages?: string[];\n\tretryable: boolean;\n\tretryAfterSeconds?: number;\n\n\tconstructor(shortMessage: string, options: SecondLayerErrorOptions = {}) {\n\t\tconst detailBlocks = [\n\t\t\t...(options.metaMessages ?? []),\n\t\t\t...(options.details ? [options.details] : []),\n\t\t\t...(options.docsUrl ? [`Docs: ${options.docsUrl}`] : []),\n\t\t];\n\t\tconst message = [\n\t\t\tshortMessage,\n\t\t\tdetailBlocks.length > 0 ? `\\n${detailBlocks.join(\"\\n\")}` : \"\",\n\t\t].join(\"\");\n\t\tsuper(message, options.cause ? { cause: options.cause } : undefined);\n\t\tthis.shortMessage = shortMessage;\n\t\tthis.code = options.code;\n\t\tthis.docsUrl = options.docsUrl;\n\t\tthis.metaMessages = options.metaMessages;\n\t\tthis.retryable = options.retryable ?? false;\n\t\tthis.retryAfterSeconds = options.retryAfterSeconds;\n\t}\n\n\t/**\n\t * Walk the cause chain. With a predicate, returns the first error matching\n\t * it (or `null`); without one, returns the deepest cause. Mirrors viem's\n\t * `error.walk()` so cross-library error handling reads the same.\n\t */\n\twalk(fn?: (err: unknown) => boolean): unknown {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: cause chains are untyped by nature\n\t\tlet err: any = this;\n\t\tlet last: unknown = this;\n\t\twhile (err != null) {\n\t\t\tif (fn?.(err)) return err;\n\t\t\tlast = err;\n\t\t\terr = err.cause;\n\t\t}\n\t\treturn fn ? null : last;\n\t}\n\n\ttoJSON(): {\n\t\tname: string;\n\t\tmessage: string;\n\t\tshortMessage: string;\n\t\tcause: string | undefined;\n\t\tcode: string | undefined;\n\t\tdocsUrl: string | undefined;\n\t\tretryable: boolean;\n\t\tretryAfterSeconds: number | undefined;\n\t} {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t\tshortMessage: this.shortMessage,\n\t\t\tcause: this.cause instanceof Error ? this.cause.message : undefined,\n\t\t\tcode: this.code,\n\t\t\tdocsUrl: this.docsUrl,\n\t\t\tretryable: this.retryable,\n\t\t\tretryAfterSeconds: this.retryAfterSeconds,\n\t\t};\n\t}\n}\n\n/** Retryability of an HTTP status: 429 and 5xx are transient. */\nfunction statusRetryable(status: number): boolean {\n\treturn status === 429 || status >= 500;\n}\n\n/** Docs page for a status/code pair, when one exists. */\nfunction docsFor(status: number, code?: string): string | undefined {\n\tif (code === \"UPGRADE_REQUIRED\" || status === 402)\n\t\treturn `${DOCS_BASE}/docs/authentication#
|
|
6
|
+
"const DOCS_BASE = \"https://www.secondlayer.tools\";\n\n/** Options accepted by every error in the family. */\nexport interface SecondLayerErrorOptions {\n\tcause?: Error;\n\tdetails?: string;\n\t/** Stable machine-readable code (e.g. `UPGRADE_REQUIRED`). */\n\tcode?: string;\n\t/** Docs page that explains this failure and its fix. */\n\tdocsUrl?: string;\n\t/** Extra context lines appended to the message (DDL to run, next steps). */\n\tmetaMessages?: string[];\n\t/** Whether retrying the SAME request can succeed (429/5xx/network). */\n\tretryable?: boolean;\n\t/** Parsed `Retry-After`, in seconds — set on rate limits that carry it. */\n\tretryAfterSeconds?: number;\n}\n\n/**\n * Root of the SDK error family. Implements the same protocol as `BaseError`\n * in `@secondlayer/stacks` (`shortMessage`, `cause`, `toJSON`) so a failed\n * chain read and a failed platform read serialize and introspect identically.\n * It intentionally does NOT extend that class: cross-package `instanceof` is\n * unreliable under per-package bundling anyway (match on `code`/`name` across\n * packages).\n *\n * `retryable` is the signal the consume loops act on: 429/5xx/network are\n * retryable, 4xx and body-serialization failures are not.\n */\nexport class SecondLayerError extends Error {\n\toverride name = \"SecondLayerError\";\n\t/** The one-line failure, without the appended context blocks. */\n\tshortMessage: string;\n\tcode?: string;\n\tdocsUrl?: string;\n\tmetaMessages?: string[];\n\tretryable: boolean;\n\tretryAfterSeconds?: number;\n\n\tconstructor(shortMessage: string, options: SecondLayerErrorOptions = {}) {\n\t\tconst detailBlocks = [\n\t\t\t...(options.metaMessages ?? []),\n\t\t\t...(options.details ? [options.details] : []),\n\t\t\t...(options.docsUrl ? [`Docs: ${options.docsUrl}`] : []),\n\t\t];\n\t\tconst message = [\n\t\t\tshortMessage,\n\t\t\tdetailBlocks.length > 0 ? `\\n${detailBlocks.join(\"\\n\")}` : \"\",\n\t\t].join(\"\");\n\t\tsuper(message, options.cause ? { cause: options.cause } : undefined);\n\t\tthis.shortMessage = shortMessage;\n\t\tthis.code = options.code;\n\t\tthis.docsUrl = options.docsUrl;\n\t\tthis.metaMessages = options.metaMessages;\n\t\tthis.retryable = options.retryable ?? false;\n\t\tthis.retryAfterSeconds = options.retryAfterSeconds;\n\t}\n\n\t/**\n\t * Walk the cause chain. With a predicate, returns the first error matching\n\t * it (or `null`); without one, returns the deepest cause. Mirrors viem's\n\t * `error.walk()` so cross-library error handling reads the same.\n\t */\n\twalk(fn?: (err: unknown) => boolean): unknown {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: cause chains are untyped by nature\n\t\tlet err: any = this;\n\t\tlet last: unknown = this;\n\t\twhile (err != null) {\n\t\t\tif (fn?.(err)) return err;\n\t\t\tlast = err;\n\t\t\terr = err.cause;\n\t\t}\n\t\treturn fn ? null : last;\n\t}\n\n\ttoJSON(): {\n\t\tname: string;\n\t\tmessage: string;\n\t\tshortMessage: string;\n\t\tcause: string | undefined;\n\t\tcode: string | undefined;\n\t\tdocsUrl: string | undefined;\n\t\tretryable: boolean;\n\t\tretryAfterSeconds: number | undefined;\n\t} {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t\tshortMessage: this.shortMessage,\n\t\t\tcause: this.cause instanceof Error ? this.cause.message : undefined,\n\t\t\tcode: this.code,\n\t\t\tdocsUrl: this.docsUrl,\n\t\t\tretryable: this.retryable,\n\t\t\tretryAfterSeconds: this.retryAfterSeconds,\n\t\t};\n\t}\n}\n\n/** Retryability of an HTTP status: 429 and 5xx are transient. */\nfunction statusRetryable(status: number): boolean {\n\treturn status === 429 || status >= 500;\n}\n\n/** Docs page for a status/code pair, when one exists. */\nfunction docsFor(status: number, code?: string): string | undefined {\n\tif (code === \"UPGRADE_REQUIRED\" || status === 402)\n\t\treturn `${DOCS_BASE}/docs/authentication#what-it-costs`;\n\tif (status === 429 || status === 401)\n\t\treturn `${DOCS_BASE}/docs/authentication`;\n\treturn undefined;\n}\n\n/**\n * Error thrown by {@link SecondLayer} when an API request fails.\n * Includes the HTTP status code for programmatic error handling.\n *\n * @example\n * ```ts\n * try {\n * await client.subgraphs.status(\"my-subgraph\");\n * } catch (err) {\n * if (err instanceof ApiError && err.status === 404) {\n * console.log(\"Subgraph not found\");\n * }\n * }\n * ```\n */\nexport class ApiError extends SecondLayerError {\n\tconstructor(\n\t\t/** HTTP status code (0 for network errors). */\n\t\tpublic status: number,\n\t\tmessage: string,\n\t\t/** Raw response body (parsed JSON if possible) — preserved for callers that need error details. */\n\t\tpublic body?: unknown,\n\t\t/** Stable machine-readable code from the API's `{error, code}` error envelope. */\n\t\tcode?: string,\n\t\toptions: SecondLayerErrorOptions = {},\n\t) {\n\t\tsuper(message, {\n\t\t\tcode,\n\t\t\tretryable: options.retryable ?? statusRetryable(status),\n\t\t\tdocsUrl: options.docsUrl ?? docsFor(status, code),\n\t\t\t...(options.cause ? { cause: options.cause } : {}),\n\t\t\t...(options.details ? { details: options.details } : {}),\n\t\t\t...(options.metaMessages ? { metaMessages: options.metaMessages } : {}),\n\t\t\t...(options.retryAfterSeconds !== undefined\n\t\t\t\t? { retryAfterSeconds: options.retryAfterSeconds }\n\t\t\t\t: {}),\n\t\t});\n\t\tthis.name = \"ApiError\";\n\t}\n\n\t/** The API's `request_id` for this failure (from the error body), when sent.\n\t * Quote it when reporting a failed call. */\n\tget requestId(): string | undefined {\n\t\tconst b = this.body;\n\t\treturn b &&\n\t\t\ttypeof b === \"object\" &&\n\t\t\ttypeof (b as { request_id?: unknown }).request_id === \"string\"\n\t\t\t? (b as { request_id: string }).request_id\n\t\t\t: undefined;\n\t}\n\n\toverride toJSON(): ReturnType<SecondLayerError[\"toJSON\"]> & {\n\t\tstatus: number;\n\t\trequestId: string | undefined;\n\t} {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\tstatus: this.status,\n\t\t\trequestId: this.requestId,\n\t\t};\n\t}\n}\n\n/** Thrown on a 401 by both the instance clients and Streams. Carries the\n * server's `{error, code}` envelope when it sent one, so a revoked token reads\n * differently from a missing one. */\nexport class AuthError extends ApiError {\n\toverride readonly status = 401 as const;\n\n\tconstructor(\n\t\tmessage = \"API key invalid or expired.\",\n\t\tbody?: unknown,\n\t\tcode?: string,\n\t) {\n\t\tsuper(401, message, body, code);\n\t\tthis.name = \"AuthError\";\n\t}\n}\n\n/** Thrown on a 429 by both the instance clients and Streams. `retryable`,\n * with `retryAfterSeconds` parsed from the `Retry-After` header when sent. */\nexport class RateLimitError extends ApiError {\n\toverride readonly status = 429 as const;\n\n\tconstructor(\n\t\tmessage = \"Rate limited. Try again later.\",\n\t\t/** Raw `Retry-After` header value (seconds or HTTP-date). */\n\t\treadonly retryAfter?: string,\n\t\tbody?: unknown,\n\t\tcode?: string,\n\t) {\n\t\tsuper(429, message, body, code, {\n\t\t\tretryable: true,\n\t\t\tretryAfterSeconds: parseRetryAfter(retryAfter),\n\t\t});\n\t\tthis.name = \"RateLimitError\";\n\t}\n}\n\n/** Thrown on a 4xx the caller can fix (bad cursor, bad params). Never retried.\n * `code` is the server's machine-readable code when the envelope carried one. */\nexport class ValidationError extends ApiError {\n\tconstructor(message: string, status: number, body?: unknown, code?: string) {\n\t\tsuper(status, message, body, code, { retryable: false });\n\t\tthis.name = \"ValidationError\";\n\t}\n}\n\n/** Thrown when an archive manifest signature is missing or does not verify. */\nexport class ArchiveSignatureError extends SecondLayerError {\n\tconstructor(message = \"Archive manifest signature is missing or invalid.\") {\n\t\tsuper(message, { code: \"ARCHIVE_SIGNATURE\", retryable: false });\n\t\tthis.name = \"ArchiveSignatureError\";\n\t}\n}\n\n/** Thrown on a 401 from the archive ops host (quote/fetch/credits). */\nexport class ArchiveAuthError extends SecondLayerError {\n\tconstructor(message = \"Archive ops request was not authenticated.\") {\n\t\tsuper(message, { code: \"ARCHIVE_AUTH\", retryable: false });\n\t\tthis.name = \"ArchiveAuthError\";\n\t}\n}\n\n/** Thrown on a 402 from archive fetch — prepaid credits do not cover the quote. */\nexport class InsufficientArchiveCreditsError extends SecondLayerError {\n\tshortfallUsdMicros?: number;\n\tconstructor(\n\t\tmessage = \"Insufficient archive credits.\",\n\t\tshortfallUsdMicros?: number,\n\t) {\n\t\tsuper(message, {\n\t\t\tcode: \"INSUFFICIENT_ARCHIVE_CREDITS\",\n\t\t\tretryable: false,\n\t\t});\n\t\tthis.name = \"InsufficientArchiveCreditsError\";\n\t\tthis.shortfallUsdMicros = shortfallUsdMicros;\n\t}\n}\n\n/** Thrown on a 503 when the archive fetch gate is unconfigured. */\nexport class ArchiveGateNotConfiguredError extends SecondLayerError {\n\tconstructor(message = \"The archive gate is not configured on the server.\") {\n\t\tsuper(message, { code: \"ARCHIVE_GATE_NOT_CONFIGURED\", retryable: false });\n\t\tthis.name = \"ArchiveGateNotConfiguredError\";\n\t}\n}\n\n/** Parse a `Retry-After` header: delta-seconds or an HTTP-date. */\nexport function parseRetryAfter(value?: string | null): number | undefined {\n\tif (!value) return undefined;\n\tconst seconds = Number(value);\n\tif (Number.isFinite(seconds) && seconds >= 0) return seconds;\n\tconst date = Date.parse(value);\n\tif (!Number.isNaN(date)) return Math.max(0, (date - Date.now()) / 1000);\n\treturn undefined;\n}\n",
|
|
7
7
|
"import {\n\tApiError,\n\tAuthError,\n\tRateLimitError,\n\tparseRetryAfter,\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 instance API (trailing slashes are stripped). */\n\tbaseUrl: string;\n\t/** Bearer token for authenticated requests. Defaults to\n\t * `SECONDLAYER_API_KEY` on `api.secondlayer.tools`, `INSTANCE_TOKEN`\n\t * elsewhere. */\n\tapiKey?: string;\n\t/** Hosted account key (`sk-sl_*`). Env `SECONDLAYER_API_KEY`. Used by\n\t * `sl.archive` quote/fetch/credits; reaches `/v1` and `/api` only through\n\t * `apiKey` when the base URL is the hosted API. */\n\taccountKey?: 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/** Public base URL for the signed canonical archive tree. Defaults to\n\t * `https://archive.secondlayer.tools`. Reaches `sl.archive`. */\n\tarchiveBaseUrl?: string;\n\t/** Credits and fetch-gate API. Defaults to `https://api.secondlayer.tools`,\n\t * not `baseUrl`. Reaches `sl.archive` quote/fetch/credits. */\n\tarchiveOpsUrl?: string;\n\t/** Deploy origin label sent as `x-sl-origin` (telemetry). Defaults to `cli`. */\n\torigin?: \"cli\" | \"mcp\" | \"session\";\n\t/** Check the ed25519 signature on every Streams read. Omit for lenient\n\t * (verify when signed, pass through unsigned self-host responses), `true`\n\t * or `{ publicKey }` for strict, `false` for off. Reaches `sl.streams`. */\n\tverify?: boolean | { publicKey: string };\n\t/** Check the dumps manifest signature before trusting any file hash\n\t * (default on). Reaches `sl.streams.dumps`. */\n\tverifyDumpsManifest?: boolean;\n\t/** How long one request may take, headers and body, before it fails with a\n\t * retryable `ApiError` (default 30 000 ms). A hung socket then trips the\n\t * retry policy instead of stalling a walk or consume loop forever. `0`\n\t * disables the timeout. */\n\trequestTimeoutMs?: number;\n\t/** Where GET responses carrying an `ETag` are kept, so a repeat read sends\n\t * `If-None-Match` and a finalized page comes back as a free `304`.\n\t * Defaults to an in-memory store of the last 64 pages. Pass your own to\n\t * keep it across processes (a file, a KV), or `false` to turn it off. */\n\tetagCache?: EtagCache | false;\n}\n\n/** One cached GET response: its validator and the body it validated. */\nexport type EtagEntry = { etag: string; body: string };\n\n/** Storage for `etagCache`. Keys are full request URLs. Either method may be\n * async, so a disk or KV store works as well as a Map. */\nexport interface EtagCache {\n\tget(key: string): EtagEntry | undefined | Promise<EtagEntry | undefined>;\n\tset(key: string, entry: EtagEntry): void | Promise<void>;\n}\n\n/** Bounded in-memory `EtagCache`. Evicts the least recently used page, so a\n * long walk can't hold more than `limit` page bodies. */\nexport class MemoryEtagCache implements EtagCache {\n\tprivate entries = new Map<string, EtagEntry>();\n\tconstructor(private readonly limit = 64) {}\n\n\tget(key: string): EtagEntry | undefined {\n\t\tconst entry = this.entries.get(key);\n\t\tif (entry) {\n\t\t\tthis.entries.delete(key);\n\t\t\tthis.entries.set(key, entry);\n\t\t}\n\t\treturn entry;\n\t}\n\n\tset(key: string, entry: EtagEntry): void {\n\t\tthis.entries.delete(key);\n\t\tthis.entries.set(key, entry);\n\t\tif (this.entries.size > this.limit) {\n\t\t\tconst oldest = this.entries.keys().next().value;\n\t\t\tif (oldest !== undefined) this.entries.delete(oldest);\n\t\t}\n\t}\n}\n\n/** Default per-request budget. Long enough for a 1000-row filtered page on a\n * cold cache, short enough that a half-open connection surfaces as a retry. */\nexport const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\n\n/** Per-call options every `request*` method accepts. */\nexport type RequestOptions = {\n\t/** Cancels the in-flight request (and its body read). The rejection is the\n\t * signal's reason, an `AbortError` by default, never an `ApiError`. */\n\tsignal?: AbortSignal;\n};\n\n/** The rejection a caller abort produces when the signal carries no reason. */\nexport function abortError(): Error {\n\treturn new DOMException(\"This operation was aborted\", \"AbortError\");\n}\n\n/** Reject as soon as `signal` aborts, even when `promise` is a fetch\n * implementation that ignores its `signal` argument. */\nfunction raceAbort<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n\tif (signal.aborted) return Promise.reject(signal.reason ?? abortError());\n\treturn new Promise<T>((resolve, reject) => {\n\t\tconst onAbort = () => reject(signal.reason ?? abortError());\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tpromise.then(resolve, reject).finally(() => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t});\n\t});\n}\n\n/** Product default: the local one-box API. Override with `baseUrl` or\n * `SECONDLAYER_API_URL`. */\nexport const LOCAL_API_URL = \"http://127.0.0.1:3800\";\n\n/** Instance credential. `secondlayer init` writes this. */\nexport const INSTANCE_TOKEN_ENV = \"INSTANCE_TOKEN\";\n\n/** Hosted account key (`sk-sl_*`) for api.secondlayer.tools. */\nexport const ACCOUNT_KEY_ENV = \"SECONDLAYER_API_KEY\";\n\nexport function resolveBaseUrl(explicit?: string): string {\n\tif (explicit && explicit.length > 0) return explicit.replace(/\\/+$/, \"\");\n\tif (typeof process !== \"undefined\") {\n\t\tconst primary = process.env?.SECONDLAYER_API_URL || undefined;\n\t\tif (primary) return primary.replace(/\\/+$/, \"\");\n\t}\n\treturn LOCAL_API_URL;\n}\n\n/** True when `url` is the hosted Secondlayer API (`api.secondlayer.tools`). */\nexport function isHostedApiUrl(url: string): boolean {\n\ttry {\n\t\treturn new URL(url).hostname === \"api.secondlayer.tools\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/** Resolve the bearer credential; the key follows the host. Precedence:\n * explicit `apiKey` (including `\"\"` for keyless) → on the hosted API,\n * `SECONDLAYER_API_KEY`; anywhere else (or with no `baseUrl`),\n * `INSTANCE_TOKEN`. Never crosses over: the instance token is not sent to the\n * hosted API and the account key is not sent to an instance. Guarded for\n * browsers and edge runtimes. */\nexport function resolveApiKey(\n\tapiKey?: string,\n\tbaseUrl?: string,\n): string | undefined {\n\tif (apiKey !== undefined) return apiKey;\n\tif (typeof process === \"undefined\") return undefined;\n\tconst name =\n\t\tbaseUrl !== undefined && isHostedApiUrl(baseUrl)\n\t\t\t? ACCOUNT_KEY_ENV\n\t\t\t: INSTANCE_TOKEN_ENV;\n\treturn process.env?.[name] || undefined;\n}\n\n/** Resolve the hosted account key for archive quote/fetch/credits.\n * Precedence: explicit `accountKey` → `SECONDLAYER_API_KEY`. Does not read\n * `INSTANCE_TOKEN`. */\nexport function resolveAccountKey(accountKey?: string): string | undefined {\n\tif (accountKey !== undefined) return accountKey;\n\tif (typeof process === \"undefined\") return undefined;\n\treturn process.env?.SECONDLAYER_API_KEY || undefined;\n}\n\n/** Percent-encode one URL path segment. Every caller-supplied identifier\n * (subgraph name, table, webhook id) goes through this before it is\n * interpolated into a path, so `..`, `/`, `?` and `#` in an id cannot\n * retarget the authenticated request at a different route. */\nexport function seg(value: string | number): string {\n\treturn encodeURIComponent(String(value));\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\n/** Pull the message and code out of an API error body. The API answers most\n * failures with `{error, code}`, where `error` IS the human text (e.g.\n * `{error: \"Unauthorized\"}`) — a proxy in front of it may answer with plain\n * text or nothing, so the body is kept whichever shape it took and the\n * message is left undefined when there is none worth surfacing. A few\n * bodies (e.g. `spend_cap_reached`) instead use `error` as a machine code\n * and carry the human text in its own `message` field — when both a string\n * `error` and a string `message` are present, `message` wins. */\nexport function parseErrorEnvelope(text: string): {\n\tmessage?: string;\n\tcode?: string;\n\tbody: unknown;\n} {\n\tif (text.length === 0) return { body: undefined };\n\ttry {\n\t\tconst json = JSON.parse(text);\n\t\tlet message: string | undefined;\n\t\tlet code: string | undefined;\n\t\tif (json && typeof json === \"object\") {\n\t\t\tconst err = json.error ?? json.message;\n\t\t\tif (\n\t\t\t\ttypeof err === \"string\" &&\n\t\t\t\ttypeof json.message === \"string\" &&\n\t\t\t\tjson.message.length > 0\n\t\t\t) {\n\t\t\t\tmessage = json.message;\n\t\t\t} else if (typeof err === \"string\" && err.length > 0) message = err;\n\t\t\telse if (err && typeof err === \"object\") message = JSON.stringify(err);\n\t\t\tif (typeof json.code === \"string\") code = json.code;\n\t\t}\n\t\treturn { message, code, body: json };\n\t} catch {\n\t\treturn { message: text, body: text };\n\t}\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\tprotected requestTimeoutMs: number;\n\tprotected etagCache: EtagCache | null;\n\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tthis.baseUrl = resolveBaseUrl(options.baseUrl);\n\t\tthis.apiKey = resolveApiKey(options.apiKey, this.baseUrl);\n\t\tthis.origin = options.origin ?? \"cli\";\n\t\tthis.requestTimeoutMs =\n\t\t\toptions.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\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\tthis.etagCache =\n\t\t\toptions.etagCache === false\n\t\t\t\t? null\n\t\t\t\t: (options.etagCache ?? new MemoryEtagCache());\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\topts: RequestOptions = {},\n\t): Promise<T> {\n\t\treturn this.withRequestBudget(opts.signal, async (signal) => {\n\t\t\t// Only GETs are revalidated: a write's response is never a copy of\n\t\t\t// something the caller already holds.\n\t\t\tconst cacheKey =\n\t\t\t\tmethod === \"GET\" && this.etagCache ? `${this.baseUrl}${path}` : null;\n\t\t\tconst cached = cacheKey ? await this.etagCache?.get(cacheKey) : undefined;\n\t\t\tconst response = await this.fetchResponse(\n\t\t\t\tmethod,\n\t\t\t\tpath,\n\t\t\t\tbody,\n\t\t\t\tsignal,\n\t\t\t\tcached ? { \"If-None-Match\": cached.etag } : undefined,\n\t\t\t);\n\t\t\tif (response.status === 204) {\n\t\t\t\treturn undefined as T;\n\t\t\t}\n\t\t\tif (response.status === 304) {\n\t\t\t\t// The server only answers 304 to a validator we sent, and it meters\n\t\t\t\t// nothing for it. The page is the one we already hold; its `tip`\n\t\t\t\t// field is as of the first read, since the ETag excludes the tip.\n\t\t\t\tif (!cached) {\n\t\t\t\t\tthrow new ApiError(304, \"Not Modified without a cached copy\");\n\t\t\t\t}\n\t\t\t\treturn JSON.parse(cached.body) as T;\n\t\t\t}\n\t\t\tconst etag = cacheKey ? response.headers.get(\"ETag\") : null;\n\t\t\tif (!cacheKey || !etag) {\n\t\t\t\treturn (await raceAbort(response.json(), signal)) as T;\n\t\t\t}\n\t\t\tconst text = await raceAbort(response.text(), signal);\n\t\t\tawait this.etagCache?.set(cacheKey, { etag, body: text });\n\t\t\treturn JSON.parse(text) as T;\n\t\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\topts: RequestOptions = {},\n\t): Promise<T | null> {\n\t\ttry {\n\t\t\treturn await this.request<T>(method, path, body, opts);\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\topts: RequestOptions = {},\n\t): Promise<string> {\n\t\treturn this.withRequestBudget(opts.signal, async (signal) => {\n\t\t\tconst response = await this.fetchResponse(method, path, body, signal);\n\t\t\treturn raceAbort(response.text(), signal);\n\t\t});\n\t}\n\n\t/** Run one request under the caller's signal plus the per-request timeout.\n\t * One combined signal covers the fetch and the body read, so a socket that\n\t * stalls mid-body times out the same way one that never answers does. A\n\t * timeout rejects with a retryable `ApiError`; a caller abort rejects with\n\t * the signal's reason so loops can tell \"stop\" from \"try again\". */\n\tprivate async withRequestBudget<T>(\n\t\tcallerSignal: AbortSignal | undefined,\n\t\trun: (signal: AbortSignal) => Promise<T>,\n\t): Promise<T> {\n\t\tconst controller = new AbortController();\n\t\tlet timedOut = false;\n\t\tconst forward = () =>\n\t\t\tcontroller.abort(callerSignal?.reason ?? abortError());\n\t\tif (callerSignal?.aborted) forward();\n\t\telse callerSignal?.addEventListener(\"abort\", forward, { once: true });\n\t\tconst timer =\n\t\t\tthis.requestTimeoutMs > 0\n\t\t\t\t? setTimeout(() => {\n\t\t\t\t\t\ttimedOut = true;\n\t\t\t\t\t\tcontroller.abort(abortError());\n\t\t\t\t\t}, this.requestTimeoutMs)\n\t\t\t\t: undefined;\n\t\ttry {\n\t\t\treturn await run(controller.signal);\n\t\t} catch (err) {\n\t\t\tif (timedOut && !callerSignal?.aborted) {\n\t\t\t\tthrow new ApiError(\n\t\t\t\t\t0,\n\t\t\t\t\t`No response from ${this.baseUrl} within ${this.requestTimeoutMs}ms. Retryable. Raise requestTimeoutMs for slow filtered reads.`,\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"REQUEST_TIMEOUT\",\n\t\t\t\t\t{ retryable: true, cause: err instanceof Error ? err : undefined },\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t\tcallerSignal?.removeEventListener(\"abort\", forward);\n\t\t}\n\t}\n\n\t/** Issue the HTTP request and map non-2xx statuses onto the error family.\n\t * `signal` is the combined caller-plus-timeout signal from `request*`;\n\t * subclasses that stream a body call this directly and read it themselves. */\n\tprotected async fetchResponse(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t\tsignal?: AbortSignal,\n\t\textraHeaders?: Record<string, string>,\n\t): Promise<Response> {\n\t\tconst url = `${this.baseUrl}${path}`;\n\t\tconst headers = {\n\t\t\t...BaseClient.authHeaders(this.apiKey),\n\t\t\t...extraHeaders,\n\t\t};\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\tconst pending = this.fetchImpl(url, {\n\t\t\t\tmethod,\n\t\t\t\theaders,\n\t\t\t\tbody: serializedBody,\n\t\t\t\tsignal,\n\t\t\t});\n\t\t\tresponse = signal ? await raceAbort(pending, signal) : await pending;\n\t\t} catch (err) {\n\t\t\t// An abort (caller or timeout) is not a network failure; let the\n\t\t\t// budget wrapper decide what it means.\n\t\t\tif (signal?.aborted) throw 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\t// A 304 is an answer to our own If-None-Match, not a failure.\n\t\tif (response.status === 304) return response;\n\n\t\tif (!response.ok) {\n\t\t\t// Read the envelope once for every failure status. The API answers\n\t\t\t// 401 and 503 with `{error, code}` too (a revoked token, an index\n\t\t\t// still catching up), and that code is what a caller branches on.\n\t\t\tconst errorBody = signal\n\t\t\t\t? await raceAbort(response.text(), signal)\n\t\t\t\t: await response.text();\n\t\t\tconst envelope = parseErrorEnvelope(errorBody);\n\t\t\tconst retryAfter = response.headers.get(\"Retry-After\") ?? undefined;\n\n\t\t\tif (response.status === 401) {\n\t\t\t\tthrow new AuthError(\n\t\t\t\t\tenvelope.message ?? \"API key invalid or expired.\",\n\t\t\t\t\tenvelope.body,\n\t\t\t\t\tenvelope.code,\n\t\t\t\t);\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 fallback = 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(\n\t\t\t\t\tenvelope.message ?? fallback,\n\t\t\t\t\tretryAfter,\n\t\t\t\t\tenvelope.body,\n\t\t\t\t\tenvelope.code,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (response.status >= 500) {\n\t\t\t\tconst retryAfterSeconds = parseRetryAfter(retryAfter);\n\t\t\t\tthrow new ApiError(\n\t\t\t\t\tresponse.status,\n\t\t\t\t\tenvelope.message ??\n\t\t\t\t\t\t`Server error. Try again or check status at ${this.baseUrl}/health`,\n\t\t\t\t\tenvelope.body,\n\t\t\t\t\tenvelope.code,\n\t\t\t\t\tretryAfterSeconds !== undefined ? { retryAfterSeconds } : {},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new ApiError(\n\t\t\t\tresponse.status,\n\t\t\t\tenvelope.message ?? `HTTP ${response.status}`,\n\t\t\t\tenvelope.body,\n\t\t\t\tenvelope.code,\n\t\t\t);\n\t\t}\n\n\t\treturn response;\n\t}\n}\n",
|
|
8
8
|
"import {\n\ttype InstanceDiagnosis,\n\ttype PublicStatus,\n\tdiagnoseInstanceStatus,\n} from \"@secondlayer/shared/archive/instance-diagnosis\";\n\n/** Structural `/public/status` payload. Extra fields are ignored by diagnosis. */\nexport type InstanceStatus = PublicStatus;\n\nexport type InstanceClient = {\n\tstatus(): Promise<InstanceStatus>;\n\tdiagnose(): Promise<InstanceDiagnosis>;\n};\n\nexport type ArchiveVerifyInput = {\n\tagainst: string;\n\ttarget?: string;\n\tfromBlock?: number;\n\ttoBlock?: number;\n\tinsecure?: boolean;\n\tpublicKeyPem?: string;\n};\n\nexport type ArchiveVerifyRangeStatus =\n\t| \"match\"\n\t| \"digest-mismatch\"\n\t| \"count-mismatch\"\n\t| \"missing\";\n\nexport type ArchiveVerifyResult = {\n\tstatus: \"clean\" | \"diverged\" | \"unanchored\";\n\ttarget: string;\n\tagainst: string;\n\tsignature: { verified: boolean; reason?: string };\n\tcoverage?: { from_block: number; to_block: number };\n\tranges: Array<{\n\t\tdataset: string;\n\t\tfrom_block: number;\n\t\tto_block: number;\n\t\tstatus: ArchiveVerifyRangeStatus;\n\t\texpected_digest: string | null;\n\t\tactual_digest: string | null;\n\t}>;\n\treason?: string;\n};\n\ntype RequestFn = <T>(\n\tmethod: string,\n\tpath: string,\n\tbody?: unknown,\n) => Promise<T>;\n\n/** Instance `POST /v1/archive/verify`. Hits `baseUrl`, never `archiveOpsUrl`. */\nexport function createArchiveVerify(\n\trequest: RequestFn,\n): (input: ArchiveVerifyInput) => Promise<ArchiveVerifyResult> {\n\treturn (input) =>\n\t\trequest(\"POST\", \"/v1/archive/verify\", {\n\t\t\tagainst: input.against,\n\t\t\ttarget: input.target ?? \"raw\",\n\t\t\tfrom_block: input.fromBlock,\n\t\t\tto_block: input.toBlock,\n\t\t\tinsecure: input.insecure,\n\t\t\tpublic_key_pem: input.publicKeyPem,\n\t\t});\n}\n\nexport function createInstanceClient(request: RequestFn): InstanceClient {\n\tasync function status(): Promise<InstanceStatus> {\n\t\treturn request(\"GET\", \"/public/status\");\n\t}\n\tasync function diagnose(): Promise<InstanceDiagnosis> {\n\t\treturn diagnoseInstanceStatus(await status());\n\t}\n\treturn { status, diagnose };\n}\n",
|
|
9
9
|
"import { BaseClient, type SecondLayerOptions, buildQuery } from \"../base.ts\";\n\n/**\n * Typed client for the contract-discovery API (`GET /v1/contracts`).\n *\n * \"Find all contracts conforming to a trait\" — backed by the contract registry:\n * `declared` traits parsed from Clarity source, `inferred` standards from static\n * ABI shape-matching. Anonymous public read. `trait` is required; the ABI blob is\n * omitted unless `include: \"abi\"` is passed.\n */\n\n/** Whether a trait match must be declared in source, inferred from ABI, or either. */\nexport type ContractConformance = \"declared\" | \"inferred\" | \"any\";\n\nexport interface ContractsListParams {\n\t/** Required. Trait identifier to match (e.g. \"sip-010\", or a fully-qualified trait). */\n\ttrait: string;\n\t/** Match source. Defaults to \"any\" server-side. */\n\tconformance?: ContractConformance;\n\t/** Set to \"abi\" to include the full ABI blob in each row. */\n\tinclude?: \"abi\";\n\t/** Page size, 1–500 (default 100 server-side). */\n\tlimit?: number;\n\t/** Opaque cursor from a prior response's `next_cursor`. */\n\tcursor?: string;\n}\n\nexport interface ContractSummary {\n\tcontract_id: string;\n\tdeployer: string;\n\tblock_height: number;\n\tdeclared_traits: string[] | null;\n\tinferred_standards: string[] | null;\n\tabi_status: string;\n\t/** Present only when `include: \"abi\"` was requested. */\n\tabi?: unknown;\n}\n\nexport interface ContractsEnvelope {\n\tcontracts: ContractSummary[];\n\tnext_cursor: string | null;\n}\n\nexport class Contracts extends BaseClient {\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tsuper(options);\n\t}\n\n\t/** Find contracts conforming to `trait`. `trait` is required (server 400s without it). */\n\tlist(params: ContractsListParams): Promise<ContractsEnvelope> {\n\t\treturn this.request<ContractsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/contracts${buildQuery({\n\t\t\t\ttrait: params.trait,\n\t\t\t\tconformance: params.conformance,\n\t\t\t\tinclude: params.include,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcursor: params.cursor,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\t/**\n\t * Fetch a single contract from the registry by id (the prod-safe ABI source).\n\t * Pass `{ includeAbi: true }` for the full ABI blob. Resolves null on 404.\n\t */\n\tasync get(\n\t\tcontractId: string,\n\t\topts: { includeAbi?: boolean } = {},\n\t): Promise<ContractSummary | null> {\n\t\tconst result = await this.requestOrNull<{ contract: ContractSummary }>(\n\t\t\t\"GET\",\n\t\t\t`/v1/contracts/${encodeURIComponent(contractId)}${\n\t\t\t\topts.includeAbi ? \"?include=abi\" : \"\"\n\t\t\t}`,\n\t\t);\n\t\treturn result?.contract ?? null;\n\t}\n}\n",
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
"import { createHash } from \"node:crypto\";\nimport { verifyStreamsBulkManifestSignature } from \"@secondlayer/shared/streams-bulk-manifest\";\nimport { defaultSleep, fetchPageWithRetry } from \"./consumer.ts\";\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\t/** Fetch one file and hash it as it arrives. Each chunk goes through the\n\t * digest once and is kept once, so a multi-hundred-MB parquet costs its\n\t * own size in memory rather than double. A dropped socket or 5xx retries\n\t * the whole file under the same policy `consume()` uses for pages. */\n\tasync function download(file: StreamsDumpFile): Promise<Uint8Array> {\n\t\treturn fetchPageWithRetry(() => downloadOnce(file), {\n\t\t\tsleep: defaultSleep,\n\t\t});\n\t}\n\n\tasync function downloadOnce(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\tif (!res.body) {\n\t\t\tthrow new StreamsServerError(\n\t\t\t\t`Dump ${file.path} response has no body.`,\n\t\t\t\t0,\n\t\t\t);\n\t\t}\n\t\tconst hash = createHash(\"sha256\");\n\t\tconst chunks: Uint8Array[] = [];\n\t\tlet total = 0;\n\t\tconst reader = res.body.getReader();\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst { value, done } = await reader.read();\n\t\t\t\tif (done) break;\n\t\t\t\thash.update(value);\n\t\t\t\tchunks.push(value);\n\t\t\t\ttotal += value.byteLength;\n\t\t\t}\n\t\t} catch {\n\t\t\t// A body that dies mid-transfer is the same transient as a socket\n\t\t\t// that never answered: let the retry policy take it.\n\t\t\tthrow new StreamsServerError(\n\t\t\t\t`Download of dump ${file.path} was interrupted after ${total} bytes.`,\n\t\t\t\t0,\n\t\t\t);\n\t\t}\n\t\tconst digest = hash.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\tif (chunks.length === 1 && chunks[0]) return chunks[0];\n\t\tconst bytes = new Uint8Array(total);\n\t\tlet offset = 0;\n\t\tfor (const chunk of chunks) {\n\t\t\tbytes.set(chunk, offset);\n\t\t\toffset += chunk.byteLength;\n\t\t}\n\t\treturn bytes;\n\t}\n\n\treturn { list, fileUrl, download };\n}\n",
|
|
18
18
|
"import { ed25519 } from \"@secondlayer/shared\";\nimport { buildQuery } from \"../base.ts\";\nimport {\n\tStreamsServerError,\n\tStreamsSignatureError,\n\tmapStreamsError,\n} from \"./errors.ts\";\nimport type {\n\tFetchLike,\n\tStreamsEvent,\n\tStreamsFilterMap,\n\tStreamsFilterValue,\n\tStreamsSubscription,\n} from \"./types.ts\";\n\n/**\n * The wire-level shape this loop actually reads off `params`: every field\n * from both the Stacks and Bitcoin `StreamsEventsSubscribeParams` branches,\n * flattened into one type so the loop needs no chain narrowing. The public\n * `StreamsClient.events.subscribe` overloads are the real (narrower,\n * discriminated) surface; `client.ts` bridges the two with a boundary cast,\n * the same pattern `listEvents` uses for `events.list`.\n */\nexport type StreamsEventsSubscribeWireParams = {\n\tchain?: \"stacks\" | \"bitcoin\";\n\tfromCursor?: string | null;\n\ttypes?: readonly string[];\n\tnotTypes?: readonly string[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\trune?: string;\n\taddress?: string;\n\tfilters?: StreamsFilterMap;\n\tsignal?: AbortSignal;\n\tonEvent: (event: StreamsEvent) => void | Promise<void>;\n\tonError?: (err: unknown) => void;\n\treconnectDelayMs?: number;\n\tstaleAfterMs?: number;\n};\n\ntype VerificationKey = {\n\tkeyId: string;\n\tpublicKey: ReturnType<typeof ed25519.loadEd25519PublicKey>;\n};\n\n/** Backoff ceiling: a subscriber that keeps failing asks once per half\n * minute, which a restarting instance can absorb from every worker at once. */\nexport const SUBSCRIBE_MAX_RECONNECT_DELAY_MS = 30_000;\n/** Three server heartbeats (20 s each) with no frame means the socket is\n * half-open, not idle. */\nexport const SUBSCRIBE_DEFAULT_STALE_AFTER_MS = 60_000;\n\n/**\n * Pause before reconnect attempt `attempt` (0 = first retry): `base * 2^attempt`\n * capped at 30 s, scaled by a jitter in [0.5, 1] so a fleet that dropped\n * together does not reconnect together. Never shorter than a `Retry-After`\n * the server sent, since that is the one number it is sure about.\n */\nexport function reconnectDelay(\n\tattempt: number,\n\tbaseMs: number,\n\tretryAfterSeconds?: number,\n\trandom: () => number = Math.random,\n): number {\n\tconst capped = Math.min(\n\t\tbaseMs * 2 ** Math.max(0, attempt),\n\t\tSUBSCRIBE_MAX_RECONNECT_DELAY_MS,\n\t);\n\tconst jittered = capped * (0.5 + random() * 0.5);\n\tconst floor = (retryAfterSeconds ?? 0) * 1000;\n\treturn Math.max(jittered, floor);\n}\n\n/** An error the loop stops on: a retry cannot change the answer. */\nfunction isTerminal(err: unknown): boolean {\n\tif (err instanceof StreamsSignatureError) return true;\n\treturn (err as { retryable?: boolean } | null)?.retryable === false;\n}\n\n/**\n * Subscribe to the Streams SSE push surface (`GET /v1/streams/events/stream`).\n *\n * A fetch-based reader (not `EventSource`) so it can send `Authorization` when\n * a key is present, which `EventSource` cannot. Works in browsers and Node 18+.\n * Reconnects from the last handled cursor after a dropped connection, a clean\n * server close, or a stale socket, with exponential backoff; stops on an error\n * a retry cannot fix and rejects the handle's `done`.\n */\nexport function subscribeStreamsEvents(opts: {\n\tbaseUrl: string;\n\t/** Request headers for every connection (bearer token, `x-sl-origin`). */\n\theaders?: Record<string, string>;\n\tfetchImpl: FetchLike;\n\t/**\n\t * `off` skips verification; `lenient` (default) verifies a frame when it\n\t * carries a `sig` and delivers it unverified when it doesn't (unsigned\n\t * self-host); `strict` requires every frame to be signed. An invalid `sig`\n\t * always throws regardless of mode.\n\t */\n\tverify: \"off\" | \"lenient\" | \"strict\";\n\t/** Resolve the key a frame names by `key_id` (a fetched key refreshes once\n\t * on an unknown id; a pinned key fails closed), or the cached key when\n\t * the frame carries none. */\n\tloadKey: (keyId?: string | null) => Promise<VerificationKey>;\n\t/** First reconnect pause; see {@link StreamsEventsSubscribeWireParams.reconnectDelayMs}. */\n\treconnectDelayMs?: number;\n\t/** Idle limit before the socket is treated as dead; see\n\t * {@link StreamsEventsSubscribeWireParams.staleAfterMs}. */\n\tstaleAfterMs?: number;\n\t/** Jitter source, injectable for tests. */\n\trandom?: () => number;\n\tparams: StreamsEventsSubscribeWireParams;\n}): StreamsSubscription {\n\tconst { params } = opts;\n\tconst controller = new AbortController();\n\tconst external = params.signal;\n\tif (external) {\n\t\tif (external.aborted) controller.abort();\n\t\telse\n\t\t\texternal.addEventListener(\"abort\", () => controller.abort(), {\n\t\t\t\tonce: true,\n\t\t\t});\n\t}\n\tlet cursor = params.fromCursor ?? null;\n\tconst baseDelayMs = opts.reconnectDelayMs ?? params.reconnectDelayMs ?? 1000;\n\tconst staleAfterMs =\n\t\topts.staleAfterMs ??\n\t\tparams.staleAfterMs ??\n\t\tSUBSCRIBE_DEFAULT_STALE_AFTER_MS;\n\t// Consecutive failures since the last frame; drives the backoff exponent.\n\tlet attempt = 0;\n\n\tconst run = async (): Promise<void> => {\n\t\twhile (!controller.signal.aborted) {\n\t\t\ttry {\n\t\t\t\tconst url = `${opts.baseUrl}/v1/streams/events/stream${buildQuery({\n\t\t\t\t\tchain: params.chain === \"bitcoin\" ? \"bitcoin\" : undefined,\n\t\t\t\t\tfrom_cursor: cursor ?? undefined,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tnot_types: params.notTypes,\n\t\t\t\t\tcontract_id: params.contractId,\n\t\t\t\t\tsender: params.sender,\n\t\t\t\t\trecipient: params.recipient,\n\t\t\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\t\t\t// `chain: \"bitcoin\"` only (plan 059/061) — missing here meant a\n\t\t\t\t\t// bitcoin subscribe silently ignored these filters.\n\t\t\t\t\trune: params.rune,\n\t\t\t\t\taddress: params.address,\n\t\t\t\t\t// JSON in a query param, so SSE keeps plain GET semantics:\n\t\t\t\t\t// no POST-and-stream variant of this route.\n\t\t\t\t\tfilters: params.filters ? JSON.stringify(params.filters) : undefined,\n\t\t\t\t})}`;\n\t\t\t\tawait readSse({\n\t\t\t\t\turl,\n\t\t\t\t\theaders: opts.headers ?? {},\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\tfetchImpl: opts.fetchImpl,\n\t\t\t\t\tstaleAfterMs,\n\t\t\t\t\tmapError: mapStreamsError,\n\t\t\t\t\tonFrame: async (frame) => {\n\t\t\t\t\t\t// Any frame, ping included, proves the socket is live.\n\t\t\t\t\t\tattempt = 0;\n\t\t\t\t\t\tif (frame.event === \"ping\" || !frame.data) return;\n\t\t\t\t\t\tlet parsed: { event?: StreamsEvent; sig?: string; key_id?: string };\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tparsed = JSON.parse(frame.data);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn; // ignore non-JSON frames\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!parsed.event) return;\n\t\t\t\t\t\tif (opts.verify !== \"off\") {\n\t\t\t\t\t\t\tif (!parsed.sig) {\n\t\t\t\t\t\t\t\t// Strict requires a signed frame; lenient (default) delivers an\n\t\t\t\t\t\t\t\t// unsigned frame (e.g. self-host with no signing key).\n\t\t\t\t\t\t\t\tif (opts.verify === \"strict\") {\n\t\t\t\t\t\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\t\t\t\t\t\"Streams SSE frame signature is missing.\",\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// The frame names its key, so a rotation mid-stream is a\n\t\t\t\t\t\t\t\t// one-time refresh instead of a reconnect loop that fails\n\t\t\t\t\t\t\t\t// every frame forever.\n\t\t\t\t\t\t\t\tconst key = await opts.loadKey(parsed.key_id);\n\t\t\t\t\t\t\t\t// A signature is present, so verify it in either mode; an\n\t\t\t\t\t\t\t\t// invalid signature always fails closed.\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t!ed25519.verifyEd25519(\n\t\t\t\t\t\t\t\t\t\tJSON.stringify(parsed.event),\n\t\t\t\t\t\t\t\t\t\tparsed.sig,\n\t\t\t\t\t\t\t\t\t\tkey.publicKey,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\t\t\t\t\t\"Streams SSE frame signature is invalid.\",\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// The cursor moves only once the handler has taken the event.\n\t\t\t\t\t\t// A throw here reconnects from the previous cursor, so this\n\t\t\t\t\t\t// event is delivered again rather than skipped.\n\t\t\t\t\t\tawait params.onEvent(parsed.event);\n\t\t\t\t\t\tcursor = (parsed.event as { cursor?: string }).cursor ?? cursor;\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\t// Clean end (server closed the stream): reconnect from `cursor`\n\t\t\t\t// after the same pause as an error, so a proxy that answers 200 and\n\t\t\t\t// closes at once cannot spin a hot loop.\n\t\t\t\tawait sleep(\n\t\t\t\t\treconnectDelay(attempt, baseDelayMs, undefined, opts.random),\n\t\t\t\t\tcontroller.signal,\n\t\t\t\t);\n\t\t\t\tattempt += 1;\n\t\t\t} catch (err) {\n\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\tparams.onError?.(err);\n\t\t\t\tif (isTerminal(err)) throw err;\n\t\t\t\tconst retryAfterSeconds = (err as { retryAfterSeconds?: number })\n\t\t\t\t\t.retryAfterSeconds;\n\t\t\t\tawait sleep(\n\t\t\t\t\treconnectDelay(attempt, baseDelayMs, retryAfterSeconds, opts.random),\n\t\t\t\t\tcontroller.signal,\n\t\t\t\t);\n\t\t\t\tattempt += 1;\n\t\t\t}\n\t\t}\n\t};\n\tconst done = run();\n\t// The caller may never look at `done`; a terminal error already reached\n\t// `onError`, so an unobserved rejection must not crash the process.\n\tdone.catch(() => {});\n\tconst unsubscribe = () => controller.abort();\n\treturn Object.assign(unsubscribe, { done });\n}\n\n/** One parsed `text/event-stream` frame. */\nexport type SseFrame = { event?: string; data?: string };\n\n/**\n * Open one SSE connection and hand every frame to `onFrame` until the server\n * closes the stream or `signal` aborts. Fetch-based rather than `EventSource`\n * so the request can carry `Authorization`. A non-OK response throws through\n * `mapError` (default: a retryable `StreamsServerError`); a thrown `onFrame`\n * propagates and cancels the body. With `staleAfterMs`, a read that sees no\n * frame for that long cancels the body and throws a retryable\n * `StreamsServerError` (`STREAM_STALE`). Reconnecting is the caller's job, so\n * each surface keeps its own cursor rule.\n */\nexport async function readSse(opts: {\n\turl: string;\n\theaders?: Record<string, string>;\n\tsignal: AbortSignal;\n\tfetchImpl: FetchLike;\n\tonFrame: (frame: SseFrame) => void | Promise<void>;\n\tstaleAfterMs?: number;\n\tmapError?: (res: Response) => Promise<never>;\n}): Promise<void> {\n\tconst res = await opts.fetchImpl(opts.url, {\n\t\theaders: { ...(opts.headers ?? {}), Accept: \"text/event-stream\" },\n\t\tsignal: opts.signal,\n\t});\n\tif (!res.ok) {\n\t\tif (opts.mapError) await opts.mapError(res);\n\t\tthrow new StreamsServerError(\n\t\t\t`Streams SSE returned ${res.status}.`,\n\t\t\tres.status,\n\t\t);\n\t}\n\tif (!res.body) {\n\t\tthrow new StreamsServerError(\"Streams SSE response has no body.\", 0);\n\t}\n\tfor await (const frame of parseSseFrames(\n\t\tres.body,\n\t\topts.signal,\n\t\topts.staleAfterMs,\n\t)) {\n\t\tawait opts.onFrame(frame);\n\t}\n}\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n\treturn new Promise((resolve) => {\n\t\tif (signal.aborted) return resolve();\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tresolve();\n\t\t};\n\t\tconst timer = setTimeout(() => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\n/** `reader.read()` raced against an idle timer; a timeout throws a retryable\n * error so the caller's reconnect path takes over. */\nasync function readWithStaleTimer<R extends { read(): Promise<unknown> }>(\n\treader: R,\n\tstaleAfterMs: number | undefined,\n): Promise<Awaited<ReturnType<R[\"read\"]>>> {\n\tif (staleAfterMs === undefined || !Number.isFinite(staleAfterMs)) {\n\t\treturn reader.read() as Promise<Awaited<ReturnType<R[\"read\"]>>>;\n\t}\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tconst stale = new Promise<never>((_, reject) => {\n\t\ttimer = setTimeout(\n\t\t\t() =>\n\t\t\t\treject(\n\t\t\t\t\tnew StreamsServerError(\n\t\t\t\t\t\t`Streams SSE went quiet for ${staleAfterMs} ms; reconnecting.`,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\"STREAM_STALE\",\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\tstaleAfterMs,\n\t\t);\n\t});\n\ttry {\n\t\treturn (await Promise.race([reader.read(), stale])) as Awaited<\n\t\t\tReturnType<R[\"read\"]>\n\t\t>;\n\t} finally {\n\t\tclearTimeout(timer);\n\t}\n}\n\nasync function* parseSseFrames(\n\tbody: ReadableStream<Uint8Array>,\n\tsignal: AbortSignal,\n\tstaleAfterMs?: number,\n): AsyncGenerator<SseFrame> {\n\tconst reader = body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\ttry {\n\t\twhile (!signal.aborted) {\n\t\t\tconst { value, done } = await readWithStaleTimer(reader, staleAfterMs);\n\t\t\tif (done) break;\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tlet sep = buffer.indexOf(\"\\n\\n\");\n\t\t\twhile (sep !== -1) {\n\t\t\t\tyield parseFrame(buffer.slice(0, sep));\n\t\t\t\tbuffer = buffer.slice(sep + 2);\n\t\t\t\tsep = buffer.indexOf(\"\\n\\n\");\n\t\t\t}\n\t\t}\n\t} finally {\n\t\ttry {\n\t\t\tawait reader.cancel();\n\t\t} catch {\n\t\t\t// best-effort\n\t\t}\n\t}\n}\n\nfunction parseFrame(raw: string): SseFrame {\n\tlet event: string | undefined;\n\tconst data: string[] = [];\n\tfor (const line of raw.split(\"\\n\")) {\n\t\tif (line.startsWith(\"data:\")) {\n\t\t\tdata.push(line.slice(line.startsWith(\"data: \") ? 6 : 5));\n\t\t} else if (line.startsWith(\"event:\")) {\n\t\t\tevent = line.slice(line.startsWith(\"event: \") ? 7 : 6).trim();\n\t\t}\n\t}\n\treturn { event, data: data.length > 0 ? data.join(\"\\n\") : undefined };\n}\n",
|
|
19
19
|
"/**\n * The canonical row shape names its system columns `_id`, `_blockHeight`,\n * `_txId`, `_createdAt`. These map to the snake_case DB columns the query\n * params use.\n */\nconst SYSTEM_COLUMN_MAP: Record<string, string> = {\n\t_blockHeight: \"_block_height\",\n\t_txId: \"_tx_id\",\n\t_createdAt: \"_created_at\",\n\t_id: \"_id\",\n};\n\n/**\n * Unprefixed shorthands for the same system columns. They are a convenience,\n * not reserved names: a subgraph is free to declare its own `id` or\n * `blockHeight` column, and when it does, the shorthand means that column.\n */\nconst SYSTEM_COLUMN_ALIASES: Record<string, string> = {\n\tblockHeight: \"_block_height\",\n\ttxId: \"_tx_id\",\n\tcreatedAt: \"_created_at\",\n\tid: \"_id\",\n};\n\n/** The declared column names of one table, when the caller knows them. */\nexport type DeclaredColumns = ReadonlySet<string>;\n\n/**\n * Resolve a where/orderBy key to the DB column name. Canonical `_x` names\n * always map. An unprefixed alias maps only when the table does not declare a\n * column of that name; with no declared column set (an untyped call) the\n * alias still maps, which is the pre-existing behavior.\n */\nfunction resolveColumn(col: string, columns?: DeclaredColumns): string {\n\tconst canonical = SYSTEM_COLUMN_MAP[col];\n\tif (canonical) return canonical;\n\tif (columns?.has(col)) return col;\n\treturn SYSTEM_COLUMN_ALIASES[col] ?? col;\n}\n\n/**\n * Serializes a WhereInput object into the flat filter map expected by\n * SubgraphQueryParams.filters (and the REST API query string).\n *\n * Scalar values → `{ column: \"value\" }`\n * Comparison objects → `{ \"column.gte\": \"100\", \"column.lt\": \"200\" }`\n * System columns → `_blockHeight` always → `_block_height`; the unprefixed\n * `blockHeight` too, unless `columns` declares a user column of that name.\n */\nexport function serializeWhere(\n\twhere: Record<string, unknown>,\n\tcolumns?: DeclaredColumns,\n): Record<string, string> {\n\tconst filters: Record<string, string> = {};\n\n\tfor (const [column, value] of Object.entries(where)) {\n\t\tif (value === null || value === undefined) continue;\n\n\t\tconst col = resolveColumn(column, columns);\n\n\t\tif (typeof value === \"object\" && !Array.isArray(value)) {\n\t\t\tconst ops = value as Record<string, unknown>;\n\t\t\tfor (const [op, opValue] of Object.entries(ops)) {\n\t\t\t\tif (opValue === null || opValue === undefined) continue;\n\t\t\t\tif (op === \"eq\") {\n\t\t\t\t\tfilters[col] = String(opValue);\n\t\t\t\t} else if (op === \"in\" || op === \"notIn\") {\n\t\t\t\t\t// Array → comma list. Values can't contain commas (principals,\n\t\t\t\t\t// numbers, hashes don't) — the server splits on `,`.\n\t\t\t\t\tconst arr = Array.isArray(opValue) ? opValue : [opValue];\n\t\t\t\t\tfilters[`${col}.${op}`] = arr.map((v) => String(v)).join(\",\");\n\t\t\t\t} else if ([\"neq\", \"gt\", \"gte\", \"lt\", \"lte\", \"like\"].includes(op)) {\n\t\t\t\t\tfilters[`${col}.${op}`] = String(opValue);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfilters[col] = String(value);\n\t\t}\n\t}\n\n\treturn filters;\n}\n\n/**\n * Resolves an orderBy column name (either alias or canonical) to the DB column\n * name, with the same declared-column rule as {@link serializeWhere}.\n */\nexport function resolveOrderByColumn(\n\tcol: string,\n\tcolumns?: DeclaredColumns,\n): string {\n\treturn resolveColumn(col, columns);\n}\n",
|
|
20
|
-
"import type {\n\tReindexResponse,\n\tSubgraphAggregateParams,\n\tSubgraphAggregateResponse,\n\tSubgraphDetail,\n\tSubgraphGapsResponse,\n\tSubgraphQueryParams,\n\tSubgraphSummary,\n} from \"@secondlayer/shared/schemas\";\nimport type {\n\tDeploySubgraphRequest,\n\tDeploySubgraphResponse,\n} from \"@secondlayer/shared/schemas/subgraphs\";\nimport type {\n\tSubgraphAgentSchema,\n\tSubgraphSpecOptions,\n} from \"@secondlayer/shared/subgraphs/spec\";\nimport type {\n\tAggregateResult,\n\tAggregateSpec,\n\tFindManyOptions,\n\tFindManyPage,\n\tInferSubgraphClient,\n\tSubscribeOptions,\n\tWhereInput,\n} from \"@secondlayer/subgraphs\";\nimport { BaseClient, buildQuery, seg } from \"../base.ts\";\nimport { readSse } from \"../streams/subscribe.ts\";\nimport {\n\ttype DeclaredColumns,\n\tresolveOrderByColumn,\n\tserializeWhere,\n} from \"./serialize.ts\";\n\nexport interface SubgraphSource {\n\tname: string;\n\tversion: string;\n\tsourceCode: string | null;\n\t/** The bundled handler the runtime executes; null for local deploys. */\n\thandlerCode?: string | null;\n\t/** sha256 of `pinPreimage`; null for local deploys. */\n\tpin?: string | null;\n\t/** The canonical JSON the pin hashes (handler hash, network, runtime,\n\t * schema hash, startBlock); null before it was stored. */\n\tpinPreimage?: string | null;\n\treadOnly: boolean;\n\treason?: string;\n\tupdatedAt: string;\n}\n\n/** Status of a tracked reindex/backfill operation (poll until terminal). */\nexport interface SubgraphOperationStatus {\n\tid: string;\n\tsubgraphName: string;\n\tkind: \"reindex\" | \"backfill\";\n\tstatus: \"queued\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\";\n\tfromBlock: number | null;\n\ttoBlock: number | null;\n\tprocessedBlocks: number | null;\n\t/** 0–1 fraction; null when no denominator is known yet. 1 when completed. */\n\tprogress: number | null;\n\terror: string | null;\n\tstartedAt: string | null;\n\tfinishedAt: string | null;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\n/** /v1 cursor envelope for subgraph table reads. */\nexport interface SubgraphRowsEnvelope<T = unknown> {\n\trows: T[];\n\tnext_cursor: string | null;\n\ttip: {\n\t\tblock_height: number;\n\t\tsubgraph_height: number;\n\t\tblocks_behind: number;\n\t};\n}\n\nexport interface BundleSubgraphResponse {\n\tok: true;\n\tname: string;\n\tdescription: string | null;\n\tsources: Record<string, Record<string, unknown>>;\n\tschema: Record<string, unknown>;\n\thandlerCode: string;\n\tsourceCode: string;\n\tbundleSize: number;\n}\n\nconst SUBSCRIBE_RECONNECT_DELAY_MS = 1000;\n\n/** Column names a `defineSubgraph()` table declares, or undefined when the\n * schema entry is not in the `{ columns: {...} }` shape. */\nfunction declaredColumns(table: unknown): DeclaredColumns | undefined {\n\tif (!table || typeof table !== \"object\") return undefined;\n\tconst columns = (table as { columns?: unknown }).columns;\n\tif (!columns || typeof columns !== \"object\") return undefined;\n\treturn new Set(Object.keys(columns));\n}\n\n/** Block height of a streamed row. The server writes rows in their wire\n * shape (`_block_height`, bigint columns as strings); a caller-shaped row\n * may carry `_blockHeight`. Either form advances the reconnect cursor. */\nfunction rowBlockHeight(row: unknown): number | undefined {\n\tconst r = row as { _block_height?: unknown; _blockHeight?: unknown };\n\tconst raw = r._block_height ?? r._blockHeight;\n\tif (typeof raw !== \"number\" && typeof raw !== \"string\") return undefined;\n\tconst height = Number(raw);\n\treturn Number.isFinite(height) ? height : undefined;\n}\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n\treturn new Promise((resolve) => {\n\t\tif (signal.aborted) return resolve();\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tresolve();\n\t\t};\n\t\tconst timer = setTimeout(() => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nfunction buildSubgraphQueryString(\n\tparams: Omit<SubgraphQueryParams, \"offset\">,\n): string {\n\treturn buildQuery({\n\t\t_sort: params.sort,\n\t\t_order: params.order,\n\t\t_limit: params.limit,\n\t\t_fields: params.fields,\n\t\t...params.filters,\n\t});\n}\n\nfunction buildAggregateQueryString(params: SubgraphAggregateParams): string {\n\treturn buildQuery({\n\t\t...params.filters,\n\t\t_count: params.count ? \"true\" : undefined, // emit only when truthy\n\t\t_countDistinct: params.countDistinct, // empty array → \"\" → skipped\n\t\t_sum: params.sum,\n\t\t_min: params.min,\n\t\t_max: params.max,\n\t});\n}\n\nfunction buildSpecQueryString(options?: SubgraphSpecOptions): string {\n\treturn buildQuery({ server: options?.serverUrl });\n}\n\nexport class Subgraphs extends BaseClient {\n\tasync list(): Promise<{ data: SubgraphSummary[] }> {\n\t\treturn this.request<{ data: SubgraphSummary[] }>(\"GET\", \"/api/subgraphs\");\n\t}\n\n\t/**\n\t * The subgraph's current state — health, sync position, tables. The verify\n\t * step after a deploy, reindex, or backfill: poll it until `sync` catches\n\t * the tip.\n\t */\n\tasync status(name: string): Promise<SubgraphDetail> {\n\t\treturn this.request<SubgraphDetail>(\"GET\", `/api/subgraphs/${seg(name)}`);\n\t}\n\n\tasync openapi(\n\t\tname: string,\n\t\toptions?: SubgraphSpecOptions,\n\t): Promise<Record<string, unknown>> {\n\t\treturn this.request<Record<string, unknown>>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/openapi.json${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\tasync schema(\n\t\tname: string,\n\t\toptions?: SubgraphSpecOptions,\n\t): Promise<SubgraphAgentSchema> {\n\t\treturn this.request<SubgraphAgentSchema>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/schema.json${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\tasync markdown(name: string, options?: SubgraphSpecOptions): Promise<string> {\n\t\treturn this.requestText(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/docs.md${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\t/**\n\t * Reindex always drops and rebuilds the whole subgraph, so it takes no\n\t * block range; the API rejects one with `REINDEX_RANGE_NOT_SUPPORTED`.\n\t * Use {@link backfill} to process a specific range. While a reindex or\n\t * backfill is already running the API answers 409 with code\n\t * `OPERATION_IN_PROGRESS`; poll {@link operations} until it finishes.\n\t */\n\tasync reindex(name: string): Promise<ReindexResponse> {\n\t\treturn this.request<ReindexResponse>(\n\t\t\t\"POST\",\n\t\t\t`/api/subgraphs/${seg(name)}/reindex`,\n\t\t);\n\t}\n\n\tasync stop(\n\t\tname: string,\n\t): Promise<{ message: string; operationId?: string; status?: string }> {\n\t\treturn this.request<{\n\t\t\tmessage: string;\n\t\t\toperationId?: string;\n\t\t\tstatus?: string;\n\t\t}>(\"POST\", `/api/subgraphs/${seg(name)}/stop`);\n\t}\n\n\t/** Process one block range. 409 `OPERATION_IN_PROGRESS` while another\n\t * reindex or backfill runs on this subgraph. */\n\tasync backfill(\n\t\tname: string,\n\t\toptions: { fromBlock: number; toBlock: number },\n\t): Promise<ReindexResponse> {\n\t\treturn this.request<ReindexResponse>(\n\t\t\t\"POST\",\n\t\t\t`/api/subgraphs/${seg(name)}/backfill`,\n\t\t\toptions,\n\t\t);\n\t}\n\n\tasync gaps(\n\t\tname: string,\n\t\topts?: { limit?: number; offset?: number; resolved?: boolean },\n\t): Promise<SubgraphGapsResponse> {\n\t\tconst qs = buildQuery({\n\t\t\t_limit: opts?.limit,\n\t\t\t_offset: opts?.offset,\n\t\t\tresolved: opts?.resolved,\n\t\t});\n\t\treturn this.request<SubgraphGapsResponse>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/gaps${qs}`,\n\t\t);\n\t}\n\n\tasync delete(\n\t\tname: string,\n\t\toptions?: { force?: boolean },\n\t): Promise<{ message: string }> {\n\t\tconst qs = buildQuery({ force: options?.force ? true : undefined });\n\t\treturn this.request<{ message: string }>(\n\t\t\t\"DELETE\",\n\t\t\t`/api/subgraphs/${seg(name)}${qs}`,\n\t\t);\n\t}\n\n\t/**\n\t * Open /v1 read: cursor-paginated rows. Anon works on an open instance;\n\t * pass an apiKey on the client where reads are closed. Resume with the\n\t * returned `next_cursor`.\n\t */\n\tasync rows<T = unknown>(\n\t\tname: string,\n\t\ttable: string,\n\t\tparams: Omit<SubgraphQueryParams, \"offset\"> & {\n\t\t\tcursor?: string;\n\t\t} = {},\n\t): Promise<SubgraphRowsEnvelope<T>> {\n\t\tconst { cursor, ...rest } = params;\n\t\tconst qs = buildSubgraphQueryString(rest);\n\t\tconst sep = qs ? \"&\" : \"?\";\n\t\tconst cursorQs = cursor ? `${sep}cursor=${encodeURIComponent(cursor)}` : \"\";\n\t\treturn this.request<SubgraphRowsEnvelope<T>>(\n\t\t\t\"GET\",\n\t\t\t`/v1/subgraphs/${seg(name)}/${seg(table)}${qs}${cursorQs}`,\n\t\t);\n\t}\n\n\t/** Recent reindex/backfill operations for a subgraph, newest first. */\n\tasync operations(\n\t\tname: string,\n\t): Promise<{ operations: SubgraphOperationStatus[] }> {\n\t\treturn this.request<{ operations: SubgraphOperationStatus[] }>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/operations`,\n\t\t);\n\t}\n\n\t/** Status of a single operation (poll the `operationId` returned by\n\t * reindex/backfill/stop until `status` is terminal). */\n\tasync getOperation(\n\t\tname: string,\n\t\toperationId: string,\n\t): Promise<SubgraphOperationStatus> {\n\t\treturn this.request<SubgraphOperationStatus>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/operations/${seg(operationId)}`,\n\t\t);\n\t}\n\n\t/** Create or update a subgraph. A deploy that needs a rebuild queues one;\n\t * if a reindex or backfill is already running the API answers 409 with\n\t * code `OPERATION_IN_PROGRESS` (an `ApiError`, not a dedicated class). */\n\tasync deploy(data: DeploySubgraphRequest): Promise<DeploySubgraphResponse> {\n\t\treturn this.request<DeploySubgraphResponse>(\"POST\", \"/api/subgraphs\", data);\n\t}\n\n\tasync getSource(name: string): Promise<SubgraphSource> {\n\t\treturn this.request<SubgraphSource>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/source`,\n\t\t);\n\t}\n\n\t/**\n\t * Bundle a TypeScript subgraph source on the server. Used by the web chat\n\t * authoring loop so Vercel's serverless runtime doesn't have to run esbuild.\n\t */\n\tasync bundle(data: { code: string }): Promise<BundleSubgraphResponse> {\n\t\treturn this.request<BundleSubgraphResponse>(\n\t\t\t\"POST\",\n\t\t\t\"/api/subgraphs/bundle\",\n\t\t\tdata,\n\t\t);\n\t}\n\n\t/** Open /v1 read: exact row count for a filtered set. Same auth posture as\n\t * {@link rows}. */\n\tasync count(\n\t\tname: string,\n\t\ttable: string,\n\t\tparams: Pick<SubgraphQueryParams, \"filters\"> = {},\n\t): Promise<{ count: number }> {\n\t\treturn this.request<{ count: number }>(\n\t\t\t\"GET\",\n\t\t\t`/v1/subgraphs/${seg(name)}/${seg(table)}/count${buildSubgraphQueryString(params)}`,\n\t\t);\n\t}\n\n\t/** Open /v1 read: scalar aggregates over a filtered set. Same auth posture\n\t * as {@link rows}. */\n\tasync aggregate(\n\t\tname: string,\n\t\ttable: string,\n\t\tparams: SubgraphAggregateParams = {},\n\t): Promise<SubgraphAggregateResponse> {\n\t\treturn this.request<SubgraphAggregateResponse>(\n\t\t\t\"GET\",\n\t\t\t`/v1/subgraphs/${seg(name)}/${seg(table)}/aggregate${buildAggregateQueryString(params)}`,\n\t\t);\n\t}\n\n\t/**\n\t * Returns a typed client for a subgraph defined with `defineSubgraph()`.\n\t * Row types are inferred from the subgraph's schema literal types.\n\t *\n\t * @example\n\t * ```ts\n\t * import mySubgraph from './subgraphs/my-token-subgraph'\n\t * const client = sl.subgraphs.typed(mySubgraph)\n\t * const page = await client.transfers.findMany({ where: { sender: 'SP...' } })\n\t * // page.rows: InferTableRow<typeof mySubgraph.schema.transfers>[]\n\t * // page.nextCursor: string | null — pass back as `cursor` to resume\n\t * ```\n\t */\n\ttyped<T extends { name: string; schema: Record<string, unknown> }>(\n\t\tdef: T,\n\t): InferSubgraphClient<T> {\n\t\tconst result: Record<string, unknown> = {};\n\n\t\tfor (const [tableName, table] of Object.entries(def.schema)) {\n\t\t\tresult[tableName] = this.createTableClient(\n\t\t\t\tdef.name,\n\t\t\t\ttableName,\n\t\t\t\tdeclaredColumns(table),\n\t\t\t);\n\t\t}\n\n\t\treturn result as InferSubgraphClient<T>;\n\t}\n\n\t/**\n\t * `columns` is the table's declared column set from `defineSubgraph()`.\n\t * Filters and orderBy always accept the canonical system names\n\t * `_id` / `_blockHeight` / `_txId` / `_createdAt`; the unprefixed\n\t * shorthands (`id`, `blockHeight`, ...) mean the system column only when\n\t * the table declares no column of that name.\n\t */\n\tprivate createTableClient(\n\t\tsubgraphName: string,\n\t\ttableName: string,\n\t\tcolumns?: DeclaredColumns,\n\t) {\n\t\tconst self = this;\n\n\t\treturn {\n\t\t\tasync findMany<TRow>(\n\t\t\t\toptions: Omit<FindManyOptions<TRow>, \"fields\"> & {\n\t\t\t\t\tfields?: readonly (keyof TRow & string)[];\n\t\t\t\t} = {},\n\t\t\t): Promise<FindManyPage<TRow>> {\n\t\t\t\tconst filters = options.where\n\t\t\t\t\t? serializeWhere(options.where as Record<string, unknown>, columns)\n\t\t\t\t\t: undefined;\n\n\t\t\t\tlet sort: string | undefined;\n\t\t\t\tlet order: string | undefined;\n\t\t\t\tif (options.orderBy) {\n\t\t\t\t\t// Single-column object form only — `/v1`'s keyset cursor pairs one\n\t\t\t\t\t// sort column with `_id`, so a second key can't be served.\n\t\t\t\t\tconst entries = Object.entries(options.orderBy) as [\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\t\"asc\" | \"desc\",\n\t\t\t\t\t][];\n\t\t\t\t\tif (entries.length > 1) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`findMany orderBy accepts a single column; got ${entries.length}: ${entries.map(([col]) => col).join(\", \")}. Sort one column — the cursor pairs it with _id as a tiebreaker.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst entry = entries[0];\n\t\t\t\t\tif (entry) {\n\t\t\t\t\t\tconst [col, dir] = entry;\n\t\t\t\t\t\tsort = resolveOrderByColumn(col, columns);\n\t\t\t\t\t\torder = dir ?? \"asc\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst result = await self.rows<TRow>(subgraphName, tableName, {\n\t\t\t\t\tsort,\n\t\t\t\t\torder,\n\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\tfields: options.fields?.join(\",\"),\n\t\t\t\t\tfilters,\n\t\t\t\t\tcursor: options.cursor,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\trows: result.rows,\n\t\t\t\t\tnextCursor: result.next_cursor,\n\t\t\t\t\ttip: result.tip,\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tasync count<TRow>(where?: WhereInput<TRow>): Promise<number> {\n\t\t\t\tconst filters = where\n\t\t\t\t\t? serializeWhere(where as Record<string, unknown>, columns)\n\t\t\t\t\t: undefined;\n\n\t\t\t\tconst result = await self.count(subgraphName, tableName, {\n\t\t\t\t\tfilters,\n\t\t\t\t});\n\t\t\t\treturn result.count;\n\t\t\t},\n\n\t\t\tasync aggregate<TRow, const A extends AggregateSpec<TRow>>(\n\t\t\t\tspec: A,\n\t\t\t): Promise<AggregateResult<TRow, A>> {\n\t\t\t\tconst filters = spec.where\n\t\t\t\t\t? serializeWhere(spec.where as Record<string, unknown>, columns)\n\t\t\t\t\t: undefined;\n\n\t\t\t\tconst result = await self.aggregate(subgraphName, tableName, {\n\t\t\t\t\tfilters,\n\t\t\t\t\tcount: spec.count,\n\t\t\t\t\tcountDistinct: spec.countDistinct,\n\t\t\t\t\tsum: spec.sum,\n\t\t\t\t\tmin: spec.min,\n\t\t\t\t\tmax: spec.max,\n\t\t\t\t});\n\t\t\t\treturn result as AggregateResult<TRow, A>;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Tail rows as the subgraph writes them. Reads `/v1`, so it is keyless\n\t\t\t * on loopback like `rows`; fetch-based SSE, so it carries the client's\n\t\t\t * bearer token once the API is bound past loopback. Reconnects after a\n\t\t\t * dropped connection from the last delivered row's block height; rows\n\t\t\t * at that height can be delivered again, so key durable writes by\n\t\t\t * `_id`. Frames are unsigned rows in the server's wire shape\n\t\t\t * (`_block_height`, not `_blockHeight`).\n\t\t\t */\n\t\t\tsubscribe<TRow>(\n\t\t\t\tonRow: (row: TRow) => void,\n\t\t\t\toptions: SubscribeOptions<TRow> = {},\n\t\t\t): () => void {\n\t\t\t\tconst filters = options.where\n\t\t\t\t\t? serializeWhere(options.where as Record<string, unknown>, columns)\n\t\t\t\t\t: {};\n\t\t\t\tconst controller = new AbortController();\n\t\t\t\tlet since: number | undefined = options.since ?? undefined;\n\n\t\t\t\tconst run = async (): Promise<void> => {\n\t\t\t\t\twhile (!controller.signal.aborted) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst qs = buildQuery({ ...filters, since });\n\t\t\t\t\t\t\tawait readSse({\n\t\t\t\t\t\t\t\turl: `${self.baseUrl}/v1/subgraphs/${seg(subgraphName)}/${seg(tableName)}/stream${qs}`,\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t...BaseClient.authHeaders(self.apiKey),\n\t\t\t\t\t\t\t\t\t\"x-sl-origin\": self.origin,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\t\t\t\tfetchImpl: self.fetchImpl,\n\t\t\t\t\t\t\t\tonFrame: (frame) => {\n\t\t\t\t\t\t\t\t\tif (frame.event === \"ping\" || !frame.data) return;\n\t\t\t\t\t\t\t\t\tlet row: TRow;\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\trow = JSON.parse(frame.data) as TRow;\n\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\treturn; // ignore non-JSON frames (e.g. heartbeats)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst height = rowBlockHeight(row);\n\t\t\t\t\t\t\t\t\tif (height !== undefined) since = height;\n\t\t\t\t\t\t\t\t\tonRow(row);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// Clean end (server closed the stream): reconnect from `since`\n\t\t\t\t\t\t\t// after the same pause as an error, so a server that closes at\n\t\t\t\t\t\t\t// once (proxy timeout, empty 200) cannot spin a hot loop.\n\t\t\t\t\t\t\tawait sleep(SUBSCRIBE_RECONNECT_DELAY_MS, controller.signal);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\t\t\t\toptions.onError?.(err);\n\t\t\t\t\t\t\tawait sleep(SUBSCRIBE_RECONNECT_DELAY_MS, controller.signal);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tvoid run();\n\t\t\t\treturn () => controller.abort();\n\t\t\t},\n\t\t};\n\t}\n}\n",
|
|
21
|
-
"import type {\n\tCreateWebhookRequest,\n\tCreateWebhookResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tUpdateWebhookRequest,\n\tWebhookActivity,\n\tWebhookDeliveryDetail,\n\tWebhookDetail,\n\tWebhookSummary,\n\tWebhookTestResult,\n} from \"@secondlayer/shared/schemas/webhooks\";\nimport { BaseClient, seg } from \"../base.ts\";\n\nexport type {\n\tChainTrigger,\n\tChainTriggerType,\n\tCreateWebhookRequest,\n\tCreateWebhookResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tWebhookActivity,\n\tWebhookActivityHour,\n\tWebhookAuth,\n\tWebhookDeliveryDetail,\n\tWebhookDetail,\n\tWebhookFormat,\n\tWebhookKind,\n\
|
|
20
|
+
"import type {\n\tReindexResponse,\n\tSubgraphAggregateParams,\n\tSubgraphAggregateResponse,\n\tSubgraphDetail,\n\tSubgraphGapsResponse,\n\tSubgraphQueryParams,\n\tSubgraphSummary,\n} from \"@secondlayer/shared/schemas\";\nimport type {\n\tDeploySubgraphRequest,\n\tDeploySubgraphResponse,\n} from \"@secondlayer/shared/schemas/subgraphs\";\nimport type {\n\tSubgraphAgentSchema,\n\tSubgraphSpecOptions,\n} from \"@secondlayer/shared/subgraphs/spec\";\nimport type {\n\tAggregateResult,\n\tAggregateSpec,\n\tFindManyOptions,\n\tFindManyPage,\n\tInferSubgraphClient,\n\tSubscribeOptions,\n\tWhereInput,\n} from \"@secondlayer/subgraphs\";\nimport { BaseClient, buildQuery, seg } from \"../base.ts\";\nimport { readSse } from \"../streams/subscribe.ts\";\nimport {\n\ttype DeclaredColumns,\n\tresolveOrderByColumn,\n\tserializeWhere,\n} from \"./serialize.ts\";\n\nexport interface SubgraphSource {\n\tname: string;\n\tversion: string;\n\tsourceCode: string | null;\n\t/** The bundled handler the runtime executes; null for local deploys. */\n\thandlerCode?: string | null;\n\t/** sha256 of `pinPreimage`; null for local deploys. */\n\tpin?: string | null;\n\t/** The canonical JSON the pin hashes (handler hash, network, runtime,\n\t * schema hash, startBlock); null before it was stored. */\n\tpinPreimage?: string | null;\n\treadOnly: boolean;\n\treason?: string;\n\tupdatedAt: string;\n}\n\n/** Status of a tracked reindex/backfill operation (poll until terminal). */\nexport interface SubgraphOperationStatus {\n\tid: string;\n\tsubgraphName: string;\n\tkind: \"reindex\" | \"backfill\";\n\tstatus: \"queued\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\";\n\tfromBlock: number | null;\n\ttoBlock: number | null;\n\tprocessedBlocks: number | null;\n\t/** 0–1 fraction; null when no denominator is known yet. 1 when completed. */\n\tprogress: number | null;\n\terror: string | null;\n\tstartedAt: string | null;\n\tfinishedAt: string | null;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\n/** /v1 cursor envelope for subgraph table reads. */\nexport interface SubgraphRowsEnvelope<T = unknown> {\n\trows: T[];\n\t/** Set on every page that returned rows; `null` only on an empty page. */\n\tnext_cursor: string | null;\n\ttip: {\n\t\tblock_height: number;\n\t\tsubgraph_height: number;\n\t\tblocks_behind: number;\n\t};\n}\n\nexport interface BundleSubgraphResponse {\n\tok: true;\n\tname: string;\n\tdescription: string | null;\n\tsources: Record<string, Record<string, unknown>>;\n\tschema: Record<string, unknown>;\n\thandlerCode: string;\n\tsourceCode: string;\n\tbundleSize: number;\n}\n\nconst SUBSCRIBE_RECONNECT_DELAY_MS = 1000;\n\n/** Column names a `defineSubgraph()` table declares, or undefined when the\n * schema entry is not in the `{ columns: {...} }` shape. */\nfunction declaredColumns(table: unknown): DeclaredColumns | undefined {\n\tif (!table || typeof table !== \"object\") return undefined;\n\tconst columns = (table as { columns?: unknown }).columns;\n\tif (!columns || typeof columns !== \"object\") return undefined;\n\treturn new Set(Object.keys(columns));\n}\n\n/** Block height of a streamed row. The server writes rows in their wire\n * shape (`_block_height`, bigint columns as strings); a caller-shaped row\n * may carry `_blockHeight`. Either form advances the reconnect cursor. */\nfunction rowBlockHeight(row: unknown): number | undefined {\n\tconst r = row as { _block_height?: unknown; _blockHeight?: unknown };\n\tconst raw = r._block_height ?? r._blockHeight;\n\tif (typeof raw !== \"number\" && typeof raw !== \"string\") return undefined;\n\tconst height = Number(raw);\n\treturn Number.isFinite(height) ? height : undefined;\n}\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n\treturn new Promise((resolve) => {\n\t\tif (signal.aborted) return resolve();\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tresolve();\n\t\t};\n\t\tconst timer = setTimeout(() => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nfunction buildSubgraphQueryString(\n\tparams: Omit<SubgraphQueryParams, \"offset\">,\n): string {\n\treturn buildQuery({\n\t\t_sort: params.sort,\n\t\t_order: params.order,\n\t\t_limit: params.limit,\n\t\t_fields: params.fields,\n\t\t...params.filters,\n\t});\n}\n\nfunction buildAggregateQueryString(params: SubgraphAggregateParams): string {\n\treturn buildQuery({\n\t\t...params.filters,\n\t\t_count: params.count ? \"true\" : undefined, // emit only when truthy\n\t\t_countDistinct: params.countDistinct, // empty array → \"\" → skipped\n\t\t_sum: params.sum,\n\t\t_min: params.min,\n\t\t_max: params.max,\n\t});\n}\n\nfunction buildSpecQueryString(options?: SubgraphSpecOptions): string {\n\treturn buildQuery({ server: options?.serverUrl });\n}\n\nexport class Subgraphs extends BaseClient {\n\tasync list(): Promise<{ data: SubgraphSummary[] }> {\n\t\treturn this.request<{ data: SubgraphSummary[] }>(\"GET\", \"/api/subgraphs\");\n\t}\n\n\t/**\n\t * The subgraph's current state — health, sync position, tables. The verify\n\t * step after a deploy, reindex, or backfill: poll it until `sync` catches\n\t * the tip.\n\t */\n\tasync status(name: string): Promise<SubgraphDetail> {\n\t\treturn this.request<SubgraphDetail>(\"GET\", `/api/subgraphs/${seg(name)}`);\n\t}\n\n\tasync openapi(\n\t\tname: string,\n\t\toptions?: SubgraphSpecOptions,\n\t): Promise<Record<string, unknown>> {\n\t\treturn this.request<Record<string, unknown>>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/openapi.json${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\tasync schema(\n\t\tname: string,\n\t\toptions?: SubgraphSpecOptions,\n\t): Promise<SubgraphAgentSchema> {\n\t\treturn this.request<SubgraphAgentSchema>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/schema.json${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\tasync markdown(name: string, options?: SubgraphSpecOptions): Promise<string> {\n\t\treturn this.requestText(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/docs.md${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\t/**\n\t * Reindex always drops and rebuilds the whole subgraph, so it takes no\n\t * block range; the API rejects one with `REINDEX_RANGE_NOT_SUPPORTED`.\n\t * Use {@link backfill} to process a specific range. While a reindex or\n\t * backfill is already running the API answers 409 with code\n\t * `OPERATION_IN_PROGRESS`; poll {@link operations} until it finishes.\n\t */\n\tasync reindex(name: string): Promise<ReindexResponse> {\n\t\treturn this.request<ReindexResponse>(\n\t\t\t\"POST\",\n\t\t\t`/api/subgraphs/${seg(name)}/reindex`,\n\t\t);\n\t}\n\n\tasync stop(\n\t\tname: string,\n\t): Promise<{ message: string; operationId?: string; status?: string }> {\n\t\treturn this.request<{\n\t\t\tmessage: string;\n\t\t\toperationId?: string;\n\t\t\tstatus?: string;\n\t\t}>(\"POST\", `/api/subgraphs/${seg(name)}/stop`);\n\t}\n\n\t/** Process one block range. 409 `OPERATION_IN_PROGRESS` while another\n\t * reindex or backfill runs on this subgraph. */\n\tasync backfill(\n\t\tname: string,\n\t\toptions: { fromBlock: number; toBlock: number },\n\t): Promise<ReindexResponse> {\n\t\treturn this.request<ReindexResponse>(\n\t\t\t\"POST\",\n\t\t\t`/api/subgraphs/${seg(name)}/backfill`,\n\t\t\toptions,\n\t\t);\n\t}\n\n\tasync gaps(\n\t\tname: string,\n\t\topts?: { limit?: number; offset?: number; resolved?: boolean },\n\t): Promise<SubgraphGapsResponse> {\n\t\tconst qs = buildQuery({\n\t\t\t_limit: opts?.limit,\n\t\t\t_offset: opts?.offset,\n\t\t\tresolved: opts?.resolved,\n\t\t});\n\t\treturn this.request<SubgraphGapsResponse>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/gaps${qs}`,\n\t\t);\n\t}\n\n\tasync delete(\n\t\tname: string,\n\t\toptions?: { force?: boolean },\n\t): Promise<{ message: string }> {\n\t\tconst qs = buildQuery({ force: options?.force ? true : undefined });\n\t\treturn this.request<{ message: string }>(\n\t\t\t\"DELETE\",\n\t\t\t`/api/subgraphs/${seg(name)}${qs}`,\n\t\t);\n\t}\n\n\t/**\n\t * Open /v1 read: cursor-paginated rows. Anon works on an open instance;\n\t * pass an apiKey on the client where reads are closed. `next_cursor` is set\n\t * on every page that returned rows and is `null` only on an empty page, so a\n\t * poller tails with `cursor = page.next_cursor ?? cursor`. A paging loop\n\t * ends on an empty page (or one shorter than `limit`).\n\t */\n\tasync rows<T = unknown>(\n\t\tname: string,\n\t\ttable: string,\n\t\tparams: Omit<SubgraphQueryParams, \"offset\"> & {\n\t\t\tcursor?: string;\n\t\t} = {},\n\t): Promise<SubgraphRowsEnvelope<T>> {\n\t\tconst { cursor, ...rest } = params;\n\t\tconst qs = buildSubgraphQueryString(rest);\n\t\tconst sep = qs ? \"&\" : \"?\";\n\t\tconst cursorQs = cursor ? `${sep}cursor=${encodeURIComponent(cursor)}` : \"\";\n\t\treturn this.request<SubgraphRowsEnvelope<T>>(\n\t\t\t\"GET\",\n\t\t\t`/v1/subgraphs/${seg(name)}/${seg(table)}${qs}${cursorQs}`,\n\t\t);\n\t}\n\n\t/** Recent reindex/backfill operations for a subgraph, newest first. */\n\tasync operations(\n\t\tname: string,\n\t): Promise<{ operations: SubgraphOperationStatus[] }> {\n\t\treturn this.request<{ operations: SubgraphOperationStatus[] }>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/operations`,\n\t\t);\n\t}\n\n\t/** Status of a single operation (poll the `operationId` returned by\n\t * reindex/backfill/stop until `status` is terminal). */\n\tasync getOperation(\n\t\tname: string,\n\t\toperationId: string,\n\t): Promise<SubgraphOperationStatus> {\n\t\treturn this.request<SubgraphOperationStatus>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/operations/${seg(operationId)}`,\n\t\t);\n\t}\n\n\t/** Create or update a subgraph. A deploy that needs a rebuild queues one;\n\t * if a reindex or backfill is already running the API answers 409 with\n\t * code `OPERATION_IN_PROGRESS` (an `ApiError`, not a dedicated class). */\n\tasync deploy(data: DeploySubgraphRequest): Promise<DeploySubgraphResponse> {\n\t\treturn this.request<DeploySubgraphResponse>(\"POST\", \"/api/subgraphs\", data);\n\t}\n\n\tasync getSource(name: string): Promise<SubgraphSource> {\n\t\treturn this.request<SubgraphSource>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${seg(name)}/source`,\n\t\t);\n\t}\n\n\t/**\n\t * Bundle a TypeScript subgraph source on the server. Used by the web chat\n\t * authoring loop so Vercel's serverless runtime doesn't have to run esbuild.\n\t */\n\tasync bundle(data: { code: string }): Promise<BundleSubgraphResponse> {\n\t\treturn this.request<BundleSubgraphResponse>(\n\t\t\t\"POST\",\n\t\t\t\"/api/subgraphs/bundle\",\n\t\t\tdata,\n\t\t);\n\t}\n\n\t/** Open /v1 read: exact row count for a filtered set. Same auth posture as\n\t * {@link rows}. */\n\tasync count(\n\t\tname: string,\n\t\ttable: string,\n\t\tparams: Pick<SubgraphQueryParams, \"filters\"> = {},\n\t): Promise<{ count: number }> {\n\t\treturn this.request<{ count: number }>(\n\t\t\t\"GET\",\n\t\t\t`/v1/subgraphs/${seg(name)}/${seg(table)}/count${buildSubgraphQueryString(params)}`,\n\t\t);\n\t}\n\n\t/** Open /v1 read: scalar aggregates over a filtered set. Same auth posture\n\t * as {@link rows}. */\n\tasync aggregate(\n\t\tname: string,\n\t\ttable: string,\n\t\tparams: SubgraphAggregateParams = {},\n\t): Promise<SubgraphAggregateResponse> {\n\t\treturn this.request<SubgraphAggregateResponse>(\n\t\t\t\"GET\",\n\t\t\t`/v1/subgraphs/${seg(name)}/${seg(table)}/aggregate${buildAggregateQueryString(params)}`,\n\t\t);\n\t}\n\n\t/**\n\t * Returns a typed client for a subgraph defined with `defineSubgraph()`.\n\t * Row types are inferred from the subgraph's schema literal types.\n\t *\n\t * @example\n\t * ```ts\n\t * import mySubgraph from './subgraphs/my-token-subgraph'\n\t * const client = sl.subgraphs.typed(mySubgraph)\n\t * const page = await client.transfers.findMany({ where: { sender: 'SP...' } })\n\t * // page.rows: InferTableRow<typeof mySubgraph.schema.transfers>[]\n\t * // page.nextCursor: set whenever rows came back, null on an empty page.\n\t * // Tail new rows: cursor = page.nextCursor ?? cursor\n\t * ```\n\t */\n\ttyped<T extends { name: string; schema: Record<string, unknown> }>(\n\t\tdef: T,\n\t): InferSubgraphClient<T> {\n\t\tconst result: Record<string, unknown> = {};\n\n\t\tfor (const [tableName, table] of Object.entries(def.schema)) {\n\t\t\tresult[tableName] = this.createTableClient(\n\t\t\t\tdef.name,\n\t\t\t\ttableName,\n\t\t\t\tdeclaredColumns(table),\n\t\t\t);\n\t\t}\n\n\t\treturn result as InferSubgraphClient<T>;\n\t}\n\n\t/**\n\t * `columns` is the table's declared column set from `defineSubgraph()`.\n\t * Filters and orderBy always accept the canonical system names\n\t * `_id` / `_blockHeight` / `_txId` / `_createdAt`; the unprefixed\n\t * shorthands (`id`, `blockHeight`, ...) mean the system column only when\n\t * the table declares no column of that name.\n\t */\n\tprivate createTableClient(\n\t\tsubgraphName: string,\n\t\ttableName: string,\n\t\tcolumns?: DeclaredColumns,\n\t) {\n\t\tconst self = this;\n\n\t\treturn {\n\t\t\tasync findMany<TRow>(\n\t\t\t\toptions: Omit<FindManyOptions<TRow>, \"fields\"> & {\n\t\t\t\t\tfields?: readonly (keyof TRow & string)[];\n\t\t\t\t} = {},\n\t\t\t): Promise<FindManyPage<TRow>> {\n\t\t\t\tconst filters = options.where\n\t\t\t\t\t? serializeWhere(options.where as Record<string, unknown>, columns)\n\t\t\t\t\t: undefined;\n\n\t\t\t\tlet sort: string | undefined;\n\t\t\t\tlet order: string | undefined;\n\t\t\t\tif (options.orderBy) {\n\t\t\t\t\t// Single-column object form only — `/v1`'s keyset cursor pairs one\n\t\t\t\t\t// sort column with `_id`, so a second key can't be served.\n\t\t\t\t\tconst entries = Object.entries(options.orderBy) as [\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\t\"asc\" | \"desc\",\n\t\t\t\t\t][];\n\t\t\t\t\tif (entries.length > 1) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`findMany orderBy accepts a single column; got ${entries.length}: ${entries.map(([col]) => col).join(\", \")}. Sort one column — the cursor pairs it with _id as a tiebreaker.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst entry = entries[0];\n\t\t\t\t\tif (entry) {\n\t\t\t\t\t\tconst [col, dir] = entry;\n\t\t\t\t\t\tsort = resolveOrderByColumn(col, columns);\n\t\t\t\t\t\torder = dir ?? \"asc\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst result = await self.rows<TRow>(subgraphName, tableName, {\n\t\t\t\t\tsort,\n\t\t\t\t\torder,\n\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\tfields: options.fields?.join(\",\"),\n\t\t\t\t\tfilters,\n\t\t\t\t\tcursor: options.cursor,\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\trows: result.rows,\n\t\t\t\t\tnextCursor: result.next_cursor,\n\t\t\t\t\ttip: result.tip,\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tasync count<TRow>(where?: WhereInput<TRow>): Promise<number> {\n\t\t\t\tconst filters = where\n\t\t\t\t\t? serializeWhere(where as Record<string, unknown>, columns)\n\t\t\t\t\t: undefined;\n\n\t\t\t\tconst result = await self.count(subgraphName, tableName, {\n\t\t\t\t\tfilters,\n\t\t\t\t});\n\t\t\t\treturn result.count;\n\t\t\t},\n\n\t\t\tasync aggregate<TRow, const A extends AggregateSpec<TRow>>(\n\t\t\t\tspec: A,\n\t\t\t): Promise<AggregateResult<TRow, A>> {\n\t\t\t\tconst filters = spec.where\n\t\t\t\t\t? serializeWhere(spec.where as Record<string, unknown>, columns)\n\t\t\t\t\t: undefined;\n\n\t\t\t\tconst result = await self.aggregate(subgraphName, tableName, {\n\t\t\t\t\tfilters,\n\t\t\t\t\tcount: spec.count,\n\t\t\t\t\tcountDistinct: spec.countDistinct,\n\t\t\t\t\tsum: spec.sum,\n\t\t\t\t\tmin: spec.min,\n\t\t\t\t\tmax: spec.max,\n\t\t\t\t});\n\t\t\t\treturn result as AggregateResult<TRow, A>;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Tail rows as the subgraph writes them. Reads `/v1`, so it is keyless\n\t\t\t * on loopback like `rows`; fetch-based SSE, so it carries the client's\n\t\t\t * bearer token once the API is bound past loopback. Reconnects after a\n\t\t\t * dropped connection from the last delivered row's block height; rows\n\t\t\t * at that height can be delivered again, so key durable writes by\n\t\t\t * `_id`. Frames are unsigned rows in the server's wire shape\n\t\t\t * (`_block_height`, not `_blockHeight`).\n\t\t\t */\n\t\t\tsubscribe<TRow>(\n\t\t\t\tonRow: (row: TRow) => void,\n\t\t\t\toptions: SubscribeOptions<TRow> = {},\n\t\t\t): () => void {\n\t\t\t\tconst filters = options.where\n\t\t\t\t\t? serializeWhere(options.where as Record<string, unknown>, columns)\n\t\t\t\t\t: {};\n\t\t\t\tconst controller = new AbortController();\n\t\t\t\tlet since: number | undefined = options.since ?? undefined;\n\n\t\t\t\tconst run = async (): Promise<void> => {\n\t\t\t\t\twhile (!controller.signal.aborted) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst qs = buildQuery({ ...filters, since });\n\t\t\t\t\t\t\tawait readSse({\n\t\t\t\t\t\t\t\turl: `${self.baseUrl}/v1/subgraphs/${seg(subgraphName)}/${seg(tableName)}/stream${qs}`,\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t...BaseClient.authHeaders(self.apiKey),\n\t\t\t\t\t\t\t\t\t\"x-sl-origin\": self.origin,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t\t\t\t\tfetchImpl: self.fetchImpl,\n\t\t\t\t\t\t\t\tonFrame: (frame) => {\n\t\t\t\t\t\t\t\t\tif (frame.event === \"ping\" || !frame.data) return;\n\t\t\t\t\t\t\t\t\tlet row: TRow;\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\trow = JSON.parse(frame.data) as TRow;\n\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\treturn; // ignore non-JSON frames (e.g. heartbeats)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst height = rowBlockHeight(row);\n\t\t\t\t\t\t\t\t\tif (height !== undefined) since = height;\n\t\t\t\t\t\t\t\t\tonRow(row);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// Clean end (server closed the stream): reconnect from `since`\n\t\t\t\t\t\t\t// after the same pause as an error, so a server that closes at\n\t\t\t\t\t\t\t// once (proxy timeout, empty 200) cannot spin a hot loop.\n\t\t\t\t\t\t\tawait sleep(SUBSCRIBE_RECONNECT_DELAY_MS, controller.signal);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tif (controller.signal.aborted) return;\n\t\t\t\t\t\t\toptions.onError?.(err);\n\t\t\t\t\t\t\tawait sleep(SUBSCRIBE_RECONNECT_DELAY_MS, controller.signal);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tvoid run();\n\t\t\t\treturn () => controller.abort();\n\t\t\t},\n\t\t};\n\t}\n}\n",
|
|
21
|
+
"import type {\n\tCreateWebhookRequest,\n\tCreateWebhookResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tUpdateWebhookRequest,\n\tWebhookActivity,\n\tWebhookDeliveryDetail,\n\tWebhookDetail,\n\tWebhookSummary,\n\tWebhookTestResult,\n} from \"@secondlayer/shared/schemas/webhooks\";\nimport { BaseClient, seg } from \"../base.ts\";\n\nexport type {\n\tChainTrigger,\n\tChainTriggerType,\n\tCreateWebhookRequest,\n\tCreateWebhookResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tWebhookActivity,\n\tWebhookActivityHour,\n\tWebhookAuth,\n\tWebhookDeliveryDetail,\n\tWebhookDetail,\n\tWebhookFormat,\n\tWebhookKind,\n\tWebhookStatus,\n\tWebhookSummary,\n\tWebhookTestResult,\n\tUpdateWebhookRequest,\n} from \"@secondlayer/shared/schemas/webhooks\";\n\n// `trigger.*` chain-trigger builders for chain webhooks\n// (`create({ triggers: [trigger.contractCall({ ... })] })`).\nexport { trigger } from \"@secondlayer/shared/schemas/webhooks\";\n\nexport class Webhooks extends BaseClient {\n\tasync list(): Promise<{ data: WebhookSummary[] }> {\n\t\treturn this.request<{ data: WebhookSummary[] }>(\"GET\", \"/api/webhooks\");\n\t}\n\n\tasync get(id: string): Promise<WebhookDetail> {\n\t\treturn this.request<WebhookDetail>(\"GET\", `/api/webhooks/${seg(id)}`);\n\t}\n\n\tasync create(input: CreateWebhookRequest): Promise<CreateWebhookResponse> {\n\t\treturn this.request<CreateWebhookResponse>(\"POST\", \"/api/webhooks\", input);\n\t}\n\n\tasync update(\n\t\tid: string,\n\t\tpatch: UpdateWebhookRequest,\n\t): Promise<WebhookDetail> {\n\t\treturn this.request<WebhookDetail>(\n\t\t\t\"PATCH\",\n\t\t\t`/api/webhooks/${seg(id)}`,\n\t\t\tpatch,\n\t\t);\n\t}\n\n\tasync pause(id: string): Promise<WebhookDetail> {\n\t\treturn this.request<WebhookDetail>(\n\t\t\t\"POST\",\n\t\t\t`/api/webhooks/${seg(id)}/pause`,\n\t\t);\n\t}\n\n\tasync resume(id: string): Promise<WebhookDetail> {\n\t\treturn this.request<WebhookDetail>(\n\t\t\t\"POST\",\n\t\t\t`/api/webhooks/${seg(id)}/resume`,\n\t\t);\n\t}\n\n\tasync delete(id: string): Promise<{ ok: true }> {\n\t\treturn this.request<{ ok: true }>(\"DELETE\", `/api/webhooks/${seg(id)}`);\n\t}\n\n\tasync rotateSecret(id: string): Promise<RotateSecretResponse> {\n\t\treturn this.request<RotateSecretResponse>(\n\t\t\t\"POST\",\n\t\t\t`/api/webhooks/${seg(id)}/rotate-secret`,\n\t\t);\n\t}\n\n\t/** Send a one-off test webhook to the webhook's URL (built for its\n\t * format, SSRF-guarded). Logged as a delivery row, visible via deliveries. */\n\tasync test(id: string): Promise<WebhookTestResult> {\n\t\treturn this.request<WebhookTestResult>(\n\t\t\t\"POST\",\n\t\t\t`/api/webhooks/${seg(id)}/test`,\n\t\t);\n\t}\n\n\t/** The last 100 delivery attempts, newest first. The server caps the window;\n\t * there is nothing to page. */\n\tasync deliveries(id: string): Promise<{ data: DeliveryRow[] }> {\n\t\treturn this.request<{ data: DeliveryRow[] }>(\n\t\t\t\"GET\",\n\t\t\t`/api/webhooks/${seg(id)}/deliveries`,\n\t\t);\n\t}\n\n\t/** Hourly delivered/waiting/gave-up counts for the last 7 days, plus the\n\t * current queue depth — the events chart on the detail page. */\n\tasync activity(id: string): Promise<WebhookActivity> {\n\t\treturn this.request<WebhookActivity>(\n\t\t\t\"GET\",\n\t\t\t`/api/webhooks/${seg(id)}/activity`,\n\t\t);\n\t}\n\n\t/** One delivery attempt with its outbox context (payload, response\n\t * headers) — the delivery card on the detail page. */\n\tasync delivery(\n\t\tid: string,\n\t\tdeliveryId: string,\n\t): Promise<WebhookDeliveryDetail> {\n\t\treturn this.request<WebhookDeliveryDetail>(\n\t\t\t\"GET\",\n\t\t\t`/api/webhooks/${seg(id)}/deliveries/${seg(deliveryId)}`,\n\t\t);\n\t}\n\n\tasync replay(\n\t\tid: string,\n\t\trange: { fromBlock: number; toBlock: number; force?: string },\n\t): Promise<ReplayResult> {\n\t\treturn this.request<ReplayResult>(\n\t\t\t\"POST\",\n\t\t\t`/api/webhooks/${seg(id)}/replay`,\n\t\t\trange,\n\t\t);\n\t}\n\n\tasync dead(id: string): Promise<{ data: DeadRow[] }> {\n\t\treturn this.request<{ data: DeadRow[] }>(\n\t\t\t\"GET\",\n\t\t\t`/api/webhooks/${seg(id)}/dead`,\n\t\t);\n\t}\n\n\t/** Push one dead-lettered event back onto the delivery queue. `outboxId` is\n\t * the `id` of a row from {@link dead}. */\n\tasync requeue(id: string, outboxId: string): Promise<{ ok: true }> {\n\t\treturn this.request<{ ok: true }>(\n\t\t\t\"POST\",\n\t\t\t`/api/webhooks/${seg(id)}/dead/${seg(outboxId)}/requeue`,\n\t\t);\n\t}\n}\n",
|
|
22
22
|
"import type { InstanceDiagnosis } from \"@secondlayer/shared/archive/instance-diagnosis\";\nimport type { SubgraphSummary } from \"@secondlayer/shared/schemas\";\nimport { createArchiveClient } from \"./archive/client.ts\";\nimport {\n\ttype InstanceClient,\n\tcreateArchiveVerify,\n\tcreateInstanceClient,\n} from \"./archive/instance.ts\";\nimport type { SecondLayerArchive } from \"./archive/types.ts\";\nimport { BaseClient } from \"./base.ts\";\nimport type { SecondLayerOptions } from \"./base.ts\";\nimport { Contracts } from \"./contracts/client.ts\";\nimport { ApiError, SecondLayerError } from \"./errors.ts\";\nimport { Index } from \"./index-api/client.ts\";\nimport type { IndexTip } from \"./index-api/client.ts\";\nimport { createStreamsClient } from \"./streams/client.ts\";\nimport type { StreamsClient, StreamsTip } from \"./streams/types.ts\";\nimport { Subgraphs } from \"./subgraphs/client.ts\";\nimport type { SubgraphOperationStatus } from \"./subgraphs/client.ts\";\nimport { Webhooks } from \"./webhooks/client.ts\";\n\nexport interface ContextAccount {\n\temail: string;\n}\n\nexport interface ActiveSubgraphOperation {\n\tsubgraph: string;\n\toperationId: string;\n\tkind: SubgraphOperationStatus[\"kind\"];\n\tstatus: SubgraphOperationStatus[\"status\"];\n\tprogress: number | null;\n}\n\n/** Why one snapshot field could not be read. Serialized from the SDK error\n * family so a snapshot stays plain data. */\nexport interface ContextFieldError {\n\tmessage: string;\n\t/** Stable code from the API envelope (`UNAUTHORIZED`, `INDEX_NOT_READY`)\n\t * or the SDK (`REQUEST_TIMEOUT`); absent for a bare transport failure. */\n\tcode?: string;\n\t/** HTTP status; `0` when the API could not be reached. */\n\tstatus?: number;\n\t/** Whether the same read can succeed on a retry (429, 5xx, network). */\n\tretryable: boolean;\n}\n\n/** One snapshot field: the value, or `null` plus the error that produced it.\n * `value: null` with no `error` means the read succeeded and found nothing. */\nexport interface ContextField<T> {\n\tvalue: T | null;\n\terror?: ContextFieldError;\n}\n\n/**\n * A point-in-time orientation snapshot for an agent: the live tips and what\n * this instance holds. Every field is a {@link ContextField}, so a missing\n * value says why it is missing (API unreachable, token rejected, index still\n * catching up) instead of a bare `null`. `context()` itself never throws.\n */\nexport interface ContextSnapshot {\n\t/** Token identity from `/api/accounts/me`. A self-hosted instance has no\n\t * account system: the read 404s and the field carries that error. */\n\taccount: ContextField<ContextAccount>;\n\tstreamsTip: ContextField<StreamsTip>;\n\tindexTip: ContextField<IndexTip>;\n\tsubgraphs: ContextField<SubgraphSummary[]>;\n\twebhooks: ContextField<{\n\t\tcount: number;\n\t\tbyStatus: Record<string, number>;\n\t}>;\n\t/** In-flight reindex operations (bounded to subgraphs reporting `reindexing`). */\n\tactiveOperations: ContextField<ActiveSubgraphOperation[]>;\n\t/** Decoder lag / empty-index from `GET /public/status`. */\n\tinstance: ContextField<InstanceDiagnosis>;\n}\n\n/** Fold one read into a {@link ContextField}: the value, or `null` with the\n * failure described. Exported for callers that assemble their own snapshot\n * from extra reads and want the same shape. */\nexport async function contextField<T>(\n\tread: Promise<T>,\n): Promise<ContextField<T>> {\n\ttry {\n\t\treturn { value: await read };\n\t} catch (err) {\n\t\treturn { value: null, error: describeContextError(err) };\n\t}\n}\n\nfunction describeContextError(err: unknown): ContextFieldError {\n\tif (err instanceof SecondLayerError) {\n\t\treturn {\n\t\t\tmessage: err.shortMessage,\n\t\t\t...(err.code !== undefined ? { code: err.code } : {}),\n\t\t\t...(err instanceof ApiError ? { status: err.status } : {}),\n\t\t\tretryable: err.retryable,\n\t\t};\n\t}\n\t// A bare TypeError is fetch's own network failure (Streams reads are not\n\t// wrapped): unreachable, and worth another try, same as the consume loops.\n\tif (err instanceof TypeError) {\n\t\treturn { message: err.message, status: 0, retryable: true };\n\t}\n\treturn {\n\t\tmessage: err instanceof Error ? err.message : String(err),\n\t\tretryable: false,\n\t};\n}\n\nexport class SecondLayer extends BaseClient {\n\treadonly streams: StreamsClient;\n\treadonly index: Index;\n\treadonly contracts: Contracts;\n\treadonly subgraphs: Subgraphs;\n\treadonly webhooks: Webhooks;\n\treadonly archive: SecondLayerArchive;\n\treadonly instance: InstanceClient;\n\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tsuper(options);\n\t\tthis.streams = createStreamsClient({\n\t\t\t// Already resolved by BaseClient (an explicit \"\" stays keyless), so the\n\t\t\t// env precedence runs, and warns, once per client.\n\t\t\tapiKey: this.apiKey,\n\t\t\torigin: this.origin,\n\t\t\tbaseUrl: options.baseUrl,\n\t\t\tfetchImpl: options.fetchImpl,\n\t\t\tdumpsBaseUrl: options.dumpsBaseUrl,\n\t\t\tverify: options.verify,\n\t\t\tverifyDumpsManifest: options.verifyDumpsManifest,\n\t\t});\n\t\tthis.index = new Index(options);\n\t\tthis.contracts = new Contracts(options);\n\t\tthis.subgraphs = new Subgraphs(options);\n\t\tthis.webhooks = new Webhooks(options);\n\t\tconst request = <T>(method: string, path: string, body?: unknown) =>\n\t\t\tthis.request<T>(method, path, body);\n\t\tthis.archive = {\n\t\t\t...createArchiveClient({\n\t\t\t\taccountKey: options.accountKey,\n\t\t\t\tfetchImpl: options.fetchImpl,\n\t\t\t\tarchiveBaseUrl: options.archiveBaseUrl,\n\t\t\t\tarchiveOpsUrl: options.archiveOpsUrl,\n\t\t\t}),\n\t\t\tverify: createArchiveVerify(request),\n\t\t};\n\t\tthis.instance = createInstanceClient(request);\n\t}\n\n\t/**\n\t * Up to 10 public reads in one round trip (`POST /v1/batch`). Each item\n\t * is authorized on its own; the client's bearer token applies to every item.\n\t */\n\tasync batch(\n\t\trequests: Array<{\n\t\t\tpath: string;\n\t\t\tparams?: Record<string, string | number | boolean>;\n\t\t}>,\n\t): Promise<{\n\t\tresults: Array<{ path: string | null; status: number; body: unknown }>;\n\t}> {\n\t\treturn this.request(\"POST\", \"/v1/batch\", { requests });\n\t}\n\n\t/**\n\t * Assemble a {@link ContextSnapshot}: the same orientation an MCP agent\n\t * reads from `secondlayer://context`, available to any SDK/CLI consumer.\n\t * Reads run concurrently; a failed read lands as `{ value: null, error }`\n\t * on its field rather than rejecting the whole snapshot.\n\t */\n\tasync context(): Promise<ContextSnapshot> {\n\t\tconst [account, streamsTip, indexEnv, subgraphsRes, webhooksRes, instance] =\n\t\t\tawait Promise.all([\n\t\t\t\tcontextField(this.request<ContextAccount>(\"GET\", \"/api/accounts/me\")),\n\t\t\t\tcontextField(this.streams.tip()),\n\t\t\t\tcontextField(this.index.canonical.list({ limit: 1 })),\n\t\t\t\tcontextField(this.subgraphs.list()),\n\t\t\t\tcontextField(this.webhooks.list()),\n\t\t\t\tcontextField(this.instance.diagnose()),\n\t\t\t]);\n\n\t\tconst subgraphs: ContextField<SubgraphSummary[]> = {\n\t\t\tvalue: subgraphsRes.value?.data ?? null,\n\t\t\t...(subgraphsRes.error ? { error: subgraphsRes.error } : {}),\n\t\t};\n\n\t\tconst webhooks: ContextSnapshot[\"webhooks\"] = {\n\t\t\tvalue: null,\n\t\t\t...(webhooksRes.error ? { error: webhooksRes.error } : {}),\n\t\t};\n\t\tif (webhooksRes.value) {\n\t\t\tconst byStatus: Record<string, number> = {};\n\t\t\tfor (const s of webhooksRes.value.data) {\n\t\t\t\tbyStatus[s.status] = (byStatus[s.status] ?? 0) + 1;\n\t\t\t}\n\t\t\twebhooks.value = {\n\t\t\t\tcount: webhooksRes.value.data.length,\n\t\t\t\tbyStatus,\n\t\t\t};\n\t\t}\n\n\t\t// In-flight ops: only probe subgraphs that report `reindexing`, so this\n\t\t// stays cheap (usually zero extra calls) instead of N+1 over every subgraph.\n\t\tlet activeOperations: ContextField<ActiveSubgraphOperation[]> = {\n\t\t\tvalue: null,\n\t\t\terror: {\n\t\t\t\tmessage:\n\t\t\t\t\t\"Not probed: in-flight operations are read per subgraph, and the subgraph list did not resolve.\",\n\t\t\t\tretryable: subgraphs.error?.retryable ?? false,\n\t\t\t},\n\t\t};\n\t\tif (subgraphs.value) {\n\t\t\tconst probed = await Promise.all(\n\t\t\t\tsubgraphs.value\n\t\t\t\t\t.filter((s) => s.status === \"reindexing\")\n\t\t\t\t\t.map(async (s) => {\n\t\t\t\t\t\tconst res = await contextField(this.subgraphs.operations(s.name));\n\t\t\t\t\t\tconst op = res.value?.operations.find(\n\t\t\t\t\t\t\t(o) => o.status === \"queued\" || o.status === \"running\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn op\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tsubgraph: s.name,\n\t\t\t\t\t\t\t\t\toperationId: op.id,\n\t\t\t\t\t\t\t\t\tkind: op.kind,\n\t\t\t\t\t\t\t\t\tstatus: op.status,\n\t\t\t\t\t\t\t\t\tprogress: op.progress,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t}),\n\t\t\t);\n\t\t\tactiveOperations = {\n\t\t\t\tvalue: probed.filter((o): o is ActiveSubgraphOperation => o !== null),\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\taccount,\n\t\t\tstreamsTip,\n\t\t\tindexTip: {\n\t\t\t\tvalue: indexEnv.value?.tip ?? null,\n\t\t\t\t...(indexEnv.error ? { error: indexEnv.error } : {}),\n\t\t\t},\n\t\t\tsubgraphs,\n\t\t\twebhooks,\n\t\t\tactiveOperations,\n\t\t\tinstance,\n\t\t};\n\t}\n}\n",
|
|
23
23
|
"import type { InferSubgraphClient } from \"@secondlayer/subgraphs\";\nimport type { SecondLayerOptions } from \"../base.ts\";\nimport { SecondLayer } from \"../client.ts\";\nimport { Subgraphs } from \"./client.ts\";\n\n/**\n * Returns a typed client for a subgraph defined with `defineSubgraph()`.\n *\n * Accepts a plain options object, a `SecondLayer` instance, or a `Subgraphs` instance.\n *\n * @example\n * ```ts\n * import mySubgraph from './subgraphs/my-subgraph'\n * import { getSubgraph } from '@secondlayer/sdk'\n *\n * const client = getSubgraph(mySubgraph, { apiKey: 'sl_...' })\n * const page = await client.transfers.findMany({ where: { sender: 'SP...' } })\n * ```\n */\nexport function getSubgraph<\n\tT extends { name: string; schema: Record<string, unknown> },\n>(\n\tdef: T,\n\toptions: Partial<SecondLayerOptions> | SecondLayer | Subgraphs = {},\n): InferSubgraphClient<T> {\n\tif (options instanceof Subgraphs) {\n\t\treturn options.typed(def);\n\t}\n\tif (options instanceof SecondLayer) {\n\t\treturn options.subgraphs.typed(def);\n\t}\n\treturn new Subgraphs(options).typed(def);\n}\n",
|
|
24
|
-
"import type { SubgraphDetail } from \"@secondlayer/shared/schemas/subgraphs\";\nimport type {\n\tDeadRow,\n\tDeliveryRow,\n\tWebhookDetail,\n\tWebhookSummary,\n} from \"@secondlayer/shared/schemas/webhooks\";\n\n/**\n * Webhook diagnosis, shared by `secondlayer webhooks doctor` and the\n * dashboard's webhook detail page. Moved out of the CLI (unchanged behavior)\n * so the web can build the same judgment without printing CLI-command text.\n *\n * Plan 068 adds five deterministic, numbers-only detectors on top of the\n * existing flag checks: no model, no history beyond the deliveries window\n * already fetched. Thresholds are named constants below, conservative on\n * purpose — a wrong insight costs more trust than a missed one.\n */\n\nexport function isSuccessDelivery(row: DeliveryRow): boolean {\n\treturn (\n\t\trow.statusCode !== null && row.statusCode >= 200 && row.statusCode < 300\n\t);\n}\n\nexport type DoctorSeverity = \"bad\" | \"warn\" | \"calm\";\n\nexport interface DoctorEvidence {\n\tlabel: string;\n\tvalue: string;\n}\n\nexport interface DoctorFix {\n\ttext: string;\n\t/** A `secondlayer webhooks ...` command the reader can copy. */\n\tcommand?: string;\n\t/** Anchor into the docs' webhooks troubleshooting section. */\n\tdocsPath?: string;\n}\n\nexport type DoctorIssueCode =\n\t| \"warning\"\n\t| \"paused\"\n\t| \"last_error\"\n\t| \"circuit\"\n\t| \"dead_letters\"\n\t| \"subgraph_gaps\"\n\t| \"subgraph_catching_up\"\n\t| \"no_deliveries\"\n\t| \"receiver_rate_limited\"\n\t| \"receiver_down\"\n\t| \"receiver_rejects\"\n\t| \"receiver_slow\"\n\t| \"delivery_lag\";\n\nexport interface DoctorIssue {\n\tcode: DoctorIssueCode;\n\tdetail?: string;\n\tseverity: DoctorSeverity;\n\t/** 2-4 numbers-only facts backing the issue. Only the five new detectors\n\t * and the list-summary circuit issue carry this — the older flag checks\n\t * keep their plain `detail` string. */\n\tevidence?: DoctorEvidence[];\n\tfix?: DoctorFix;\n}\n\nexport interface DoctorReport {\n\twebhook: WebhookDetail;\n\tdeliverySummary: {\n\t\ttotal: number;\n\t\tsuccessful: number;\n\t\tfailed: number;\n\t\tlast: DeliveryRow | null;\n\t};\n\tdeadCount: number;\n\tsubgraph: {\n\t\tname: string;\n\t\tstatus: string;\n\t\tsyncStatus: string;\n\t\tlastProcessedBlock: number;\n\t\tchainTip: number;\n\t\tgapCount: number;\n\t\tintegrity: string;\n\t} | null;\n\t/** CLI-facing next steps, one per issue, in the same order as `issues`. */\n\thints: string[];\n\tissues: DoctorIssue[];\n\t/** The single most severe issue (bad > warn > calm, then rule priority),\n\t * or `null` when there are none. The UI leads with this and collapses\n\t * the rest underneath. */\n\tprimary: DoctorIssue | null;\n}\n\n// ── Detector thresholds ─────────────────────────────────────────────\n// Named constants, not config (plan 068). Tune from real data at the 054\n// spike — until then these stay conservative.\n\nconst RATE_LIMITED_MIN_ATTEMPTS = 10;\nconst RATE_LIMITED_MIN_RATIO = 0.5;\n// Exported: the status pill's \"auto-failing\" rule (plan 070) reuses this\n// instead of duplicating the number.\nexport const DOWN_MIN_CONSECUTIVE = 5;\nconst REJECTS_MIN_CONSECUTIVE = 5;\nconst SLOW_WINDOW = 20;\nconst SLOW_MIN_SAMPLES = 5;\nconst SLOW_TIMEOUT_RATIO = 0.5;\nconst LAG_WINDOW = 20;\nconst LAG_MIN_SAMPLES = 5;\nconst LAG_THRESHOLD_MS = 60_000;\nconst ERROR_SNIPPET_MAX = 200;\n\nfunction median(values: number[]): number {\n\tif (values.length === 0) return 0;\n\tconst sorted = [...values].sort((a, b) => a - b);\n\treturn sorted[Math.floor(sorted.length / 2)] ?? 0;\n}\n\nfunction percentile(values: number[], p: number): number {\n\tif (values.length === 0) return 0;\n\tconst sorted = [...values].sort((a, b) => a - b);\n\tconst idx = Math.min(sorted.length - 1, Math.floor(p * sorted.length));\n\treturn sorted[idx] ?? 0;\n}\n\nfunction formatMs(ms: number): string {\n\treturn ms >= 1000 ? `${(ms / 1000).toFixed(1)}s` : `${Math.round(ms)}ms`;\n}\n\n/** \"2026-04-23 00:00 UTC\" — date, hour:minute, and an explicit zone so an\n * evidence value never reads as local time. */\nfunction formatShortDate(iso: string): string {\n\treturn `${iso.slice(0, 10)} ${iso.slice(11, 16)} UTC`;\n}\n\n/** The longest run from the start of `rows` (newest-first) matching\n * `predicate` — the current losing (or rejecting) streak. */\nfunction consecutiveFromStart(\n\trows: DeliveryRow[],\n\tpredicate: (row: DeliveryRow) => boolean,\n): DeliveryRow[] {\n\tconst out: DeliveryRow[] = [];\n\tfor (const row of rows) {\n\t\tif (!predicate(row)) break;\n\t\tout.push(row);\n\t}\n\treturn out;\n}\n\nfunction summarizeStatusBreakdown(rows: DeliveryRow[]): string {\n\tconst counts = new Map<string, number>();\n\tfor (const row of rows) {\n\t\tconst key =\n\t\t\trow.statusCode === null ? \"timeout/no response\" : String(row.statusCode);\n\t\tcounts.set(key, (counts.get(key) ?? 0) + 1);\n\t}\n\treturn [...counts.entries()].map(([key, n]) => `${n}× ${key}`).join(\", \");\n}\n\nconst RETRY_AFTER_RE = /retry-after:?\\s*(\\d+)/i;\n\n/** The most recent 429's `Retry-After`, if the receiver's error text carried\n * one — we never invent a value the rows didn't report. */\nfunction extractRetryAfterSeconds(rows: DeliveryRow[]): string | null {\n\tfor (const row of rows) {\n\t\tif (row.statusCode !== 429 || !row.errorMessage) continue;\n\t\tconst match = row.errorMessage.match(RETRY_AFTER_RE);\n\t\tif (match?.[1]) return match[1];\n\t}\n\treturn null;\n}\n\n/** ≥10 attempts in the window, ≥50% of them 429 — the receiver is\n * rate-limiting us, not failing. */\nfunction detectReceiverRateLimited(\n\twebhook: WebhookDetail,\n\tdeliveries: DeliveryRow[],\n): DoctorIssue | null {\n\tif (deliveries.length < RATE_LIMITED_MIN_ATTEMPTS) return null;\n\tconst count429 = deliveries.filter((d) => d.statusCode === 429).length;\n\tif (count429 / deliveries.length < RATE_LIMITED_MIN_RATIO) return null;\n\n\tconst oldest = deliveries[deliveries.length - 1];\n\tconst newest = deliveries[0];\n\tconst evidence: DoctorEvidence[] = [\n\t\t{\n\t\t\tlabel: \"429 responses\",\n\t\t\tvalue: `${count429} of ${deliveries.length} attempts`,\n\t\t},\n\t\t{\n\t\t\tlabel: \"window\",\n\t\t\tvalue:\n\t\t\t\toldest && newest\n\t\t\t\t\t? `${formatShortDate(oldest.dispatchedAt)} → ${formatShortDate(newest.dispatchedAt)}`\n\t\t\t\t\t: \"unknown\",\n\t\t},\n\t];\n\tconst retryAfter = extractRetryAfterSeconds(deliveries);\n\tif (retryAfter) {\n\t\tevidence.push({ label: \"latest Retry-After\", value: `${retryAfter}s` });\n\t}\n\n\tconst suggestedConcurrency = Math.max(1, Math.floor(webhook.concurrency / 2));\n\treturn {\n\t\tcode: \"receiver_rate_limited\",\n\t\tseverity: \"warn\",\n\t\tevidence,\n\t\tfix: {\n\t\t\ttext: \"Lower concurrency, or honor the Retry-After header on your receiver.\",\n\t\t\tcommand: `secondlayer webhooks update ${webhook.id} --concurrency ${suggestedConcurrency}`,\n\t\t\tdocsPath: \"/docs/webhooks#receiver-rate-limited\",\n\t\t},\n\t};\n}\n\n/** ≥5 most recent attempts are 5xx or got no response at all (timeout /\n * connection failure) — the receiver looks down, not just slow. */\nfunction detectReceiverDown(\n\twebhook: WebhookDetail,\n\tdeliveries: DeliveryRow[],\n): DoctorIssue | null {\n\tconst streak = consecutiveFromStart(\n\t\tdeliveries,\n\t\t(d) => d.statusCode === null || d.statusCode >= 500,\n\t);\n\tif (streak.length < DOWN_MIN_CONSECUTIVE) return null;\n\n\treturn {\n\t\tcode: \"receiver_down\",\n\t\tseverity: \"bad\",\n\t\tevidence: [\n\t\t\t{ label: \"consecutive failures\", value: String(streak.length) },\n\t\t\t{ label: \"breakdown\", value: summarizeStatusBreakdown(streak) },\n\t\t\t{\n\t\t\t\tlabel: \"last success\",\n\t\t\t\tvalue: webhook.lastSuccessAt\n\t\t\t\t\t? formatShortDate(webhook.lastSuccessAt)\n\t\t\t\t\t: \"never\",\n\t\t\t},\n\t\t],\n\t\tfix: {\n\t\t\ttext: \"Check your receiver's health and logs, then send a test event.\",\n\t\t\tcommand: `secondlayer webhooks test ${webhook.id}`,\n\t\t\tdocsPath: \"/docs/webhooks#receiver-down\",\n\t\t},\n\t};\n}\n\n/** ≥5 most recent attempts are 4xx other than 429 — the receiver is\n * reachable but actively rejecting us (auth, signature, bad request). */\nfunction detectReceiverRejects(\n\twebhook: WebhookDetail,\n\tdeliveries: DeliveryRow[],\n): DoctorIssue | null {\n\tconst streak = consecutiveFromStart(\n\t\tdeliveries,\n\t\t(d) =>\n\t\t\td.statusCode !== null &&\n\t\t\td.statusCode >= 400 &&\n\t\t\td.statusCode < 500 &&\n\t\t\td.statusCode !== 429,\n\t);\n\tif (streak.length < REJECTS_MIN_CONSECUTIVE) return null;\n\n\tconst evidence: DoctorEvidence[] = [\n\t\t{ label: \"consecutive rejects\", value: String(streak.length) },\n\t\t{ label: \"breakdown\", value: summarizeStatusBreakdown(streak) },\n\t];\n\tconst withText = streak.find((d) => d.errorMessage || d.responseBody);\n\tconst snippet = withText\n\t\t? (withText.errorMessage ?? withText.responseBody ?? \"\").slice(\n\t\t\t\t0,\n\t\t\t\tERROR_SNIPPET_MAX,\n\t\t\t)\n\t\t: null;\n\tif (snippet) evidence.push({ label: \"first error\", value: snippet });\n\n\treturn {\n\t\tcode: \"receiver_rejects\",\n\t\tseverity: \"bad\",\n\t\tevidence,\n\t\tfix: {\n\t\t\ttext: \"Check your receiver's auth config or signature verification.\",\n\t\t\tcommand: `secondlayer webhooks test ${webhook.id}`,\n\t\t\tdocsPath: \"/docs/webhooks#receiver-rejects\",\n\t\t},\n\t};\n}\n\n/** Median response time of the newest 20 attempts is at least half the\n * webhook's timeout — deliveries are slow, not failing. */\nfunction detectReceiverSlow(\n\twebhook: WebhookDetail,\n\tdeliveries: DeliveryRow[],\n): DoctorIssue | null {\n\tconst durations = deliveries\n\t\t.slice(0, SLOW_WINDOW)\n\t\t.map((d) => d.durationMs)\n\t\t.filter((d): d is number => d !== null);\n\tif (durations.length < SLOW_MIN_SAMPLES) return null;\n\n\tconst med = median(durations);\n\tif (med < webhook.timeoutMs * SLOW_TIMEOUT_RATIO) return null;\n\n\treturn {\n\t\tcode: \"receiver_slow\",\n\t\tseverity: \"warn\",\n\t\tevidence: [\n\t\t\t{ label: \"median response time\", value: formatMs(med) },\n\t\t\t{\n\t\t\t\tlabel: \"p95 response time\",\n\t\t\t\tvalue: formatMs(percentile(durations, 0.95)),\n\t\t\t},\n\t\t\t{ label: \"timeout\", value: formatMs(webhook.timeoutMs) },\n\t\t],\n\t\tfix: {\n\t\t\ttext: \"Speed up your receiver, or raise the timeout (up to 30s hosted).\",\n\t\t\tcommand: `secondlayer webhooks update ${webhook.id} --timeout-ms 30000`,\n\t\t\tdocsPath: \"/docs/webhooks#receiver-slow\",\n\t\t},\n\t};\n}\n\n/** Median (dispatch time − block time) of the newest 20 attempts with a\n * known block time exceeds a minute — we're behind on delivery. This is\n * our-side latency, not something the receiver can fix, so it carries no\n * actionable command. */\nfunction detectDeliveryLag(deliveries: DeliveryRow[]): DoctorIssue | null {\n\tconst window = deliveries\n\t\t.slice(0, LAG_WINDOW)\n\t\t.filter(\n\t\t\t(d): d is DeliveryRow & { blockTime: string } => d.blockTime !== null,\n\t\t);\n\tif (window.length < LAG_MIN_SAMPLES) return null;\n\n\tconst lags = window.map(\n\t\t(d) => new Date(d.dispatchedAt).getTime() - new Date(d.blockTime).getTime(),\n\t);\n\tconst med = median(lags);\n\tif (med <= LAG_THRESHOLD_MS) return null;\n\n\tconst blockTimes = window.map((d) => d.blockTime).sort();\n\tconst oldest = blockTimes[0];\n\tconst newest = blockTimes[blockTimes.length - 1];\n\n\treturn {\n\t\tcode: \"delivery_lag\",\n\t\tseverity: \"warn\",\n\t\tevidence: [\n\t\t\t{ label: \"median lag\", value: formatMs(med) },\n\t\t\t{\n\t\t\t\tlabel: \"block time range\",\n\t\t\t\tvalue:\n\t\t\t\t\toldest && newest\n\t\t\t\t\t\t? `${formatShortDate(oldest)} → ${formatShortDate(newest)}`\n\t\t\t\t\t\t: \"unknown\",\n\t\t\t},\n\t\t],\n\t\tfix: {\n\t\t\ttext: \"We're behind on delivery; no action needed on your end.\",\n\t\t},\n\t};\n}\n\nconst SEVERITY_RANK: Record<DoctorSeverity, number> = {\n\tbad: 0,\n\twarn: 1,\n\tcalm: 2,\n};\n\n/** Tie-break within a severity tier when more than one issue fires at\n * once — most specific / most actionable first. */\nconst CODE_PRIORITY: DoctorIssueCode[] = [\n\t\"circuit\",\n\t\"receiver_down\",\n\t\"receiver_rejects\",\n\t\"dead_letters\",\n\t\"paused\",\n\t\"last_error\",\n\t\"warning\",\n\t\"receiver_rate_limited\",\n\t\"receiver_slow\",\n\t\"delivery_lag\",\n\t\"no_deliveries\",\n\t\"subgraph_gaps\",\n\t\"subgraph_catching_up\",\n];\n\nfunction pickPrimary(issues: DoctorIssue[]): DoctorIssue | null {\n\tif (issues.length === 0) return null;\n\treturn (\n\t\t[...issues].sort((a, b) => {\n\t\t\tconst sevDiff = SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity];\n\t\t\tif (sevDiff !== 0) return sevDiff;\n\t\t\treturn CODE_PRIORITY.indexOf(a.code) - CODE_PRIORITY.indexOf(b.code);\n\t\t})[0] ?? null\n\t);\n}\n\nfunction hintFor(issue: DoctorIssue): string {\n\tif (!issue.fix) return issue.detail ?? issue.code;\n\treturn issue.fix.command\n\t\t? `${issue.fix.text} ${issue.fix.command}`\n\t\t: issue.fix.text;\n}\n\nexport function buildDoctorReport(input: {\n\twebhook: WebhookDetail;\n\tdeliveries: DeliveryRow[];\n\tdead: DeadRow[];\n\tsubgraph?: SubgraphDetail | null;\n}): DoctorReport {\n\tconst successful = input.deliveries.filter(isSuccessDelivery).length;\n\tconst failed = input.deliveries.length - successful;\n\tconst subgraph = input.subgraph\n\t\t? {\n\t\t\t\tname: input.subgraph.name,\n\t\t\t\tstatus: input.subgraph.status,\n\t\t\t\tsyncStatus: input.subgraph.sync.status,\n\t\t\t\tlastProcessedBlock: input.subgraph.sync.lastProcessedBlock,\n\t\t\t\tchainTip: input.subgraph.sync.chainTip,\n\t\t\t\tgapCount: input.subgraph.sync.gaps.count,\n\t\t\t\tintegrity: input.subgraph.sync.integrity,\n\t\t\t}\n\t\t: null;\n\n\tconst hints: string[] = [];\n\tconst issues: DoctorIssue[] = [];\n\tif (input.webhook.warning) {\n\t\thints.push(input.webhook.warning);\n\t\tissues.push({\n\t\t\tcode: \"warning\",\n\t\t\tdetail: input.webhook.warning,\n\t\t\tseverity: \"warn\",\n\t\t});\n\t}\n\tif (input.webhook.status === \"paused\") {\n\t\thints.push(\n\t\t\t`Resume when the receiver is healthy: secondlayer webhooks resume ${input.webhook.id}`,\n\t\t);\n\t\tissues.push({ code: \"paused\", severity: \"warn\" });\n\t}\n\tif (input.webhook.lastError) {\n\t\thints.push(\n\t\t\t\"Run secondlayer webhooks test to reproduce the receiver request.\",\n\t\t);\n\t\tissues.push({\n\t\t\tcode: \"last_error\",\n\t\t\tdetail: input.webhook.lastError,\n\t\t\tseverity: \"warn\",\n\t\t});\n\t}\n\tif (input.webhook.circuitOpenedAt || input.webhook.circuitFailures > 0) {\n\t\thints.push(\n\t\t\t\"Circuit breaker has failures; inspect receiver logs and delivery status codes.\",\n\t\t);\n\t\tissues.push({ code: \"circuit\", severity: \"bad\" });\n\t}\n\tif (input.dead.length > 0) {\n\t\thints.push(\n\t\t\t`Dead-letter rows exist; inspect with secondlayer webhooks dead ${input.webhook.id} and requeue selected rows.`,\n\t\t);\n\t\tissues.push({ code: \"dead_letters\", severity: \"bad\" });\n\t}\n\tif (subgraph?.gapCount && subgraph.gapCount > 0) {\n\t\thints.push(\n\t\t\t`Linked subgraph has gaps; run secondlayer subgraphs gaps ${input.webhook.subgraphName}.`,\n\t\t);\n\t\tissues.push({ code: \"subgraph_gaps\", severity: \"calm\" });\n\t}\n\tif (subgraph?.syncStatus === \"catching_up\") {\n\t\thints.push(\n\t\t\t\"Linked subgraph is still catching up; new matching rows may arrive later.\",\n\t\t);\n\t\tissues.push({ code: \"subgraph_catching_up\", severity: \"calm\" });\n\t}\n\n\tfor (const detector of [\n\t\tdetectReceiverRateLimited,\n\t\tdetectReceiverDown,\n\t\tdetectReceiverRejects,\n\t\tdetectReceiverSlow,\n\t]) {\n\t\tconst issue = detector(input.webhook, input.deliveries);\n\t\tif (issue) {\n\t\t\tissues.push(issue);\n\t\t\thints.push(hintFor(issue));\n\t\t}\n\t}\n\tconst lagIssue = detectDeliveryLag(input.deliveries);\n\tif (lagIssue) {\n\t\tissues.push(lagIssue);\n\t\thints.push(hintFor(lagIssue));\n\t}\n\n\tif (input.deliveries.length === 0) {\n\t\thints.push(\n\t\t\t\"No deliveries yet; confirm the table is receiving inserted rows that match the filter.\",\n\t\t);\n\t\tissues.push({ code: \"no_deliveries\", severity: \"calm\" });\n\t}\n\tif (hints.length === 0) {\n\t\thints.push(\"No immediate action needed.\");\n\t}\n\n\treturn {\n\t\twebhook: input.webhook,\n\t\tdeliverySummary: {\n\t\t\ttotal: input.deliveries.length,\n\t\t\tsuccessful,\n\t\t\tfailed,\n\t\t\tlast: input.deliveries[0] ?? null,\n\t\t},\n\t\tdeadCount: input.dead.length,\n\t\tsubgraph,\n\t\thints,\n\t\tissues,\n\t\tprimary: pickPrimary(issues),\n\t};\n}\n\n/**\n * The list page's own reduced detector: computed from `WebhookSummary` alone\n * (no deliveries, no dead-letter rows — the list endpoint returns neither,\n * and fetching per-row detail or deliveries here would fan out one request\n * per row). Only `status` and `circuitOpenedAt` distinguish a real problem\n * from a manual pause at this level; deliveries-based rules (rate limits,\n * downtime, rejects, slowness, lag) only ever show on the detail page.\n */\nexport function buildListIssue(\n\twebhook: Pick<WebhookSummary, \"status\" | \"circuitOpenedAt\" | \"lastSuccessAt\">,\n): DoctorIssue | null {\n\tif (webhook.status !== \"paused\") return null;\n\tif (webhook.circuitOpenedAt) {\n\t\treturn {\n\t\t\tcode: \"circuit\",\n\t\t\tseverity: \"bad\",\n\t\t\tevidence: [\n\t\t\t\t{\n\t\t\t\t\tlabel: \"circuit opened\",\n\t\t\t\t\tvalue: formatShortDate(webhook.circuitOpenedAt),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: \"last success\",\n\t\t\t\t\tvalue: webhook.lastSuccessAt\n\t\t\t\t\t\t? formatShortDate(webhook.lastSuccessAt)\n\t\t\t\t\t\t: \"never\",\n\t\t\t\t},\n\t\t\t],\n\t\t\tfix: {\n\t\t\t\ttext: \"Check your receiver's health and logs, then send a test event.\",\n\t\t\t\tdocsPath: \"/docs/webhooks#receiver-down\",\n\t\t\t},\n\t\t};\n\t}\n\treturn { code: \"paused\", severity: \"warn\" };\n}\n",
|
|
24
|
+
"import type {\n\tDeadRow,\n\tDeliveryRow,\n\tWebhookDetail,\n\tWebhookSummary,\n} from \"@secondlayer/shared/schemas/webhooks\";\n\n/**\n * Webhook diagnosis, shared by `secondlayer webhooks doctor` and the\n * dashboard's webhook detail page. Moved out of the CLI (unchanged behavior)\n * so the web can build the same judgment without printing CLI-command text.\n *\n * Plan 068 adds five deterministic, numbers-only detectors on top of the\n * existing flag checks: no model, no history beyond the deliveries window\n * already fetched. Thresholds are named constants below, conservative on\n * purpose — a wrong insight costs more trust than a missed one.\n */\n\nexport function isSuccessDelivery(row: DeliveryRow): boolean {\n\treturn (\n\t\trow.statusCode !== null && row.statusCode >= 200 && row.statusCode < 300\n\t);\n}\n\nexport type DoctorSeverity = \"bad\" | \"warn\" | \"calm\";\n\nexport interface DoctorEvidence {\n\tlabel: string;\n\tvalue: string;\n}\n\nexport interface DoctorFix {\n\ttext: string;\n\t/** A `secondlayer webhooks ...` command the reader can copy. */\n\tcommand?: string;\n\t/** Anchor into the docs' webhooks troubleshooting section. */\n\tdocsPath?: string;\n}\n\nexport type DoctorIssueCode =\n\t| \"warning\"\n\t| \"paused\"\n\t| \"last_error\"\n\t| \"circuit\"\n\t| \"dead_letters\"\n\t| \"no_deliveries\"\n\t| \"receiver_rate_limited\"\n\t| \"receiver_down\"\n\t| \"receiver_rejects\"\n\t| \"receiver_slow\"\n\t| \"delivery_lag\";\n\nexport interface DoctorIssue {\n\tcode: DoctorIssueCode;\n\tdetail?: string;\n\tseverity: DoctorSeverity;\n\t/** 2-4 numbers-only facts backing the issue. Only the five new detectors\n\t * and the list-summary circuit issue carry this — the older flag checks\n\t * keep their plain `detail` string. */\n\tevidence?: DoctorEvidence[];\n\tfix?: DoctorFix;\n}\n\nexport interface DoctorReport {\n\twebhook: WebhookDetail;\n\tdeliverySummary: {\n\t\ttotal: number;\n\t\tsuccessful: number;\n\t\tfailed: number;\n\t\tlast: DeliveryRow | null;\n\t};\n\tdeadCount: number;\n\t/** CLI-facing next steps, one per issue, in the same order as `issues`. */\n\thints: string[];\n\tissues: DoctorIssue[];\n\t/** The single most severe issue (bad > warn > calm, then rule priority),\n\t * or `null` when there are none. The UI leads with this and collapses\n\t * the rest underneath. */\n\tprimary: DoctorIssue | null;\n}\n\n// ── Detector thresholds ─────────────────────────────────────────────\n// Named constants, not config (plan 068). Tune from real data at the 054\n// spike — until then these stay conservative.\n\nconst RATE_LIMITED_MIN_ATTEMPTS = 10;\nconst RATE_LIMITED_MIN_RATIO = 0.5;\n// Exported: the status pill's \"auto-failing\" rule (plan 070) reuses this\n// instead of duplicating the number.\nexport const DOWN_MIN_CONSECUTIVE = 5;\nconst REJECTS_MIN_CONSECUTIVE = 5;\nconst SLOW_WINDOW = 20;\nconst SLOW_MIN_SAMPLES = 5;\nconst SLOW_TIMEOUT_RATIO = 0.5;\nconst LAG_WINDOW = 20;\nconst LAG_MIN_SAMPLES = 5;\nconst LAG_THRESHOLD_MS = 60_000;\nconst ERROR_SNIPPET_MAX = 200;\n\nfunction median(values: number[]): number {\n\tif (values.length === 0) return 0;\n\tconst sorted = [...values].sort((a, b) => a - b);\n\treturn sorted[Math.floor(sorted.length / 2)] ?? 0;\n}\n\nfunction percentile(values: number[], p: number): number {\n\tif (values.length === 0) return 0;\n\tconst sorted = [...values].sort((a, b) => a - b);\n\tconst idx = Math.min(sorted.length - 1, Math.floor(p * sorted.length));\n\treturn sorted[idx] ?? 0;\n}\n\nfunction formatMs(ms: number): string {\n\treturn ms >= 1000 ? `${(ms / 1000).toFixed(1)}s` : `${Math.round(ms)}ms`;\n}\n\n/** \"2026-04-23 00:00 UTC\" — date, hour:minute, and an explicit zone so an\n * evidence value never reads as local time. */\nfunction formatShortDate(iso: string): string {\n\treturn `${iso.slice(0, 10)} ${iso.slice(11, 16)} UTC`;\n}\n\n/** The longest run from the start of `rows` (newest-first) matching\n * `predicate` — the current losing (or rejecting) streak. */\nfunction consecutiveFromStart(\n\trows: DeliveryRow[],\n\tpredicate: (row: DeliveryRow) => boolean,\n): DeliveryRow[] {\n\tconst out: DeliveryRow[] = [];\n\tfor (const row of rows) {\n\t\tif (!predicate(row)) break;\n\t\tout.push(row);\n\t}\n\treturn out;\n}\n\nfunction summarizeStatusBreakdown(rows: DeliveryRow[]): string {\n\tconst counts = new Map<string, number>();\n\tfor (const row of rows) {\n\t\tconst key =\n\t\t\trow.statusCode === null ? \"timeout/no response\" : String(row.statusCode);\n\t\tcounts.set(key, (counts.get(key) ?? 0) + 1);\n\t}\n\treturn [...counts.entries()].map(([key, n]) => `${n}× ${key}`).join(\", \");\n}\n\nconst RETRY_AFTER_RE = /retry-after:?\\s*(\\d+)/i;\n\n/** The most recent 429's `Retry-After`, if the receiver's error text carried\n * one — we never invent a value the rows didn't report. */\nfunction extractRetryAfterSeconds(rows: DeliveryRow[]): string | null {\n\tfor (const row of rows) {\n\t\tif (row.statusCode !== 429 || !row.errorMessage) continue;\n\t\tconst match = row.errorMessage.match(RETRY_AFTER_RE);\n\t\tif (match?.[1]) return match[1];\n\t}\n\treturn null;\n}\n\n/** ≥10 attempts in the window, ≥50% of them 429 — the receiver is\n * rate-limiting us, not failing. */\nfunction detectReceiverRateLimited(\n\twebhook: WebhookDetail,\n\tdeliveries: DeliveryRow[],\n): DoctorIssue | null {\n\tif (deliveries.length < RATE_LIMITED_MIN_ATTEMPTS) return null;\n\tconst count429 = deliveries.filter((d) => d.statusCode === 429).length;\n\tif (count429 / deliveries.length < RATE_LIMITED_MIN_RATIO) return null;\n\n\tconst oldest = deliveries[deliveries.length - 1];\n\tconst newest = deliveries[0];\n\tconst evidence: DoctorEvidence[] = [\n\t\t{\n\t\t\tlabel: \"429 responses\",\n\t\t\tvalue: `${count429} of ${deliveries.length} attempts`,\n\t\t},\n\t\t{\n\t\t\tlabel: \"window\",\n\t\t\tvalue:\n\t\t\t\toldest && newest\n\t\t\t\t\t? `${formatShortDate(oldest.dispatchedAt)} → ${formatShortDate(newest.dispatchedAt)}`\n\t\t\t\t\t: \"unknown\",\n\t\t},\n\t];\n\tconst retryAfter = extractRetryAfterSeconds(deliveries);\n\tif (retryAfter) {\n\t\tevidence.push({ label: \"latest Retry-After\", value: `${retryAfter}s` });\n\t}\n\n\tconst suggestedConcurrency = Math.max(1, Math.floor(webhook.concurrency / 2));\n\treturn {\n\t\tcode: \"receiver_rate_limited\",\n\t\tseverity: \"warn\",\n\t\tevidence,\n\t\tfix: {\n\t\t\ttext: \"Lower concurrency, or honor the Retry-After header on your receiver.\",\n\t\t\tcommand: `secondlayer webhooks update ${webhook.id} --concurrency ${suggestedConcurrency}`,\n\t\t\tdocsPath: \"/docs/webhooks#receiver-rate-limited\",\n\t\t},\n\t};\n}\n\n/** ≥5 most recent attempts are 5xx or got no response at all (timeout /\n * connection failure) — the receiver looks down, not just slow. */\nfunction detectReceiverDown(\n\twebhook: WebhookDetail,\n\tdeliveries: DeliveryRow[],\n): DoctorIssue | null {\n\tconst streak = consecutiveFromStart(\n\t\tdeliveries,\n\t\t(d) => d.statusCode === null || d.statusCode >= 500,\n\t);\n\tif (streak.length < DOWN_MIN_CONSECUTIVE) return null;\n\n\treturn {\n\t\tcode: \"receiver_down\",\n\t\tseverity: \"bad\",\n\t\tevidence: [\n\t\t\t{ label: \"consecutive failures\", value: String(streak.length) },\n\t\t\t{ label: \"breakdown\", value: summarizeStatusBreakdown(streak) },\n\t\t\t{\n\t\t\t\tlabel: \"last success\",\n\t\t\t\tvalue: webhook.lastSuccessAt\n\t\t\t\t\t? formatShortDate(webhook.lastSuccessAt)\n\t\t\t\t\t: \"never\",\n\t\t\t},\n\t\t],\n\t\tfix: {\n\t\t\ttext: \"Check your receiver's health and logs, then send a test event.\",\n\t\t\tcommand: `secondlayer webhooks test ${webhook.id}`,\n\t\t\tdocsPath: \"/docs/webhooks#receiver-down\",\n\t\t},\n\t};\n}\n\n/** ≥5 most recent attempts are 4xx other than 429 — the receiver is\n * reachable but actively rejecting us (auth, signature, bad request). */\nfunction detectReceiverRejects(\n\twebhook: WebhookDetail,\n\tdeliveries: DeliveryRow[],\n): DoctorIssue | null {\n\tconst streak = consecutiveFromStart(\n\t\tdeliveries,\n\t\t(d) =>\n\t\t\td.statusCode !== null &&\n\t\t\td.statusCode >= 400 &&\n\t\t\td.statusCode < 500 &&\n\t\t\td.statusCode !== 429,\n\t);\n\tif (streak.length < REJECTS_MIN_CONSECUTIVE) return null;\n\n\tconst evidence: DoctorEvidence[] = [\n\t\t{ label: \"consecutive rejects\", value: String(streak.length) },\n\t\t{ label: \"breakdown\", value: summarizeStatusBreakdown(streak) },\n\t];\n\tconst withText = streak.find((d) => d.errorMessage || d.responseBody);\n\tconst snippet = withText\n\t\t? (withText.errorMessage ?? withText.responseBody ?? \"\").slice(\n\t\t\t\t0,\n\t\t\t\tERROR_SNIPPET_MAX,\n\t\t\t)\n\t\t: null;\n\tif (snippet) evidence.push({ label: \"first error\", value: snippet });\n\n\treturn {\n\t\tcode: \"receiver_rejects\",\n\t\tseverity: \"bad\",\n\t\tevidence,\n\t\tfix: {\n\t\t\ttext: \"Check your receiver's auth config or signature verification.\",\n\t\t\tcommand: `secondlayer webhooks test ${webhook.id}`,\n\t\t\tdocsPath: \"/docs/webhooks#receiver-rejects\",\n\t\t},\n\t};\n}\n\n/** Median response time of the newest 20 attempts is at least half the\n * webhook's timeout — deliveries are slow, not failing. */\nfunction detectReceiverSlow(\n\twebhook: WebhookDetail,\n\tdeliveries: DeliveryRow[],\n): DoctorIssue | null {\n\tconst durations = deliveries\n\t\t.slice(0, SLOW_WINDOW)\n\t\t.map((d) => d.durationMs)\n\t\t.filter((d): d is number => d !== null);\n\tif (durations.length < SLOW_MIN_SAMPLES) return null;\n\n\tconst med = median(durations);\n\tif (med < webhook.timeoutMs * SLOW_TIMEOUT_RATIO) return null;\n\n\treturn {\n\t\tcode: \"receiver_slow\",\n\t\tseverity: \"warn\",\n\t\tevidence: [\n\t\t\t{ label: \"median response time\", value: formatMs(med) },\n\t\t\t{\n\t\t\t\tlabel: \"p95 response time\",\n\t\t\t\tvalue: formatMs(percentile(durations, 0.95)),\n\t\t\t},\n\t\t\t{ label: \"timeout\", value: formatMs(webhook.timeoutMs) },\n\t\t],\n\t\tfix: {\n\t\t\ttext: \"Speed up your receiver, or raise the timeout (up to 30s hosted).\",\n\t\t\tcommand: `secondlayer webhooks update ${webhook.id} --timeout-ms 30000`,\n\t\t\tdocsPath: \"/docs/webhooks#receiver-slow\",\n\t\t},\n\t};\n}\n\n/** Median (dispatch time − block time) of the newest 20 attempts with a\n * known block time exceeds a minute — we're behind on delivery. This is\n * our-side latency, not something the receiver can fix, so it carries no\n * actionable command. */\nfunction detectDeliveryLag(deliveries: DeliveryRow[]): DoctorIssue | null {\n\tconst window = deliveries\n\t\t.slice(0, LAG_WINDOW)\n\t\t.filter(\n\t\t\t(d): d is DeliveryRow & { blockTime: string } => d.blockTime !== null,\n\t\t);\n\tif (window.length < LAG_MIN_SAMPLES) return null;\n\n\tconst lags = window.map(\n\t\t(d) => new Date(d.dispatchedAt).getTime() - new Date(d.blockTime).getTime(),\n\t);\n\tconst med = median(lags);\n\tif (med <= LAG_THRESHOLD_MS) return null;\n\n\tconst blockTimes = window.map((d) => d.blockTime).sort();\n\tconst oldest = blockTimes[0];\n\tconst newest = blockTimes[blockTimes.length - 1];\n\n\treturn {\n\t\tcode: \"delivery_lag\",\n\t\tseverity: \"warn\",\n\t\tevidence: [\n\t\t\t{ label: \"median lag\", value: formatMs(med) },\n\t\t\t{\n\t\t\t\tlabel: \"block time range\",\n\t\t\t\tvalue:\n\t\t\t\t\toldest && newest\n\t\t\t\t\t\t? `${formatShortDate(oldest)} → ${formatShortDate(newest)}`\n\t\t\t\t\t\t: \"unknown\",\n\t\t\t},\n\t\t],\n\t\tfix: {\n\t\t\ttext: \"We're behind on delivery; no action needed on your end.\",\n\t\t},\n\t};\n}\n\nconst SEVERITY_RANK: Record<DoctorSeverity, number> = {\n\tbad: 0,\n\twarn: 1,\n\tcalm: 2,\n};\n\n/** Tie-break within a severity tier when more than one issue fires at\n * once — most specific / most actionable first. */\nconst CODE_PRIORITY: DoctorIssueCode[] = [\n\t\"circuit\",\n\t\"receiver_down\",\n\t\"receiver_rejects\",\n\t\"dead_letters\",\n\t\"paused\",\n\t\"last_error\",\n\t\"warning\",\n\t\"receiver_rate_limited\",\n\t\"receiver_slow\",\n\t\"delivery_lag\",\n\t\"no_deliveries\",\n];\n\nfunction pickPrimary(issues: DoctorIssue[]): DoctorIssue | null {\n\tif (issues.length === 0) return null;\n\treturn (\n\t\t[...issues].sort((a, b) => {\n\t\t\tconst sevDiff = SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity];\n\t\t\tif (sevDiff !== 0) return sevDiff;\n\t\t\treturn CODE_PRIORITY.indexOf(a.code) - CODE_PRIORITY.indexOf(b.code);\n\t\t})[0] ?? null\n\t);\n}\n\nfunction hintFor(issue: DoctorIssue): string {\n\tif (!issue.fix) return issue.detail ?? issue.code;\n\treturn issue.fix.command\n\t\t? `${issue.fix.text} ${issue.fix.command}`\n\t\t: issue.fix.text;\n}\n\nexport function buildDoctorReport(input: {\n\twebhook: WebhookDetail;\n\tdeliveries: DeliveryRow[];\n\tdead: DeadRow[];\n}): DoctorReport {\n\tconst successful = input.deliveries.filter(isSuccessDelivery).length;\n\tconst failed = input.deliveries.length - successful;\n\n\tconst hints: string[] = [];\n\tconst issues: DoctorIssue[] = [];\n\tif (input.webhook.warning) {\n\t\thints.push(input.webhook.warning);\n\t\tissues.push({\n\t\t\tcode: \"warning\",\n\t\t\tdetail: input.webhook.warning,\n\t\t\tseverity: \"warn\",\n\t\t});\n\t}\n\tif (input.webhook.status === \"paused\") {\n\t\thints.push(\n\t\t\t`Resume when the receiver is healthy: secondlayer webhooks resume ${input.webhook.id}`,\n\t\t);\n\t\tissues.push({ code: \"paused\", severity: \"warn\" });\n\t}\n\tif (input.webhook.lastError) {\n\t\thints.push(\n\t\t\t\"Run secondlayer webhooks test to reproduce the receiver request.\",\n\t\t);\n\t\tissues.push({\n\t\t\tcode: \"last_error\",\n\t\t\tdetail: input.webhook.lastError,\n\t\t\tseverity: \"warn\",\n\t\t});\n\t}\n\tif (input.webhook.circuitOpenedAt || input.webhook.circuitFailures > 0) {\n\t\thints.push(\n\t\t\t\"Circuit breaker has failures; inspect receiver logs and delivery status codes.\",\n\t\t);\n\t\tissues.push({ code: \"circuit\", severity: \"bad\" });\n\t}\n\tif (input.dead.length > 0) {\n\t\thints.push(\n\t\t\t`Dead-letter rows exist; inspect with secondlayer webhooks dead ${input.webhook.id} and requeue selected rows.`,\n\t\t);\n\t\tissues.push({ code: \"dead_letters\", severity: \"bad\" });\n\t}\n\n\tfor (const detector of [\n\t\tdetectReceiverRateLimited,\n\t\tdetectReceiverDown,\n\t\tdetectReceiverRejects,\n\t\tdetectReceiverSlow,\n\t]) {\n\t\tconst issue = detector(input.webhook, input.deliveries);\n\t\tif (issue) {\n\t\t\tissues.push(issue);\n\t\t\thints.push(hintFor(issue));\n\t\t}\n\t}\n\tconst lagIssue = detectDeliveryLag(input.deliveries);\n\tif (lagIssue) {\n\t\tissues.push(lagIssue);\n\t\thints.push(hintFor(lagIssue));\n\t}\n\n\tif (input.deliveries.length === 0) {\n\t\thints.push(\n\t\t\t\"No deliveries yet; confirm a chain event matching one of the triggers has happened since the webhook was created.\",\n\t\t);\n\t\tissues.push({ code: \"no_deliveries\", severity: \"calm\" });\n\t}\n\tif (hints.length === 0) {\n\t\thints.push(\"No immediate action needed.\");\n\t}\n\n\treturn {\n\t\twebhook: input.webhook,\n\t\tdeliverySummary: {\n\t\t\ttotal: input.deliveries.length,\n\t\t\tsuccessful,\n\t\t\tfailed,\n\t\t\tlast: input.deliveries[0] ?? null,\n\t\t},\n\t\tdeadCount: input.dead.length,\n\t\thints,\n\t\tissues,\n\t\tprimary: pickPrimary(issues),\n\t};\n}\n\n/**\n * The list page's own reduced detector: computed from `WebhookSummary` alone\n * (no deliveries, no dead-letter rows — the list endpoint returns neither,\n * and fetching per-row detail or deliveries here would fan out one request\n * per row). Only `status` and `circuitOpenedAt` distinguish a real problem\n * from a manual pause at this level; deliveries-based rules (rate limits,\n * downtime, rejects, slowness, lag) only ever show on the detail page.\n */\nexport function buildListIssue(\n\twebhook: Pick<WebhookSummary, \"status\" | \"circuitOpenedAt\" | \"lastSuccessAt\">,\n): DoctorIssue | null {\n\tif (webhook.status !== \"paused\") return null;\n\tif (webhook.circuitOpenedAt) {\n\t\treturn {\n\t\t\tcode: \"circuit\",\n\t\t\tseverity: \"bad\",\n\t\t\tevidence: [\n\t\t\t\t{\n\t\t\t\t\tlabel: \"circuit opened\",\n\t\t\t\t\tvalue: formatShortDate(webhook.circuitOpenedAt),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: \"last success\",\n\t\t\t\t\tvalue: webhook.lastSuccessAt\n\t\t\t\t\t\t? formatShortDate(webhook.lastSuccessAt)\n\t\t\t\t\t\t: \"never\",\n\t\t\t\t},\n\t\t\t],\n\t\t\tfix: {\n\t\t\t\ttext: \"Check your receiver's health and logs, then send a test event.\",\n\t\t\t\tdocsPath: \"/docs/webhooks#receiver-down\",\n\t\t\t},\n\t\t};\n\t}\n\treturn { code: \"paused\", severity: \"warn\" };\n}\n",
|
|
25
25
|
"import type { ConsumerBatchContext } from \"./streams/types.ts\";\n\n/**\n * The two pieces every \"deploy a consumer\" guide leaves out, packaged:\n * a liveness endpoint and a graceful-shutdown signal. Both are\n * runtime-agnostic — the SDK never binds a port or assumes Bun/Node.\n */\n\nexport interface ConsumerHealth {\n\t/** Feed this to the consume loop's `onProgress` — it stamps arrival time\n\t * and keeps the latest progress ctx for the health body. */\n\trecord: (ctx: ConsumerBatchContext) => void;\n\t/** Fetch-style handler for `GET /health`. Mount it on whatever serves\n\t * HTTP in your runtime:\n\t * `Bun.serve({ port, fetch: health.handler })` ·\n\t * `http.createServer(...)` via an adapter · a Workers route. */\n\thandler: (req: Request) => Response;\n}\n\n/**\n * Liveness for a consume loop. The gate is \"did a page land recently\", NOT\n * \"are we near the tip\": during a genesis backfill the loop is millions of\n * blocks behind and perfectly healthy, so lag can't be the signal. A wedged\n * loop stops reporting pages and flips to 503 — that's what platforms\n * should restart on. The body carries position for dashboards:\n * `blocks_behind` is the actual backlog (`tip - scanned_height`, ~0 for a\n * caught-up tail even on a quiet contract), while `last_delivered_height`\n * is the last DELIVERED row — its distance from the tip is event age, not\n * lag.\n */\nexport function consumerHealth(\n\toptions: { staleAfterMs?: number } = {},\n): ConsumerHealth {\n\tconst staleAfterMs = options.staleAfterMs ?? 120_000;\n\tconst startedAt = Date.now();\n\tlet lastCtx: ConsumerBatchContext | null = null;\n\tlet lastBatchAt = 0;\n\n\treturn {\n\t\trecord(ctx) {\n\t\t\tlastCtx = ctx;\n\t\t\tlastBatchAt = Date.now();\n\t\t},\n\t\thandler(req) {\n\t\t\tif (new URL(req.url).pathname !== \"/health\") {\n\t\t\t\treturn new Response(\"not found\", { status: 404 });\n\t\t\t}\n\t\t\t// Before the first page there is nothing to be stale about — a cold\n\t\t\t// start is healthy while it opens its first connection.\n\t\t\tconst idleMs = lastBatchAt ? Date.now() - lastBatchAt : 0;\n\t\t\tconst ok = idleMs < staleAfterMs;\n\t\t\treturn Response.json(\n\t\t\t\t{\n\t\t\t\t\tok,\n\t\t\t\t\tcheckpoint: lastCtx?.cursor ?? null,\n\t\t\t\t\tlast_delivered_height: lastCtx?.height ?? null,\n\t\t\t\t\tscanned_height: lastCtx?.scannedHeight ?? null,\n\t\t\t\t\ttip_height: lastCtx?.tipHeight ?? null,\n\t\t\t\t\tblocks_behind: lastCtx?.blocksBehind ?? null,\n\t\t\t\t\tidle_s: Math.floor(idleMs / 1000),\n\t\t\t\t\tuptime_s: Math.floor((Date.now() - startedAt) / 1000),\n\t\t\t\t},\n\t\t\t\t{ status: ok ? 200 : 503 },\n\t\t\t);\n\t\t},\n\t};\n}\n\n/**\n * An `AbortSignal` wired to SIGTERM/SIGINT (redeploys arrive as SIGTERM).\n * Pass it as the consume loop's `signal`: aborting is checked at the top of\n * the loop, never mid-batch, so the in-flight transaction — rows AND\n * checkpoint — always commits before the process exits. Nothing is\n * half-written; the next run resumes from exactly that cursor.\n *\n * No-op (never fires) on runtimes without `process` signal handling.\n */\nexport function shutdownSignal(\n\toptions: { signals?: readonly (\"SIGTERM\" | \"SIGINT\")[] } = {},\n): AbortSignal {\n\tconst controller = new AbortController();\n\tif (typeof process !== \"undefined\" && typeof process.on === \"function\") {\n\t\tfor (const signal of options.signals ?? [\"SIGTERM\", \"SIGINT\"]) {\n\t\t\tprocess.on(signal, () => {\n\t\t\t\tcontroller.abort(new Error(`${signal} — finishing the current batch`));\n\t\t\t});\n\t\t}\n\t}\n\treturn controller.signal;\n}\n",
|
|
26
26
|
"import type { ChainWebhookDelivery } from \"@secondlayer/shared\";\nimport { verifySecondlayerSignatureValues } from \"@secondlayer/shared/crypto/secondlayer-webhook\";\nimport {\n\ttype StandardWebhooksHeaders,\n\tverify,\n} from \"@secondlayer/shared/crypto/standard-webhooks\";\n\nexport {\n\ttype StandardWebhooksHeaders,\n\tverify as verifyStandardWebhooksHeaders,\n} from \"@secondlayer/shared/crypto/standard-webhooks\";\nexport type {\n\tChainApplyDeliveryOf,\n\tChainApplyEnvelope,\n\tChainApplyEnvelopeOf,\n\tChainEventEnvelope,\n\tChainFtBurnData,\n\tChainFtMintData,\n\tChainFtTransferData,\n\tChainNftBurnData,\n\tChainNftMintData,\n\tChainNftTransferData,\n\tChainPrintEventData,\n\tChainReorgOrphanedEntry,\n\tChainReorgRollbackDelivery,\n\tChainReorgRollbackEnvelope,\n\tChainStxBurnData,\n\tChainStxLockData,\n\tChainStxMintData,\n\tChainStxTransferData,\n\tChainTestDelivery,\n\tChainTxLevelEvent,\n\tChainWebhookDelivery,\n\tChainWebhookEnvelope,\n\tRuneApplyDeliveryOf,\n\tRuneApplyEnvelope,\n\tSbtcDepositEvent,\n\tSbtcWithdrawalEvent,\n\tSbtcWithdrawalSweptConfirmedEvent,\n} from \"@secondlayer/shared\";\n\ntype HeaderLookup = (name: string) => string | null | undefined;\nexport type WebhookHeaderInput =\n\t| HeaderLookup\n\t| StandardWebhooksHeaders\n\t| Record<string, string | string[] | undefined>\n\t| { get: (name: string) => string | null }; // e.g. Fetch `Headers`\n\nfunction pickHeader(\n\theaders: WebhookHeaderInput,\n\tname: string,\n): string | undefined {\n\tif (typeof headers === \"function\") {\n\t\tconst v = (headers as HeaderLookup)(name);\n\t\treturn typeof v === \"string\" ? v : undefined;\n\t}\n\tif (\n\t\ttypeof (headers as { get?: unknown }).get === \"function\" &&\n\t\t!(name in (headers as Record<string, unknown>))\n\t) {\n\t\tconst v = (headers as { get: (n: string) => string | null }).get(name);\n\t\treturn typeof v === \"string\" ? v : undefined;\n\t}\n\tconst bag = headers as Record<string, string | string[] | undefined>;\n\tlet v = bag[name] ?? bag[name.toLowerCase()];\n\tif (v === undefined) {\n\t\tconst target = name.toLowerCase();\n\t\tfor (const key of Object.keys(bag)) {\n\t\t\tif (key.toLowerCase() === target) {\n\t\t\t\tv = bag[key];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (Array.isArray(v)) return v[0];\n\treturn typeof v === \"string\" ? v : undefined;\n}\n\n/**\n * Verify a Secondlayer webhook delivery signature.\n *\n * Every delivery whose webhook `format` is `\"standard-webhooks\"` (the\n * default) carries three Standard Webhooks headers:\n *\n * webhook-id — UUID for the delivery (stable across retries; use as\n * your dedup key)\n * webhook-timestamp — unix seconds at dispatch time\n * webhook-signature — space-separated list of `v1,<base64-hmac>` tuples\n *\n * The signed content is `${id}.${timestamp}.${rawBody}` HMAC-SHA256 with the\n * signing secret. Secrets returned by `secondlayer webhooks create` (or\n * `rotate-secret`) are a bare 64-character hex string used directly as the\n * HMAC key (its UTF-8 bytes) — this helper handles that. A `whsec_`-prefixed\n * base64 secret (the Svix convention) is also accepted and base64-decoded after\n * the prefix is stripped. Note: because the issued secret is bare hex (no\n * `whsec_` prefix), a generic Svix / Standard Webhooks library will base64-\n * decode it and derive the wrong key — verify with this helper (or with\n * {@link verifySecondlayerSignature}, the format-agnostic ed25519 path).\n *\n * @param rawBody The raw request body as a string. NEVER pass\n * `JSON.stringify(req.body)` — re-stringifying drops\n * key ordering and whitespace, breaking the HMAC.\n * Use the raw body bytes/string your framework hands\n * you (Express raw body middleware, Hono `c.req.text()`,\n * Bun `await req.text()`, etc.).\n * @param headers The request headers. Accepts a plain object\n * (Express / Node), a Fetch `Headers` instance\n * (Bun / Hono / Workers), or a callback that returns\n * a header value by name. Header name matching is\n * case-insensitive.\n * @param secret The signing secret returned by\n * `secondlayer webhooks create` / `rotateSecret` (a bare\n * 64-char hex string). Pass it through verbatim — the\n * helper accepts both bare hex and `whsec_`-prefixed\n * base64 secrets.\n * @param toleranceSeconds Max age of `webhook-timestamp` in seconds. Default\n * 300 (5 min) per the Standard Webhooks spec.\n * @returns true if every header is present, the timestamp is within\n * tolerance, and a `v1` signature matches.\n *\n * @example\n * ```ts\n * // Hono / Bun\n * import { verifyWebhookSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\"/webhook\", async (c) => {\n * const raw = await c.req.text();\n * if (!verifyWebhookSignature(raw, c.req.raw.headers, process.env.SIGNING_SECRET!)) {\n * return c.text(\"Invalid signature\", 401);\n * }\n * const { type, timestamp, data } = JSON.parse(raw);\n * // ... process data ...\n * return c.body(null, 204);\n * });\n * ```\n *\n * @example\n * ```ts\n * // Express with raw-body middleware\n * import express from \"express\";\n * import { verifyWebhookSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\n * \"/webhook\",\n * express.raw({ type: \"application/json\" }),\n * (req, res) => {\n * const raw = req.body.toString(\"utf8\");\n * if (!verifyWebhookSignature(raw, req.headers, process.env.SIGNING_SECRET!)) {\n * return res.status(401).end();\n * }\n * // ... process raw ...\n * res.status(204).end();\n * },\n * );\n * ```\n */\nexport function verifyWebhookSignature(\n\trawBody: string,\n\theaders: WebhookHeaderInput,\n\tsecret: string,\n\ttoleranceSeconds = 300,\n): boolean {\n\tconst id = pickHeader(headers, \"webhook-id\");\n\tconst timestamp = pickHeader(headers, \"webhook-timestamp\");\n\tconst signature = pickHeader(headers, \"webhook-signature\");\n\tif (!id || !timestamp || !signature) return false;\n\treturn verify(\n\t\trawBody,\n\t\t{\n\t\t\t\"webhook-id\": id,\n\t\t\t\"webhook-timestamp\": timestamp,\n\t\t\t\"webhook-signature\": signature,\n\t\t},\n\t\tsecret,\n\t\t{ toleranceSeconds },\n\t);\n}\n\n/**\n * Verify the universal Secondlayer authenticity signature that every delivery\n * carries, regardless of body format (`raw`, `cloudevents`, `standard-webhooks`,\n * …). This is the format-agnostic alternative to {@link verifyWebhookSignature}:\n * instead of a per-webhook HMAC secret, it checks an ed25519 signature over\n * `${webhook-id}.${rawBody}` against Secondlayer's published public key — so one\n * key proves authenticity for any format.\n *\n * @param rawBody The raw request body string (never re-stringify the parsed\n * JSON — whitespace/key-order changes break the signature).\n * @param headers Request headers — plain object, Fetch `Headers`, or a\n * lookup callback. Reads `webhook-id` + `x-secondlayer-signature`.\n * @param publicKeyPem Secondlayer's published ed25519 public key (SPKI PEM).\n * @returns true when the signature header is present and verifies.\n *\n * @example\n * ```ts\n * import { verifySecondlayerSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\"/webhook\", async (c) => {\n * const raw = await c.req.text();\n * if (!verifySecondlayerSignature(raw, c.req.raw.headers, SECONDLAYER_PUBLIC_KEY)) {\n * return c.text(\"Invalid signature\", 401);\n * }\n * // ... process raw ...\n * return c.body(null, 204);\n * });\n * ```\n */\nexport function verifySecondlayerSignature(\n\trawBody: string,\n\theaders: WebhookHeaderInput,\n\tpublicKeyPem: string,\n): boolean {\n\tconst id = pickHeader(headers, \"webhook-id\");\n\tconst signature = pickHeader(headers, \"x-secondlayer-signature\");\n\treturn verifySecondlayerSignatureValues(rawBody, id, signature, publicKeyPem);\n}\n\n/**\n * Decode + narrow a chain webhook delivery body into a typed\n * {@link ChainWebhookDelivery}. Verify the signature first with\n * {@link verifyWebhookSignature} (or {@link verifySecondlayerSignature}), then\n * decode the same raw body — this does not check authenticity, only shape.\n *\n * Only understands the `format: \"standard-webhooks\"` envelope (`{ type,\n * timestamp, data }`) — the webhook default, and the only format\n * `verifyWebhookSignature` covers. Other formats (`raw`, `cloudevents`, …)\n * carry the same `data` value under a different envelope; see the \"Chain\n * webhook payloads\" doc for how to unwrap those.\n *\n * A chain webhook delivery is NOT a Streams/Index event — do not run this\n * over a `StreamsEvent` body (`{ event_type, payload }`) or vice versa.\n *\n * @param rawBody The raw request body string (same bytes passed to\n * {@link verifyWebhookSignature}).\n * @throws {Error} if the body isn't a `chain.*` delivery, or the envelope is\n * internally inconsistent (e.g. `type` and `data.trigger` disagree —\n * a sign the wire shape drifted from this decoder).\n *\n * @example\n * ```ts\n * import { decodeChainWebhook, verifyWebhookSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\"/webhook\", async (c) => {\n * const raw = await c.req.text();\n * if (!verifyWebhookSignature(raw, c.req.raw.headers, process.env.SIGNING_SECRET!)) {\n * return c.text(\"Invalid signature\", 401);\n * }\n * const delivery = decodeChainWebhook(raw);\n * if (delivery.data.action === \"apply\" && delivery.data.trigger === \"stx_transfer\") {\n * delivery.data.event.data.amount; // typed\n * }\n * return c.body(null, 204);\n * });\n * ```\n */\nexport function decodeChainWebhook(rawBody: string): ChainWebhookDelivery {\n\tconst parsed = JSON.parse(rawBody) as {\n\t\ttype?: unknown;\n\t\ttimestamp?: unknown;\n\t\tdata?: unknown;\n\t};\n\tif (\n\t\ttypeof parsed.type !== \"string\" ||\n\t\ttypeof parsed.timestamp !== \"string\" ||\n\t\ttypeof parsed.data !== \"object\" ||\n\t\tparsed.data === null\n\t) {\n\t\tthrow new Error(\n\t\t\t\"decodeChainWebhook: not a chain webhook delivery — expected { type, timestamp, data }\",\n\t\t);\n\t}\n\tif (!parsed.type.startsWith(\"chain.\")) {\n\t\tthrow new Error(\n\t\t\t`decodeChainWebhook: not a chain webhook delivery (type \"${parsed.type}\")`,\n\t\t);\n\t}\n\n\tconst data = parsed.data as Record<string, unknown>;\n\tif (parsed.type === \"chain.test.apply\") {\n\t\tif (data.test !== true) {\n\t\t\tthrow new Error(\n\t\t\t\t'decodeChainWebhook: \"chain.test.apply\" body missing `data.test: true`',\n\t\t\t);\n\t\t}\n\t} else if (parsed.type === \"chain.reorg.rollback\") {\n\t\tif (data.action !== \"rollback\" || !Array.isArray(data.orphaned)) {\n\t\t\tthrow new Error(\n\t\t\t\t'decodeChainWebhook: \"chain.reorg.rollback\" body missing `data.action`/`data.orphaned`',\n\t\t\t);\n\t\t}\n\t} else {\n\t\tif (data.action !== \"apply\" || typeof data.trigger !== \"string\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"decodeChainWebhook: apply delivery missing `data.action`/`data.trigger`\",\n\t\t\t);\n\t\t}\n\t\tif (parsed.type !== `chain.${data.trigger}.apply`) {\n\t\t\tthrow new Error(\n\t\t\t\t`decodeChainWebhook: type \"${parsed.type}\" doesn't match data.trigger \"${data.trigger}\"`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn parsed as unknown as ChainWebhookDelivery;\n}\n",
|
|
27
27
|
"import {\n\ttype RewardSet,\n\tverifySignerSignatures,\n} from \"@secondlayer/shared/node/consensus\";\nimport {\n\ttype MerkleProofStep,\n\tnakamotoBlockHash,\n\tnakamotoBlockId,\n\tparseNakamotoBlockHeader,\n\tstacksTxid,\n\tverifyTxMerkleProof,\n} from \"@secondlayer/shared/node/nakamoto\";\nimport { hexToBytes } from \"@secondlayer/stacks/utils\";\n\n/**\n * Trustless transaction-inclusion proof verification.\n *\n * Given a proof from `GET /v1/index/transactions/:txid/proof`, the consumer\n * re-derives everything itself — it does NOT trust any value Secondlayer\n * computed. Anchored level: (1) recompute the txid from the raw tx bytes, (2)\n * fold it up the merkle path to the header's `tx_merkle_root`, (3) recompute the\n * header's `block_hash` and `index_block_hash` from the raw header — \"this tx is\n * included in a header any node can corroborate\". Consensus level (when the proof\n * carries a `consensus` field, or a `rewardSet` is passed): additionally recover\n * the header's signer signatures and confirm ≥70% of reward-set signer weight\n * signed the block.\n *\n * Note: uses Node's crypto via `@secondlayer/shared` (same as the Streams\n * signature verify); intended for Node/server verification.\n */\nexport interface TransactionProof {\n\ttxid: string;\n\tindex_block_hash: string;\n\tblock_height: number;\n\ttx_index: number;\n\t/** Raw consensus-serialized transaction bytes (hex). */\n\traw_tx: string;\n\t/** Raw Nakamoto block-header bytes (hex) — parsed + re-hashed by the verifier. */\n\traw_header: string;\n\t/** Authentication path from the tx leaf to `tx_merkle_root`. */\n\ttx_merkle_path: MerkleProofStep[];\n\t/** Present when consensus-level verification is available: the reward cycle and\n\t * its signer set, against which the header's signer signatures are checked. */\n\tconsensus?: {\n\t\treward_cycle: number;\n\t\treward_set: RewardSet;\n\t};\n}\n\nexport interface TransactionProofVerifyResult {\n\t/** Highest level actually verified. \"consensus\" requires the proof's\n\t * `consensus` field and a met signer-weight threshold. */\n\tlevel: \"anchored\" | \"consensus\";\n\t/** Recomputed txid === proof.txid. */\n\ttxidMatches: boolean;\n\t/** Merkle path folds the txid to the header's tx_merkle_root. */\n\tincludedInHeader: boolean;\n\t/** Recomputed block_hash + index_block_hash match the header / proof. */\n\theaderSelfConsistent: boolean;\n\t/** Basis points (0–10000) of reward-set signer weight that signed the block.\n\t * Only set when the proof carries a `consensus` field. */\n\tsignerWeightBps?: number;\n\t/** ≥70% of signer weight signed. Only set with a `consensus` field. */\n\tthresholdMet?: boolean;\n\t/** Which reward set the signer check used: \"provided\" (caller-resolved →\n\t * fully trustless) or \"embedded\" (the one Secondlayer put in the proof). */\n\trewardSetSource?: \"provided\" | \"embedded\";\n\t/** All applicable checks passed (incl. the threshold when consensus is present). */\n\tok: boolean;\n\terrors: string[];\n}\n\nconst strip = (h: string): string => (h.startsWith(\"0x\") ? h.slice(2) : h);\n// hexToBytes instead of Buffer.from(h, \"hex\") — proofs must verify on edge\n// runtimes where Buffer doesn't exist, and it validates byte sequences.\nconst bytes = (h: string): Uint8Array => hexToBytes(h);\n\n/**\n * Resolve a reward set directly from a stacks-node (`/v3/stacker_set/{cycle}`),\n * so a caller can verify the consensus layer against a node IT trusts rather than\n * the reward set Secondlayer embedded in the proof. Pass the result as\n * `verifyTransactionProof(proof, { rewardSet })`.\n */\nexport async function fetchRewardSet(opts: {\n\tnodeUrl: string;\n\tcycle: number;\n\tfetchImpl?: typeof fetch;\n}): Promise<RewardSet | null> {\n\tconst f = opts.fetchImpl ?? fetch;\n\tconst res = await f(\n\t\t`${opts.nodeUrl.replace(/\\/+$/, \"\")}/v3/stacker_set/${opts.cycle}`,\n\t);\n\tif (res.status === 404) return null;\n\tif (!res.ok) {\n\t\tthrow new Error(`/v3/stacker_set/${opts.cycle} returned ${res.status}`);\n\t}\n\tconst body = (await res.json()) as {\n\t\tstacker_set: { signers: { signing_key: string; weight: number }[] };\n\t};\n\tconst signers = body.stacker_set.signers.map((s) => ({\n\t\tsigning_key: strip(s.signing_key),\n\t\tweight: s.weight,\n\t}));\n\treturn {\n\t\tsigners,\n\t\ttotal_weight: signers.reduce((sum, s) => sum + s.weight, 0),\n\t};\n}\n\n/**\n * Verify a transaction-inclusion proof. Every check is recomputed client-side,\n * so a `true` result does not rely on trusting Secondlayer. Pass\n * `{ rewardSet }` (resolved via {@link fetchRewardSet} from your own node) to\n * verify the consensus layer against a reward set you trust rather than the one\n * embedded in the proof.\n */\nexport function verifyTransactionProof(\n\tproof: TransactionProof,\n\topts?: { rewardSet?: RewardSet },\n): TransactionProofVerifyResult {\n\tconst errors: string[] = [];\n\n\t// (1) recompute the txid from the raw tx bytes\n\tconst computedTxid = stacksTxid(bytes(proof.raw_tx));\n\tconst txidMatches = computedTxid === strip(proof.txid);\n\tif (!txidMatches) errors.push(\"txid does not match raw_tx\");\n\n\t// parse the header (so we use ITS tx_merkle_root / consensus_hash, not a field)\n\tconst header = parseNakamotoBlockHeader(bytes(proof.raw_header));\n\n\t// (2) inclusion: fold txid up the merkle path to the header's root\n\tconst includedInHeader = verifyTxMerkleProof(\n\t\tcomputedTxid,\n\t\tproof.tx_merkle_path,\n\t\theader.txMerkleRoot,\n\t);\n\tif (!includedInHeader)\n\t\terrors.push(\"merkle path does not reach tx_merkle_root\");\n\n\t// (3) header self-consistency: recompute block_hash + index_block_hash\n\tconst blockHash = nakamotoBlockHash(header);\n\tconst indexBlockHash = nakamotoBlockId(blockHash, header.consensusHash);\n\tconst headerSelfConsistent = indexBlockHash === strip(proof.index_block_hash);\n\tif (!headerSelfConsistent) {\n\t\terrors.push(\"recomputed index_block_hash does not match proof\");\n\t}\n\n\tconst anchoredOk = txidMatches && includedInHeader && headerSelfConsistent;\n\n\t// (4) consensus: recover the header's signer signatures over the block_hash and\n\t// weigh them against the reward set. A caller-provided `rewardSet` (resolved\n\t// from a trusted node) takes precedence over the proof's embedded set and makes\n\t// this fully trustless; otherwise the embedded set is used.\n\tconst rewardSet = opts?.rewardSet ?? proof.consensus?.reward_set;\n\tlet level: \"anchored\" | \"consensus\" = \"anchored\";\n\tlet signerWeightBps: number | undefined;\n\tlet thresholdMet: boolean | undefined;\n\tlet rewardSetSource: \"provided\" | \"embedded\" | undefined;\n\tif (rewardSet) {\n\t\tconst v = verifySignerSignatures(\n\t\t\tblockHash,\n\t\t\theader.signerSignatures,\n\t\t\trewardSet,\n\t\t);\n\t\tsignerWeightBps =\n\t\t\tv.totalWeight > 0\n\t\t\t\t? Math.round((v.signedWeight / v.totalWeight) * 10000)\n\t\t\t\t: 0;\n\t\tthresholdMet = v.thresholdMet;\n\t\trewardSetSource = opts?.rewardSet ? \"provided\" : \"embedded\";\n\t\tif (!thresholdMet) errors.push(\"signer weight below the 70% threshold\");\n\t\tif (anchoredOk && thresholdMet) level = \"consensus\";\n\t}\n\n\treturn {\n\t\tlevel,\n\t\ttxidMatches,\n\t\tincludedInHeader,\n\t\theaderSelfConsistent,\n\t\tsignerWeightBps,\n\t\tthresholdMet,\n\t\trewardSetSource,\n\t\tok: anchoredOk && (rewardSet ? thresholdMet === true : true),\n\t\terrors,\n\t};\n}\n",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"// Canonical event primitives (StreamsEvent, payload types, event-type vocab)\n// live in @secondlayer/shared/streams-rows; re-exported here so the public\n// Streams surface is unchanged.\nimport type { VmEventType } from \"@secondlayer/shared\";\nimport {\n\tRUNE_EVENT_TYPES,\n\ttype RuneEventType,\n\ttype RuneStreamsEvent,\n\tSTREAMS_EVENT_TYPES,\n\ttype StreamsEvent,\n\ttype StreamsEventType,\n\ttype StreamsWireEvent,\n\ttype VmStreamsEvent,\n} from \"@secondlayer/shared/streams-rows\";\nimport type { IndexEvent } from \"../index-api/client.ts\";\nimport type { ConsumerSink, WithSinkTx } from \"../sinks/types.ts\";\n\nexport {\n\tRUNE_EVENT_TYPES,\n\tSTREAMS_EVENT_TYPES,\n\ttype RuneEventType,\n\ttype RuneStreamsEvent,\n\ttype StreamsEvent,\n\ttype StreamsEventType,\n\ttype VmStreamsEvent,\n};\nexport type {\n\tFtBurnPayload,\n\tFtMintPayload,\n\tFtTransferPayload,\n\tMapDeletePayload,\n\tMapWritePayload,\n\tNestedContractCallPayload,\n\tVarSetPayload,\n\tStreamsWireEvent,\n\tNftBurnPayload,\n\tNftMintPayload,\n\tNftTransferPayload,\n\tPrintPayload,\n\tRuneEtchEntry,\n\tRuneEventPayload,\n\tStreamsClarityValue,\n\tStreamsEventBase,\n\tStreamsEventPayload,\n\tStxBurnPayload,\n\tStxLockPayload,\n\tStxMintPayload,\n\tStxTransferPayload,\n} from \"@secondlayer/shared/streams-rows\";\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\n/** `chain=bitcoin` tip (plan 059) — no `burn_block_height`/retention fields,\n * since Bitcoin has no burn chain of its own and Runes reads have no\n * retention ladder. Returned by `tip({ chain: \"bitcoin\" })`. */\nexport type StreamsBitcoinTip = {\n\tblock_height: number;\n\tblock_hash: string;\n\tfinalized_height: number;\n\tlag_seconds: number;\n};\n\nexport type StreamsCanonicalBlock = {\n\tblock_height: number;\n\tblock_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n\tis_canonical: true;\n};\n\n/** `chain=bitcoin` canonical block (plan 059) — no burn-chain fields. */\nexport type StreamsBitcoinCanonicalBlock = {\n\tblock_height: number;\n\tblock_hash: string;\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<TEvent = StreamsEvent, TTip = StreamsTip> = {\n\tevents: TEvent[];\n\tnext_cursor: string | null;\n\ttip: TTip;\n\treorgs: StreamsReorg[];\n};\n\nexport type StreamsEventsListEnvelope<\n\tTEvent = StreamsEvent,\n\tTTip = StreamsTip,\n> = Omit<StreamsEventsEnvelope<TEvent, TTip>, \"next_cursor\">;\n\n/** The StreamsEvent union narrowed to a `types` selection — what a\n * const-generic `types: [\"ft_transfer\"]` buys at the type level. */\nexport type StreamsEventOfTypes<T extends readonly StreamsEventType[]> =\n\tExtract<StreamsEvent, { event_type: T[number] }>;\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\ntype StreamsEventsListParamsCommon = {\n\tcursor?: string | null;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\tlimit?: number;\n};\n\n/** `chain: \"stacks\"` (default, omit `chain` entirely) — unchanged since\n * before plan 059. */\nexport type StreamsEventsStacksListParams = StreamsEventsListParamsCommon & {\n\tchain?: \"stacks\";\n\t/** `vm` reads ordinal. Omit for Streams 1.0. */\n\tclock?: \"classic\" | \"vm\";\n\ttypes?: readonly (StreamsEventType | VmEventType)[];\n\t/** Event types to exclude (applied after `types`). */\n\tnotTypes?: readonly (StreamsEventType | VmEventType)[];\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};\n\n/**\n * `chain: \"bitcoin\"` (plan 059) — Runes events, own cursor space. `types` is\n * restricted to {@link RuneEventType} at the type level, so e.g.\n * `{ chain: \"bitcoin\", types: [\"ft_transfer\"] }` is a compile error rather\n * than a silent 400 at request time. `contractId`/`sender`/`recipient`/\n * `assetIdentifier`/`filters`/`clock` don't exist on this branch — they're\n * Stacks-only (the server 400s on them too).\n */\nexport type StreamsEventsBitcoinListParams = StreamsEventsListParamsCommon & {\n\tchain: \"bitcoin\";\n\ttypes?: readonly RuneEventType[];\n\tnotTypes?: readonly RuneEventType[];\n\t/** A RuneRef: an id (`840000:3`) or a name (`DOG•GO•TO•THE•MOON`). */\n\trune?: string;\n\t/** A mainnet address. */\n\taddress?: string;\n};\n\nexport type StreamsEventsListParams =\n\t| StreamsEventsStacksListParams\n\t| StreamsEventsBitcoinListParams;\n\ntype StreamsEventsStreamCommon = {\n\tfromCursor?: string | null;\n\tbatchSize?: number;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\n/** `chain: \"stacks\"` (default, omit `chain` entirely) — matches\n * {@link StreamsEventsStacksListParams}. */\nexport type StreamsEventsStreamStacksParams = StreamsEventsStreamCommon & {\n\tchain?: \"stacks\";\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};\n\n/** `chain: \"bitcoin\"` (plan 059/061) — Runes events, tailed the same way as\n * the Stacks default. `types` is restricted to {@link RuneEventType} at the\n * type level, matching {@link StreamsEventsBitcoinListParams}.\n * `contractId`/`sender`/`recipient`/`assetIdentifier`/`filters` don't exist\n * on this branch — they're Stacks-only. */\nexport type StreamsEventsStreamBitcoinParams = StreamsEventsStreamCommon & {\n\tchain: \"bitcoin\";\n\ttypes?: readonly RuneEventType[];\n\tnotTypes?: readonly RuneEventType[];\n\t/** A RuneRef: an id (`840000:3`) or a name (`DOG•GO•TO•THE•MOON`). */\n\trune?: string;\n\t/** A mainnet address. */\n\taddress?: string;\n};\n\nexport type StreamsEventsStreamParams =\n\t| StreamsEventsStreamStacksParams\n\t| StreamsEventsStreamBitcoinParams;\n\ntype StreamsEventsSubscribeCommon = {\n\t/** Resume strictly after this cursor; omit to live-tail from the tip. */\n\tfromCursor?: string | null;\n\t/** Abort to unsubscribe (the returned function does the same). */\n\tsignal?: AbortSignal;\n\t/**\n\t * Called on every failure. Transport errors (dropped socket, 5xx, 429, a\n\t * stale connection, a throwing handler) reconnect from the last handled\n\t * cursor with exponential backoff. Errors that a retry cannot fix (401,\n\t * 4xx, a bad signature) end the subscription and reject its `done`.\n\t */\n\tonError?: (err: unknown) => void;\n\t/**\n\t * First reconnect pause in ms (default 1000). Doubles per consecutive\n\t * failure up to 30 s with jitter, resets once a frame arrives, and never\n\t * undercuts a `Retry-After`.\n\t */\n\treconnectDelayMs?: number;\n\t/**\n\t * Reconnect when no frame (pings included) arrives for this long (default\n\t * 60000, three server heartbeats). Catches a half-open socket that never\n\t * errors; set it above your instance's heartbeat interval.\n\t */\n\tstaleAfterMs?: number;\n};\n\n/** `chain: \"stacks\"` (default, omit `chain` entirely). */\nexport type StreamsEventsSubscribeStacksParams =\n\tStreamsEventsSubscribeCommon & {\n\t\tchain?: \"stacks\";\n\t\ttypes?: readonly StreamsEventType[];\n\t\tnotTypes?: readonly StreamsEventType[];\n\t\tcontractId?: StreamsFilterValue;\n\t\tsender?: StreamsFilterValue;\n\t\trecipient?: StreamsFilterValue;\n\t\tassetIdentifier?: string;\n\t\t/** Labelled filter groups; see {@link StreamsEventsListParams.filters}. */\n\t\tfilters?: StreamsFilterMap;\n\t\t/**\n\t\t * Called for each pushed event, in order. The resume cursor advances only\n\t\t * after this resolves, so a handler that throws sees the same event again\n\t\t * on reconnect (at-least-once). Key durable writes by `cursor`.\n\t\t */\n\t\tonEvent: (event: StreamsEvent) => void | Promise<void>;\n\t};\n\n/** `chain: \"bitcoin\"` (plan 059/061) — Runes events pushed live, on their own\n * cursor space. `contractId`/`sender`/`recipient`/`assetIdentifier`/`filters`\n * don't exist on this branch — they're Stacks-only. */\nexport type StreamsEventsSubscribeBitcoinParams =\n\tStreamsEventsSubscribeCommon & {\n\t\tchain: \"bitcoin\";\n\t\ttypes?: readonly RuneEventType[];\n\t\tnotTypes?: readonly RuneEventType[];\n\t\t/** A RuneRef: an id (`840000:3`) or a name (`DOG•GO•TO•THE•MOON`). */\n\t\trune?: string;\n\t\t/** A mainnet address. */\n\t\taddress?: string;\n\t\tonEvent: (event: RuneStreamsEvent) => void | Promise<void>;\n\t};\n\nexport type StreamsEventsSubscribeParams =\n\t| StreamsEventsSubscribeStacksParams\n\t| StreamsEventsSubscribeBitcoinParams;\n\n/**\n * Handle for a live subscription: call it to unsubscribe. `done` resolves\n * after unsubscribe (or the signal aborting) and rejects with the error that\n * ended the loop when a retry could not fix it, so a worker can `await`\n * it instead of polling for silence.\n */\nexport type StreamsSubscription = {\n\t(): void;\n\tdone: Promise<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<TTip = unknown, TReorg = unknown> = {\n\t/** Checkpoint to commit alongside your rows. */\n\tcursor: string | null;\n\t/** Highest canonical block a row was DELIVERED from. `null` before the\n\t * first row of a fresh consume. With a sparse filter this parks at the\n\t * last matching event — it measures event recency, not progress. */\n\theight: number | null;\n\t/** Highest canonical block the sweep has VERIFIED through: an empty page\n\t * is the server confirming nothing matches between the cursor and the\n\t * tip, so a caught-up tail scans to the tip even when `height` is far\n\t * below it. Rolls back with reorg rewinds. */\n\tscannedHeight: number | null;\n\t/** Chain tip as of this page's read. */\n\ttipHeight: number;\n\t/** `tipHeight - scannedHeight`, floored at 0 — the consumer's actual\n\t * backlog. `null` until a position is known. A caught-up consumer on a\n\t * quiet contract reads ~0 here while `tipHeight - height` grows — that\n\t * difference is event age, not lag. */\n\tblocksBehind: number | null;\n\t/**\n\t * The full tip for this page — `StreamsTip` or `IndexTip` depending on the\n\t * surface. Exposed here so a handler never needs the `envelope` parameter,\n\t * which is the only way to reach it today and is also how the worst\n\t * `finalizedOnly` mistake becomes reachable (`return envelope.next_cursor`\n\t * jumps the cursor past events that were filtered out and never delivered).\n\t */\n\ttip: TTip;\n\t/**\n\t * Reorgs reported alongside this page; empty when none. Rollback still\n\t * belongs in `onReorg` — this is for observability inside a batch.\n\t */\n\treorgs: readonly TReorg[];\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 */\n/** `cursor` is the rewind position the loop resumes from after `onReorg`:\n * the foot of the fork point, or `null` for a fork at genesis. Persist it\n * in the same transaction as the rollback. */\nexport type StreamsReorgContext = { cursor: string | null };\n\nexport type StreamsEventsConsumeParams<\n\tTTx = never,\n\tD extends boolean = false,\n\tF extends StreamsFilterMap = Record<never, never>,\n> = {\n\t/** `chain: \"stacks\"` (default, omit `chain` entirely) — the bitcoin branch\n\t * is {@link StreamsEventsConsumeBitcoinParams}, a separate overload with\n\t * no `filters`/`on`/`decoded` (Stacks-only concepts). */\n\tchain?: \"stacks\";\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. Folds (balances) invert in the sink's `onRollback`, not in\n\t * `onReorg`.\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\t/**\n\t\t * @deprecated Read `ctx.tip` / `ctx.reorgs` instead. The envelope is\n\t\t * also how the worst `finalizedOnly` mistake stays reachable —\n\t\t * returning `envelope.next_cursor` jumps the cursor past unfinalized\n\t\t * events that were filtered out and never delivered. Removed in the\n\t\t * next major.\n\t\t */\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 at or\n\t * below the checkpoint (deduped in-memory, fork-ascending) before the SDK\n\t * rewinds and re-reads the now-canonical events. A reorg whose fork sits\n\t * above the checkpoint is not a rollback (nothing past it was written) and\n\t * is skipped. Omit it to ignore reorgs (events stay canonical, but stale\n\t * rows from an orphaned fork are left in place).\n\t *\n\t * With `onReorg` or a `sink` attached, every empty page also polls\n\t * `reorgs.list` (one extra request per idle poll) so a fork that lands\n\t * while the consumer idles at the tip is rolled back too.\n\t */\n\tonReorg?: (\n\t\treorg: StreamsReorg,\n\t\tctx: StreamsReorgContext,\n\t) => Promise<void> | void;\n\t/** Deepest rewind one reorg may make below the checkpoint before the loop\n\t * refuses with `ValidationError`. Default 1000 blocks. The fork point is\n\t * server supplied and drives a delete on every declared table, so raise\n\t * this only for a source you trust. */\n\tmaxRollbackDepth?: number;\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\t/**\n\t * Cuts the empty-poll backoff short: on an empty page, the loop races\n\t * `emptyBackoffMs` against this promise instead of sleeping the full\n\t * amount. Pass a function that resolves once when new data MIGHT be\n\t * available (e.g. a Postgres NOTIFY listener) — it is called fresh on\n\t * every empty page, never awaited more than once concurrently per page.\n\t * The backoff timer still runs underneath, so a wake source that never\n\t * resolves (or a `wake` this call omits) degrades to the same polling\n\t * behavior as before.\n\t */\n\twake?: () => Promise<void>;\n};\n\n/**\n * `chain: \"bitcoin\"` (plan 059/061) — the checkpointed sweep over Runes\n * events. A separate, simpler type from {@link StreamsEventsConsumeParams}\n * rather than a widened union member: `filters`/`on`/`decoded` are Stacks-only\n * concepts (labelled OR-groups and Index-shaped projection have no Runes\n * equivalent yet), so `onBatch` is the only way in and is required. Reorg\n * rewind still works the same way (bitcoin reorgs carry the same\n * `fork_point_height` + `new_canonical_tip` shape as Stacks ones).\n */\nexport type StreamsEventsConsumeBitcoinParams<TTx = never> = {\n\tchain: \"bitcoin\";\n\tfromCursor?: string | null;\n\tsink?: ConsumerSink<TTx>;\n\tonProgress?: (ctx: ConsumerBatchContext) => void;\n\tmode?: \"tail\" | \"bounded\";\n\tfinalizedOnly?: boolean;\n\ttypes?: readonly RuneEventType[];\n\tnotTypes?: readonly RuneEventType[];\n\t/** A RuneRef: an id (`840000:3`) or a name (`DOG•GO•TO•THE•MOON`). */\n\trune?: string;\n\t/** A mainnet address. */\n\taddress?: string;\n\tbatchSize?: number;\n\tonBatch: (\n\t\tevents: RuneStreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope<RuneStreamsEvent, StreamsBitcoinTip>,\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\tonReorg?: (\n\t\treorg: StreamsReorg,\n\t\tctx: StreamsReorgContext,\n\t) => Promise<void> | void;\n\tmaxRollbackDepth?: number;\n\tretryCount?: number;\n\tretryDelay?: number;\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\twake?: () => Promise<void>;\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<TEvent = StreamsEvent, TTip = StreamsTip> = {\n\t/** Canonical events of this page, in cursor order. */\n\tevents: TEvent[];\n\t/** Checkpoint after this page — pass back as `consume({ cursor })` to resume. */\n\tcursor: string | null;\n\ttip: TTip;\n\t/** Chain reorgs reported alongside this page; empty when none. */\n\treorgs: StreamsReorg[];\n};\n\ntype StreamsConsumeCommon = {\n\t/** Resume strictly after this cursor; omit to start from the oldest seekable page. */\n\tcursor?: string | null;\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\n/** `chain: \"stacks\"` (default, omit `chain` entirely). */\nexport type StreamsConsumeStacksParams = StreamsConsumeCommon & {\n\tchain?: \"stacks\";\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\t/** Labelled OR-groups — same semantics as `events.consume`; each returned\n\t * event echoes the labels it matched. */\n\tfilters?: StreamsFilterMap;\n};\n\n/** `chain: \"bitcoin\"` (plan 059/061) — Runes batches, own cursor space.\n * `contractId`/`sender`/`recipient`/`assetIdentifier`/`filters` don't exist\n * on this branch — they're Stacks-only. */\nexport type StreamsConsumeBitcoinParams = StreamsConsumeCommon & {\n\tchain: \"bitcoin\";\n\ttypes?: readonly RuneEventType[];\n\tnotTypes?: readonly RuneEventType[];\n\t/** A RuneRef: an id (`840000:3`) or a name (`DOG•GO•TO•THE•MOON`). */\n\trune?: string;\n\t/** A mainnet address. */\n\taddress?: string;\n};\n\nexport type StreamsConsumeParams =\n\t| StreamsConsumeStacksParams\n\t| StreamsConsumeBitcoinParams;\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\t * Delivery is file-granular and at-least-once: a file whose range straddles\n\t * `from` is handed over whole. `ctx.from` is that cursor (`null` from\n\t * genesis); skip rows at or below it, or key rows by `cursor` so a re-run\n\t * is an idempotent no-op. Files ending at or below `from` are not handed\n\t * over at all.\n\t */\n\tonDumpFile: (\n\t\tfile: StreamsDumpFile,\n\t\tctx: { from: string | null },\n\t) => 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\t/** Narrow the LIVE TAIL after the dump phase. The dump files themselves are\n\t * always all-type (block-partitioned parquet) — filter those in your own\n\t * tooling while processing each file. */\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\t/** Labelled OR-groups for the live tail, like `consume`. */\n\tfilters?: StreamsFilterMap;\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\t/** `chain: \"bitcoin\"` — batches carry Runes rows only, on the bitcoin tip\n\t * shape (plan 059/061). */\n\tconsume(\n\t\tparams: StreamsConsumeBitcoinParams,\n\t): AsyncIterableIterator<StreamsBatch<RuneStreamsEvent, StreamsBitcoinTip>>;\n\t/** Narrowing overload: a literal `types` array narrows every batch's\n\t * event union to exactly those members. */\n\tconsume<const T extends readonly StreamsEventType[]>(\n\t\tparams: StreamsConsumeStacksParams & { types: T },\n\t): AsyncIterableIterator<StreamsBatch<StreamsEventOfTypes<T>>>;\n\tconsume(params?: StreamsConsumeParams): AsyncIterableIterator<StreamsBatch>;\n\tevents: {\n\t\t/** `clock: \"vm\"` pages carry vm rows only (a parallel vocabulary,\n\t\t * `event_index` = `ordinal`). Never `StreamsEvent`. Stacks-only —\n\t\t * `chain: \"bitcoin\"` has no `clock`. */\n\t\tlist(\n\t\t\tparams: StreamsEventsStacksListParams & { clock: \"vm\" },\n\t\t): Promise<StreamsEventsEnvelope<VmStreamsEvent>>;\n\t\t/** Narrowing overload, matching `consume`. Classic clock only —\n\t\t * `clock: \"vm\"` is overload 1, and a general `StreamsEventsListParams`\n\t\t * variable (clock unresolved) is the wire-union fallback. */\n\t\tlist<const T extends readonly StreamsEventType[]>(\n\t\t\tparams: Omit<\n\t\t\t\tStreamsEventsStacksListParams,\n\t\t\t\t\"clock\" | \"types\" | \"notTypes\"\n\t\t\t> & {\n\t\t\t\ttypes: T;\n\t\t\t\tnotTypes?: readonly StreamsEventType[];\n\t\t\t\tclock?: \"classic\";\n\t\t\t},\n\t\t): Promise<StreamsEventsEnvelope<StreamsEventOfTypes<T>>>;\n\t\tlist(\n\t\t\tparams?: Omit<\n\t\t\t\tStreamsEventsStacksListParams,\n\t\t\t\t\"clock\" | \"types\" | \"notTypes\"\n\t\t\t> & {\n\t\t\t\ttypes?: readonly StreamsEventType[];\n\t\t\t\tnotTypes?: readonly StreamsEventType[];\n\t\t\t\tclock?: \"classic\";\n\t\t\t},\n\t\t): Promise<StreamsEventsEnvelope>;\n\t\t/** `chain: \"bitcoin\"` pages carry Runes rows only, on the bitcoin tip\n\t\t * shape (plan 059). */\n\t\tlist(\n\t\t\tparams: StreamsEventsBitcoinListParams,\n\t\t): Promise<StreamsEventsEnvelope<RuneStreamsEvent, StreamsBitcoinTip>>;\n\t\t/** Unresolved `chain`/`clock` on a general params variable: the wire union. */\n\t\tlist(\n\t\t\tparams: StreamsEventsListParams,\n\t\t): Promise<StreamsEventsEnvelope<StreamsWireEvent>>;\n\t\t/** `chain: \"bitcoin\"` — Runes events for one transaction. */\n\t\tbyTxId(\n\t\t\ttxId: string,\n\t\t\topts: { chain: \"bitcoin\" },\n\t\t): Promise<StreamsEventsListEnvelope<RuneStreamsEvent, StreamsBitcoinTip>>;\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\t/** `chain: \"bitcoin\"` — the checkpointed sweep over Runes events; see\n\t\t * {@link StreamsEventsConsumeBitcoinParams}. */\n\t\tconsume<TTx = never>(\n\t\t\tparams: StreamsEventsConsumeBitcoinParams<TTx> & {\n\t\t\t\tsink?: ConsumerSink<TTx>;\n\t\t\t},\n\t\t): Promise<StreamsEventsConsumeResult>;\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\t/** `chain: \"bitcoin\"` — Runes events only (plan 059/061). */\n\t\tstream(\n\t\t\tparams: StreamsEventsStreamBitcoinParams,\n\t\t): AsyncIterable<RuneStreamsEvent>;\n\t\t/** Narrowing overload, matching `consume`. */\n\t\tstream<const T extends readonly StreamsEventType[]>(\n\t\t\tparams: StreamsEventsStreamStacksParams & { types: T },\n\t\t): AsyncIterable<StreamsEventOfTypes<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 whose `done`\n\t\t * settles when the loop ends. Not reorg-aware: an event delivered then\n\t\t * orphaned is never retracted. Durable writers use `consume()`.\n\t\t */\n\t\t/** `chain: \"bitcoin\"` — `onEvent` receives Runes rows (plan 059/061). */\n\t\tsubscribe(params: StreamsEventsSubscribeBitcoinParams): StreamsSubscription;\n\t\tsubscribe(params: StreamsEventsSubscribeStacksParams): StreamsSubscription;\n\t};\n\tblocks: {\n\t\tevents(\n\t\t\theightOrHash: number | string,\n\t\t\topts: { chain: \"bitcoin\" },\n\t\t): Promise<StreamsEventsListEnvelope<RuneStreamsEvent, StreamsBitcoinTip>>;\n\t\tevents(heightOrHash: number | string): Promise<StreamsEventsListEnvelope>;\n\t};\n\treorgs: {\n\t\tlist(\n\t\t\tparams: StreamsReorgsListParams & { chain: \"bitcoin\" },\n\t\t): Promise<StreamsReorgsListEnvelope>;\n\t\tlist(params: StreamsReorgsListParams): Promise<StreamsReorgsListEnvelope>;\n\t};\n\t/** Bulk parquet dumps. Requires `dumpsBaseUrl` on the client. */\n\tdumps: StreamsDumps;\n\tcanonical(\n\t\theight: number,\n\t\topts: { chain: \"bitcoin\" },\n\t): Promise<StreamsBitcoinCanonicalBlock>;\n\tcanonical(height: number): Promise<StreamsCanonicalBlock>;\n\ttip(opts: { chain: \"bitcoin\" }): Promise<StreamsBitcoinTip>;\n\ttip(): Promise<StreamsTip>;\n};\n",
|
|
30
30
|
"// Canonical home is @secondlayer/shared/streams-rows (the indexer's decoders\n// use the same helpers); re-exported here so the public SDK surface is\n// unchanged.\nexport {\n\tdecodeClarityValue,\n\ttoJsonSafe,\n} from \"@secondlayer/shared/streams-rows\";\n"
|
|
31
31
|
],
|
|
32
|
-
"mappings": "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",
|
|
33
|
-
"debugId": "
|
|
32
|
+
"mappings": ";AAAA;AACA;AAAA;AAAA;AAAA;;;ACDA,IAAM,YAAY;AAAA;AA6BX,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,WAAW;AAAA,IAC7C,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;AAAA,MAKT,SAAS,GAAuB;AAAA,IACnC,MAAM,IAAI,KAAK;AAAA,IACf,OAAO,KACN,OAAO,MAAM,YACb,OAAQ,EAA+B,eAAe,WACnD,EAA6B,aAC9B;AAAA;AAAA,EAGK,MAAM,GAGb;AAAA,IACD,OAAO;AAAA,SACH,MAAM,OAAO;AAAA,MAChB,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,IACjB;AAAA;AAEF;AAAA;AAKO,MAAM,kBAAkB,SAAS;AAAA,EACrB,SAAS;AAAA,EAE3B,WAAW,CACV,UAAU,+BACV,MACA,MACC;AAAA,IACD,MAAM,KAAK,SAAS,MAAM,IAAI;AAAA,IAC9B,KAAK,OAAO;AAAA;AAEd;AAAA;AAIO,MAAM,uBAAuB,SAAS;AAAA,EAMlC;AAAA,EALQ,SAAS;AAAA,EAE3B,WAAW,CACV,UAAU,kCAED,YACT,MACA,MACC;AAAA,IACD,MAAM,KAAK,SAAS,MAAM,MAAM;AAAA,MAC/B,WAAW;AAAA,MACX,mBAAmB,gBAAgB,UAAU;AAAA,IAC9C,CAAC;AAAA,IAPQ;AAAA,IAQT,KAAK,OAAO;AAAA;AAEd;AAAA;AAIO,MAAM,wBAAwB,SAAS;AAAA,EAC7C,WAAW,CAAC,SAAiB,QAAgB,MAAgB,MAAe;AAAA,IAC3E,MAAM,QAAQ,SAAS,MAAM,MAAM,EAAE,WAAW,MAAM,CAAC;AAAA,IACvD,KAAK,OAAO;AAAA;AAEd;AAAA;AAGO,MAAM,8BAA8B,iBAAiB;AAAA,EAC3D,WAAW,CAAC,UAAU,qDAAqD;AAAA,IAC1E,MAAM,SAAS,EAAE,MAAM,qBAAqB,WAAW,MAAM,CAAC;AAAA,IAC9D,KAAK,OAAO;AAAA;AAEd;AAAA;AAGO,MAAM,yBAAyB,iBAAiB;AAAA,EACtD,WAAW,CAAC,UAAU,8CAA8C;AAAA,IACnE,MAAM,SAAS,EAAE,MAAM,gBAAgB,WAAW,MAAM,CAAC;AAAA,IACzD,KAAK,OAAO;AAAA;AAEd;AAAA;AAGO,MAAM,wCAAwC,iBAAiB;AAAA,EACrE;AAAA,EACA,WAAW,CACV,UAAU,iCACV,oBACC;AAAA,IACD,MAAM,SAAS;AAAA,MACd,MAAM;AAAA,MACN,WAAW;AAAA,IACZ,CAAC;AAAA,IACD,KAAK,OAAO;AAAA,IACZ,KAAK,qBAAqB;AAAA;AAE5B;AAAA;AAGO,MAAM,sCAAsC,iBAAiB;AAAA,EACnE,WAAW,CAAC,UAAU,qDAAqD;AAAA,IAC1E,MAAM,SAAS,EAAE,MAAM,+BAA+B,WAAW,MAAM,CAAC;AAAA,IACxE,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;;;ACvMM,MAAM,gBAAqC;AAAA,EAEpB;AAAA,EADrB,UAAU,IAAI;AAAA,EACtB,WAAW,CAAkB,QAAQ,IAAI;AAAA,IAAZ;AAAA;AAAA,EAE7B,GAAG,CAAC,KAAoC;AAAA,IACvC,MAAM,QAAQ,KAAK,QAAQ,IAAI,GAAG;AAAA,IAClC,IAAI,OAAO;AAAA,MACV,KAAK,QAAQ,OAAO,GAAG;AAAA,MACvB,KAAK,QAAQ,IAAI,KAAK,KAAK;AAAA,IAC5B;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,GAAG,CAAC,KAAa,OAAwB;AAAA,IACxC,KAAK,QAAQ,OAAO,GAAG;AAAA,IACvB,KAAK,QAAQ,IAAI,KAAK,KAAK;AAAA,IAC3B,IAAI,KAAK,QAAQ,OAAO,KAAK,OAAO;AAAA,MACnC,MAAM,SAAS,KAAK,QAAQ,KAAK,EAAE,KAAK,EAAE;AAAA,MAC1C,IAAI,WAAW;AAAA,QAAW,KAAK,QAAQ,OAAO,MAAM;AAAA,IACrD;AAAA;AAEF;AAIO,IAAM,6BAA6B;AAUnC,SAAS,UAAU,GAAU;AAAA,EACnC,OAAO,IAAI,aAAa,8BAA8B,YAAY;AAAA;AAKnE,SAAS,SAAY,CAAC,SAAqB,QAAiC;AAAA,EAC3E,IAAI,OAAO;AAAA,IAAS,OAAO,QAAQ,OAAO,OAAO,UAAU,WAAW,CAAC;AAAA,EACvE,OAAO,IAAI,QAAW,CAAC,SAAS,WAAW;AAAA,IAC1C,MAAM,UAAU,MAAM,OAAO,OAAO,UAAU,WAAW,CAAC;AAAA,IAC1D,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,IACxD,QAAQ,KAAK,SAAS,MAAM,EAAE,QAAQ,MAAM;AAAA,MAC3C,OAAO,oBAAoB,SAAS,OAAO;AAAA,KAC3C;AAAA,GACD;AAAA;AAKK,IAAM,gBAAgB;AAGtB,IAAM,qBAAqB;AAG3B,IAAM,kBAAkB;AAExB,SAAS,cAAc,CAAC,UAA2B;AAAA,EACzD,IAAI,YAAY,SAAS,SAAS;AAAA,IAAG,OAAO,SAAS,QAAQ,QAAQ,EAAE;AAAA,EACvE,IAAI,OAAO,YAAY,aAAa;AAAA,IACnC,MAAM,UAAU,QAAQ,KAAK,uBAAuB;AAAA,IACpD,IAAI;AAAA,MAAS,OAAO,QAAQ,QAAQ,QAAQ,EAAE;AAAA,EAC/C;AAAA,EACA,OAAO;AAAA;AAID,SAAS,cAAc,CAAC,KAAsB;AAAA,EACpD,IAAI;AAAA,IACH,OAAO,IAAI,IAAI,GAAG,EAAE,aAAa;AAAA,IAChC,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAUF,SAAS,aAAa,CAC5B,QACA,SACqB;AAAA,EACrB,IAAI,WAAW;AAAA,IAAW,OAAO;AAAA,EACjC,IAAI,OAAO,YAAY;AAAA,IAAa;AAAA,EACpC,MAAM,OACL,YAAY,aAAa,eAAe,OAAO,IAC5C,kBACA;AAAA,EACJ,OAAO,QAAQ,MAAM,SAAS;AAAA;AAMxB,SAAS,iBAAiB,CAAC,YAAyC;AAAA,EAC1E,IAAI,eAAe;AAAA,IAAW,OAAO;AAAA,EACrC,IAAI,OAAO,YAAY;AAAA,IAAa;AAAA,EACpC,OAAO,QAAQ,KAAK,uBAAuB;AAAA;AAOrC,SAAS,GAAG,CAAC,OAAgC;AAAA,EACnD,OAAO,mBAAmB,OAAO,KAAK,CAAC;AAAA;AAOjC,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;AAWvB,SAAS,kBAAkB,CAAC,MAIjC;AAAA,EACD,IAAI,KAAK,WAAW;AAAA,IAAG,OAAO,EAAE,MAAM,UAAU;AAAA,EAChD,IAAI;AAAA,IACH,MAAM,OAAO,KAAK,MAAM,IAAI;AAAA,IAC5B,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI,QAAQ,OAAO,SAAS,UAAU;AAAA,MACrC,MAAM,MAAM,KAAK,SAAS,KAAK;AAAA,MAC/B,IACC,OAAO,QAAQ,YACf,OAAO,KAAK,YAAY,YACxB,KAAK,QAAQ,SAAS,GACrB;AAAA,QACD,UAAU,KAAK;AAAA,MAChB,EAAO,SAAI,OAAO,QAAQ,YAAY,IAAI,SAAS;AAAA,QAAG,UAAU;AAAA,MAC3D,SAAI,OAAO,OAAO,QAAQ;AAAA,QAAU,UAAU,KAAK,UAAU,GAAG;AAAA,MACrE,IAAI,OAAO,KAAK,SAAS;AAAA,QAAU,OAAO,KAAK;AAAA,IAChD;AAAA,IACA,OAAO,EAAE,SAAS,MAAM,MAAM,KAAK;AAAA,IAClC,MAAM;AAAA,IACP,OAAO,EAAE,SAAS,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA;AAI9B,MAAe,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEV,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,KAAK,UAAU,eAAe,QAAQ,OAAO;AAAA,IAC7C,KAAK,SAAS,cAAc,QAAQ,QAAQ,KAAK,OAAO;AAAA,IACxD,KAAK,SAAS,QAAQ,UAAU;AAAA,IAChC,KAAK,mBACJ,QAAQ,oBAAoB;AAAA,IAG7B,KAAK,YAAY,QAAQ,cAAc,IAAI,SAAS,MAAM,GAAG,IAAI;AAAA,IACjE,KAAK,YACJ,QAAQ,cAAc,QACnB,OACC,QAAQ,aAAa,IAAI;AAAA;AAAA,SAGxB,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,OAAuB,CAAC,GACX;AAAA,IACb,OAAO,KAAK,kBAAkB,KAAK,QAAQ,OAAO,WAAW;AAAA,MAG5D,MAAM,WACL,WAAW,SAAS,KAAK,YAAY,GAAG,KAAK,UAAU,SAAS;AAAA,MACjE,MAAM,SAAS,WAAW,MAAM,KAAK,WAAW,IAAI,QAAQ,IAAI;AAAA,MAChE,MAAM,WAAW,MAAM,KAAK,cAC3B,QACA,MACA,MACA,QACA,SAAS,EAAE,iBAAiB,OAAO,KAAK,IAAI,SAC7C;AAAA,MACA,IAAI,SAAS,WAAW,KAAK;AAAA,QAC5B;AAAA,MACD;AAAA,MACA,IAAI,SAAS,WAAW,KAAK;AAAA,QAI5B,IAAI,CAAC,QAAQ;AAAA,UACZ,MAAM,IAAI,SAAS,KAAK,oCAAoC;AAAA,QAC7D;AAAA,QACA,OAAO,KAAK,MAAM,OAAO,IAAI;AAAA,MAC9B;AAAA,MACA,MAAM,OAAO,WAAW,SAAS,QAAQ,IAAI,MAAM,IAAI;AAAA,MACvD,IAAI,CAAC,YAAY,CAAC,MAAM;AAAA,QACvB,OAAQ,MAAM,UAAU,SAAS,KAAK,GAAG,MAAM;AAAA,MAChD;AAAA,MACA,MAAM,OAAO,MAAM,UAAU,SAAS,KAAK,GAAG,MAAM;AAAA,MACpD,MAAM,KAAK,WAAW,IAAI,UAAU,EAAE,MAAM,MAAM,KAAK,CAAC;AAAA,MACxD,OAAO,KAAK,MAAM,IAAI;AAAA,KACtB;AAAA;AAAA,OAKc,cAAgB,CAC/B,QACA,MACA,MACA,OAAuB,CAAC,GACJ;AAAA,IACpB,IAAI;AAAA,MACH,OAAO,MAAM,KAAK,QAAW,QAAQ,MAAM,MAAM,IAAI;AAAA,MACpD,OAAO,KAAK;AAAA,MACb,IAAI,eAAe,YAAY,IAAI,WAAW;AAAA,QAAK,OAAO;AAAA,MAC1D,MAAM;AAAA;AAAA;AAAA,OAIQ,YAAW,CAC1B,QACA,MACA,MACA,OAAuB,CAAC,GACN;AAAA,IAClB,OAAO,KAAK,kBAAkB,KAAK,QAAQ,OAAO,WAAW;AAAA,MAC5D,MAAM,WAAW,MAAM,KAAK,cAAc,QAAQ,MAAM,MAAM,MAAM;AAAA,MACpE,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM;AAAA,KACxC;AAAA;AAAA,OAQY,kBAAoB,CACjC,cACA,KACa;AAAA,IACb,MAAM,aAAa,IAAI;AAAA,IACvB,IAAI,WAAW;AAAA,IACf,MAAM,UAAU,MACf,WAAW,MAAM,cAAc,UAAU,WAAW,CAAC;AAAA,IACtD,IAAI,cAAc;AAAA,MAAS,QAAQ;AAAA,IAC9B;AAAA,oBAAc,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,IACpE,MAAM,QACL,KAAK,mBAAmB,IACrB,WAAW,MAAM;AAAA,MACjB,WAAW;AAAA,MACX,WAAW,MAAM,WAAW,CAAC;AAAA,OAC3B,KAAK,gBAAgB,IACvB;AAAA,IACJ,IAAI;AAAA,MACH,OAAO,MAAM,IAAI,WAAW,MAAM;AAAA,MACjC,OAAO,KAAK;AAAA,MACb,IAAI,YAAY,CAAC,cAAc,SAAS;AAAA,QACvC,MAAM,IAAI,SACT,GACA,oBAAoB,KAAK,kBAAkB,KAAK,kFAChD,WACA,mBACA,EAAE,WAAW,MAAM,OAAO,eAAe,QAAQ,MAAM,UAAU,CAClE;AAAA,MACD;AAAA,MACA,MAAM;AAAA,cACL;AAAA,MACD,IAAI,UAAU;AAAA,QAAW,aAAa,KAAK;AAAA,MAC3C,cAAc,oBAAoB,SAAS,OAAO;AAAA;AAAA;AAAA,OAOpC,cAAa,CAC5B,QACA,MACA,MACA,QACA,cACoB;AAAA,IACpB,MAAM,MAAM,GAAG,KAAK,UAAU;AAAA,IAC9B,MAAM,UAAU;AAAA,SACZ,WAAW,YAAY,KAAK,MAAM;AAAA,SAClC;AAAA,IACJ;AAAA,IACA,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,MAAM,UAAU,KAAK,UAAU,KAAK;AAAA,QACnC;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACD,CAAC;AAAA,MACD,WAAW,SAAS,MAAM,UAAU,SAAS,MAAM,IAAI,MAAM;AAAA,MAC5D,OAAO,KAAK;AAAA,MAGb,IAAI,QAAQ;AAAA,QAAS,MAAM;AAAA,MAC3B,MAAM,IAAI,SACT,GACA,uBAAuB,KAAK,gDAC5B,WACA,WACA,EAAE,WAAW,MAAM,OAAO,eAAe,QAAQ,MAAM,UAAU,CAClE;AAAA;AAAA,IAID,IAAI,SAAS,WAAW;AAAA,MAAK,OAAO;AAAA,IAEpC,IAAI,CAAC,SAAS,IAAI;AAAA,MAIjB,MAAM,YAAY,SACf,MAAM,UAAU,SAAS,KAAK,GAAG,MAAM,IACvC,MAAM,SAAS,KAAK;AAAA,MACvB,MAAM,WAAW,mBAAmB,SAAS;AAAA,MAC7C,MAAM,aAAa,SAAS,QAAQ,IAAI,aAAa,KAAK;AAAA,MAE1D,IAAI,SAAS,WAAW,KAAK;AAAA,QAC5B,MAAM,IAAI,UACT,SAAS,WAAW,+BACpB,SAAS,MACT,SAAS,IACV;AAAA,MACD;AAAA,MAEA,IAAI,SAAS,WAAW,KAAK;AAAA,QAG5B,MAAM,WAAW,aACd,sBAAsB,wBACtB;AAAA,QACH,MAAM,IAAI,eACT,SAAS,WAAW,UACpB,YACA,SAAS,MACT,SAAS,IACV;AAAA,MACD;AAAA,MAEA,IAAI,SAAS,UAAU,KAAK;AAAA,QAC3B,MAAM,oBAAoB,gBAAgB,UAAU;AAAA,QACpD,MAAM,IAAI,SACT,SAAS,QACT,SAAS,WACR,8CAA8C,KAAK,kBACpD,SAAS,MACT,SAAS,MACT,sBAAsB,YAAY,EAAE,kBAAkB,IAAI,CAAC,CAC5D;AAAA,MACD;AAAA,MAEA,MAAM,IAAI,SACT,SAAS,QACT,SAAS,WAAW,QAAQ,SAAS,UACrC,SAAS,MACT,SAAS,IACV;AAAA,IACD;AAAA,IAEA,OAAO;AAAA;AAET;;;AFvdA,IAAM,wBAAwB;AAE9B,IAAM,2BAA2B;AACjC,IAAM,0BAA0B;AAChC,IAAM,kBAAkB;AAGxB,IAAM,wBAAwB;AAmC9B,SAAS,aAAa,CAAC,MAAuC;AAAA,EAC7D,OAAO;AAAA,IACN,YAAY,KAAK;AAAA,IACjB,SAAS,KAAK;AAAA,IACd,WAAW,KAAK;AAAA,IAChB,KAAK,KAAK;AAAA,IACV,4BAA4B,KAAK;AAAA,IACjC,2BAA2B,KAAK;AAAA,IAChC,kBAAkB,KAAK;AAAA,IACvB,YAAY,KAAK;AAAA,EAClB;AAAA;AAGD,SAAS,UAAU,CAAC,KAAqB;AAAA,EACxC,OAAO,IAAI,QAAQ,QAAQ,EAAE;AAAA;AAGvB,SAAS,mBAAmB,CAClC,UAAsC,CAAC,GACvB;AAAA,EAChB,MAAM,aAAa,kBAAkB,QAAQ,cAAc,QAAQ,MAAM;AAAA,EACzE,MAAM,YACL,QAAQ,cAAc,CAAC,OAAO,SAAS,MAAM,OAAO,IAAI;AAAA,EACzD,MAAM,iBAAiB,WACtB,QAAQ,kBAAkB,wBAC3B;AAAA,EACA,MAAM,gBAAgB,WACrB,QAAQ,iBAAiB,uBAC1B;AAAA,EACA,MAAM,iBAAiB,QAAQ,kBAAkB;AAAA,EACjD,MAAM,YAAY,QAAQ;AAAA,EAE1B,IAAI,aAAqC;AAAA,EAEzC,eAAe,eAAe,GAAoB;AAAA,IACjD,IAAI;AAAA,MAAW,OAAO;AAAA,IACtB,IAAI;AAAA,MAAY,OAAO;AAAA,IACvB,MAAM,WAAW,YAAY;AAAA,MAC5B,MAAM,MAAM,MAAM,UACjB,GAAG,0CACJ;AAAA,MACA,IAAI,CAAC,IAAI,IAAI;AAAA,QACZ,MAAM,IAAI,sBACT,wCAAwC,IAAI,UAC7C;AAAA,MACD;AAAA,MACA,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,IAAI,OAAO,KAAK,mBAAmB,UAAU;AAAA,QAC5C,MAAM,IAAI,sBAAsB,mCAAmC;AAAA,MACpE;AAAA,MACA,OAAO,KAAK;AAAA,OACV;AAAA,IACH,aAAa;AAAA,IACb,QAAQ,MAAM,MAAM;AAAA,MACnB,IAAI,eAAe;AAAA,QAAS,aAAa;AAAA,KACzC;AAAA,IACD,OAAO;AAAA;AAAA,EAGR,eAAe,aAAa,CAAC,UAAoC;AAAA,IAChE,MAAM,WAAW,mBAAmB,MAAM,SAAS,KAAK,CAAC;AAAA,IACzD,IAAI,SAAS,WAAW,KAAK;AAAA,MAC5B,MAAM,IAAI,iBACT,SAAS,WAAW,4CACrB;AAAA,IACD;AAAA,IACA,IAAI,SAAS,WAAW,KAAK;AAAA,MAC5B,MAAM,MACL,SAAS,QACT,OAAO,SAAS,SAAS,YACzB,0BAA0B,SAAS,OAChC,OACC,SAAS,KACR,oBACH,IACC;AAAA,MACJ,MAAM,IAAI,gCACT,SAAS,WAAW,iCACpB,OAAO,SAAS,GAAG,IAAI,MAAM,SAC9B;AAAA,IACD;AAAA,IACA,IAAI,SAAS,WAAW,KAAK;AAAA,MAC5B,MAAM,IAAI,8BACT,SAAS,WAAW,mDACrB;AAAA,IACD;AAAA,IACA,MAAM,IAAI,SACT,SAAS,QACT,SAAS,WAAW,wBAAwB,SAAS,WACrD,SAAS,MACT,SAAS,IACV;AAAA;AAAA,EAGD,eAAe,UAAa,CAC3B,QACA,MACA,MACA,SAAS,MACI;AAAA,IACb,MAAM,UAAkC;AAAA,MACvC,gBAAgB;AAAA,IACjB;AAAA,IACA,IAAI,UAAU,YAAY;AAAA,MACzB,IAAI,CAAC,sBAAsB,KAAK,UAAU,GAAG;AAAA,QAC5C,MAAM,IAAI,iBACT,oEACD;AAAA,MACD;AAAA,MACA,QAAQ,gBAAgB,UAAU;AAAA,IACnC;AAAA,IACA,MAAM,WAAW,MAAM,UAAU,GAAG,gBAAgB,QAAQ;AAAA,MAC3D;AAAA,MACA;AAAA,MACA,MAAM,SAAS,YAAY,KAAK,UAAU,IAAI,IAAI;AAAA,IACnD,CAAC;AAAA,IACD,IAAI,CAAC,SAAS;AAAA,MAAI,MAAM,cAAc,QAAQ;AAAA,IAC9C,OAAQ,MAAM,SAAS,KAAK;AAAA;AAAA,EAG7B,eAAe,IAAI,CAClB,SACA,OAA2B,CAAC,GACH;AAAA,IACzB,IAAI,CAAC,gBAAgB,KAAK,OAAO,GAAG;AAAA,MACnC,MAAM,IAAI,gBACT,0EACA,GACD;AAAA,IACD;AAAA,IACA,MAAM,WAAW,KAAK,aAAa;AAAA,IACnC,MAAM,eACL,cACC,kBAAkB,CAAC,WAAW,MAAM,gBAAgB,IAAI;AAAA,IAC1D,MAAM,MAAM,MAAM,cAAc,SAAS;AAAA,MACxC;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACD,MAAM,YAAY,eAAe,IAAI,UAAU,cAAc,QAAQ;AAAA,IACrE,IAAI,kBAAkB,CAAC,YAAY,CAAC,UAAU,UAAU;AAAA,MACvD,MAAM,IAAI,sBACT,UAAU,UAAU,mDACrB;AAAA,IACD;AAAA,IACA,OAAO,KAAK,KAAK,UAAU;AAAA;AAAA,EAG5B,eAAe,MAAM,CACpB,SACA,OAA2B,CAAC,GACH;AAAA,IACzB,OAAO,KAAK,WAAW,GAAG,8BAA8B,IAAI;AAAA;AAAA,EAG7D,eAAe,MAAM,GAA2B;AAAA,IAC/C,MAAM,WAAW,MAAM,UAAU,GAAG,4BAA4B;AAAA,IAChE,IAAI,CAAC,SAAS,IAAI;AAAA,MACjB,MAAM,IAAI,SACT,SAAS,QACT,mCAAmC,SAAS,UAC7C;AAAA,IACD;AAAA,IACA,OAAQ,MAAM,SAAS,KAAK;AAAA;AAAA,EAG7B,SAAS,UAAU,CAClB,KACA,QAKqB;AAAA,IACrB,IAAI,OAAO,IAAI,SAAS,cAAc,CAAC;AAAA,IACvC,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,IAAI,OAAO,SAAS;AAAA,MACnB,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE,YAAY,OAAO,OAAO;AAAA,IACvD;AAAA,IACA,MAAM,YAAY,OAAO;AAAA,IACzB,IAAI,cAAc,WAAW;AAAA,MAC5B,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE,YAAY,SAAS;AAAA,IAClD;AAAA,IACA,MAAM,UAAU,OAAO;AAAA,IACvB,IAAI,YAAY,WAAW;AAAA,MAC1B,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE,cAAc,OAAO;AAAA,IAClD;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,eAAe,KAAK,CAAC,OAGK;AAAA,IACzB,MAAM,OAAO,MAAM,WAClB,QACA,sBACA,EAAE,OAAO,MAAM,OAAO,MAAM,MAAM,KAAK,CACxC;AAAA,IACA,OAAO,cAAc,IAAI;AAAA;AAAA,EAG1B,eAAe,eAAe,CAAC,OAGC;AAAA,IAC/B,MAAM,OAA2B,CAAC;AAAA,IAClC,IAAI,wBAAwB;AAAA,IAC5B,IAAI,wBAAwB;AAAA,IAC5B,SAAS,IAAI,EAAG,IAAI,MAAM,MAAM,QAAQ,KAAK,iBAAiB;AAAA,MAC7D,MAAM,QAAQ,MAAM,MAAM,MAAM,GAAG,IAAI,eAAe;AAAA,MACtD,MAAM,OAAO,MAAM,WAClB,QACA,sBACA,EAAE,OAAO,OAAO,MAAM,MAAM,KAAK,CAClC;AAAA,MACA,WAAW,QAAQ,KAAK,MAAM;AAAA,QAC7B,KAAK,KAAK;AAAA,UACT,MAAM,KAAK;AAAA,UACX,KAAK,KAAK;AAAA,UACV,WAAW,KAAK;AAAA,UAChB,kBAAkB,KAAK;AAAA,QACxB,CAAC;AAAA,MACF;AAAA,MACA,yBAAyB,KAAK;AAAA,MAC9B,wBAAwB,KAAK;AAAA,IAC9B;AAAA,IACA,OAAO,EAAE,MAAM,uBAAuB,sBAAsB;AAAA;AAAA,EAG7D,eAAe,QAAQ,CACtB,WACA,MACsB;AAAA,IACtB,IAAI,MAAM,MAAM;AAAA,IAChB,IAAI,CAAC,KAAK;AAAA,MACT,IAAI,WAAW;AAAA,MACf,IAAI;AAAA,QACH,WAAW,IAAI,IAAI,cAAc,EAAE,aAAa;AAAA,QAC/C,MAAM;AAAA,QACP,WAAW;AAAA;AAAA,MAEZ,IAAI,UAAU;AAAA,QACb,MAAM,IAAI,gBACT,wFACA,GACD;AAAA,MACD;AAAA,MACA,MAAM,GAAG,kBAAkB,UAAU,KAAK,QAAQ,QAAQ,EAAE;AAAA,IAC7D;AAAA,IACA,MAAM,WAAW,MAAM,UAAU,GAAG;AAAA,IACpC,IAAI,CAAC,SAAS,IAAI;AAAA,MACjB,MAAM,IAAI,SACT,SAAS,QACT,sBAAsB,UAAU,SAAS,SAAS,UACnD;AAAA,IACD;AAAA,IACA,MAAM,QAAQ,IAAI,WAAW,MAAM,SAAS,YAAY,CAAC;AAAA,IACzD,MAAM,SAAS,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,IAC9D,IAAI,WAAW,UAAU,QAAQ;AAAA,MAChC,MAAM,IAAI,sBACT,GAAG,UAAU,kCAAkC,UAAU,eAAe,UACzE;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,SAAS;AAAA,WACF,QAAO,GAAmC;AAAA,QAC/C,MAAM,OAAO,MAAM,WAGhB,OAAO,qBAAqB;AAAA,QAC/B,OAAO;AAAA,UACN,kBAAkB,KAAK;AAAA,UACvB,QAAQ,KAAK;AAAA,QACd;AAAA;AAAA,WAEK,SAAQ,CAAC,OAGc;AAAA,QAC5B,MAAM,OAAO,MAAM,WAClB,QACA,gCACA,EAAE,OAAO,MAAM,OAAO,QAAQ,MAAM,KAAK,GACzC,KACD;AAAA,QACA,OAAO,EAAE,KAAK,KAAK,IAAI;AAAA;AAAA,WAElB,OAAM,CACX,OAG+D;AAAA,QAC/D,MAAM,UACL,SAAS,SAAS,MAAM,MACrB,EAAE,UAAU,KAAK,IACjB;AAAA,UACA,UAAW,MAA+B;AAAA,UAC1C,SAAU,MAA0C;AAAA,QACrD;AAAA,QACH,MAAM,OAAO,MAAM,WAGhB,QAAQ,uBAAuB,OAAO;AAAA,QACzC,OAAO,EAAE,UAAU,KAAK,UAAU,SAAS,KAAK,QAAQ;AAAA;AAAA,IAE1D;AAAA,EACD;AAAA;;;AGzYD;AAAA;AAAA;AAqDO,SAAS,mBAAmB,CAClC,SAC8D;AAAA,EAC9D,OAAO,CAAC,UACP,QAAQ,QAAQ,sBAAsB;AAAA,IACrC,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM,UAAU;AAAA,IACxB,YAAY,MAAM;AAAA,IAClB,UAAU,MAAM;AAAA,IAChB,UAAU,MAAM;AAAA,IAChB,gBAAgB,MAAM;AAAA,EACvB,CAAC;AAAA;AAGI,SAAS,oBAAoB,CAAC,SAAoC;AAAA,EACxE,eAAe,MAAM,GAA4B;AAAA,IAChD,OAAO,QAAQ,OAAO,gBAAgB;AAAA;AAAA,EAEvC,eAAe,QAAQ,GAA+B;AAAA,IACrD,OAAO,uBAAuB,MAAM,OAAO,CAAC;AAAA;AAAA,EAE7C,OAAO,EAAE,QAAQ,SAAS;AAAA;;;AC/BpB,MAAM,kBAAkB,WAAW;AAAA,EACzC,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,MAAM,OAAO;AAAA;AAAA,EAId,IAAI,CAAC,QAAyD;AAAA,IAC7D,OAAO,KAAK,QACX,OACA,gBAAgB,WAAW;AAAA,MAC1B,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,IAChB,CAAC,GACF;AAAA;AAAA,OAOK,IAAG,CACR,YACA,OAAiC,CAAC,GACA;AAAA,IAClC,MAAM,SAAS,MAAM,KAAK,cACzB,OACA,iBAAiB,mBAAmB,UAAU,IAC7C,KAAK,aAAa,iBAAiB,IAErC;AAAA,IACA,OAAO,QAAQ,YAAY;AAAA;AAE7B;;;AC9EA;AAAA;AAAA;AAAA;AAAA;;;ACgBO,MAAM,2BAA2B,SAAS;AAAA,EAChD,WAAW,CAAC,SAAiB,QAAgB,MAAgB,MAAe;AAAA,IAC3E,MAAM,QAAQ,SAAS,MAAM,MAAM,EAAE,WAAW,KAAK,CAAC;AAAA,IACtD,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;AAMA,eAAsB,eAAe,CAAC,UAAoC;AAAA,EACzE,QAAQ,SAAS,MAAM,SAAS,mBAAmB,MAAM,SAAS,KAAK,CAAC;AAAA,EAExE,IAAI,SAAS,WAAW,KAAK;AAAA,IAC5B,MAAM,IAAI,UAAU,WAAW,+BAA+B,MAAM,IAAI;AAAA,EACzE;AAAA,EAEA,IAAI,SAAS,WAAW,KAAK;AAAA,IAC5B,MAAM,aAAa,SAAS,QAAQ,IAAI,aAAa,KAAK;AAAA,IAC1D,MAAM,IAAI,eACT,WAAW,kCACX,YACA,MACA,IACD;AAAA,EACD;AAAA,EAEA,IAAI,SAAS,UAAU,KAAK;AAAA,IAC3B,MAAM,IAAI,mBACT,WAAW,2BAA2B,SAAS,WAC/C,SAAS,QACT,MACA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,gBACT,WAAW,4BAA4B,SAAS,WAChD,SAAS,QACT,MACA,IACD;AAAA;;;ADnDM,IAAM,SAAS;AAAA,EAsBrB,QAAQ,CAAC,QAA+B;AAAA,IACvC,IAAI,UAAU;AAAA,MAAG,OAAO;AAAA,IACxB,OAAO,oBAAoB,eAAe,SAAS,CAAC,CAAC;AAAA;AAAA,EAItD,KAAK,CAAC,QAA6D;AAAA,IAClE,IAAI;AAAA,MACH,MAAM,UAAU,oBAAoB,MAAM;AAAA,MAC1C,OAAO;AAAA,QACN,aAAa,QAAQ;AAAA,QACrB,YAAY,QAAQ;AAAA,MACrB;AAAA,MACC,MAAM;AAAA,MACP,MAAM,IAAI,gBACT,0BAA0B,0DAC1B,GACD;AAAA;AAAA;AAGH;;;AE1CA,SAAS,QAAQ,CAAC,OAA6B;AAAA,EAC9C,OAAO,GAAG,MAAM,eAAe,MAAM,qBAAqB,MAAM;AAAA;AAI1D,IAAM,6BAA6B;AA+B1C,eAAsB,WAErB,CAAC,MAY8B;AAAA,EAC/B,MAAM,QAAQ,KAAK,OAAO,OACzB,CAAC,UAAU,CAAC,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,CAAC,CAC/C;AAAA,EACA,IAAI,MAAM,WAAW;AAAA,IAAG,OAAO;AAAA,EAE/B,WAAW,SAAS,OAAO;AAAA,IAC1B,MAAM,OAAO,MAAM;AAAA,IACnB,IAAI,CAAC,OAAO,cAAc,IAAI,KAAK,OAAO,GAAG;AAAA,MAC5C,MAAM,IAAI,gBACT,2BAA2B,OAAO,IAAI,0KACtC,GACD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,WAAW,aAAa,KAAK,MAAM;AAAA,EACzC,MAAM,aAAa,MACjB,OAAO,CAAC,UAAU,aAAa,QAAQ,MAAM,qBAAqB,QAAQ,EAC1E,KAAK,CAAC,GAAG,MAAM,EAAE,oBAAoB,EAAE,iBAAiB;AAAA,EAG1D,WAAW,SAAS,OAAO;AAAA,IAC1B,IAAI,CAAC,WAAW,SAAS,KAAK;AAAA,MAAG,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,CAAC;AAAA,EACpE;AAAA,EACA,IAAI,WAAW,WAAW,KAAK,aAAa;AAAA,IAAM,OAAO;AAAA,EAEzD,MAAM,YAAY,WAAW,IAAI,qBAAqB;AAAA,EACtD,MAAM,QAAQ,WAAW;AAAA,EACzB,MAAM,WAAW,KAAK,oBAAoB;AAAA,EAC1C,IAAI,QAAQ,UAAU;AAAA,IACrB,MAAM,IAAI,gBACT,iBAAiB,qBAAqB,+CAA+C,oCAAoC,gKAAgK,gCACzR,GACD;AAAA,EACD;AAAA,EAEA,MAAM,SAAS,OAAO,SAAS,SAAS;AAAA,EACxC,WAAW,SAAS,YAAY;AAAA,IAG/B,MAAM,KAAK,MAAM,SAAS,MAAM,mBAAmB,MAAM;AAAA,IACzD,MAAM,KAAK,UAAU,OAAO,EAAE,QAAQ,OAAO,CAAC;AAAA,IAC9C,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,CAAC;AAAA,EACnC;AAAA,EACA,OAAO,EAAE,WAAW,QAAQ,OAAO;AAAA;AAuC7B,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;AAUM,SAAS,wBAAwB,CACvC,MACA,eACO;AAAA,EACP,IAAI,MAAM,cAAc,iBAAiB,CAAC,eAAe;AAAA,IACxD,MAAM,IAAI,gBACT,0OACA,GACD;AAAA,EACD;AAAA;AAUM,SAAS,YAAY,CAAC,QAAsC;AAAA,EAClE,IAAI,WAAW;AAAA,IAAM,OAAO;AAAA,EAC5B,IAAI;AAAA,IACH,OAAO,OAAO,MAAM,MAAM,EAAE;AAAA,IAC3B,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAQF,SAAS,YAA2D,CAC1E,QACA,QACA,KACA,SAA4B,CAAC,GAC7B,gBAA+B,MACM;AAAA,EACrC,MAAM,YAAY,IAAI;AAAA,EACtB,MAAM,WAAW,iBAAiB;AAAA,EAClC,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA,cAAc,aAAa,OAAO,OAAO,KAAK,IAAI,GAAG,YAAY,QAAQ;AAAA,IACzE;AAAA,IACA;AAAA,EACD;AAAA;AAwBD,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,MAAM;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,QAAQ;AAAA;AAAA,IAKT,MAAM,UAAU,WAAW,MAAM;AAAA,MAChC,QAAQ,oBAAoB,SAAS,OAAO;AAAA,MAC5C,QAAQ;AAAA,OACN,EAAE;AAAA,IACL,QAAQ,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,GACzD;AAAA;AAGF,eAAsB,oBAAiC,CAAC,MAuDkB;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,EACnD,yBAAyB,KAAK,MAAM,aAAa;AAAA,EAQjD,MAAM,kBAAmB,MAAM,KAAK,MAAM,WAAW,KAAM;AAAA,EAC3D,IAAI,SAAS,KAAK,cAAc;AAAA,EAGhC,MAAM,gBAAgB,IAAI;AAAA,EAG1B,IAAI,aAA4B;AAAA,EAChC,IAAI,QAAQ;AAAA,EACZ,IAAI,aAAa;AAAA,EAKjB,IAAI,SAAwB,aAAa,MAAM;AAAA,EAI/C,IAAI,UAAyB;AAAA,EAE7B,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,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,MACtB,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,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,IAOA,MAAM,WAAW,CAAC,iBAAiB,QAAQ,KAAK,WAAW,KAAK,IAAI;AAAA,IACpE,IAAI,UAAU;AAAA,MACb,MAAM,UAAU,MAAM,YAAY;AAAA,QACjC,QAAQ,SAAS;AAAA,QACjB;AAAA,QACA,SAAS;AAAA,QACT,OAAO;AAAA,QACP,MAAM,KAAK;AAAA,QACX,SAAS,KAAK;AAAA,QACd,kBAAkB,KAAK;AAAA,MACxB,CAAC;AAAA,MACD,IAAI,SAAS;AAAA,QACZ,SAAS,QAAQ;AAAA,QAIjB,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY,IAAI;AAAA,QACzD,UAAU;AAAA,QACV,aAAa;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAAA,IASA,IAAI,YAAY,KAAK,eAAe,SAAS,OAAO,WAAW,GAAG;AAAA,MACjE,eAAe;AAAA,MACf,IAAI,eAAe,MAAM;AAAA,QACxB,MAAM,QAAgB;AAAA,QACtB,MAAM,cAAc,KAAK;AAAA,QACzB,MAAM,SAAoC,MAAM,mBAC/C,MAAM,YAAY,EAAE,MAAM,CAAC,GAC3B;AAAA,UACC,YAAY,KAAK;AAAA,UACjB,YAAY,KAAK;AAAA,UACjB,SAAS,KAAK;AAAA,UACd;AAAA,UACA,QAAQ,KAAK;AAAA,QACd,CACD;AAAA,QACA,IAAI,OAAO,eAAe;AAAA,UAAM,aAAa,OAAO;AAAA,QACpD,MAAM,UAAU,MAAM,YAAY;AAAA,UACjC,QAAQ,OAAO;AAAA,UACf;AAAA,UACA,SAAS;AAAA,UACT,OAAO;AAAA,UACP,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,UACd,kBAAkB,KAAK;AAAA,QACxB,CAAC;AAAA,QACD,IAAI,SAAS;AAAA,UACZ,SAAS,QAAQ;AAAA,UACjB,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY,IAAI;AAAA,UACzD,UAAU;AAAA,UACV,aAAa;AAAA,UACb;AAAA,QACD;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,IAOzC,IAAI,QAAQ,SAAS,GAAG;AAAA,MACvB,UAAU;AAAA,IACX,EAAO,SAAI,eAAe,QAAQ,eAAe,QAAQ;AAAA,MACxD,UAAU,aAAa,UAAU,KAAK;AAAA,IACvC,EAAO,SAAI,SAAS,OAAO,WAAW,GAAG;AAAA,MACxC,UAAU,SAAS,IAAI;AAAA,IACxB;AAAA,IAIA,MAAM,MAAM,aACX,cAAc,QACd,QACA,SAAS,KACT,SAAS,QACT,OACD;AAAA,IAEA,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,UAKhD,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,MAUA,OAAO,KAAK,OACT,QAAQ,KAAK;AAAA,QACb,MAAM,gBAAgB,KAAK,MAAM;AAAA,QACjC,KAAK,KAAK,EAAE,MAAM,MAAM,IAAI,QAAe,MAAM,EAAE,CAAC;AAAA,MACrD,CAAC,IACA,MAAM,gBAAgB,KAAK,MAAM;AAAA,MACpC;AAAA,IACD;AAAA,IAEA,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA,EACpC;AAAA,EAEA,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA;AAUpC,gBAAuB,qBAAqB,CAAC,MAkBZ;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,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,MACtB,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,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,MAoBV;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,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,MACtB,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,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;;;ACznBD,eAAsB,gBAIrB,CACA,MAIwE;AAAA,EACxE,MAAM,QAAQ,KAAK,SAAS;AAAA,EAC5B,MAAM,OAAO,KAAK,QAAQ;AAAA,EAC1B,MAAM,gBAAgB,KAAK,iBAAiB;AAAA,EAC5C,MAAM,YAAY,KAAK,aAAa;AAAA,EACpC,MAAM,iBAAiB,KAAK,kBAAkB;AAAA,EAC9C,MAAM,WAAW,KAAK,YAAY,OAAO;AAAA,EACzC,MAAM,gBAAgB,KAAK,iBAAiB,OAAO;AAAA,EACnD,yBAAyB,KAAK,MAAM,aAAa;AAAA,EAQjD,MAAM,kBAAmB,MAAM,KAAK,MAAM,WAAW,KAAM;AAAA,EAC3D,IAAI,SAAS,KAAK,cAAc;AAAA,EAGhC,MAAM,gBAAgB,IAAI;AAAA,EAC1B,IAAI,QAAQ;AAAA,EACZ,IAAI,aAAa;AAAA,EAKjB,IAAI,SAAwB,aAAa,MAAM;AAAA,EAI/C,IAAI,UAAyB;AAAA,EAE7B,OACC,QAAQ,YACR,aAAa,iBACb,CAAC,KAAK,QAAQ,SACb;AAAA,IAID,MAAM,WAAW,MAAM,mBACtB,MACC,KAAK,UAAU;AAAA,MACd;AAAA,MACA,YAAY,WAAW,OAAO,KAAK,aAAa;AAAA,MAChD,OAAO;AAAA,IACR,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,IAQA,IAAI,CAAC,kBAAkB,KAAK,WAAW,KAAK,OAAO;AAAA,MAClD,MAAM,UAAU,MAAM,YAAY;AAAA,QACjC,QAAQ,SAAS;AAAA,QACjB;AAAA,QACA,SAAS;AAAA,QACT,OAAO,CAAC,UAAU,MAAM;AAAA,QACxB,MAAM,KAAK;AAAA,QACX,SAAS,KAAK;AAAA,QACd,kBAAkB,KAAK;AAAA,MACxB,CAAC;AAAA,MACD,IAAI,SAAS;AAAA,QACZ,SAAS,QAAQ;AAAA,QAIjB,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY,IAAI;AAAA,QACzD,UAAU;AAAA,QACV,aAAa;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAAA,IAEA,MAAM,QAAQ,KAAK,QAAQ,QAAQ;AAAA,IACnC,MAAM,UAAU,gBACb,MAAM,OACN,CAAC,SAAS,KAAK,gBAAgB,SAAS,IAAI,gBAC7C,IACC;AAAA,IAGH,MAAM,aAAa,gBACf,QAAQ,GAAG,EAAE,GAAG,UAAU,SAC3B,SAAS;AAAA,IAGZ,SAAS,QAAQ,GAAG,EAAE,GAAG,gBAAgB;AAAA,IAQzC,IAAI,QAAQ,SAAS,GAAG;AAAA,MACvB,UAAU;AAAA,IACX,EAAO,SAAI,eAAe,QAAQ,eAAe,QAAQ;AAAA,MACxD,UAAU,aAAa,UAAU,KAAK;AAAA,IACvC,EAAO;AAAA,MACN,UAAU,gBACP,SAAS,IAAI,mBACb,SAAS,IAAI;AAAA;AAAA,IAKjB,MAAM,MAAM,aACX,cAAc,QACd,QACA,SAAS,KACT,SAAS,QACT,OACD;AAAA,IAEA,KAAK,aAAa,GAAG;AAAA,IAErB,IAAI;AAAA,IACJ,IAAI,KAAK,MAAM;AAAA,MACd,MAAM,OAAO,KAAK;AAAA,MAKlB,IACC,eAAe,SACd,eAAe,UAAU,QAAQ,SAAS,IAC1C;AAAA,QACD,MAAM,KAAK,YAAY,YAAY,OAAO,OAAO;AAAA,UAKhD,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;;;AC5M7B,IAAM,sBAAsB;AA47CnC,SAAS,WAAqD,CAAC,QAAW;AAAA,EACzE,QAAQ,YAAY,gBAAgB,YAAY;AAAA,EAChD,OAAO;AAAA;AAGR,SAAS,mBAAmB,CAAC,QAIN;AAAA,EACtB,IAAI,OAAO,eAAe;AAAA,IAAW,OAAO,OAAO;AAAA,EACnD,IAAI,OAAO,UAAU,OAAO;AAAA,IAAY;AAAA,EACxC,OAAO;AAAA;AASR,SAAS,cAAc,CAAC,QAOrB;AAAA,EACF,OAAO;AAAA,IACN,QAAQ,OAAO;AAAA,IACf,aAAa,OAAO;AAAA,IACpB,OAAO,OAAO;AAAA,IACd,aAAa,OAAO;AAAA,IACpB,WAAW,OAAO;AAAA,IAClB,QAAQ,OAAO;AAAA,EAChB;AAAA;AAAA;AA0HM,MAAM,cAAc,WAAW;AAAA,EACrC,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,MAAM,OAAO;AAAA;AAAA,EAQd,QAAQ,GAA4B;AAAA,IACnC,OAAO,KAAK,QAAwB,OAAO,WAAW;AAAA;AAAA,OAQjD,YAAW,CAAC,YAAyD;AAAA,IAC1E,OAAO,KAAK,cACX,OACA,uBAAuB,mBAAmB,UAAU,gBACrD;AAAA;AAAA,EAIQ,cAAmC,OAAO,OAClD,CAAC,SAAgC,CAAC,MACjC,KAAK,gBAAgB,MAAM,GAC5B;AAAA,IACC,MAAM,CACL,SAAgC,CAAC,MACC,KAAK,gBAAgB,MAAM;AAAA,IAC9D,MAAM,CAAC,SAAgC,CAAC,MACvC,KAAK,gBAAgB,MAAM;AAAA,EAC7B,CACD;AAAA,EAGS,eAAqC,OAAO,OACpD,CAAC,SAAiC,CAAC,MAClC,KAAK,iBAAiB,MAAM,GAC7B;AAAA,IACC,MAAM,CACL,SAAiC,CAAC,MACC,KAAK,iBAAiB,MAAM;AAAA,IAChE,MAAM,CAAC,SAAiC,CAAC,MACxC,KAAK,iBAAiB,MAAM;AAAA,EAC9B,CACD;AAAA,EAIS,SAA8B,OAAO,OAC7C,CACC,WACgC,KAAK,WAAW,MAAM,GACvD;AAAA,IACC,MAAO,CACN,WAEA,KAAK,WAAW,MAAM;AAAA,IACvB,MAAM,CACL,WACoC,KAAK,WAAW,MAAM;AAAA,IAC3D,SAAS,CAGR,WAEA,iBAA0D;AAAA,SACtD;AAAA,MACH,WAAW,GAAG,QAAQ,YAAY,YACjC,KAAK,WAAW;AAAA,WACZ,YAAY,MAAM;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ,OAAO;AAAA,MAChB,CAAC;AAAA,MACF,SAAS,CAAC,aAAa,SAAS;AAAA,IACjC,CAAC;AAAA,EACH,CACD;AAAA,EAES,gBAQL;AAAA,IACH,MAAM,CACL,SAAkC,CAAC,MACC,KAAK,kBAAkB,MAAM;AAAA,IAClE,MAAM,CACL,SAAkC,CAAC,MACG,KAAK,kBAAkB,MAAM;AAAA,IACpE,SAAS,CACR,WAEA,iBAAgE;AAAA,SAC5D;AAAA,MACH,WAAW,GAAG,QAAQ,YAAY,YACjC,KAAK,kBAAkB;AAAA,WACnB,YAAY,MAAM;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ,OAAO;AAAA,MAChB,CAAC;AAAA,MACF,SAAS,CAAC,aAAa,SAAS;AAAA,IACjC,CAAC;AAAA,EACH;AAAA,EAGS,YAGL;AAAA,IACH,MAAM,CAAC,SAA8B,CAAC,MACrC,KAAK,cAAc,MAAM;AAAA,IAC1B,MAAM,CACL,SAA8B,CAAC,MACS,KAAK,cAAc,MAAM;AAAA,EACnE;AAAA,EAGS,cAGL;AAAA,IACH,MAAM,CAAC,SAAgC,CAAC,MACvC,KAAK,gBAAgB,MAAM;AAAA,IAC5B,MAAM,CACL,SAAgC,CAAC,MACG,KAAK,gBAAgB,MAAM;AAAA,EACjE;AAAA,EAIS,SAIL;AAAA,IACH,MAAM,CAAC,SAA2B,CAAC,MAClC,KAAK,WAAW,MAAM;AAAA,IACvB,MAAM,CAAC,SAA2B,CAAC,MAClC,KAAK,WAAW,MAAM;AAAA,IACvB,KAAK,CAAC,QACL,KAAK,SAAS,GAAG;AAAA,EACnB;AAAA,EAIS,eAcL;AAAA,IACH,MAAM,CACL,SAAiC,CAAC,MACC,KAAK,iBAAiB,MAAM;AAAA,IAChE,MAAM,CACL,SAAiC,CAAC,MACG,KAAK,iBAAiB,MAAM;AAAA,IAClE,KAAK,CAAC,SACL,KAAK,eAAe,IAAI;AAAA,IACzB,UAAU,CAAC,SACV,KAAK,oBAAoB,IAAI;AAAA,EAC/B;AAAA,EAIS,WAGL;AAAA,IACH,MAAM,CAAC,SAA6B,CAAC,MACpC,KAAK,aAAa,MAAM;AAAA,IACzB,MAAM,CACL,SAA6B,CAAC,MACU,KAAK,aAAa,MAAM;AAAA,EAClE;AAAA,EAIS,UAML;AAAA,IACH,MAAM,CAAC,SAA4B,CAAC,MACnC,KAAK,YAAY,MAAM;AAAA,IACxB,MAAM,CACL,SAA4B,CAAC,MACe,KAAK,YAAY,MAAM;AAAA,IACpE,KAAK,CAAC,SACL,KAAK,aAAa,IAAI;AAAA,EACxB;AAAA,EAIS,OAAqB;AAAA,IAC7B,UAAU;AAAA,MACT,MAAM,CACL,SAAiC,CAAC,MACC,KAAK,iBAAiB,MAAM;AAAA,MAChE,MAAM,CACL,SAAiC,CAAC,MACG,KAAK,iBAAiB,MAAM;AAAA,MAClE,SAAS,CACR,WAEA,iBAA8D;AAAA,WAC1D;AAAA,QACH,WAAW,GAAG,QAAQ,YAAY,YACjC,KAAK,iBAAiB;AAAA,aAClB,YAAY,MAAM;AAAA,UACrB;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ,OAAO;AAAA,QAChB,CAAC;AAAA,QACF,SAAS,CAAC,aAAa,SAAS;AAAA,MACjC,CAAC;AAAA,MACF,KAAK,CAAC,gBACL,KAAK,eAAe,WAAW;AAAA,IACjC;AAAA,IACA,aAAa;AAAA,MACZ,MAAM,CACL,SAAoC,CAAC,MACC,KAAK,oBAAoB,MAAM;AAAA,MACtE,MAAM,CACL,SAAoC,CAAC,MACG,KAAK,oBAAoB,MAAM;AAAA,MACxE,KAAK,CAAC,cACL,KAAK,kBAAkB,SAAS;AAAA,IAClC;AAAA,IACA,QAAQ;AAAA,MACP,MAAM,CAAC,SAA+B,CAAC,MACtC,KAAK,eAAe,MAAM;AAAA,MAC3B,MAAM,CACL,SAA+B,CAAC,MACG,KAAK,eAAe,MAAM;AAAA,MAC9D,SAAS,CACR,WAEA,iBAA0D;AAAA,WACtD;AAAA,QACH,WAAW,GAAG,QAAQ,YAAY,YACjC,KAAK,eAAe;AAAA,aAChB,YAAY,MAAM;AAAA,UACrB;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ,OAAO;AAAA,QAChB,CAAC;AAAA,QACF,SAAS,CAAC,aAAa,SAAS;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,IACA,SAAS,MAAoC,KAAK,eAAe;AAAA,EAClE;AAAA,EAIS,MAAmB;AAAA,IAC3B,QAAQ;AAAA,MACP,MAAM,CAAC,SAA8B,CAAC,MACrC,KAAK,cAAc,MAAM;AAAA,MAC1B,MAAM,CAAC,SAA8B,CAAC,MACrC,KAAK,cAAc,MAAM;AAAA,MAC1B,KAAK,CAAC,gBACL,KAAK,YAAY,WAAW;AAAA,IAC9B;AAAA,EACD;AAAA,EAIS,OAAqB;AAAA,IAC7B,QAAQ;AAAA,MACP,MAAM,CAAC,SAA+B,CAAC,MACtC,KAAK,eAAe,MAAM;AAAA,MAC3B,MAAM,CACL,SAA+B,CAAC,MACG,KAAK,eAAe,MAAM;AAAA,MAC9D,SAAS,CACR,WAEA,iBAA0D;AAAA,WACtD;AAAA,QACH,WAAW,GAAG,QAAQ,YAAY,YACjC,KAAK,eAAe;AAAA,aAChB,YAAY,MAAM;AAAA,UACrB;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ,OAAO;AAAA,QAChB,CAAC;AAAA,QACF,SAAS,CAAC,aAAa,SAAS;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,EACD;AAAA,EAIS,QAAuB;AAAA,IAC/B,MAAM,CAAC,SAA0B,CAAC,MACjC,KAAK,UAAU,MAAM;AAAA,IACtB,KAAK,CAAC,SAAgD,KAAK,QAAQ,IAAI;AAAA,IACvE,UAAU,CAAC,WACV,KAAK,iBAAiB,MAAM;AAAA,IAC7B,UAAU;AAAA,MACT,MAAM,CACL,SAAiC,CAAC,MACC,KAAK,iBAAiB,MAAM;AAAA,MAChE,MAAM,CACL,SAAiC,CAAC,MACC,KAAK,iBAAiB,MAAM;AAAA,IACjE;AAAA,EACD;AAAA,OAEc,gBAAe,CAC5B,SAAgD,CAAC,GAClB;AAAA,IAC/B,OAAO,KAAK,QACX,OACA,yBAAyB,WAAW;AAAA,SAChC,eAAe,MAAM;AAAA,MACxB,aAAa,OAAO;AAAA,MACpB,kBAAkB,OAAO;AAAA,MACzB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,IACnB,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,OAGa,iBAAgB,CAC7B,SAAiD,CAAC,GAClB;AAAA,IAChC,OAAO,KAAK,QACX,OACA,0BAA0B,WAAW;AAAA,SACjC,eAAe,MAAM;AAAA,MACxB,aAAa,OAAO;AAAA,MACpB,kBAAkB,OAAO;AAAA,MACzB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,IACnB,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,SAYc,UAId,CACA,QAKA,MACA,SACoB;AAAA,IACpB,MAAM,YAAY,OAAO,aAAa;AAAA,IACtC,IACC,CAAC,OAAO,UAAU,SAAS,KAC3B,YAAY,KACZ,YAAY,qBACX;AAAA,MACD,MAAM,IAAI,gBACT,+CAA+C,gEAAgE,cAC/G,GACD;AAAA,IACD;AAAA,IAGA,IAAI,SACH,OAAO,UAAW,OAAO,cAAuC;AAAA,IACjE,IAAI,YAAY;AAAA,IAIhB,MAAM,iBAAiB,MAAM;AAAA,MAC5B,IAAI,OAAO,QAAQ;AAAA,QAAS,MAAM,OAAO,OAAO,UAAU,WAAW;AAAA;AAAA,IAGtE,UAAS;AAAA,MACR,eAAe;AAAA,MACf,MAAM,OAAsB;AAAA,QAC3B,OAAO;AAAA,QACP,QAAQ,YAAY,OAAO,SAAS;AAAA,QACpC,YAAY,YAAY,OAAO,aAAa;AAAA,QAC5C,YAAY,YAAY,oBAAoB,MAAM,IAAI;AAAA,QACtD,QAAQ,OAAO;AAAA,MAChB;AAAA,MACA,MAAM,WAAW,MAAM,mBAAmB,MAAM,KAAK,IAAI,GAAG;AAAA,QAC3D,YAAY,OAAO;AAAA,QACnB,YAAY,OAAO;AAAA,QACnB,SAAS,OAAO;AAAA,QAChB,OAAO;AAAA,QACP,QAAQ,OAAO;AAAA,MAChB,CAAC;AAAA,MAED,MAAM,QAAQ,QAAQ,QAAQ;AAAA,MAC9B,WAAW,QAAQ,OAAO;AAAA,QACzB,eAAe;AAAA,QACf,MAAM;AAAA,MACP;AAAA,MAEA,MAAM,aAAa,SAAS;AAAA,MAC5B,IAAI,eAAe,QAAQ,eAAe;AAAA,QAAW;AAAA,MACrD,IAAI,eAAe;AAAA,QAAQ;AAAA,MAE3B,SAAS;AAAA,MACT,YAAY;AAAA,IACb;AAAA;AAAA,EAGO,eAAe,CACtB,SAAgC,CAAC,GACJ;AAAA,IAC7B,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,gBAAgB,KAAK,WAAW,KAAK,CAAC,GACrD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,EAGO,gBAAgB,CACvB,SAAiC,CAAC,GACJ;AAAA,IAC9B,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,iBAAiB,KAAK,WAAW,KAAK,CAAC,GACtD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,WAAoC,CACjD,QAC6B;AAAA,IAC7B,OAAO,KAAK,QACX,OACA,mBAAmB,WAAW;AAAA,SAC1B,eAAe,MAAM;AAAA,MACxB,YAAY,OAAO;AAAA,MACnB,aAAa,OAAO;AAAA,MACpB,kBAAkB,OAAO;AAAA,MACzB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,MAElB,eAAe,OAAO;AAAA,MACtB,QAAQ,OAAO;AAAA,MACf,KAAK,OAAO;AAAA,MACZ,UAAU,OAAO;AAAA,MACjB,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,YAAY,OAAO,YAAY,SAAS;AAAA,IACzC,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,EAGO,UAAoC,CAC3C,QACkC;AAAA,IAClC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,WAAW,KAAK,WAAW,KAAK,CAAC,GAChD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,kBAAiB,CAC9B,SAAkD,CAAC,GAClB;AAAA,IACjC,OAAO,KAAK,QACX,OACA,2BAA2B,WAAW;AAAA,SAClC,eAAe,MAAM;AAAA,MACxB,aAAa,OAAO;AAAA,MACpB,eAAe,OAAO;AAAA,MACtB,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,IACf,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,EAGO,iBAAiB,CACxB,SAAkC,CAAC,GACC;AAAA,IACpC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,kBAAkB,KAAK,WAAW,KAAK,CAAC,GACvD,CAAC,MAAM,EAAE,cACV;AAAA;AAAA,OAGa,cAAa,CAC1B,SAA8C,CAAC,GAClB;AAAA,IAC7B,OAAO,KAAK,QACX,OACA,sBAAsB,WAAW,eAAe,MAAM,CAAC,KACvD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,EAGO,aAAa,CACpB,SAA8B,CAAC,GACO;AAAA,IACtC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,cAAc,KAAK,WAAW,KAAK,CAAC,GACnD,CAAC,MAAM,EAAE,SACV;AAAA;AAAA,OAGa,gBAAe,CAC5B,SAAgD,CAAC,GAClB;AAAA,IAC/B,OAAO,KAAK,QACX,OACA,yBAAyB,WAAW;AAAA,SAChC,eAAe,MAAM;AAAA,MACxB,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,YAAY,OAAO,YAAY,SAAS;AAAA,IACzC,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,EAGO,eAAe,CACtB,SAAgC,CAAC,GACC;AAAA,IAClC,OAAO,KAAK,WACX,QACA,CAAC,SACA,KAAK,gBAAgB;AAAA,SACjB;AAAA,SACA;AAAA,MAGH,YACC,OAAO,gBAAgB,YAAY,KAAK,aAAa;AAAA,IACvD,CAAC,GACF,CAAC,MAAM,EAAE,YACV;AAAA;AAAA,OAGa,WAAU,CACvB,SAA2C,CAAC,GAClB;AAAA,IAC1B,OAAO,KAAK,QACX,OACA,mBAAmB,WAAW,eAAe,MAAM,CAAC,KACpD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,OAGa,SAAQ,CAAC,KAAqD;AAAA,IAC3E,OAAO,KAAK,cACX,OACA,oBAAoB,mBAAmB,OAAO,GAAG,CAAC,GACnD;AAAA;AAAA,EAGO,UAAU,CACjB,SAA2B,CAAC,GACC;AAAA,IAC7B,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,WAAW,KAAK,WAAW,KAAK,CAAC,GAChD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,iBAAgB,CAC7B,SAAiD,CAAC,GAClB;AAAA,IAChC,OAAO,KAAK,QACX,OACA,yBAAyB,WAAW;AAAA,SAChC,eAAe,MAAM;AAAA,MACxB,MAAM,OAAO;AAAA,MACb,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,IACrB,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,OAGa,eAAc,CAC3B,MACsC;AAAA,IACtC,OAAO,KAAK,cACX,OACA,0BAA0B,mBAAmB,IAAI,GAClD;AAAA;AAAA,OAOa,oBAAmB,CAChC,MACmC;AAAA,IACnC,OAAO,KAAK,cACX,OACA,0BAA0B,mBAAmB,IAAI,SAClD;AAAA;AAAA,EAGO,gBAAgB,CACvB,SAAiC,CAAC,GACC;AAAA,IACnC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,iBAAiB,KAAK,WAAW,KAAK,CAAC,GACtD,CAAC,MAAM,EAAE,YACV;AAAA;AAAA,OAGa,aAAY,CACzB,SAA6C,CAAC,GAClB;AAAA,IAC5B,OAAO,KAAK,QACX,OACA,qBAAqB,WAAW;AAAA,SAC5B,eAAe,MAAM;AAAA,MACxB,eAAe,OAAO;AAAA,MACtB,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,IAChB,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,EAGO,YAAY,CACnB,SAA6B,CAAC,GACQ;AAAA,IACtC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,aAAa,KAAK,WAAW,KAAK,CAAC,GAClD,CAAC,MAAM,EAAE,QACV;AAAA;AAAA,OAGa,YAAW,CACxB,SAA4C,CAAC,GAClB;AAAA,IAC3B,OAAO,KAAK,QACX,OACA,oBAAoB,WAAW;AAAA,SAC3B,eAAe,MAAM;AAAA,MACxB,QAAQ,OAAO;AAAA,MACf,MAAM,OAAO;AAAA,MACb,aAAa,OAAO;AAAA,MACpB,eAAe,OAAO;AAAA,IACvB,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,OAGa,aAAY,CACzB,MAC6C;AAAA,IAC7C,OAAO,KAAK,cACX,OACA,qBAAqB,mBAAmB,IAAI,GAC7C;AAAA;AAAA,EAGO,WAAW,CAClB,SAA4B,CAAC,GACa;AAAA,IAE1C,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,YAAY,KAAK,WAAW,KAAK,CAAC,GACjD,CAAC,MAAM,EAAE,OACV;AAAA;AAAA,OAGa,iBAAgB,CAC7B,SAAiD,CAAC,GAClB;AAAA,IAChC,OAAO,KAAK,QACX,OACA,0BAA0B,WAAW;AAAA,SACjC,eAAe,MAAM;AAAA,MACxB,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO;AAAA,MACf,cAAc,OAAO;AAAA,IACtB,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,EAGO,gBAAgB,CACvB,SAAiC,CAAC,GACC;AAAA,IACnC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,iBAAiB,KAAK,WAAW,KAAK,CAAC,GACtD,CAAC,MAAM,EAAE,QACV;AAAA;AAAA,OAGa,eAAc,CAC3B,aACsC;AAAA,IACtC,OAAO,KAAK,cACX,OACA,2BAA2B,mBAAmB,WAAW,GAC1D;AAAA;AAAA,OAGa,oBAAmB,CAChC,SAAoD,CAAC,GAClB;AAAA,IACnC,OAAO,KAAK,QACX,OACA,6BAA6B,WAAW;AAAA,SACpC,eAAe,MAAM;AAAA,MACxB,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,MACf,YAAY,OAAO;AAAA,MACnB,sBAAsB,OAAO;AAAA,IAC9B,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,EAGO,mBAAmB,CAC1B,SAAoC,CAAC,GACC;AAAA,IACtC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,oBAAoB,KAAK,WAAW,KAAK,CAAC,GACzD,CAAC,MAAM,EAAE,WACV;AAAA;AAAA,OAGa,kBAAiB,CAC9B,WACyC;AAAA,IACzC,OAAO,KAAK,cACX,OACA,8BAA8B,WAC/B;AAAA;AAAA,OAGa,eAAc,CAC3B,SAA+C,CAAC,GAClB;AAAA,IAC9B,OAAO,KAAK,QACX,OACA,wBAAwB,WAAW;AAAA,SAC/B,eAAe,MAAM;AAAA,MACxB,WAAW,OAAO;AAAA,MAClB,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,YAAY,OAAO;AAAA,MACnB,cAAc,OAAO;AAAA,IACtB,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,EAGO,cAAc,CACrB,SAA+B,CAAC,GACC;AAAA,IACjC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,eAAe,KAAK,WAAW,KAAK,CAAC,GACpD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,eAAc,GAAiC;AAAA,IAC5D,OAAO,KAAK,QAA6B,OAAO,wBAAwB;AAAA;AAAA,OAG3D,eAAc,CAC3B,SAA+C,CAAC,GAClB;AAAA,IAC9B,OAAO,KAAK,QACX,OACA,wBAAwB,WAAW;AAAA,SAC/B,eAAe,MAAM;AAAA,MACxB,WAAW,OAAO;AAAA,MAClB,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,MACf,gBAAgB,OAAO;AAAA,MACvB,YAAY,OAAO;AAAA,MACnB,cAAc,OAAO;AAAA,IACtB,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,EAGO,cAAc,CACrB,SAA+B,CAAC,GACC;AAAA,IACjC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,eAAe,KAAK,WAAW,KAAK,CAAC,GACpD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,cAAa,CAC1B,SAA8C,CAAC,GAClB;AAAA,IAC7B,OAAO,KAAK,QACX,OACA,uBAAuB,WAAW;AAAA,MACjC,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,IACf,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,EAKO,aAAa,CACpB,SAA8B,CAAC,GACC;AAAA,IAChC,OAAO,KAAK,WACX,QACA,CAAC,SACA,KAAK,cAAc;AAAA,MAClB,QAAQ,KAAK;AAAA,MACb,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,IACd,CAAC,GACF,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,YAAW,CACxB,aACmC;AAAA,IACnC,OAAO,KAAK,cACX,OACA,wBAAwB,aACzB;AAAA;AAAA,OAGa,UAAS,CACtB,SAA0C,CAAC,GAClB;AAAA,IACzB,OAAO,KAAK,QACX,OACA,kBAAkB,WAAW;AAAA,MAC5B,QAAQ,OAAO;AAAA,MACf,MAAM,OAAO;AAAA,MACb,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,IACf,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,OAGa,QAAO,CAAC,MAA6C;AAAA,IAClE,OAAO,KAAK,cACX,OACA,mBAAmB,mBAAmB,IAAI,GAC3C;AAAA;AAAA,OAGa,iBAAgB,CAC7B,SAAiD,CAAC,GAClB;AAAA,IAChC,OAAO,KAAK,QACX,OACA,2BAA2B,WAAW;AAAA,SAClC,eAAe,MAAM;AAAA,MACxB,MAAM,OAAO;AAAA,MACb,SAAS,OAAO;AAAA,MAChB,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,IACd,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAAA,EAGO,gBAAgB,CACvB,SAAiC,CAAC,GACD;AAAA,IACjC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,iBAAiB,KAAK,WAAW,KAAK,CAAC,GACtD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,iBAAgB,CAC7B,QACgC;AAAA,IAChC,OAAO,KAAK,QACX,OACA,2BAA2B,WAAW;AAAA,MACrC,SAAS,OAAO;AAAA,MAChB,UAAU,OAAO;AAAA,MACjB,MAAM,OAAO;AAAA,MACb,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,IACf,CAAC,KACD,WACA,EAAE,QAAQ,OAAO,OAAO,CACzB;AAAA;AAEF;;;AC1oFA,oBAAS;;;ACAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBO,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,uBAAS;AACT;AAqBO,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,EAOR,eAAe,QAAQ,CAAC,MAA4C;AAAA,IACnE,OAAO,mBAAmB,MAAM,aAAa,IAAI,GAAG;AAAA,MACnD,OAAO;AAAA,IACR,CAAC;AAAA;AAAA,EAGF,eAAe,YAAY,CAAC,MAA4C;AAAA,IACvE,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,IAAI,CAAC,IAAI,MAAM;AAAA,MACd,MAAM,IAAI,mBACT,QAAQ,KAAK,8BACb,CACD;AAAA,IACD;AAAA,IACA,MAAM,OAAO,YAAW,QAAQ;AAAA,IAChC,MAAM,SAAuB,CAAC;AAAA,IAC9B,IAAI,QAAQ;AAAA,IACZ,MAAM,SAAS,IAAI,KAAK,UAAU;AAAA,IAClC,IAAI;AAAA,MACH,OAAO,MAAM;AAAA,QACZ,QAAQ,OAAO,SAAS,MAAM,OAAO,KAAK;AAAA,QAC1C,IAAI;AAAA,UAAM;AAAA,QACV,KAAK,OAAO,KAAK;AAAA,QACjB,OAAO,KAAK,KAAK;AAAA,QACjB,SAAS,MAAM;AAAA,MAChB;AAAA,MACC,MAAM;AAAA,MAGP,MAAM,IAAI,mBACT,oBAAoB,KAAK,8BAA8B,gBACvD,CACD;AAAA;AAAA,IAED,MAAM,SAAS,KAAK,OAAO,KAAK;AAAA,IAChC,IAAI,WAAW,KAAK,QAAQ;AAAA,MAC3B,MAAM,IAAI,sBACT,QAAQ,KAAK,kCAAkC,KAAK,eAAe,UACpE;AAAA,IACD;AAAA,IACA,IAAI,OAAO,WAAW,KAAK,OAAO;AAAA,MAAI,OAAO,OAAO;AAAA,IACpD,MAAM,QAAQ,IAAI,WAAW,KAAK;AAAA,IAClC,IAAI,SAAS;AAAA,IACb,WAAW,SAAS,QAAQ;AAAA,MAC3B,MAAM,IAAI,OAAO,MAAM;AAAA,MACvB,UAAU,MAAM;AAAA,IACjB;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,OAAO,EAAE,MAAM,SAAS,SAAS;AAAA;;;AC/IlC;AAiDO,IAAM,mCAAmC;AAGzC,IAAM,mCAAmC;AAQzC,SAAS,cAAc,CAC7B,SACA,QACA,mBACA,SAAuB,KAAK,QACnB;AAAA,EACT,MAAM,SAAS,KAAK,IACnB,SAAS,KAAK,KAAK,IAAI,GAAG,OAAO,GACjC,gCACD;AAAA,EACA,MAAM,WAAW,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5C,MAAM,SAAS,qBAAqB,KAAK;AAAA,EACzC,OAAO,KAAK,IAAI,UAAU,KAAK;AAAA;AAIhC,SAAS,UAAU,CAAC,KAAuB;AAAA,EAC1C,IAAI,eAAe;AAAA,IAAuB,OAAO;AAAA,EACjD,OAAQ,KAAwC,cAAc;AAAA;AAYxD,SAAS,sBAAsB,CAAC,MAwBf;AAAA,EACvB,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,cAAc,KAAK,oBAAoB,OAAO,oBAAoB;AAAA,EACxE,MAAM,eACL,KAAK,gBACL,OAAO,gBACP;AAAA,EAED,IAAI,UAAU;AAAA,EAEd,MAAM,MAAM,YAA2B;AAAA,IACtC,OAAO,CAAC,WAAW,OAAO,SAAS;AAAA,MAClC,IAAI;AAAA,QACH,MAAM,MAAM,GAAG,KAAK,mCAAmC,WAAW;AAAA,UACjE,OAAO,OAAO,UAAU,YAAY,YAAY;AAAA,UAChD,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,MAAM,OAAO;AAAA,UACb,SAAS,OAAO;AAAA,UAGhB,SAAS,OAAO,UAAU,KAAK,UAAU,OAAO,OAAO,IAAI;AAAA,QAC5D,CAAC;AAAA,QACD,MAAM,QAAQ;AAAA,UACb;AAAA,UACA,SAAS,KAAK,WAAW,CAAC;AAAA,UAC1B,QAAQ,WAAW;AAAA,UACnB,WAAW,KAAK;AAAA,UAChB;AAAA,UACA,UAAU;AAAA,UACV,SAAS,OAAO,UAAU;AAAA,YAEzB,UAAU;AAAA,YACV,IAAI,MAAM,UAAU,UAAU,CAAC,MAAM;AAAA,cAAM;AAAA,YAC3C,IAAI;AAAA,YACJ,IAAI;AAAA,cACH,SAAS,KAAK,MAAM,MAAM,IAAI;AAAA,cAC7B,MAAM;AAAA,cACP;AAAA;AAAA,YAED,IAAI,CAAC,OAAO;AAAA,cAAO;AAAA,YACnB,IAAI,KAAK,WAAW,OAAO;AAAA,cAC1B,IAAI,CAAC,OAAO,KAAK;AAAA,gBAGhB,IAAI,KAAK,WAAW,UAAU;AAAA,kBAC7B,MAAM,IAAI,sBACT,yCACD;AAAA,gBACD;AAAA,cACD,EAAO;AAAA,gBAIN,MAAM,MAAM,MAAM,KAAK,QAAQ,OAAO,MAAM;AAAA,gBAG5C,IACC,CAAC,QAAQ,cACR,KAAK,UAAU,OAAO,KAAK,GAC3B,OAAO,KACP,IAAI,SACL,GACC;AAAA,kBACD,MAAM,IAAI,sBACT,yCACD;AAAA,gBACD;AAAA;AAAA,YAEF;AAAA,YAIA,MAAM,OAAO,QAAQ,OAAO,KAAK;AAAA,YACjC,SAAU,OAAO,MAA8B,UAAU;AAAA;AAAA,QAE3D,CAAC;AAAA,QAID,MAAM,MACL,eAAe,SAAS,aAAa,WAAW,KAAK,MAAM,GAC3D,WAAW,MACZ;AAAA,QACA,WAAW;AAAA,QACV,OAAO,KAAK;AAAA,QACb,IAAI,WAAW,OAAO;AAAA,UAAS;AAAA,QAC/B,OAAO,UAAU,GAAG;AAAA,QACpB,IAAI,WAAW,GAAG;AAAA,UAAG,MAAM;AAAA,QAC3B,MAAM,oBAAqB,IACzB;AAAA,QACF,MAAM,MACL,eAAe,SAAS,aAAa,mBAAmB,KAAK,MAAM,GACnE,WAAW,MACZ;AAAA,QACA,WAAW;AAAA;AAAA,IAEb;AAAA;AAAA,EAED,MAAM,OAAO,IAAI;AAAA,EAGjB,KAAK,MAAM,MAAM,EAAE;AAAA,EACnB,MAAM,cAAc,MAAM,WAAW,MAAM;AAAA,EAC3C,OAAO,OAAO,OAAO,aAAa,EAAE,KAAK,CAAC;AAAA;AAgB3C,eAAsB,OAAO,CAAC,MAQZ;AAAA,EACjB,MAAM,MAAM,MAAM,KAAK,UAAU,KAAK,KAAK;AAAA,IAC1C,SAAS,KAAM,KAAK,WAAW,CAAC,GAAI,QAAQ,oBAAoB;AAAA,IAChE,QAAQ,KAAK;AAAA,EACd,CAAC;AAAA,EACD,IAAI,CAAC,IAAI,IAAI;AAAA,IACZ,IAAI,KAAK;AAAA,MAAU,MAAM,KAAK,SAAS,GAAG;AAAA,IAC1C,MAAM,IAAI,mBACT,wBAAwB,IAAI,WAC5B,IAAI,MACL;AAAA,EACD;AAAA,EACA,IAAI,CAAC,IAAI,MAAM;AAAA,IACd,MAAM,IAAI,mBAAmB,qCAAqC,CAAC;AAAA,EACpE;AAAA,EACA,iBAAiB,SAAS,eACzB,IAAI,MACJ,KAAK,QACL,KAAK,YACN,GAAG;AAAA,IACF,MAAM,KAAK,QAAQ,KAAK;AAAA,EACzB;AAAA;AAGD,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;AAKF,eAAe,kBAA0D,CACxE,QACA,cAC0C;AAAA,EAC1C,IAAI,iBAAiB,aAAa,CAAC,OAAO,SAAS,YAAY,GAAG;AAAA,IACjE,OAAO,OAAO,KAAK;AAAA,EACpB;AAAA,EACA,IAAI;AAAA,EACJ,MAAM,QAAQ,IAAI,QAAe,CAAC,GAAG,WAAW;AAAA,IAC/C,QAAQ,WACP,MACC,OACC,IAAI,mBACH,8BAA8B,kCAC9B,GACA,WACA,cACD,CACD,GACD,YACD;AAAA,GACA;AAAA,EACD,IAAI;AAAA,IACH,OAAQ,MAAM,QAAQ,KAAK,CAAC,OAAO,KAAK,GAAG,KAAK,CAAC;AAAA,YAGhD;AAAA,IACD,aAAa,KAAK;AAAA;AAAA;AAIpB,gBAAgB,cAAc,CAC7B,MACA,QACA,cAC2B;AAAA,EAC3B,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,mBAAmB,QAAQ,YAAY;AAAA,MACrE,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,KAAuB;AAAA,EAC1C,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;;;AHlUrE,SAAS,WAAW,CAAC,QAAyC;AAAA,EAC7D,IAAI,CAAC;AAAA,IAAQ,OAAO,CAAC,IAAI,EAAE;AAAA,EAC3B,QAAQ,aAAa,eAAe,OAAO,MAAM,MAAM;AAAA,EACvD,OAAO,CAAC,aAAa,UAAU;AAAA;AAIhC,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;AAUjD,SAAS,cAAc,CAAC,QAerB;AAAA,EACF,OAAO;AAAA,IACN,OAAO,OAAO;AAAA,IACd,OAAO,OAAO;AAAA,IACd,UAAU,OAAO;AAAA,IACjB,YAAY,OAAO;AAAA,IACnB,QAAQ,OAAO;AAAA,IACf,WAAW,OAAO;AAAA,IAClB,iBAAiB,OAAO;AAAA,IACxB,MAAM,OAAO;AAAA,IACb,SAAS,OAAO;AAAA,IAChB,SAAS,OAAO;AAAA,EACjB;AAAA;AA0CD,SAAS,gBAAgB,CAAC,SAAyB;AAAA,EAClD,OAAO,QAAQ,QAAQ,QAAQ,EAAE;AAAA;AAMlC,SAAS,aAAa,CAAC,SAA0B;AAAA,EAChD,IAAI;AAAA,IACH,QAAQ,aAAa,IAAI,IAAI,OAAO;AAAA,IACpC,OACC,aAAa,eACb,aAAa,eACb,aAAa,SACb,aAAa,WACb,SAAS,WAAW,MAAM;AAAA,IAE1B,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIF,SAAS,mBAAmB,CAClC,SACgB;AAAA,EAChB,MAAM,UAAU,iBAAiB,eAAe,QAAQ,OAAO,CAAC;AAAA,EAIhE,MAAM,SAAS,cAAc,QAAQ,QAAQ,OAAO;AAAA,EACpD,MAAM,SAAS,QAAQ,UAAU;AAAA,EACjC,MAAM,cAAc,OAA+B;AAAA,IAClD,eAAe;AAAA,OACX,SAAS,EAAE,eAAe,UAAU,SAAS,IAAI,CAAC;AAAA,EACvD;AAAA,EACA,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,EAI/D,IACC,WAAW,QACX,QAAQ,WAAW,OAAO,KAC1B,CAAC,cAAc,OAAO,GACrB;AAAA,IACD,MAAM,IAAI,gBACT,mCAAmC,2KACnC,GACD;AAAA,EACD;AAAA,EAYA,IAAI,aAA8C;AAAA,EAClD,SAAS,OAAO,GAA6B;AAAA,IAC5C,IAAI;AAAA,MAAY,OAAO;AAAA,IACvB,MAAM,WAAW,YAAY;AAAA,MAC5B,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,IAAI;AAAA,MACJ,IAAI;AAAA,QACH,MAAM,MAAM,UAAU,GAAG,oCAAoC;AAAA,QAC5D,MAAM;AAAA,QACP,MAAM,IAAI,mBACT,sCAAsC,kDACtC,GACA,WACA,yBACD;AAAA;AAAA,MAED,IAAI,CAAC,IAAI,IAAI;AAAA,QACZ,IAAI,IAAI,UAAU,OAAO,IAAI,WAAW,KAAK;AAAA,UAC5C,MAAM,IAAI,mBACT,gCAAgC,IAAI,uBACpC,IAAI,QACJ,WACA,yBACD;AAAA,QACD;AAAA,QACA,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,aAAa;AAAA,IACb,QAAQ,MAAM,MAAM;AAAA,MACnB,IAAI,eAAe;AAAA,QAAS,aAAa;AAAA,KACzC;AAAA,IACD,OAAO;AAAA;AAAA,EAKR,eAAe,UAAU,CACxB,eAC2B;AAAA,IAC3B,IAAI,MAAM,MAAM,QAAQ;AAAA,IACxB,IAAI,CAAC,iBAAiB,kBAAkB,IAAI;AAAA,MAAO,OAAO;AAAA,IAC1D,IAAI,OAAO,WAAW,UAAU;AAAA,MAC/B,MAAM,IAAI,sBACT,6BAA6B,wCAAwC,IAAI,SAC1E;AAAA,IACD;AAAA,IAGA,aAAa;AAAA,IACb,MAAM,MAAM,QAAQ;AAAA,IACpB,IAAI,kBAAkB,IAAI,OAAO;AAAA,MAChC,MAAM,IAAI,sBACT,6BAA6B,wDAC9B;AAAA,IACD;AAAA,IACA,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,YAAY;AAAA,IACtB,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,MAAM,MAAM,WAAW,SAAS,QAAQ,IAAI,mBAAmB,CAAC;AAAA,QAGtE,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,EAQvB,MAAM,cAAoC,CAAC,WAC1C,WAAW,MAAiC;AAAA,EAE7C,SAAS,MAAM,CAAC,MAAc,MAAyC;AAAA,IACtE,OAAO,QACN,sBAAsB,mBAAmB,IAAI,IAAI,WAAW;AAAA,MAC3D,OAAO,MAAM,UAAU,YAAY,YAAY;AAAA,IAChD,CAAC,GACF;AAAA;AAAA,EAGD,SAAS,UAAU,CAClB,QACC;AAAA,IACD,OAAO,QACN,qBAAqB,WAAW;AAAA,MAC/B,OAAO,OAAO,UAAU,YAAY,YAAY;AAAA,MAChD,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,IACf,CAAC,GACF;AAAA;AAAA,EAID,MAAM,cAAc,CAAC,WAA8B,WAAW,MAAM;AAAA,EAEpE,SAAS,aAAa,CAAC,SAAuC;AAAA,IAC7D,OAAO,UAAU,KAAK,UAAU,OAAO,IAAI;AAAA;AAAA,EAG5C,eAAe,UAAU,CACxB,SAAkC,CAAC,GACF;AAAA,IACjC,IAAI,OAAO,UAAU,WAAW;AAAA,MAC/B,OAAO,QACN,qBAAqB,WAAW;AAAA,QAC/B,OAAO;AAAA,QACP,QAAQ,OAAO;AAAA,QACf,aAAa,OAAO;AAAA,QACpB,WAAW,OAAO;AAAA,QAClB,OAAO,OAAO;AAAA,QACd,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,MACjB,CAAC,GACF;AAAA,IACD;AAAA,IACA,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,MAElB,OAAO,OAAO,UAAU,OAAO,OAAO;AAAA,MACtC,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,MAGA,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,SACnB,eAAe,MAAM;AAAA,MACxB,WAAW,OAAO,aAAa;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,kBAAkB,OAAO;AAAA,MACzB,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,MAChB,MAAM,OAAO;AAAA,IACd,CAAC;AAAA;AAAA,EASF,SAAS,cAAc,CACtB,SAA+B,CAAC,GACD;AAAA,IAC/B,OAAO,sBAAsB;AAAA,MAC5B,YAAY,OAAO;AAAA,MACnB,WAAW,OAAO,aAAa;AAAA,MAC/B,YAAY,OAAO,cAAc;AAAA,SAC9B,eAAe,MAAM;AAAA,MACxB,QAAQ,OAAO;AAAA,MACf;AAAA,IACD,CAAC;AAAA;AAAA,EAGF,SAAS,YAAY,CACpB,SAAoC,CAAC,GACP;AAAA,IAC9B,OAAO,oBAAoB;AAAA,MAC1B,YAAY,OAAO;AAAA,SAGhB,eAAe,MAAM;AAAA,MACxB,WAAW,OAAO,aAAa;AAAA,MAC/B,gBAAgB,OAAO;AAAA,MACvB,UAAU,OAAO;AAAA,MACjB,eAAe,OAAO;AAAA,MACtB,QAAQ,OAAO;AAAA,MACf;AAAA,IACD,CAAC;AAAA;AAAA,EAGF,SAAS,eAAe,CACvB,QACsB;AAAA,IACtB,OAAO,uBAAuB;AAAA,MAC7B;AAAA,MACA,SAAS,YAAY;AAAA,MACrB;AAAA,MACA,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,kBAAkB,OAAO;AAAA,MACzB,cAAc,OAAO;AAAA,MAKrB;AAAA,IACD,CAAC;AAAA;AAAA,EASF,SAAS,oBAAiC,CACzC,QAGsC;AAAA,IACtC,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;AAAA,MACP,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,MACjB,MAAM,OAAO;AAAA,MACb,SAAS,OAAO;AAAA,MAChB,WAAW,OAAO,aAAa;AAAA,MAC/B;AAAA,MACA;AAAA,MACA,SAAS,OAAO;AAAA,MAGhB,SAAS,OAAO;AAAA,MAChB,kBAAkB,OAAO;AAAA,MACzB,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,MAChB,MAAM,OAAO;AAAA,IACd,CAAC;AAAA;AAAA,EAOF,SAAS,qBAAkC,CAC1C,QAKsC;AAAA,IACtC,IAAI,OAAO,UAAU;AAAA,MAAW,OAAO,qBAAqB,MAAM;AAAA,IAClE,OAAO,cAAc,MAAM;AAAA;AAAA,EAG5B,OAAO;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,MAEP,MAAM;AAAA,MACN;AAAA,MACA,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,WAAW;AAAA,WACL,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,QAMlC,MAAM,QAAQ,SAAS,MACrB,OAAO,CAAC,SAAS,KAAK,YAAY,SAAS,EAC3C,OACA,CAAC,SACA,eAAe,QACf,KAAK,eAAe,QACpB,UAAU,YAAY,KAAK,UAAU,MAAM,UAC7C,EACC,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,MAAM,EAAE,MAAM,WAAW,CAAC;AAAA,QACnD;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,UAG/B,OAAO,OAAO;AAAA,UACd,UAAU,OAAO;AAAA,UACjB,SAAS,OAAO;AAAA,UAChB;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,QAAS,CACR,cACA,SAEA,QACC,sBAAsB,mBAAmB,OAAO,YAAY,CAAC,WAAW,WACvE,EAAE,OAAO,MAAM,UAAU,YAAY,YAAY,UAAU,CAC5D,GACD;AAAA,IACF;AAAA,IACA,QAAQ,EAAE,MAAM,WAA8C;AAAA,IAC9D;AAAA,IACA,WAAY,CAAC,QAAgB,SAC5B,QACC,yBAAyB,SAAS,WAAW;AAAA,MAC5C,OAAO,MAAM,UAAU,YAAY,YAAY;AAAA,IAChD,CAAC,GACF;AAAA,IACD,KAAM,CAAC,SACN,QACC,kBAAkB,WAAW;AAAA,MAC5B,OAAO,MAAM,UAAU,YAAY,YAAY;AAAA,IAChD,CAAC,GACF;AAAA,EACF;AAAA;;;AIxqBD,IAAM,oBAA4C;AAAA,EACjD,cAAc;AAAA,EACd,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,KAAK;AACN;AAOA,IAAM,wBAAgD;AAAA,EACrD,aAAa;AAAA,EACb,MAAM;AAAA,EACN,WAAW;AAAA,EACX,IAAI;AACL;AAWA,SAAS,aAAa,CAAC,KAAa,SAAmC;AAAA,EACtE,MAAM,YAAY,kBAAkB;AAAA,EACpC,IAAI;AAAA,IAAW,OAAO;AAAA,EACtB,IAAI,SAAS,IAAI,GAAG;AAAA,IAAG,OAAO;AAAA,EAC9B,OAAO,sBAAsB,QAAQ;AAAA;AAY/B,SAAS,cAAc,CAC7B,OACA,SACyB;AAAA,EACzB,MAAM,UAAkC,CAAC;AAAA,EAEzC,YAAY,QAAQ,UAAU,OAAO,QAAQ,KAAK,GAAG;AAAA,IACpD,IAAI,UAAU,QAAQ,UAAU;AAAA,MAAW;AAAA,IAE3C,MAAM,MAAM,cAAc,QAAQ,OAAO;AAAA,IAEzC,IAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,MACvD,MAAM,MAAM;AAAA,MACZ,YAAY,IAAI,YAAY,OAAO,QAAQ,GAAG,GAAG;AAAA,QAChD,IAAI,YAAY,QAAQ,YAAY;AAAA,UAAW;AAAA,QAC/C,IAAI,OAAO,MAAM;AAAA,UAChB,QAAQ,OAAO,OAAO,OAAO;AAAA,QAC9B,EAAO,SAAI,OAAO,QAAQ,OAAO,SAAS;AAAA,UAGzC,MAAM,MAAM,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAAA,UACvD,QAAQ,GAAG,OAAO,QAAQ,IAAI,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG;AAAA,QAC7D,EAAO,SAAI,CAAC,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,EAAE,SAAS,EAAE,GAAG;AAAA,UAClE,QAAQ,GAAG,OAAO,QAAQ,OAAO,OAAO;AAAA,QACzC;AAAA,MACD;AAAA,IACD,EAAO;AAAA,MACN,QAAQ,OAAO,OAAO,KAAK;AAAA;AAAA,EAE7B;AAAA,EAEA,OAAO;AAAA;AAOD,SAAS,oBAAoB,CACnC,KACA,SACS;AAAA,EACT,OAAO,cAAc,KAAK,OAAO;AAAA;;;ACAlC,IAAM,+BAA+B;AAIrC,SAAS,eAAe,CAAC,OAA6C;AAAA,EACrE,IAAI,CAAC,SAAS,OAAO,UAAU;AAAA,IAAU;AAAA,EACzC,MAAM,UAAW,MAAgC;AAAA,EACjD,IAAI,CAAC,WAAW,OAAO,YAAY;AAAA,IAAU;AAAA,EAC7C,OAAO,IAAI,IAAI,OAAO,KAAK,OAAO,CAAC;AAAA;AAMpC,SAAS,cAAc,CAAC,KAAkC;AAAA,EACzD,MAAM,IAAI;AAAA,EACV,MAAM,MAAM,EAAE,iBAAiB,EAAE;AAAA,EACjC,IAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ;AAAA,IAAU;AAAA,EACxD,MAAM,SAAS,OAAO,GAAG;AAAA,EACzB,OAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAAA;AAG3C,SAAS,MAAK,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,SAAS,wBAAwB,CAChC,QACS;AAAA,EACT,OAAO,WAAW;AAAA,IACjB,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,IACf,QAAQ,OAAO;AAAA,IACf,SAAS,OAAO;AAAA,OACb,OAAO;AAAA,EACX,CAAC;AAAA;AAGF,SAAS,yBAAyB,CAAC,QAAyC;AAAA,EAC3E,OAAO,WAAW;AAAA,OACd,OAAO;AAAA,IACV,QAAQ,OAAO,QAAQ,SAAS;AAAA,IAChC,gBAAgB,OAAO;AAAA,IACvB,MAAM,OAAO;AAAA,IACb,MAAM,OAAO;AAAA,IACb,MAAM,OAAO;AAAA,EACd,CAAC;AAAA;AAGF,SAAS,oBAAoB,CAAC,SAAuC;AAAA,EACpE,OAAO,WAAW,EAAE,QAAQ,SAAS,UAAU,CAAC;AAAA;AAAA;AAG1C,MAAM,kBAAkB,WAAW;AAAA,OACnC,KAAI,GAAyC;AAAA,IAClD,OAAO,KAAK,QAAqC,OAAO,gBAAgB;AAAA;AAAA,OAQnE,OAAM,CAAC,MAAuC;AAAA,IACnD,OAAO,KAAK,QAAwB,OAAO,kBAAkB,IAAI,IAAI,GAAG;AAAA;AAAA,OAGnE,QAAO,CACZ,MACA,SACmC;AAAA,IACnC,OAAO,KAAK,QACX,OACA,kBAAkB,IAAI,IAAI,iBAAiB,qBAAqB,OAAO,GACxE;AAAA;AAAA,OAGK,OAAM,CACX,MACA,SAC+B;AAAA,IAC/B,OAAO,KAAK,QACX,OACA,kBAAkB,IAAI,IAAI,gBAAgB,qBAAqB,OAAO,GACvE;AAAA;AAAA,OAGK,SAAQ,CAAC,MAAc,SAAgD;AAAA,IAC5E,OAAO,KAAK,YACX,OACA,kBAAkB,IAAI,IAAI,YAAY,qBAAqB,OAAO,GACnE;AAAA;AAAA,OAUK,QAAO,CAAC,MAAwC;AAAA,IACrD,OAAO,KAAK,QACX,QACA,kBAAkB,IAAI,IAAI,WAC3B;AAAA;AAAA,OAGK,KAAI,CACT,MACsE;AAAA,IACtE,OAAO,KAAK,QAIT,QAAQ,kBAAkB,IAAI,IAAI,QAAQ;AAAA;AAAA,OAKxC,SAAQ,CACb,MACA,SAC2B;AAAA,IAC3B,OAAO,KAAK,QACX,QACA,kBAAkB,IAAI,IAAI,cAC1B,OACD;AAAA;AAAA,OAGK,KAAI,CACT,MACA,MACgC;AAAA,IAChC,MAAM,KAAK,WAAW;AAAA,MACrB,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,UAAU,MAAM;AAAA,IACjB,CAAC;AAAA,IACD,OAAO,KAAK,QACX,OACA,kBAAkB,IAAI,IAAI,SAAS,IACpC;AAAA;AAAA,OAGK,OAAM,CACX,MACA,SAC+B;AAAA,IAC/B,MAAM,KAAK,WAAW,EAAE,OAAO,SAAS,QAAQ,OAAO,UAAU,CAAC;AAAA,IAClE,OAAO,KAAK,QACX,UACA,kBAAkB,IAAI,IAAI,IAAI,IAC/B;AAAA;AAAA,OAUK,KAAiB,CACtB,MACA,OACA,SAEI,CAAC,GAC8B;AAAA,IACnC,QAAQ,WAAW,SAAS;AAAA,IAC5B,MAAM,KAAK,yBAAyB,IAAI;AAAA,IACxC,MAAM,MAAM,KAAK,MAAM;AAAA,IACvB,MAAM,WAAW,SAAS,GAAG,aAAa,mBAAmB,MAAM,MAAM;AAAA,IACzE,OAAO,KAAK,QACX,OACA,iBAAiB,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,UACjD;AAAA;AAAA,OAIK,WAAU,CACf,MACqD;AAAA,IACrD,OAAO,KAAK,QACX,OACA,kBAAkB,IAAI,IAAI,cAC3B;AAAA;AAAA,OAKK,aAAY,CACjB,MACA,aACmC;AAAA,IACnC,OAAO,KAAK,QACX,OACA,kBAAkB,IAAI,IAAI,gBAAgB,IAAI,WAAW,GAC1D;AAAA;AAAA,OAMK,OAAM,CAAC,MAA8D;AAAA,IAC1E,OAAO,KAAK,QAAgC,QAAQ,kBAAkB,IAAI;AAAA;AAAA,OAGrE,UAAS,CAAC,MAAuC;AAAA,IACtD,OAAO,KAAK,QACX,OACA,kBAAkB,IAAI,IAAI,UAC3B;AAAA;AAAA,OAOK,OAAM,CAAC,MAAyD;AAAA,IACrE,OAAO,KAAK,QACX,QACA,yBACA,IACD;AAAA;AAAA,OAKK,MAAK,CACV,MACA,OACA,SAA+C,CAAC,GACnB;AAAA,IAC7B,OAAO,KAAK,QACX,OACA,iBAAiB,IAAI,IAAI,KAAK,IAAI,KAAK,UAAU,yBAAyB,MAAM,GACjF;AAAA;AAAA,OAKK,UAAS,CACd,MACA,OACA,SAAkC,CAAC,GACE;AAAA,IACrC,OAAO,KAAK,QACX,OACA,iBAAiB,IAAI,IAAI,KAAK,IAAI,KAAK,cAAc,0BAA0B,MAAM,GACtF;AAAA;AAAA,EAiBD,KAAkE,CACjE,KACyB;AAAA,IACzB,MAAM,SAAkC,CAAC;AAAA,IAEzC,YAAY,WAAW,UAAU,OAAO,QAAQ,IAAI,MAAM,GAAG;AAAA,MAC5D,OAAO,aAAa,KAAK,kBACxB,IAAI,MACJ,WACA,gBAAgB,KAAK,CACtB;AAAA,IACD;AAAA,IAEA,OAAO;AAAA;AAAA,EAUA,iBAAiB,CACxB,cACA,WACA,SACC;AAAA,IACD,MAAM,OAAO;AAAA,IAEb,OAAO;AAAA,WACA,SAAc,CACnB,UAEI,CAAC,GACyB;AAAA,QAC9B,MAAM,UAAU,QAAQ,QACrB,eAAe,QAAQ,OAAkC,OAAO,IAChE;AAAA,QAEH,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI,QAAQ,SAAS;AAAA,UAGpB,MAAM,UAAU,OAAO,QAAQ,QAAQ,OAAO;AAAA,UAI9C,IAAI,QAAQ,SAAS,GAAG;AAAA,YACvB,MAAM,IAAI,MACT,iDAAiD,QAAQ,WAAW,QAAQ,IAAI,EAAE,SAAS,GAAG,EAAE,KAAK,IAAI,oEAC1G;AAAA,UACD;AAAA,UACA,MAAM,QAAQ,QAAQ;AAAA,UACtB,IAAI,OAAO;AAAA,YACV,OAAO,KAAK,OAAO;AAAA,YACnB,OAAO,qBAAqB,KAAK,OAAO;AAAA,YACxC,QAAQ,OAAO;AAAA,UAChB;AAAA,QACD;AAAA,QAEA,MAAM,SAAS,MAAM,KAAK,KAAW,cAAc,WAAW;AAAA,UAC7D;AAAA,UACA;AAAA,UACA,OAAO,QAAQ;AAAA,UACf,QAAQ,QAAQ,QAAQ,KAAK,GAAG;AAAA,UAChC;AAAA,UACA,QAAQ,QAAQ;AAAA,QACjB,CAAC;AAAA,QACD,OAAO;AAAA,UACN,MAAM,OAAO;AAAA,UACb,YAAY,OAAO;AAAA,UACnB,KAAK,OAAO;AAAA,QACb;AAAA;AAAA,WAGK,MAAW,CAAC,OAA2C;AAAA,QAC5D,MAAM,UAAU,QACb,eAAe,OAAkC,OAAO,IACxD;AAAA,QAEH,MAAM,SAAS,MAAM,KAAK,MAAM,cAAc,WAAW;AAAA,UACxD;AAAA,QACD,CAAC;AAAA,QACD,OAAO,OAAO;AAAA;AAAA,WAGT,UAAoD,CACzD,MACoC;AAAA,QACpC,MAAM,UAAU,KAAK,QAClB,eAAe,KAAK,OAAkC,OAAO,IAC7D;AAAA,QAEH,MAAM,SAAS,MAAM,KAAK,UAAU,cAAc,WAAW;AAAA,UAC5D;AAAA,UACA,OAAO,KAAK;AAAA,UACZ,eAAe,KAAK;AAAA,UACpB,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,QACX,CAAC;AAAA,QACD,OAAO;AAAA;AAAA,MAYR,SAAe,CACd,OACA,UAAkC,CAAC,GACtB;AAAA,QACb,MAAM,UAAU,QAAQ,QACrB,eAAe,QAAQ,OAAkC,OAAO,IAChE,CAAC;AAAA,QACJ,MAAM,aAAa,IAAI;AAAA,QACvB,IAAI,QAA4B,QAAQ,SAAS;AAAA,QAEjD,MAAM,MAAM,YAA2B;AAAA,UACtC,OAAO,CAAC,WAAW,OAAO,SAAS;AAAA,YAClC,IAAI;AAAA,cACH,MAAM,KAAK,WAAW,KAAK,SAAS,MAAM,CAAC;AAAA,cAC3C,MAAM,QAAQ;AAAA,gBACb,KAAK,GAAG,KAAK,wBAAwB,IAAI,YAAY,KAAK,IAAI,SAAS,WAAW;AAAA,gBAClF,SAAS;AAAA,qBACL,WAAW,YAAY,KAAK,MAAM;AAAA,kBACrC,eAAe,KAAK;AAAA,gBACrB;AAAA,gBACA,QAAQ,WAAW;AAAA,gBACnB,WAAW,KAAK;AAAA,gBAChB,SAAS,CAAC,UAAU;AAAA,kBACnB,IAAI,MAAM,UAAU,UAAU,CAAC,MAAM;AAAA,oBAAM;AAAA,kBAC3C,IAAI;AAAA,kBACJ,IAAI;AAAA,oBACH,MAAM,KAAK,MAAM,MAAM,IAAI;AAAA,oBAC1B,MAAM;AAAA,oBACP;AAAA;AAAA,kBAED,MAAM,SAAS,eAAe,GAAG;AAAA,kBACjC,IAAI,WAAW;AAAA,oBAAW,QAAQ;AAAA,kBAClC,MAAM,GAAG;AAAA;AAAA,cAEX,CAAC;AAAA,cAID,MAAM,OAAM,8BAA8B,WAAW,MAAM;AAAA,cAC1D,OAAO,KAAK;AAAA,cACb,IAAI,WAAW,OAAO;AAAA,gBAAS;AAAA,cAC/B,QAAQ,UAAU,GAAG;AAAA,cACrB,MAAM,OAAM,8BAA8B,WAAW,MAAM;AAAA;AAAA,UAE7D;AAAA;AAAA,QAEI,IAAI;AAAA,QACT,OAAO,MAAM,WAAW,MAAM;AAAA;AAAA,IAEhC;AAAA;AAEF;;;ACjfA;AAAA;AAEO,MAAM,iBAAiB,WAAW;AAAA,OAClC,KAAI,GAAwC;AAAA,IACjD,OAAO,KAAK,QAAoC,OAAO,eAAe;AAAA;AAAA,OAGjE,IAAG,CAAC,IAAoC;AAAA,IAC7C,OAAO,KAAK,QAAuB,OAAO,iBAAiB,IAAI,EAAE,GAAG;AAAA;AAAA,OAG/D,OAAM,CAAC,OAA6D;AAAA,IACzE,OAAO,KAAK,QAA+B,QAAQ,iBAAiB,KAAK;AAAA;AAAA,OAGpE,OAAM,CACX,IACA,OACyB;AAAA,IACzB,OAAO,KAAK,QACX,SACA,iBAAiB,IAAI,EAAE,KACvB,KACD;AAAA;AAAA,OAGK,MAAK,CAAC,IAAoC;AAAA,IAC/C,OAAO,KAAK,QACX,QACA,iBAAiB,IAAI,EAAE,SACxB;AAAA;AAAA,OAGK,OAAM,CAAC,IAAoC;AAAA,IAChD,OAAO,KAAK,QACX,QACA,iBAAiB,IAAI,EAAE,UACxB;AAAA;AAAA,OAGK,OAAM,CAAC,IAAmC;AAAA,IAC/C,OAAO,KAAK,QAAsB,UAAU,iBAAiB,IAAI,EAAE,GAAG;AAAA;AAAA,OAGjE,aAAY,CAAC,IAA2C;AAAA,IAC7D,OAAO,KAAK,QACX,QACA,iBAAiB,IAAI,EAAE,iBACxB;AAAA;AAAA,OAKK,KAAI,CAAC,IAAwC;AAAA,IAClD,OAAO,KAAK,QACX,QACA,iBAAiB,IAAI,EAAE,QACxB;AAAA;AAAA,OAKK,WAAU,CAAC,IAA8C;AAAA,IAC9D,OAAO,KAAK,QACX,OACA,iBAAiB,IAAI,EAAE,cACxB;AAAA;AAAA,OAKK,SAAQ,CAAC,IAAsC;AAAA,IACpD,OAAO,KAAK,QACX,OACA,iBAAiB,IAAI,EAAE,YACxB;AAAA;AAAA,OAKK,SAAQ,CACb,IACA,YACiC;AAAA,IACjC,OAAO,KAAK,QACX,OACA,iBAAiB,IAAI,EAAE,gBAAgB,IAAI,UAAU,GACtD;AAAA;AAAA,OAGK,OAAM,CACX,IACA,OACwB;AAAA,IACxB,OAAO,KAAK,QACX,QACA,iBAAiB,IAAI,EAAE,YACvB,KACD;AAAA;AAAA,OAGK,KAAI,CAAC,IAA0C;AAAA,IACpD,OAAO,KAAK,QACX,OACA,iBAAiB,IAAI,EAAE,QACxB;AAAA;AAAA,OAKK,QAAO,CAAC,IAAY,UAAyC;AAAA,IAClE,OAAO,KAAK,QACX,QACA,iBAAiB,IAAI,EAAE,UAAU,IAAI,QAAQ,WAC9C;AAAA;AAEF;;;AC7EA,eAAsB,YAAe,CACpC,MAC2B;AAAA,EAC3B,IAAI;AAAA,IACH,OAAO,EAAE,OAAO,MAAM,KAAK;AAAA,IAC1B,OAAO,KAAK;AAAA,IACb,OAAO,EAAE,OAAO,MAAM,OAAO,qBAAqB,GAAG,EAAE;AAAA;AAAA;AAIzD,SAAS,oBAAoB,CAAC,KAAiC;AAAA,EAC9D,IAAI,eAAe,kBAAkB;AAAA,IACpC,OAAO;AAAA,MACN,SAAS,IAAI;AAAA,SACT,IAAI,SAAS,YAAY,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;AAAA,SAC/C,eAAe,WAAW,EAAE,QAAQ,IAAI,OAAO,IAAI,CAAC;AAAA,MACxD,WAAW,IAAI;AAAA,IAChB;AAAA,EACD;AAAA,EAGA,IAAI,eAAe,WAAW;AAAA,IAC7B,OAAO,EAAE,SAAS,IAAI,SAAS,QAAQ,GAAG,WAAW,KAAK;AAAA,EAC3D;AAAA,EACA,OAAO;AAAA,IACN,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACxD,WAAW;AAAA,EACZ;AAAA;AAAA;AAGM,MAAM,oBAAoB,WAAW;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,MAAM,OAAO;AAAA,IACb,KAAK,UAAU,oBAAoB;AAAA,MAGlC,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,MACb,SAAS,QAAQ;AAAA,MACjB,WAAW,QAAQ;AAAA,MACnB,cAAc,QAAQ;AAAA,MACtB,QAAQ,QAAQ;AAAA,MAChB,qBAAqB,QAAQ;AAAA,IAC9B,CAAC;AAAA,IACD,KAAK,QAAQ,IAAI,MAAM,OAAO;AAAA,IAC9B,KAAK,YAAY,IAAI,UAAU,OAAO;AAAA,IACtC,KAAK,YAAY,IAAI,UAAU,OAAO;AAAA,IACtC,KAAK,WAAW,IAAI,SAAS,OAAO;AAAA,IACpC,MAAM,UAAU,CAAI,QAAgB,MAAc,SACjD,KAAK,QAAW,QAAQ,MAAM,IAAI;AAAA,IACnC,KAAK,UAAU;AAAA,SACX,oBAAoB;AAAA,QACtB,YAAY,QAAQ;AAAA,QACpB,WAAW,QAAQ;AAAA,QACnB,gBAAgB,QAAQ;AAAA,QACxB,eAAe,QAAQ;AAAA,MACxB,CAAC;AAAA,MACD,QAAQ,oBAAoB,OAAO;AAAA,IACpC;AAAA,IACA,KAAK,WAAW,qBAAqB,OAAO;AAAA;AAAA,OAOvC,MAAK,CACV,UAME;AAAA,IACF,OAAO,KAAK,QAAQ,QAAQ,aAAa,EAAE,SAAS,CAAC;AAAA;AAAA,OAShD,QAAO,GAA6B;AAAA,IACzC,OAAO,SAAS,YAAY,UAAU,cAAc,aAAa,YAChE,MAAM,QAAQ,IAAI;AAAA,MACjB,aAAa,KAAK,QAAwB,OAAO,kBAAkB,CAAC;AAAA,MACpE,aAAa,KAAK,QAAQ,IAAI,CAAC;AAAA,MAC/B,aAAa,KAAK,MAAM,UAAU,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAAA,MACpD,aAAa,KAAK,UAAU,KAAK,CAAC;AAAA,MAClC,aAAa,KAAK,SAAS,KAAK,CAAC;AAAA,MACjC,aAAa,KAAK,SAAS,SAAS,CAAC;AAAA,IACtC,CAAC;AAAA,IAEF,MAAM,YAA6C;AAAA,MAClD,OAAO,aAAa,OAAO,QAAQ;AAAA,SAC/B,aAAa,QAAQ,EAAE,OAAO,aAAa,MAAM,IAAI,CAAC;AAAA,IAC3D;AAAA,IAEA,MAAM,WAAwC;AAAA,MAC7C,OAAO;AAAA,SACH,YAAY,QAAQ,EAAE,OAAO,YAAY,MAAM,IAAI,CAAC;AAAA,IACzD;AAAA,IACA,IAAI,YAAY,OAAO;AAAA,MACtB,MAAM,WAAmC,CAAC;AAAA,MAC1C,WAAW,KAAK,YAAY,MAAM,MAAM;AAAA,QACvC,SAAS,EAAE,WAAW,SAAS,EAAE,WAAW,KAAK;AAAA,MAClD;AAAA,MACA,SAAS,QAAQ;AAAA,QAChB,OAAO,YAAY,MAAM,KAAK;AAAA,QAC9B;AAAA,MACD;AAAA,IACD;AAAA,IAIA,IAAI,mBAA4D;AAAA,MAC/D,OAAO;AAAA,MACP,OAAO;AAAA,QACN,SACC;AAAA,QACD,WAAW,UAAU,OAAO,aAAa;AAAA,MAC1C;AAAA,IACD;AAAA,IACA,IAAI,UAAU,OAAO;AAAA,MACpB,MAAM,SAAS,MAAM,QAAQ,IAC5B,UAAU,MACR,OAAO,CAAC,MAAM,EAAE,WAAW,YAAY,EACvC,IAAI,OAAO,MAAM;AAAA,QACjB,MAAM,MAAM,MAAM,aAAa,KAAK,UAAU,WAAW,EAAE,IAAI,CAAC;AAAA,QAChE,MAAM,KAAK,IAAI,OAAO,WAAW,KAChC,CAAC,MAAM,EAAE,WAAW,YAAY,EAAE,WAAW,SAC9C;AAAA,QACA,OAAO,KACJ;AAAA,UACA,UAAU,EAAE;AAAA,UACZ,aAAa,GAAG;AAAA,UAChB,MAAM,GAAG;AAAA,UACT,QAAQ,GAAG;AAAA,UACX,UAAU,GAAG;AAAA,QACd,IACC;AAAA,OACH,CACH;AAAA,MACA,mBAAmB;AAAA,QAClB,OAAO,OAAO,OAAO,CAAC,MAAoC,MAAM,IAAI;AAAA,MACrE;AAAA,IACD;AAAA,IAEA,OAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA,UAAU;AAAA,QACT,OAAO,SAAS,OAAO,OAAO;AAAA,WAC1B,SAAS,QAAQ,EAAE,OAAO,SAAS,MAAM,IAAI,CAAC;AAAA,MACnD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA;AAEF;;ACtOO,SAAS,WAEf,CACA,KACA,UAAiE,CAAC,GACzC;AAAA,EACzB,IAAI,mBAAmB,WAAW;AAAA,IACjC,OAAO,QAAQ,MAAM,GAAG;AAAA,EACzB;AAAA,EACA,IAAI,mBAAmB,aAAa;AAAA,IACnC,OAAO,QAAQ,UAAU,MAAM,GAAG;AAAA,EACnC;AAAA,EACA,OAAO,IAAI,UAAU,OAAO,EAAE,MAAM,GAAG;AAAA;;ACbjC,SAAS,iBAAiB,CAAC,KAA2B;AAAA,EAC5D,OACC,IAAI,eAAe,QAAQ,IAAI,cAAc,OAAO,IAAI,aAAa;AAAA;AAiEvE,IAAM,4BAA4B;AAClC,IAAM,yBAAyB;AAGxB,IAAM,uBAAuB;AACpC,IAAM,0BAA0B;AAChC,IAAM,cAAc;AACpB,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,aAAa;AACnB,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAE1B,SAAS,MAAM,CAAC,QAA0B;AAAA,EACzC,IAAI,OAAO,WAAW;AAAA,IAAG,OAAO;AAAA,EAChC,MAAM,SAAS,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,EAC/C,OAAO,OAAO,KAAK,MAAM,OAAO,SAAS,CAAC,MAAM;AAAA;AAGjD,SAAS,UAAU,CAAC,QAAkB,GAAmB;AAAA,EACxD,IAAI,OAAO,WAAW;AAAA,IAAG,OAAO;AAAA,EAChC,MAAM,SAAS,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,EAC/C,MAAM,MAAM,KAAK,IAAI,OAAO,SAAS,GAAG,KAAK,MAAM,IAAI,OAAO,MAAM,CAAC;AAAA,EACrE,OAAO,OAAO,QAAQ;AAAA;AAGvB,SAAS,QAAQ,CAAC,IAAoB;AAAA,EACrC,OAAO,MAAM,OAAO,IAAI,KAAK,MAAM,QAAQ,CAAC,OAAO,GAAG,KAAK,MAAM,EAAE;AAAA;AAKpE,SAAS,eAAe,CAAC,KAAqB;AAAA,EAC7C,OAAO,GAAG,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,MAAM,IAAI,EAAE;AAAA;AAK/C,SAAS,oBAAoB,CAC5B,MACA,WACgB;AAAA,EAChB,MAAM,MAAqB,CAAC;AAAA,EAC5B,WAAW,OAAO,MAAM;AAAA,IACvB,IAAI,CAAC,UAAU,GAAG;AAAA,MAAG;AAAA,IACrB,IAAI,KAAK,GAAG;AAAA,EACb;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,wBAAwB,CAAC,MAA6B;AAAA,EAC9D,MAAM,SAAS,IAAI;AAAA,EACnB,WAAW,OAAO,MAAM;AAAA,IACvB,MAAM,MACL,IAAI,eAAe,OAAO,wBAAwB,OAAO,IAAI,UAAU;AAAA,IACxE,OAAO,IAAI,MAAM,OAAO,IAAI,GAAG,KAAK,KAAK,CAAC;AAAA,EAC3C;AAAA,EACA,OAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,OAAO,GAAG,MAAM,KAAK,EAAE,KAAK,IAAI;AAAA;AAGzE,IAAM,iBAAiB;AAIvB,SAAS,wBAAwB,CAAC,MAAoC;AAAA,EACrE,WAAW,OAAO,MAAM;AAAA,IACvB,IAAI,IAAI,eAAe,OAAO,CAAC,IAAI;AAAA,MAAc;AAAA,IACjD,MAAM,QAAQ,IAAI,aAAa,MAAM,cAAc;AAAA,IACnD,IAAI,QAAQ;AAAA,MAAI,OAAO,MAAM;AAAA,EAC9B;AAAA,EACA,OAAO;AAAA;AAKR,SAAS,yBAAyB,CACjC,SACA,YACqB;AAAA,EACrB,IAAI,WAAW,SAAS;AAAA,IAA2B,OAAO;AAAA,EAC1D,MAAM,WAAW,WAAW,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,EAAE;AAAA,EAChE,IAAI,WAAW,WAAW,SAAS;AAAA,IAAwB,OAAO;AAAA,EAElE,MAAM,SAAS,WAAW,WAAW,SAAS;AAAA,EAC9C,MAAM,SAAS,WAAW;AAAA,EAC1B,MAAM,WAA6B;AAAA,IAClC;AAAA,MACC,OAAO;AAAA,MACP,OAAO,GAAG,eAAe,WAAW;AAAA,IACrC;AAAA,IACA;AAAA,MACC,OAAO;AAAA,MACP,OACC,UAAU,SACP,GAAG,gBAAgB,OAAO,YAAY,OAAO,gBAAgB,OAAO,YAAY,MAChF;AAAA,IACL;AAAA,EACD;AAAA,EACA,MAAM,aAAa,yBAAyB,UAAU;AAAA,EACtD,IAAI,YAAY;AAAA,IACf,SAAS,KAAK,EAAE,OAAO,sBAAsB,OAAO,GAAG,cAAc,CAAC;AAAA,EACvE;AAAA,EAEA,MAAM,uBAAuB,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,cAAc,CAAC,CAAC;AAAA,EAC5E,OAAO;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV;AAAA,IACA,KAAK;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,+BAA+B,QAAQ,oBAAoB;AAAA,MACpE,UAAU;AAAA,IACX;AAAA,EACD;AAAA;AAKD,SAAS,kBAAkB,CAC1B,SACA,YACqB;AAAA,EACrB,MAAM,SAAS,qBACd,YACA,CAAC,MAAM,EAAE,eAAe,QAAQ,EAAE,cAAc,GACjD;AAAA,EACA,IAAI,OAAO,SAAS;AAAA,IAAsB,OAAO;AAAA,EAEjD,OAAO;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,MACT,EAAE,OAAO,wBAAwB,OAAO,OAAO,OAAO,MAAM,EAAE;AAAA,MAC9D,EAAE,OAAO,aAAa,OAAO,yBAAyB,MAAM,EAAE;AAAA,MAC9D;AAAA,QACC,OAAO;AAAA,QACP,OAAO,QAAQ,gBACZ,gBAAgB,QAAQ,aAAa,IACrC;AAAA,MACJ;AAAA,IACD;AAAA,IACA,KAAK;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,6BAA6B,QAAQ;AAAA,MAC9C,UAAU;AAAA,IACX;AAAA,EACD;AAAA;AAKD,SAAS,qBAAqB,CAC7B,SACA,YACqB;AAAA,EACrB,MAAM,SAAS,qBACd,YACA,CAAC,MACA,EAAE,eAAe,QACjB,EAAE,cAAc,OAChB,EAAE,aAAa,OACf,EAAE,eAAe,GACnB;AAAA,EACA,IAAI,OAAO,SAAS;AAAA,IAAyB,OAAO;AAAA,EAEpD,MAAM,WAA6B;AAAA,IAClC,EAAE,OAAO,uBAAuB,OAAO,OAAO,OAAO,MAAM,EAAE;AAAA,IAC7D,EAAE,OAAO,aAAa,OAAO,yBAAyB,MAAM,EAAE;AAAA,EAC/D;AAAA,EACA,MAAM,WAAW,OAAO,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,YAAY;AAAA,EACpE,MAAM,UAAU,YACZ,SAAS,gBAAgB,SAAS,gBAAgB,IAAI,MACvD,GACA,iBACD,IACC;AAAA,EACH,IAAI;AAAA,IAAS,SAAS,KAAK,EAAE,OAAO,eAAe,OAAO,QAAQ,CAAC;AAAA,EAEnE,OAAO;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV;AAAA,IACA,KAAK;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,6BAA6B,QAAQ;AAAA,MAC9C,UAAU;AAAA,IACX;AAAA,EACD;AAAA;AAKD,SAAS,kBAAkB,CAC1B,SACA,YACqB;AAAA,EACrB,MAAM,YAAY,WAChB,MAAM,GAAG,WAAW,EACpB,IAAI,CAAC,MAAM,EAAE,UAAU,EACvB,OAAO,CAAC,MAAmB,MAAM,IAAI;AAAA,EACvC,IAAI,UAAU,SAAS;AAAA,IAAkB,OAAO;AAAA,EAEhD,MAAM,MAAM,OAAO,SAAS;AAAA,EAC5B,IAAI,MAAM,QAAQ,YAAY;AAAA,IAAoB,OAAO;AAAA,EAEzD,OAAO;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,MACT,EAAE,OAAO,wBAAwB,OAAO,SAAS,GAAG,EAAE;AAAA,MACtD;AAAA,QACC,OAAO;AAAA,QACP,OAAO,SAAS,WAAW,WAAW,IAAI,CAAC;AAAA,MAC5C;AAAA,MACA,EAAE,OAAO,WAAW,OAAO,SAAS,QAAQ,SAAS,EAAE;AAAA,IACxD;AAAA,IACA,KAAK;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,+BAA+B,QAAQ;AAAA,MAChD,UAAU;AAAA,IACX;AAAA,EACD;AAAA;AAOD,SAAS,iBAAiB,CAAC,YAA+C;AAAA,EACzE,MAAM,SAAS,WACb,MAAM,GAAG,UAAU,EACnB,OACA,CAAC,MAAgD,EAAE,cAAc,IAClE;AAAA,EACD,IAAI,OAAO,SAAS;AAAA,IAAiB,OAAO;AAAA,EAE5C,MAAM,OAAO,OAAO,IACnB,CAAC,MAAM,IAAI,KAAK,EAAE,YAAY,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,CAC3E;AAAA,EACA,MAAM,MAAM,OAAO,IAAI;AAAA,EACvB,IAAI,OAAO;AAAA,IAAkB,OAAO;AAAA,EAEpC,MAAM,aAAa,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK;AAAA,EACvD,MAAM,SAAS,WAAW;AAAA,EAC1B,MAAM,SAAS,WAAW,WAAW,SAAS;AAAA,EAE9C,OAAO;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,MACT,EAAE,OAAO,cAAc,OAAO,SAAS,GAAG,EAAE;AAAA,MAC5C;AAAA,QACC,OAAO;AAAA,QACP,OACC,UAAU,SACP,GAAG,gBAAgB,MAAM,OAAO,gBAAgB,MAAM,MACtD;AAAA,MACL;AAAA,IACD;AAAA,IACA,KAAK;AAAA,MACJ,MAAM;AAAA,IACP;AAAA,EACD;AAAA;AAGD,IAAM,gBAAgD;AAAA,EACrD,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AACP;AAIA,IAAM,gBAAmC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAEA,SAAS,WAAW,CAAC,QAA2C;AAAA,EAC/D,IAAI,OAAO,WAAW;AAAA,IAAG,OAAO;AAAA,EAChC,OACC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM;AAAA,IAC1B,MAAM,UAAU,cAAc,EAAE,YAAY,cAAc,EAAE;AAAA,IAC5D,IAAI,YAAY;AAAA,MAAG,OAAO;AAAA,IAC1B,OAAO,cAAc,QAAQ,EAAE,IAAI,IAAI,cAAc,QAAQ,EAAE,IAAI;AAAA,GACnE,EAAE,MAAM;AAAA;AAIX,SAAS,OAAO,CAAC,OAA4B;AAAA,EAC5C,IAAI,CAAC,MAAM;AAAA,IAAK,OAAO,MAAM,UAAU,MAAM;AAAA,EAC7C,OAAO,MAAM,IAAI,UACd,GAAG,MAAM,IAAI,QAAQ,MAAM,IAAI,YAC/B,MAAM,IAAI;AAAA;AAGP,SAAS,iBAAiB,CAAC,OAIjB;AAAA,EAChB,MAAM,aAAa,MAAM,WAAW,OAAO,iBAAiB,EAAE;AAAA,EAC9D,MAAM,SAAS,MAAM,WAAW,SAAS;AAAA,EAEzC,MAAM,QAAkB,CAAC;AAAA,EACzB,MAAM,SAAwB,CAAC;AAAA,EAC/B,IAAI,MAAM,QAAQ,SAAS;AAAA,IAC1B,MAAM,KAAK,MAAM,QAAQ,OAAO;AAAA,IAChC,OAAO,KAAK;AAAA,MACX,MAAM;AAAA,MACN,QAAQ,MAAM,QAAQ;AAAA,MACtB,UAAU;AAAA,IACX,CAAC;AAAA,EACF;AAAA,EACA,IAAI,MAAM,QAAQ,WAAW,UAAU;AAAA,IACtC,MAAM,KACL,oEAAoE,MAAM,QAAQ,IACnF;AAAA,IACA,OAAO,KAAK,EAAE,MAAM,UAAU,UAAU,OAAO,CAAC;AAAA,EACjD;AAAA,EACA,IAAI,MAAM,QAAQ,WAAW;AAAA,IAC5B,MAAM,KACL,kEACD;AAAA,IACA,OAAO,KAAK;AAAA,MACX,MAAM;AAAA,MACN,QAAQ,MAAM,QAAQ;AAAA,MACtB,UAAU;AAAA,IACX,CAAC;AAAA,EACF;AAAA,EACA,IAAI,MAAM,QAAQ,mBAAmB,MAAM,QAAQ,kBAAkB,GAAG;AAAA,IACvE,MAAM,KACL,gFACD;AAAA,IACA,OAAO,KAAK,EAAE,MAAM,WAAW,UAAU,MAAM,CAAC;AAAA,EACjD;AAAA,EACA,IAAI,MAAM,KAAK,SAAS,GAAG;AAAA,IAC1B,MAAM,KACL,kEAAkE,MAAM,QAAQ,+BACjF;AAAA,IACA,OAAO,KAAK,EAAE,MAAM,gBAAgB,UAAU,MAAM,CAAC;AAAA,EACtD;AAAA,EAEA,WAAW,YAAY;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,GAAG;AAAA,IACF,MAAM,QAAQ,SAAS,MAAM,SAAS,MAAM,UAAU;AAAA,IACtD,IAAI,OAAO;AAAA,MACV,OAAO,KAAK,KAAK;AAAA,MACjB,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,IAC1B;AAAA,EACD;AAAA,EACA,MAAM,WAAW,kBAAkB,MAAM,UAAU;AAAA,EACnD,IAAI,UAAU;AAAA,IACb,OAAO,KAAK,QAAQ;AAAA,IACpB,MAAM,KAAK,QAAQ,QAAQ,CAAC;AAAA,EAC7B;AAAA,EAEA,IAAI,MAAM,WAAW,WAAW,GAAG;AAAA,IAClC,MAAM,KACL,mHACD;AAAA,IACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,UAAU,OAAO,CAAC;AAAA,EACxD;AAAA,EACA,IAAI,MAAM,WAAW,GAAG;AAAA,IACvB,MAAM,KAAK,6BAA6B;AAAA,EACzC;AAAA,EAEA,OAAO;AAAA,IACN,SAAS,MAAM;AAAA,IACf,iBAAiB;AAAA,MAChB,OAAO,MAAM,WAAW;AAAA,MACxB;AAAA,MACA;AAAA,MACA,MAAM,MAAM,WAAW,MAAM;AAAA,IAC9B;AAAA,IACA,WAAW,MAAM,KAAK;AAAA,IACtB;AAAA,IACA;AAAA,IACA,SAAS,YAAY,MAAM;AAAA,EAC5B;AAAA;AAWM,SAAS,cAAc,CAC7B,SACqB;AAAA,EACrB,IAAI,QAAQ,WAAW;AAAA,IAAU,OAAO;AAAA,EACxC,IAAI,QAAQ,iBAAiB;AAAA,IAC5B,OAAO;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAU;AAAA,QACT;AAAA,UACC,OAAO;AAAA,UACP,OAAO,gBAAgB,QAAQ,eAAe;AAAA,QAC/C;AAAA,QACA;AAAA,UACC,OAAO;AAAA,UACP,OAAO,QAAQ,gBACZ,gBAAgB,QAAQ,aAAa,IACrC;AAAA,QACJ;AAAA,MACD;AAAA,MACA,KAAK;AAAA,QACJ,MAAM;AAAA,QACN,UAAU;AAAA,MACX;AAAA,IACD;AAAA,EACD;AAAA,EACA,OAAO,EAAE,MAAM,UAAU,UAAU,OAAO;AAAA;;ACrepC,SAAS,cAAc,CAC7B,UAAqC,CAAC,GACrB;AAAA,EACjB,MAAM,eAAe,QAAQ,gBAAgB;AAAA,EAC7C,MAAM,YAAY,KAAK,IAAI;AAAA,EAC3B,IAAI,UAAuC;AAAA,EAC3C,IAAI,cAAc;AAAA,EAElB,OAAO;AAAA,IACN,MAAM,CAAC,KAAK;AAAA,MACX,UAAU;AAAA,MACV,cAAc,KAAK,IAAI;AAAA;AAAA,IAExB,OAAO,CAAC,KAAK;AAAA,MACZ,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,aAAa,WAAW;AAAA,QAC5C,OAAO,IAAI,SAAS,aAAa,EAAE,QAAQ,IAAI,CAAC;AAAA,MACjD;AAAA,MAGA,MAAM,SAAS,cAAc,KAAK,IAAI,IAAI,cAAc;AAAA,MACxD,MAAM,KAAK,SAAS;AAAA,MACpB,OAAO,SAAS,KACf;AAAA,QACC;AAAA,QACA,YAAY,SAAS,UAAU;AAAA,QAC/B,uBAAuB,SAAS,UAAU;AAAA,QAC1C,gBAAgB,SAAS,iBAAiB;AAAA,QAC1C,YAAY,SAAS,aAAa;AAAA,QAClC,eAAe,SAAS,gBAAgB;AAAA,QACxC,QAAQ,KAAK,MAAM,SAAS,IAAI;AAAA,QAChC,UAAU,KAAK,OAAO,KAAK,IAAI,IAAI,aAAa,IAAI;AAAA,MACrD,GACA,EAAE,QAAQ,KAAK,MAAM,IAAI,CAC1B;AAAA;AAAA,EAEF;AAAA;AAYM,SAAS,cAAc,CAC7B,UAA2D,CAAC,GAC9C;AAAA,EACd,MAAM,aAAa,IAAI;AAAA,EACvB,IAAI,OAAO,YAAY,eAAe,OAAO,QAAQ,OAAO,YAAY;AAAA,IACvE,WAAW,UAAU,QAAQ,WAAW,CAAC,WAAW,QAAQ,GAAG;AAAA,MAC9D,QAAQ,GAAG,QAAQ,MAAM;AAAA,QACxB,WAAW,MAAM,IAAI,MAAM,GAAG,sCAAsC,CAAC;AAAA,OACrE;AAAA,IACF;AAAA,EACD;AAAA,EACA,OAAO,WAAW;AAAA;;ACvFnB;AACA;AAAA;AAAA;AAKA;AAAA,YAEW;AAAA;AAuCX,SAAS,UAAU,CAClB,SACA,MACqB;AAAA,EACrB,IAAI,OAAO,YAAY,YAAY;AAAA,IAClC,MAAM,IAAK,QAAyB,IAAI;AAAA,IACxC,OAAO,OAAO,MAAM,WAAW,IAAI;AAAA,EACpC;AAAA,EACA,IACC,OAAQ,QAA8B,QAAQ,cAC9C,EAAE,QAAS,UACV;AAAA,IACD,MAAM,IAAK,QAAkD,IAAI,IAAI;AAAA,IACrE,OAAO,OAAO,MAAM,WAAW,IAAI;AAAA,EACpC;AAAA,EACA,MAAM,MAAM;AAAA,EACZ,IAAI,IAAI,IAAI,SAAS,IAAI,KAAK,YAAY;AAAA,EAC1C,IAAI,MAAM,WAAW;AAAA,IACpB,MAAM,SAAS,KAAK,YAAY;AAAA,IAChC,WAAW,OAAO,OAAO,KAAK,GAAG,GAAG;AAAA,MACnC,IAAI,IAAI,YAAY,MAAM,QAAQ;AAAA,QACjC,IAAI,IAAI;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,IAAI,MAAM,QAAQ,CAAC;AAAA,IAAG,OAAO,EAAE;AAAA,EAC/B,OAAO,OAAO,MAAM,WAAW,IAAI;AAAA;AAiF7B,SAAS,sBAAsB,CACrC,SACA,SACA,QACA,mBAAmB,KACT;AAAA,EACV,MAAM,KAAK,WAAW,SAAS,YAAY;AAAA,EAC3C,MAAM,YAAY,WAAW,SAAS,mBAAmB;AAAA,EACzD,MAAM,YAAY,WAAW,SAAS,mBAAmB;AAAA,EACzD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;AAAA,IAAW,OAAO;AAAA,EAC5C,OAAO,OACN,SACA;AAAA,IACC,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,EACtB,GACA,QACA,EAAE,iBAAiB,CACpB;AAAA;AAgCM,SAAS,0BAA0B,CACzC,SACA,SACA,cACU;AAAA,EACV,MAAM,KAAK,WAAW,SAAS,YAAY;AAAA,EAC3C,MAAM,YAAY,WAAW,SAAS,yBAAyB;AAAA,EAC/D,OAAO,iCAAiC,SAAS,IAAI,WAAW,YAAY;AAAA;AAyCtE,SAAS,kBAAkB,CAAC,SAAuC;AAAA,EACzE,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,EAKjC,IACC,OAAO,OAAO,SAAS,YACvB,OAAO,OAAO,cAAc,YAC5B,OAAO,OAAO,SAAS,YACvB,OAAO,SAAS,MACf;AAAA,IACD,MAAM,IAAI,MACT,uFACD;AAAA,EACD;AAAA,EACA,IAAI,CAAC,OAAO,KAAK,WAAW,QAAQ,GAAG;AAAA,IACtC,MAAM,IAAI,MACT,2DAA2D,OAAO,QACnE;AAAA,EACD;AAAA,EAEA,MAAM,OAAO,OAAO;AAAA,EACpB,IAAI,OAAO,SAAS,oBAAoB;AAAA,IACvC,IAAI,KAAK,SAAS,MAAM;AAAA,MACvB,MAAM,IAAI,MACT,uEACD;AAAA,IACD;AAAA,EACD,EAAO,SAAI,OAAO,SAAS,wBAAwB;AAAA,IAClD,IAAI,KAAK,WAAW,cAAc,CAAC,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAAA,MAChE,MAAM,IAAI,MACT,uFACD;AAAA,IACD;AAAA,EACD,EAAO;AAAA,IACN,IAAI,KAAK,WAAW,WAAW,OAAO,KAAK,YAAY,UAAU;AAAA,MAChE,MAAM,IAAI,MACT,yEACD;AAAA,IACD;AAAA,IACA,IAAI,OAAO,SAAS,SAAS,KAAK,iBAAiB;AAAA,MAClD,MAAM,IAAI,MACT,6BAA6B,OAAO,qCAAqC,KAAK,UAC/E;AAAA,IACD;AAAA;AAAA,EAGD,OAAO;AAAA;;AC/SR;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AA4DA,IAAM,QAAQ,CAAC,MAAuB,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI;AAGxE,IAAM,QAAQ,CAAC,MAA0B,WAAW,CAAC;AAQrD,eAAsB,cAAc,CAAC,MAIP;AAAA,EAC7B,MAAM,IAAI,KAAK,aAAa;AAAA,EAC5B,MAAM,MAAM,MAAM,EACjB,GAAG,KAAK,QAAQ,QAAQ,QAAQ,EAAE,oBAAoB,KAAK,OAC5D;AAAA,EACA,IAAI,IAAI,WAAW;AAAA,IAAK,OAAO;AAAA,EAC/B,IAAI,CAAC,IAAI,IAAI;AAAA,IACZ,MAAM,IAAI,MAAM,mBAAmB,KAAK,kBAAkB,IAAI,QAAQ;AAAA,EACvE;AAAA,EACA,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,EAG7B,MAAM,UAAU,KAAK,YAAY,QAAQ,IAAI,CAAC,OAAO;AAAA,IACpD,aAAa,MAAM,EAAE,WAAW;AAAA,IAChC,QAAQ,EAAE;AAAA,EACX,EAAE;AAAA,EACF,OAAO;AAAA,IACN;AAAA,IACA,cAAc,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC;AAAA,EAC3D;AAAA;AAUM,SAAS,sBAAsB,CACrC,OACA,MAC+B;AAAA,EAC/B,MAAM,SAAmB,CAAC;AAAA,EAG1B,MAAM,eAAe,WAAW,MAAM,MAAM,MAAM,CAAC;AAAA,EACnD,MAAM,cAAc,iBAAiB,MAAM,MAAM,IAAI;AAAA,EACrD,IAAI,CAAC;AAAA,IAAa,OAAO,KAAK,4BAA4B;AAAA,EAG1D,MAAM,SAAS,yBAAyB,MAAM,MAAM,UAAU,CAAC;AAAA,EAG/D,MAAM,mBAAmB,oBACxB,cACA,MAAM,gBACN,OAAO,YACR;AAAA,EACA,IAAI,CAAC;AAAA,IACJ,OAAO,KAAK,2CAA2C;AAAA,EAGxD,MAAM,YAAY,kBAAkB,MAAM;AAAA,EAC1C,MAAM,iBAAiB,gBAAgB,WAAW,OAAO,aAAa;AAAA,EACtE,MAAM,uBAAuB,mBAAmB,MAAM,MAAM,gBAAgB;AAAA,EAC5E,IAAI,CAAC,sBAAsB;AAAA,IAC1B,OAAO,KAAK,kDAAkD;AAAA,EAC/D;AAAA,EAEA,MAAM,aAAa,eAAe,oBAAoB;AAAA,EAMtD,MAAM,YAAY,MAAM,aAAa,MAAM,WAAW;AAAA,EACtD,IAAI,QAAkC;AAAA,EACtC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI,WAAW;AAAA,IACd,MAAM,IAAI,uBACT,WACA,OAAO,kBACP,SACD;AAAA,IACA,kBACC,EAAE,cAAc,IACb,KAAK,MAAO,EAAE,eAAe,EAAE,cAAe,GAAK,IACnD;AAAA,IACJ,eAAe,EAAE;AAAA,IACjB,kBAAkB,MAAM,YAAY,aAAa;AAAA,IACjD,IAAI,CAAC;AAAA,MAAc,OAAO,KAAK,uCAAuC;AAAA,IACtE,IAAI,cAAc;AAAA,MAAc,QAAQ;AAAA,EACzC;AAAA,EAEA,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,eAAe,YAAY,iBAAiB,OAAO;AAAA,IACvD;AAAA,EACD;AAAA;;ACnKD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACjBA;AAAA;AAAA;AAAA;;ACDA;AAAA;AAAA;AAAA;",
|
|
33
|
+
"debugId": "1299ECB68A5C2FAD64756E2164756E21",
|
|
34
34
|
"names": []
|
|
35
35
|
}
|