@elsoul/erpc-sdk 0.5.0 → 0.7.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/transport/rest.ts","../src/account.ts","../src/catalog.ts","../src/config.ts","../src/price.ts","../src/rpc/client.ts","../src/rpc/ethereum.ts","../src/rpc/solana.ts","../src/transport/websocket.ts","../src/subscriptions.ts","../src/transport/http.ts","../src/usage.ts","../src/client.ts","../src/credit.ts","../src/resources.ts","../src/cloud.ts"],"names":["controlledSignal","isObject","objectValue","resourceKinds","resourceModes","isDateTime","requireFetch"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { JsonRpcErrorObject } from './rpc/types'\n\nconst REDACTED = '[REDACTED]'\n\nconst credentialVariants = (credential: string): readonly string[] => {\n const queryEncoded = new URLSearchParams({ value: credential })\n .toString()\n .slice('value='.length)\n let componentEncoded: string | undefined\n try {\n componentEncoded = encodeURIComponent(credential)\n } catch {\n // URLSearchParams still provides a safe encoded representation.\n }\n return [...new Set([credential, componentEncoded, queryEncoded])]\n .filter((value): value is string => Boolean(value))\n .sort((left, right) => right.length - left.length)\n}\n\nconst redactString = (value: string, variants: readonly string[]): string => {\n let redacted = value\n for (const variant of variants) redacted = redacted.replaceAll(variant, REDACTED)\n return redacted\n}\n\nconst redactValue = (\n value: unknown,\n variants: readonly string[],\n seen: WeakSet<object>,\n depth: number,\n): unknown => {\n if (typeof value === 'string') return redactString(value, variants)\n if (typeof value !== 'object' || value === null) return value\n if (depth >= 32 || seen.has(value)) return REDACTED\n\n seen.add(value)\n if (Array.isArray(value)) {\n return value.map((item) => redactValue(item, variants, seen, depth + 1))\n }\n\n const result: Record<string, unknown> = {}\n for (const [key, item] of Object.entries(value)) {\n Object.defineProperty(result, key, {\n configurable: true,\n enumerable: true,\n value: redactValue(item, variants, seen, depth + 1),\n writable: true,\n })\n }\n return result\n}\n\nexport const redactJsonRpcError = (\n error: JsonRpcErrorObject,\n credential: string | undefined,\n): JsonRpcErrorObject => {\n if (!credential) return error\n const variants = credentialVariants(credential)\n const result: {\n code: number\n data?: unknown\n message: string\n } = {\n code: error.code,\n message: redactString(error.message, variants),\n }\n if (error.data !== undefined) {\n result.data = redactValue(error.data, variants, new WeakSet(), 0)\n }\n return result\n}\n\nexport type ErpcErrorCode =\n | 'ERPC_ABORTED'\n | 'ERPC_BATCH_POLICY'\n | 'ERPC_CONFIG'\n | 'ERPC_HTTP'\n | 'ERPC_INVALID_RESPONSE'\n | 'ERPC_RPC'\n | 'ERPC_TIMEOUT'\n | 'ERPC_TRANSPORT'\n\nexport class ErpcError extends Error {\n readonly code: ErpcErrorCode\n\n constructor(code: ErpcErrorCode, message: string, options?: ErrorOptions) {\n super(message, options)\n this.name = 'ErpcError'\n this.code = code\n }\n}\n\nexport class ErpcConfigError extends ErpcError {\n constructor(message: string) {\n super('ERPC_CONFIG', message)\n this.name = 'ErpcConfigError'\n }\n}\n\nexport class ErpcTransportError extends ErpcError {\n constructor(message: string, options?: ErrorOptions) {\n super('ERPC_TRANSPORT', message, options)\n this.name = 'ErpcTransportError'\n }\n}\n\nexport class ErpcHttpError extends ErpcError {\n readonly status: number\n\n constructor(status: number, message = `ERPC request failed with HTTP ${status}`) {\n super('ERPC_HTTP', message)\n this.name = 'ErpcHttpError'\n this.status = status\n }\n}\n\nexport class ErpcTimeoutError extends ErpcError {\n readonly timeoutMs: number\n\n constructor(timeoutMs: number) {\n super('ERPC_TIMEOUT', `ERPC request timed out after ${timeoutMs}ms`)\n this.name = 'ErpcTimeoutError'\n this.timeoutMs = timeoutMs\n }\n}\n\nexport class ErpcAbortedError extends ErpcError {\n constructor() {\n super('ERPC_ABORTED', 'ERPC request was aborted')\n this.name = 'ErpcAbortedError'\n }\n}\n\nexport class ErpcInvalidResponseError extends ErpcError {\n constructor(message = 'ERPC returned an invalid response') {\n super('ERPC_INVALID_RESPONSE', message)\n this.name = 'ErpcInvalidResponseError'\n }\n}\n\nexport class ErpcJsonRpcError extends ErpcError {\n readonly rpcCode: number\n readonly data?: unknown\n\n constructor(error: JsonRpcErrorObject) {\n super('ERPC_RPC', error.message)\n this.name = 'ErpcJsonRpcError'\n this.rpcCode = error.code\n if (error.data !== undefined) this.data = error.data\n }\n}\n\nexport class ErpcBatchPolicyError extends ErpcError {\n constructor(message: string) {\n super('ERPC_BATCH_POLICY', message)\n this.name = 'ErpcBatchPolicyError'\n }\n}\n","import {\n ErpcAbortedError,\n ErpcHttpError,\n ErpcInvalidResponseError,\n ErpcTimeoutError,\n ErpcTransportError,\n} from '../errors'\nimport type { RpcSendOptions } from '../rpc/types'\n\nexport type QueryValue =\n | boolean\n | number\n | readonly string[]\n | string\n | undefined\n\nexport type Query = Readonly<Record<string, QueryValue>>\n\nexport interface RestTransportConfig {\n readonly apiKey: string\n readonly endpoint: URL\n readonly fetch: typeof globalThis.fetch\n readonly headers: Readonly<Record<string, string>>\n readonly timeoutMs: number\n}\n\nexport interface RestStreamResponse {\n readonly response: Response\n close(): void\n normalizeError(error: unknown): Error\n}\n\ninterface ControlledSignal {\n readonly cleanup: () => void\n readonly signal: AbortSignal\n readonly stopTimeout: () => void\n readonly timeoutMs: number\n readonly timedOut: () => boolean\n}\n\nconst controlledSignal = (\n timeoutMs: number,\n external?: AbortSignal,\n): ControlledSignal => {\n const controller = new AbortController()\n let didTimeOut = false\n let timeout: ReturnType<typeof setTimeout> | undefined = setTimeout(() => {\n didTimeOut = true\n controller.abort()\n }, timeoutMs)\n\n const abort = () => controller.abort()\n if (external?.aborted) controller.abort()\n else external?.addEventListener('abort', abort, { once: true })\n\n const stopTimeout = () => {\n if (timeout === undefined) return\n clearTimeout(timeout)\n timeout = undefined\n }\n\n return {\n signal: controller.signal,\n stopTimeout,\n timeoutMs,\n timedOut: () => didTimeOut,\n cleanup: () => {\n stopTimeout()\n external?.removeEventListener('abort', abort)\n },\n }\n}\n\nconst normalizeError = (\n error: unknown,\n controlled: ControlledSignal,\n external?: AbortSignal,\n): Error => {\n if (\n error instanceof ErpcAbortedError ||\n error instanceof ErpcHttpError ||\n error instanceof ErpcInvalidResponseError ||\n error instanceof ErpcTimeoutError ||\n error instanceof ErpcTransportError\n ) {\n return error\n }\n if (controlled.timedOut()) {\n return new ErpcTimeoutError(controlled.timeoutMs)\n }\n if (external?.aborted) return new ErpcAbortedError()\n return new ErpcTransportError('Unable to reach ERPC')\n}\n\nconst applyQuery = (url: URL, query?: Query): void => {\n if (!query) return\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined) continue\n if (Array.isArray(value)) {\n for (const item of value) url.searchParams.append(key, item)\n } else {\n url.searchParams.set(key, String(value))\n }\n }\n}\n\nexport class RestTransport {\n readonly endpoint: string\n\n readonly #apiKey: string\n readonly #endpoint: URL\n readonly #fetch: typeof globalThis.fetch\n readonly #headers: Readonly<Record<string, string>>\n readonly #timeoutMs: number\n\n constructor(config: RestTransportConfig) {\n this.#apiKey = config.apiKey\n this.#endpoint = new URL(config.endpoint)\n this.#fetch = config.fetch\n this.#headers = config.headers\n this.#timeoutMs = config.timeoutMs\n const endpoint = new URL(config.endpoint)\n endpoint.search = ''\n endpoint.hash = ''\n this.endpoint = endpoint.toString()\n }\n\n url(path: string, query?: Query): URL {\n const url = new URL(this.#endpoint)\n const base = url.pathname === '/' ? '' : url.pathname.replace(/\\/+$/, '')\n url.pathname = `${base}/${path.replace(/^\\/+/, '')}`.replace(/\\/{2,}/g, '/')\n applyQuery(url, query)\n return url\n }\n\n async get<TResult>(\n path: string,\n query?: Query,\n options: RpcSendOptions = {},\n ): Promise<TResult> {\n const controlled = controlledSignal(this.#timeoutMs, options.signal)\n try {\n const response = await this.#get(path, query, controlled.signal)\n if (!response.ok) throw new ErpcHttpError(response.status)\n const text = await response.text()\n try {\n return JSON.parse(text) as TResult\n } catch {\n throw new ErpcInvalidResponseError('ERPC returned malformed JSON')\n }\n } catch (error) {\n throw normalizeError(error, controlled, options.signal)\n } finally {\n controlled.cleanup()\n }\n }\n\n async stream(\n path: string,\n query?: Query,\n options: RpcSendOptions = {},\n ): Promise<RestStreamResponse> {\n const controlled = controlledSignal(this.#timeoutMs, options.signal)\n try {\n const response = await this.#get(path, query, controlled.signal)\n if (!response.ok) throw new ErpcHttpError(response.status)\n\n // Long-lived streams use the timeout for connection establishment only.\n // The caller's AbortSignal remains attached until close() is called.\n controlled.stopTimeout()\n return {\n response,\n close: controlled.cleanup,\n normalizeError: (error) =>\n normalizeError(error, controlled, options.signal),\n }\n } catch (error) {\n controlled.cleanup()\n throw normalizeError(error, controlled, options.signal)\n }\n }\n\n #get(path: string, query: Query | undefined, signal: AbortSignal) {\n return this.#fetch(this.url(path, query), {\n method: 'GET',\n headers: {\n ...this.#headers,\n authorization: `Bearer ${this.#apiKey}`,\n accept: 'application/json',\n },\n signal,\n })\n }\n}\n","import type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\n\nexport type ErpcPlan = 'business' | 'developer' | 'free' | 'pro'\n\nexport interface TokenBalance {\n readonly max_tokens: number\n readonly next_refill_at: string | null\n readonly plan: ErpcPlan\n readonly remaining_tokens: number\n}\n\nexport class AccountClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n getTokenBalance(options?: RpcSendOptions): Promise<TokenBalance> {\n return this.#transport.get('/v3/erpc/token-balance', undefined, options)\n }\n}\n","import { ErpcInvalidResponseError } from './errors'\nimport type { CloudResourceKind, CloudResourceMode } from './resources'\nimport type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\n\nexport interface CloudOfferingBilling {\n readonly amountCents: number\n readonly unit: 'cents-per-hour'\n}\n\nexport interface CloudOfferingCompute {\n readonly tenancy: 'bare-metal' | 'virtual-machine'\n}\n\nexport interface CloudOfferingSolana {\n readonly transport: 'grpc' | 'shredstream'\n}\n\nexport interface CloudOffering {\n readonly billing?: CloudOfferingBilling\n readonly capabilities: readonly string[]\n readonly compute?: CloudOfferingCompute\n readonly description: string\n readonly id: string\n readonly kind: CloudResourceKind\n readonly mode?: CloudResourceMode\n readonly name: string\n readonly regions: readonly string[]\n readonly solana?: CloudOfferingSolana\n}\n\nconst resourceKinds: readonly CloudResourceKind[] = [\n 'bare-metal',\n 'solana-grpc',\n 'solana-shredstream',\n 'vps',\n]\nconst resourceModes: readonly CloudResourceMode[] = [\n 'dedicated',\n 'direct',\n 'shared',\n]\n\nconst objectValue = (value: unknown): Record<string, unknown> | null =>\n typeof value === 'object' && value !== null\n ? value as Record<string, unknown>\n : null\n\nconst stringArray = (value: unknown): readonly string[] | null =>\n Array.isArray(value) && value.every((item) => typeof item === 'string')\n ? value\n : null\n\nconst parseOffering = (value: unknown): CloudOffering | null => {\n const offering = objectValue(value)\n if (\n offering === null ||\n typeof offering.id !== 'string' ||\n typeof offering.kind !== 'string' ||\n !resourceKinds.includes(offering.kind as CloudResourceKind) ||\n typeof offering.name !== 'string' ||\n typeof offering.description !== 'string' ||\n (offering.mode !== undefined &&\n (typeof offering.mode !== 'string' ||\n !resourceModes.includes(offering.mode as CloudResourceMode)))\n ) return null\n\n const regions = stringArray(offering.regions)\n const capabilities = stringArray(offering.capabilities)\n if (regions === null || capabilities === null) return null\n\n const compute = offering.compute === undefined\n ? undefined\n : objectValue(offering.compute)\n if (\n compute !== undefined &&\n (compute === null ||\n (compute.tenancy !== 'virtual-machine' &&\n compute.tenancy !== 'bare-metal'))\n ) return null\n\n const solana = offering.solana === undefined\n ? undefined\n : objectValue(offering.solana)\n if (\n solana !== undefined &&\n (solana === null ||\n (solana.transport !== 'grpc' && solana.transport !== 'shredstream'))\n ) return null\n\n const billing = offering.billing === undefined\n ? undefined\n : objectValue(offering.billing)\n if (\n billing !== undefined &&\n (billing === null ||\n billing.unit !== 'cents-per-hour' ||\n typeof billing.amountCents !== 'number' ||\n !Number.isInteger(billing.amountCents) ||\n billing.amountCents < 0)\n ) return null\n\n return {\n id: offering.id,\n kind: offering.kind as CloudResourceKind,\n name: offering.name,\n description: offering.description,\n regions,\n capabilities,\n ...(typeof offering.mode === 'string'\n ? { mode: offering.mode as CloudResourceMode }\n : {}),\n ...(compute &&\n (compute.tenancy === 'virtual-machine' || compute.tenancy === 'bare-metal')\n ? { compute: { tenancy: compute.tenancy } }\n : {}),\n ...(solana &&\n (solana.transport === 'grpc' || solana.transport === 'shredstream')\n ? { solana: { transport: solana.transport } }\n : {}),\n ...(billing &&\n billing.unit === 'cents-per-hour' &&\n typeof billing.amountCents === 'number'\n ? {\n billing: {\n amountCents: billing.amountCents,\n unit: billing.unit,\n },\n }\n : {}),\n }\n}\n\nexport class CloudCatalogClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n async list(options?: RpcSendOptions): Promise<readonly CloudOffering[]> {\n const response: unknown = await this.#transport.get(\n '/v4/cloud/catalog',\n undefined,\n options,\n )\n const envelope = objectValue(response)\n const message = objectValue(envelope?.message)\n if (envelope?.success !== true || !Array.isArray(message?.offerings)) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud catalog',\n )\n }\n const offerings = message.offerings.map(parseOffering)\n if (offerings.some((offering) => offering === null)) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud catalog',\n )\n }\n return offerings as readonly CloudOffering[]\n }\n}\n","import { ErpcConfigError } from './errors'\n\nexport const DEFAULT_ENDPOINT = 'https://edge.erpc.global'\nexport const DEFAULT_AVALANCHE_ENDPOINT = 'https://ava-rpc.erpc.global'\nexport const DEFAULT_ACCOUNT_ENDPOINT = 'https://solana-rpc.erpc.global'\nexport const DEFAULT_USER_ENDPOINT = 'https://user-api.erpc.global'\nexport const DEFAULT_TIMEOUT_MS = 30_000\n\nexport interface ErpcClientConfig {\n readonly accountEndpoint?: string\n readonly apiKey: string\n readonly avalancheEndpoint?: string\n readonly endpoint?: string\n readonly fetch?: typeof globalThis.fetch\n readonly headers?: Readonly<Record<string, string>>\n readonly timeoutMs?: number\n readonly userEndpoint?: string\n readonly webSocket?: typeof globalThis.WebSocket\n}\n\nexport interface ResolvedErpcClientConfig {\n readonly accountEndpoint: URL\n readonly apiKey: string\n readonly avalancheEndpoint: URL\n readonly endpoint: URL\n readonly fetch: typeof globalThis.fetch\n readonly headers: Readonly<Record<string, string>>\n readonly timeoutMs: number\n readonly userEndpoint: URL\n readonly webSocket?: typeof globalThis.WebSocket\n}\n\nconst requireFetch = (provided?: typeof globalThis.fetch) => {\n const implementation = provided ?? globalThis.fetch\n if (typeof implementation !== 'function') {\n throw new ErpcConfigError(\n 'A Fetch API implementation is required in this runtime',\n )\n }\n return implementation\n}\n\nexport const resolveConfig = (\n config: ErpcClientConfig,\n): ResolvedErpcClientConfig => {\n const apiKey = config.apiKey.trim()\n if (!apiKey) throw new ErpcConfigError('apiKey must not be empty')\n\n let endpoint: URL\n let avalancheEndpoint: URL\n let accountEndpoint: URL\n let userEndpoint: URL\n try {\n endpoint = new URL(config.endpoint ?? DEFAULT_ENDPOINT)\n avalancheEndpoint = new URL(\n config.avalancheEndpoint ?? DEFAULT_AVALANCHE_ENDPOINT,\n )\n accountEndpoint = new URL(\n config.accountEndpoint ?? DEFAULT_ACCOUNT_ENDPOINT,\n )\n userEndpoint = new URL(config.userEndpoint ?? DEFAULT_USER_ENDPOINT)\n } catch {\n throw new ErpcConfigError('endpoint must be an absolute HTTP(S) URL')\n }\n\n if (endpoint.protocol !== 'https:' && endpoint.protocol !== 'http:') {\n throw new ErpcConfigError('endpoint must use HTTP or HTTPS')\n }\n if (\n avalancheEndpoint.protocol !== 'https:' &&\n avalancheEndpoint.protocol !== 'http:'\n ) {\n throw new ErpcConfigError('avalancheEndpoint must use HTTP or HTTPS')\n }\n if (\n accountEndpoint.protocol !== 'https:' &&\n accountEndpoint.protocol !== 'http:'\n ) {\n throw new ErpcConfigError('accountEndpoint must use HTTP or HTTPS')\n }\n if (\n userEndpoint.protocol !== 'https:' &&\n userEndpoint.protocol !== 'http:'\n ) {\n throw new ErpcConfigError('userEndpoint must use HTTP or HTTPS')\n }\n\n endpoint.search = ''\n endpoint.hash = ''\n endpoint.pathname = endpoint.pathname.replace(/\\/+$/, '') || '/'\n avalancheEndpoint.search = ''\n avalancheEndpoint.hash = ''\n avalancheEndpoint.pathname =\n avalancheEndpoint.pathname.replace(/\\/+$/, '') || '/'\n accountEndpoint.search = ''\n accountEndpoint.hash = ''\n accountEndpoint.pathname =\n accountEndpoint.pathname.replace(/\\/+$/, '') || '/'\n userEndpoint.search = ''\n userEndpoint.hash = ''\n userEndpoint.pathname = userEndpoint.pathname.replace(/\\/+$/, '') || '/'\n\n const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS\n if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n throw new ErpcConfigError('timeoutMs must be a positive finite number')\n }\n\n return {\n accountEndpoint,\n apiKey,\n avalancheEndpoint,\n endpoint,\n fetch: requireFetch(config.fetch),\n headers: config.headers ?? {},\n timeoutMs,\n userEndpoint,\n ...(config.webSocket === undefined\n ? {}\n : { webSocket: config.webSocket }),\n }\n}\n\nexport const endpointWithPath = (endpoint: URL, path: string): URL => {\n const url = new URL(endpoint)\n const base = endpoint.pathname === '/' ? '' : endpoint.pathname\n url.pathname = `${base}/${path.replace(/^\\/+/, '')}`.replace(/\\/{2,}/g, '/')\n return url\n}\n\nexport const websocketUrl = (\n endpoint: URL,\n apiKey: string,\n path = '',\n): URL => {\n const url = endpointWithPath(endpoint, path)\n url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:'\n url.searchParams.set('api-key', apiKey)\n return url\n}\n","import { ErpcInvalidResponseError } from './errors'\nimport type { RpcSendOptions } from './rpc/types'\nimport type { Query } from './transport/rest'\nimport { RestTransport } from './transport/rest'\n\nexport type PriceEncoding = 'base64' | 'hex'\nexport type PriceAssetType = 'crypto' | 'equity' | 'fx' | 'metal' | 'rates'\n\nexport interface PriceFeedMetadata {\n readonly attributes?: Readonly<Record<string, string>>\n readonly id: string\n}\n\nexport interface PricePoint {\n readonly conf: string\n readonly expo: number\n readonly price: string\n readonly publish_time: number\n}\n\nexport interface ParsedPriceUpdate {\n readonly ema_price: PricePoint\n readonly id: string\n readonly metadata?: {\n readonly prev_publish_time?: number\n readonly proof_available_time?: number\n readonly slot?: number\n }\n readonly price: PricePoint\n}\n\nexport interface BinaryUpdate {\n readonly data: readonly string[]\n readonly encoding: string\n}\n\nexport interface PriceUpdateResponse {\n readonly binary: BinaryUpdate\n readonly parsed?: readonly ParsedPriceUpdate[]\n}\n\nexport interface PriceUpdateOptions {\n readonly encoding?: PriceEncoding\n readonly ids: readonly string[]\n readonly ignoreInvalidPriceIds?: boolean\n readonly parsed?: boolean\n}\n\nexport interface PriceStreamOptions extends PriceUpdateOptions {\n readonly allowUnordered?: boolean\n readonly benchmarksOnly?: boolean\n}\n\nexport interface PublisherStakeCap {\n readonly cap: number\n readonly publisher: string\n}\n\nexport interface PublisherStakeCapsResponse {\n readonly binary: BinaryUpdate\n readonly parsed?: readonly {\n readonly publisher_stake_caps: readonly PublisherStakeCap[]\n }[]\n}\n\nexport interface PriceStreamEvent {\n readonly data: PriceUpdateResponse\n readonly event?: string\n readonly id?: string\n}\n\nconst updateQuery = (options: PriceUpdateOptions): Query => ({\n 'ids[]': options.ids,\n encoding: options.encoding,\n parsed: options.parsed,\n ignore_invalid_price_ids: options.ignoreInvalidPriceIds,\n})\n\nconst parseSseBlock = (block: string): PriceStreamEvent | null => {\n const data: string[] = []\n let event: string | undefined\n let id: string | undefined\n\n for (const line of block.split(/\\r?\\n/)) {\n if (!line || line.startsWith(':')) continue\n const separator = line.indexOf(':')\n const field = separator === -1 ? line : line.slice(0, separator)\n const raw = separator === -1 ? '' : line.slice(separator + 1)\n const value = raw.startsWith(' ') ? raw.slice(1) : raw\n if (field === 'data') data.push(value)\n else if (field === 'event') event = value\n else if (field === 'id') id = value\n }\n\n if (data.length === 0) return null\n let parsed: PriceUpdateResponse\n try {\n parsed = JSON.parse(data.join('\\n')) as PriceUpdateResponse\n } catch {\n throw new ErpcInvalidResponseError('ERPC returned malformed stream data')\n }\n const result: {\n data: PriceUpdateResponse\n event?: string\n id?: string\n } = { data: parsed }\n if (event !== undefined) result.event = event\n if (id !== undefined) result.id = id\n return result\n}\n\nexport class PriceClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n getPriceFeeds(\n options: {\n readonly assetType?: PriceAssetType\n readonly query?: string\n } = {},\n sendOptions?: RpcSendOptions,\n ): Promise<readonly PriceFeedMetadata[]> {\n return this.#transport.get(\n '/v2/price_feeds',\n { query: options.query, asset_type: options.assetType },\n sendOptions,\n )\n }\n\n getLatestPriceUpdates(\n options: PriceUpdateOptions,\n sendOptions?: RpcSendOptions,\n ): Promise<PriceUpdateResponse> {\n return this.#transport.get(\n '/v2/updates/price/latest',\n updateQuery(options),\n sendOptions,\n )\n }\n\n getPriceUpdatesAtTimestamp(\n publishTime: number | string,\n options: PriceUpdateOptions,\n sendOptions?: RpcSendOptions,\n ): Promise<PriceUpdateResponse> {\n return this.#transport.get(\n `/v2/updates/price/${encodeURIComponent(String(publishTime))}`,\n updateQuery(options),\n sendOptions,\n )\n }\n\n getLatestPublisherStakeCaps(\n options: { readonly encoding?: PriceEncoding; readonly parsed?: boolean } = {},\n sendOptions?: RpcSendOptions,\n ): Promise<PublisherStakeCapsResponse> {\n return this.#transport.get(\n '/v2/updates/publisher_stake_caps/latest',\n options,\n sendOptions,\n )\n }\n\n async *streamPriceUpdates(\n options: PriceStreamOptions,\n sendOptions?: RpcSendOptions,\n ): AsyncGenerator<PriceStreamEvent, void, undefined> {\n const stream = await this.#transport.stream(\n '/v2/updates/price/stream',\n {\n ...updateQuery(options),\n allow_unordered: options.allowUnordered,\n benchmarks_only: options.benchmarksOnly,\n },\n sendOptions,\n )\n const response = stream.response\n if (!response.body) {\n stream.close()\n throw new ErpcInvalidResponseError('ERPC returned an empty stream')\n }\n\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n try {\n while (true) {\n const { done, value } = await reader.read()\n buffer += decoder.decode(value, { stream: !done })\n let boundary = buffer.search(/\\r?\\n\\r?\\n/)\n while (boundary !== -1) {\n const separatorLength = buffer.slice(boundary).startsWith('\\r\\n')\n ? 4\n : 2\n const block = buffer.slice(0, boundary)\n buffer = buffer.slice(boundary + separatorLength)\n const event = parseSseBlock(block)\n if (event) yield event\n boundary = buffer.search(/\\r?\\n\\r?\\n/)\n }\n if (done) break\n }\n const finalEvent = parseSseBlock(buffer)\n if (finalEvent) yield finalEvent\n } catch (error) {\n throw stream.normalizeError(error)\n } finally {\n try {\n await reader.cancel()\n } catch {\n // Preserve the original stream result or error.\n } finally {\n reader.releaseLock()\n stream.close()\n }\n }\n }\n}\n","import type {\n JsonRpcParams,\n RpcBatchCall,\n RpcMethodSpec,\n RpcParams,\n RpcResult,\n RpcSendOptions,\n} from './types'\n\nexport interface JsonRpcTransport {\n readonly endpoint: string\n readonly maxBatchSize: number\n\n batch<TResult extends readonly unknown[]>(\n calls: readonly RpcBatchCall[],\n options?: RpcSendOptions,\n ): Promise<TResult>\n\n request<TResult>(\n method: string,\n params?: JsonRpcParams,\n options?: RpcSendOptions,\n ): Promise<TResult>\n}\n\nexport class PendingRpcRequest<TResult> {\n readonly #send: (options?: RpcSendOptions) => Promise<TResult>\n\n constructor(send: (options?: RpcSendOptions) => Promise<TResult>) {\n this.#send = send\n }\n\n send(options?: RpcSendOptions): Promise<TResult> {\n return this.#send(options)\n }\n}\n\nexport class PendingRpcBatchRequest<TResult extends readonly unknown[]> {\n readonly #send: (options?: RpcSendOptions) => Promise<TResult>\n\n constructor(send: (options?: RpcSendOptions) => Promise<TResult>) {\n this.#send = send\n }\n\n send(options?: RpcSendOptions): Promise<TResult> {\n return this.#send(options)\n }\n}\n\ntype SchemaConstraint<TSchema> = {\n readonly [TMethod in keyof TSchema]: RpcMethodSpec<\n JsonRpcParams | undefined,\n unknown\n >\n}\n\ntype MethodName<TSchema> = Extract<keyof TSchema, string>\n\ntype MethodFunction<TSpec> = TSpec extends RpcMethodSpec<\n infer TParams,\n infer TResult\n>\n ? TParams extends readonly unknown[]\n ? (...params: TParams) => PendingRpcRequest<TResult>\n : TParams extends object\n ? (params: TParams) => PendingRpcRequest<TResult>\n : () => PendingRpcRequest<TResult>\n : never\n\ntype BatchCall<TSchema> = {\n readonly [TMethod in MethodName<TSchema>]: RpcParams<\n TSchema[TMethod]\n > extends undefined\n ? { readonly method: TMethod; readonly params?: undefined }\n : {\n readonly method: TMethod\n readonly params: RpcParams<TSchema[TMethod]>\n }\n}[MethodName<TSchema>]\n\ntype BatchResults<\n TSchema,\n TCalls extends readonly BatchCall<TSchema>[],\n> = {\n readonly [TIndex in keyof TCalls]: TCalls[TIndex] extends {\n readonly method: infer TMethod\n }\n ? TMethod extends MethodName<TSchema>\n ? RpcResult<TSchema[TMethod]>\n : never\n : never\n}\n\nexport interface RpcNamespaceBase<TSchema> {\n readonly endpoint: string\n\n batch<const TCalls extends readonly BatchCall<TSchema>[]>(\n calls: TCalls,\n ): PendingRpcBatchRequest<BatchResults<TSchema, TCalls>>\n\n raw<TResult = unknown>(\n method: string,\n params?: JsonRpcParams,\n ): PendingRpcRequest<TResult>\n\n request<TMethod extends MethodName<TSchema>>(\n method: TMethod,\n ...params: RpcParams<TSchema[TMethod]> extends undefined\n ? []\n : [params: RpcParams<TSchema[TMethod]>]\n ): PendingRpcRequest<RpcResult<TSchema[TMethod]>>\n}\n\nexport type RpcNamespace<TSchema extends SchemaConstraint<TSchema>> =\n RpcNamespaceBase<TSchema> & {\n readonly [TMethod in MethodName<TSchema>]: MethodFunction<TSchema[TMethod]>\n }\n\nexport interface CreateRpcNamespaceConfig {\n readonly parameterMode: 'named' | 'positional'\n readonly transport: JsonRpcTransport\n readonly validateBatch?: (calls: readonly RpcBatchCall[]) => void\n}\n\nconst methodParams = (\n mode: CreateRpcNamespaceConfig['parameterMode'],\n args: readonly unknown[],\n): JsonRpcParams | undefined => {\n if (mode === 'positional') return args\n if (args.length === 0) return undefined\n return args[0] as object\n}\n\nexport const createRpcNamespace = <\n TSchema extends SchemaConstraint<TSchema>,\n>(config: CreateRpcNamespaceConfig): RpcNamespace<TSchema> => {\n const base: RpcNamespaceBase<TSchema> = {\n endpoint: config.transport.endpoint,\n batch: <const TCalls extends readonly BatchCall<TSchema>[]>(calls: TCalls) => {\n const wireCalls = calls as readonly RpcBatchCall[]\n config.validateBatch?.(wireCalls)\n return new PendingRpcBatchRequest((options) =>\n config.transport.batch<BatchResults<TSchema, TCalls>>(\n wireCalls,\n options,\n ),\n )\n },\n raw: <TResult>(method: string, params?: JsonRpcParams) =>\n new PendingRpcRequest<TResult>((options) =>\n config.transport.request<TResult>(method, params, options),\n ),\n request: <TMethod extends MethodName<TSchema>>(\n method: TMethod,\n ...params: RpcParams<TSchema[TMethod]> extends undefined\n ? []\n : [params: RpcParams<TSchema[TMethod]>]\n ) =>\n new PendingRpcRequest<RpcResult<TSchema[TMethod]>>((options) =>\n config.transport.request<RpcResult<TSchema[TMethod]>>(\n method,\n params[0] as JsonRpcParams | undefined,\n options,\n ),\n ),\n }\n\n return new Proxy(base as RpcNamespace<TSchema>, {\n get(target, property, receiver) {\n if (typeof property !== 'string' || property in target) {\n return Reflect.get(target, property, receiver) as unknown\n }\n if (property === 'then') return undefined\n return (...args: readonly unknown[]) =>\n new PendingRpcRequest((options) =>\n config.transport.request(\n property,\n methodParams(config.parameterMode, args),\n options,\n ),\n )\n },\n })\n}\n","import type { HttpJsonRpcTransport } from '../transport/http'\nimport { createRpcNamespace, type RpcNamespace } from './client'\nimport type { JsonValue, RpcMethodSpec } from './types'\n\nexport type Hex = `0x${string}`\nexport type EthereumAddress = Hex\nexport type EthereumBlockTag =\n | 'earliest'\n | 'finalized'\n | 'latest'\n | 'pending'\n | 'safe'\n | Hex\n\nexport type EthereumObject = Readonly<Record<string, unknown>>\nexport type EthereumTransactionRequest = EthereumObject\nexport type EthereumFilter = EthereumObject\n\nexport interface EthereumRpcSchema {\n readonly eth_accounts: RpcMethodSpec<readonly [], readonly EthereumAddress[]>\n readonly eth_baseFee: RpcMethodSpec<readonly [], Hex>\n readonly eth_blobBaseFee: RpcMethodSpec<readonly [], Hex>\n readonly eth_blockNumber: RpcMethodSpec<readonly [], Hex>\n readonly eth_call: RpcMethodSpec<\n readonly [\n transaction: EthereumTransactionRequest,\n block?: EthereumBlockTag,\n stateOverride?: EthereumObject,\n ],\n Hex\n >\n readonly eth_callMany: RpcMethodSpec<\n readonly [\n calls: readonly EthereumObject[],\n simulationContext?: EthereumObject,\n stateOverride?: EthereumObject,\n timeout?: number,\n ],\n JsonValue\n >\n readonly eth_capabilities: RpcMethodSpec<readonly [], JsonValue>\n readonly eth_chainId: RpcMethodSpec<readonly [], Hex>\n readonly eth_createAccessList: RpcMethodSpec<\n readonly [\n transaction: EthereumTransactionRequest,\n block?: EthereumBlockTag,\n ],\n JsonValue\n >\n readonly eth_estimateGas: RpcMethodSpec<\n readonly [\n transaction: EthereumTransactionRequest,\n block?: EthereumBlockTag,\n stateOverride?: EthereumObject,\n ],\n Hex\n >\n readonly eth_feeHistory: RpcMethodSpec<\n readonly [\n blockCount: Hex,\n newestBlock: EthereumBlockTag,\n rewardPercentiles: readonly number[],\n ],\n JsonValue\n >\n readonly eth_gasPrice: RpcMethodSpec<readonly [], Hex>\n readonly eth_getAccount: RpcMethodSpec<\n readonly [address: EthereumAddress, block: EthereumBlockTag],\n JsonValue\n >\n readonly eth_getBalance: RpcMethodSpec<\n readonly [address: EthereumAddress, block?: EthereumBlockTag],\n Hex\n >\n readonly eth_getBlockByHash: RpcMethodSpec<\n readonly [hash: Hex, includeTransactions: boolean],\n JsonValue | null\n >\n readonly eth_getBlockByNumber: RpcMethodSpec<\n readonly [block: EthereumBlockTag, includeTransactions: boolean],\n JsonValue | null\n >\n readonly eth_getBlockReceipts: RpcMethodSpec<\n readonly [block: EthereumBlockTag],\n JsonValue | null\n >\n readonly eth_getBlockTransactionCountByHash: RpcMethodSpec<\n readonly [hash: Hex],\n Hex | null\n >\n readonly eth_getBlockTransactionCountByNumber: RpcMethodSpec<\n readonly [block: EthereumBlockTag],\n Hex | null\n >\n readonly eth_getCode: RpcMethodSpec<\n readonly [address: EthereumAddress, block?: EthereumBlockTag],\n Hex\n >\n readonly eth_getFilterChanges: RpcMethodSpec<readonly [filterId: Hex], JsonValue>\n readonly eth_getFilterLogs: RpcMethodSpec<readonly [filterId: Hex], JsonValue>\n readonly eth_getLogs: RpcMethodSpec<\n readonly [filter?: EthereumFilter],\n JsonValue\n >\n readonly eth_getProof: RpcMethodSpec<\n readonly [\n address: EthereumAddress,\n storageKeys: readonly Hex[],\n block: EthereumBlockTag,\n ],\n JsonValue\n >\n readonly eth_getRawTransactionByHash: RpcMethodSpec<\n readonly [hash: Hex],\n Hex | null\n >\n readonly eth_getStorageAt: RpcMethodSpec<\n readonly [\n address: EthereumAddress,\n position: Hex,\n block?: EthereumBlockTag,\n ],\n Hex\n >\n readonly eth_getTransactionByBlockHashAndIndex: RpcMethodSpec<\n readonly [blockHash: Hex, index: Hex],\n JsonValue | null\n >\n readonly eth_getTransactionByBlockNumberAndIndex: RpcMethodSpec<\n readonly [block: EthereumBlockTag, index: Hex],\n JsonValue | null\n >\n readonly eth_getTransactionByHash: RpcMethodSpec<\n readonly [hash: Hex],\n JsonValue | null\n >\n readonly eth_getTransactionBySenderAndNonce: RpcMethodSpec<\n readonly [sender: EthereumAddress, nonce: Hex],\n JsonValue | null\n >\n readonly eth_getTransactionCount: RpcMethodSpec<\n readonly [address: EthereumAddress, block?: EthereumBlockTag],\n Hex\n >\n readonly eth_getTransactionReceipt: RpcMethodSpec<\n readonly [hash: Hex],\n JsonValue | null\n >\n readonly eth_getUncleCountByBlockHash: RpcMethodSpec<\n readonly [hash: Hex],\n Hex\n >\n readonly eth_getUncleCountByBlockNumber: RpcMethodSpec<\n readonly [block: EthereumBlockTag],\n Hex\n >\n readonly eth_maxPriorityFeePerGas: RpcMethodSpec<readonly [], Hex>\n readonly eth_newBlockFilter: RpcMethodSpec<readonly [], Hex>\n readonly eth_newFilter: RpcMethodSpec<\n readonly [filter?: EthereumFilter],\n Hex\n >\n readonly eth_newPendingTransactionFilter: RpcMethodSpec<readonly [], Hex>\n readonly eth_sendRawTransaction: RpcMethodSpec<\n readonly [transaction: Hex],\n Hex\n >\n readonly eth_signTransaction: RpcMethodSpec<\n readonly [transaction: EthereumTransactionRequest],\n Hex\n >\n readonly eth_simulateV1: RpcMethodSpec<\n readonly [simulation: EthereumObject, block?: EthereumBlockTag],\n JsonValue\n >\n readonly eth_submitWork: RpcMethodSpec<\n readonly [nonce: Hex, proofOfWorkHash: Hex, digest: Hex],\n boolean\n >\n readonly eth_syncing: RpcMethodSpec<readonly [], boolean | JsonValue>\n readonly eth_uninstallFilter: RpcMethodSpec<readonly [filterId: Hex], boolean>\n readonly net_listening: RpcMethodSpec<readonly [], boolean>\n readonly net_peerCount: RpcMethodSpec<readonly [], Hex>\n readonly net_version: RpcMethodSpec<readonly [], string>\n readonly txpool_content: RpcMethodSpec<readonly [], JsonValue>\n readonly txpool_contentFrom: RpcMethodSpec<\n readonly [address: EthereumAddress],\n JsonValue\n >\n readonly txpool_inspect: RpcMethodSpec<readonly [], JsonValue>\n readonly txpool_status: RpcMethodSpec<readonly [], JsonValue>\n readonly web3_clientVersion: RpcMethodSpec<readonly [], string>\n readonly web3_sha3: RpcMethodSpec<readonly [data: Hex], Hex>\n}\n\nexport interface EthereumSubscriptionSchema {\n readonly eth_subscribe: RpcMethodSpec<\n readonly [subscription: string, ...options: readonly unknown[]],\n string\n >\n readonly eth_unsubscribe: RpcMethodSpec<\n readonly [subscriptionId: string],\n boolean\n >\n}\n\nexport const ETHEREUM_RPC_METHODS = [\n 'eth_accounts',\n 'eth_baseFee',\n 'eth_blobBaseFee',\n 'eth_blockNumber',\n 'eth_call',\n 'eth_callMany',\n 'eth_capabilities',\n 'eth_chainId',\n 'eth_createAccessList',\n 'eth_estimateGas',\n 'eth_feeHistory',\n 'eth_gasPrice',\n 'eth_getAccount',\n 'eth_getBalance',\n 'eth_getBlockByHash',\n 'eth_getBlockByNumber',\n 'eth_getBlockReceipts',\n 'eth_getBlockTransactionCountByHash',\n 'eth_getBlockTransactionCountByNumber',\n 'eth_getCode',\n 'eth_getFilterChanges',\n 'eth_getFilterLogs',\n 'eth_getLogs',\n 'eth_getProof',\n 'eth_getRawTransactionByHash',\n 'eth_getStorageAt',\n 'eth_getTransactionByBlockHashAndIndex',\n 'eth_getTransactionByBlockNumberAndIndex',\n 'eth_getTransactionByHash',\n 'eth_getTransactionBySenderAndNonce',\n 'eth_getTransactionCount',\n 'eth_getTransactionReceipt',\n 'eth_getUncleCountByBlockHash',\n 'eth_getUncleCountByBlockNumber',\n 'eth_maxPriorityFeePerGas',\n 'eth_newBlockFilter',\n 'eth_newFilter',\n 'eth_newPendingTransactionFilter',\n 'eth_sendRawTransaction',\n 'eth_signTransaction',\n 'eth_simulateV1',\n 'eth_submitWork',\n 'eth_syncing',\n 'eth_uninstallFilter',\n 'net_listening',\n 'net_peerCount',\n 'net_version',\n 'txpool_content',\n 'txpool_contentFrom',\n 'txpool_inspect',\n 'txpool_status',\n 'web3_clientVersion',\n 'web3_sha3',\n] as const satisfies readonly (keyof EthereumRpcSchema)[]\n\nexport const ETHEREUM_SUBSCRIPTION_METHODS = [\n 'eth_subscribe',\n 'eth_unsubscribe',\n] as const satisfies readonly (keyof EthereumSubscriptionSchema)[]\n\nexport interface EthereumClient {\n readonly rpc: RpcNamespace<EthereumRpcSchema>\n}\n\nexport const createEthereumClient = (\n transport: HttpJsonRpcTransport,\n): EthereumClient => ({\n rpc: createRpcNamespace<EthereumRpcSchema>({\n transport,\n parameterMode: 'positional',\n }),\n})\n","import { ErpcBatchPolicyError } from '../errors'\nimport type { HttpJsonRpcTransport } from '../transport/http'\nimport { createRpcNamespace, type RpcNamespace } from './client'\nimport type {\n JsonObject,\n JsonValue,\n RpcBatchCall,\n RpcMethodSpec,\n} from './types'\n\nexport type SolanaCommitment = 'confirmed' | 'finalized' | 'processed'\nexport type SolanaEncoding = 'base58' | 'base64' | 'base64+zstd' | 'jsonParsed'\nexport type SolanaConfig = Readonly<Record<string, unknown>>\n\nexport interface SolanaContext {\n readonly apiVersion?: string\n readonly slot: number\n}\n\nexport interface SolanaContextResult<TValue> {\n readonly context: SolanaContext\n readonly value: TValue\n}\n\nexport interface PriorityFeeEstimate {\n readonly priorityFeeEstimate: number\n readonly [key: string]: unknown\n}\n\nexport interface SolanaRpcSchema {\n readonly getAccountInfo: RpcMethodSpec<\n readonly [address: string, config?: SolanaConfig],\n SolanaContextResult<JsonValue | null>\n >\n readonly getBalance: RpcMethodSpec<\n readonly [address: string, config?: SolanaConfig],\n SolanaContextResult<number>\n >\n readonly getBlock: RpcMethodSpec<\n readonly [slot: number, config?: SolanaConfig],\n JsonValue | null\n >\n readonly getBlockCommitment: RpcMethodSpec<\n readonly [slot: number],\n JsonValue\n >\n readonly getBlockHeight: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n number\n >\n readonly getBlockProduction: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getBlockTime: RpcMethodSpec<\n readonly [slot: number],\n number | null\n >\n readonly getBlocks: RpcMethodSpec<\n readonly [startSlot: number, endSlot?: number, commitment?: SolanaCommitment],\n readonly number[]\n >\n readonly getBlocksWithLimit: RpcMethodSpec<\n readonly [startSlot: number, limit: number, commitment?: SolanaCommitment],\n readonly number[]\n >\n readonly getClusterNodes: RpcMethodSpec<readonly [], JsonValue>\n readonly getEpochInfo: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getEpochSchedule: RpcMethodSpec<readonly [], JsonValue>\n readonly getFeeForMessage: RpcMethodSpec<\n readonly [message: string, config?: SolanaConfig],\n SolanaContextResult<number | null>\n >\n readonly getFirstAvailableBlock: RpcMethodSpec<readonly [], number>\n readonly getGenesisHash: RpcMethodSpec<readonly [], string>\n readonly getHealth: RpcMethodSpec<readonly [], string>\n readonly getHighestSnapshotSlot: RpcMethodSpec<readonly [], JsonValue>\n readonly getIdentity: RpcMethodSpec<readonly [], JsonValue>\n readonly getInflationGovernor: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getInflationRate: RpcMethodSpec<readonly [], JsonValue>\n readonly getInflationReward: RpcMethodSpec<\n readonly [addresses: readonly string[], config?: SolanaConfig],\n JsonValue\n >\n readonly getLargestAccounts: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getLatestBlockhash: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getLeaderSchedule: RpcMethodSpec<\n readonly [slot?: number | null, config?: SolanaConfig],\n JsonValue | null\n >\n readonly getMaxRetransmitSlot: RpcMethodSpec<readonly [], number>\n readonly getMaxShredInsertSlot: RpcMethodSpec<readonly [], number>\n readonly getMinimumBalanceForRentExemption: RpcMethodSpec<\n readonly [dataLength: number, config?: SolanaConfig],\n number\n >\n readonly getMultipleAccounts: RpcMethodSpec<\n readonly [addresses: readonly string[], config?: SolanaConfig],\n SolanaContextResult<JsonValue>\n >\n readonly getParsedTransaction: RpcMethodSpec<\n readonly [signature: string, config?: SolanaConfig],\n JsonValue | null\n >\n readonly getPriorityFeeEstimate: RpcMethodSpec<\n readonly [request: SolanaConfig],\n PriorityFeeEstimate\n >\n readonly getProgramAccounts: RpcMethodSpec<\n readonly [programAddress: string, config?: SolanaConfig],\n JsonValue\n >\n readonly getProgramAccountsV2: RpcMethodSpec<\n readonly [programAddress: string, config: SolanaConfig],\n JsonValue\n >\n readonly getRecentPerformanceSamples: RpcMethodSpec<\n readonly [limit?: number],\n JsonValue\n >\n readonly getRecentPrioritizationFees: RpcMethodSpec<\n readonly [addresses?: readonly string[]],\n JsonValue\n >\n readonly getSignatureStatuses: RpcMethodSpec<\n readonly [signatures: readonly string[], config?: SolanaConfig],\n JsonValue\n >\n readonly getSignaturesForAddress: RpcMethodSpec<\n readonly [address: string, config?: SolanaConfig],\n JsonValue\n >\n readonly getSlot: RpcMethodSpec<readonly [config?: SolanaConfig], number>\n readonly getSlotLeader: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n string\n >\n readonly getSlotLeaders: RpcMethodSpec<\n readonly [startSlot: number, limit: number],\n readonly string[]\n >\n readonly getStakeMinimumDelegation: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n SolanaContextResult<number>\n >\n readonly getSupply: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getTokenAccountBalance: RpcMethodSpec<\n readonly [address: string, config?: SolanaConfig],\n JsonValue\n >\n readonly getTokenAccountsByDelegate: RpcMethodSpec<\n readonly [delegate: string, filter: SolanaConfig, config?: SolanaConfig],\n JsonValue\n >\n readonly getTokenAccountsByOwner: RpcMethodSpec<\n readonly [owner: string, filter: SolanaConfig, config?: SolanaConfig],\n JsonValue\n >\n readonly getTokenLargestAccounts: RpcMethodSpec<\n readonly [mint: string, config?: SolanaConfig],\n JsonValue\n >\n readonly getTokenSupply: RpcMethodSpec<\n readonly [mint: string, config?: SolanaConfig],\n JsonValue\n >\n readonly getTransaction: RpcMethodSpec<\n readonly [signature: string, config?: SolanaConfig],\n JsonValue | null\n >\n readonly getTransactionCount: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n number\n >\n readonly getVersion: RpcMethodSpec<readonly [], JsonObject>\n readonly getVoteAccounts: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly isBlockhashValid: RpcMethodSpec<\n readonly [blockhash: string, config?: SolanaConfig],\n SolanaContextResult<boolean>\n >\n readonly minimumLedgerSlot: RpcMethodSpec<readonly [], number>\n readonly requestAirdrop: RpcMethodSpec<\n readonly [address: string, lamports: number, config?: SolanaConfig],\n string\n >\n readonly sendTransaction: RpcMethodSpec<\n readonly [transaction: string, config?: SolanaConfig],\n string\n >\n readonly simulateTransaction: RpcMethodSpec<\n readonly [transaction: string, config?: SolanaConfig],\n JsonValue\n >\n}\n\nexport interface AssetRequest {\n readonly id: string\n readonly displayOptions?: Readonly<Record<string, boolean>>\n}\n\nexport interface AssetBatchRequest {\n readonly ids: readonly string[]\n readonly displayOptions?: Readonly<Record<string, boolean>>\n}\n\nexport interface AssetListRequest {\n readonly cursor?: string\n readonly limit?: number\n readonly page?: number\n readonly [key: string]: unknown\n}\n\nexport type IndexedAsset = Readonly<Record<string, unknown>>\nexport type IndexedAssetProof = Readonly<Record<string, unknown>>\n\nexport interface IndexedAssetList<TItem = IndexedAsset> {\n readonly cursor?: string\n readonly items: readonly TItem[]\n readonly limit?: number\n readonly page?: number\n readonly total?: number\n readonly [key: string]: unknown\n}\n\nexport interface SolanaDasSchema {\n readonly getAsset: RpcMethodSpec<AssetRequest, IndexedAsset | null>\n readonly getAssetBatch: RpcMethodSpec<\n AssetBatchRequest,\n readonly (IndexedAsset | null)[]\n >\n readonly getAssetProof: RpcMethodSpec<AssetRequest, IndexedAssetProof | null>\n readonly getAssetProofBatch: RpcMethodSpec<\n AssetBatchRequest,\n readonly (IndexedAssetProof | null)[]\n >\n readonly getAssetsByAuthority: RpcMethodSpec<\n AssetListRequest & { readonly authorityAddress: string },\n IndexedAssetList\n >\n readonly getAssetsByCreator: RpcMethodSpec<\n AssetListRequest & {\n readonly creatorAddress: string\n readonly onlyVerified?: boolean\n },\n IndexedAssetList\n >\n readonly getAssetsByGroup: RpcMethodSpec<\n AssetListRequest & {\n readonly groupKey: string\n readonly groupValue: string\n },\n IndexedAssetList\n >\n readonly getAssetsByOwner: RpcMethodSpec<\n AssetListRequest & { readonly ownerAddress: string },\n IndexedAssetList\n >\n readonly getNftEditions: RpcMethodSpec<\n AssetListRequest & { readonly mint: string },\n Readonly<Record<string, unknown>>\n >\n readonly getSignaturesForAsset: RpcMethodSpec<\n AssetListRequest & { readonly id: string },\n Readonly<Record<string, unknown>>\n >\n readonly getTokenAccounts: RpcMethodSpec<\n AssetListRequest,\n Readonly<Record<string, unknown>>\n >\n readonly getTokensByDelegate: RpcMethodSpec<\n AssetListRequest & { readonly delegate: string },\n Readonly<Record<string, unknown>>\n >\n readonly getTokensByOwner: RpcMethodSpec<\n AssetListRequest & { readonly owner: string },\n Readonly<Record<string, unknown>>\n >\n readonly searchAssets: RpcMethodSpec<AssetListRequest, IndexedAssetList>\n}\n\nexport interface NumericFilter {\n readonly eq?: number\n readonly gt?: number\n readonly gte?: number\n readonly lt?: number\n readonly lte?: number\n}\n\nexport interface AddressTransactionsOptions {\n readonly before?: string\n readonly commitment?: SolanaCommitment\n readonly encoding?: 'base58' | 'base64' | 'json'\n readonly filters?: Readonly<Record<string, unknown>>\n readonly limit?: number\n readonly maxSupportedTransactionVersion?: number\n readonly paginationToken?: string\n readonly sortOrder?: 'asc' | 'desc'\n readonly transactionDetails?: 'full' | 'signatures'\n readonly until?: string\n}\n\nexport interface AddressTransaction {\n readonly blockTime: number | null\n readonly confirmationStatus: SolanaCommitment\n readonly err: unknown\n readonly memo: string | null\n readonly meta?: unknown\n readonly signature: string\n readonly slot: number\n readonly transaction?: unknown\n readonly transactionIndex: number\n readonly version?: unknown\n readonly [key: string]: unknown\n}\n\nexport interface AddressTransactionPage {\n readonly data: readonly AddressTransaction[]\n readonly paginationToken: string | null\n readonly windowStart: number | null\n}\n\nexport interface AddressTransfersOptions {\n readonly commitment?: SolanaCommitment\n readonly direction?: 'any' | 'in' | 'out'\n readonly filters?: {\n readonly amount?: NumericFilter\n readonly blockTime?: NumericFilter\n readonly slot?: NumericFilter\n }\n readonly limit?: number\n readonly mint?: string\n readonly paginationToken?: string\n readonly solMode?: 'merged' | 'separate'\n readonly sortOrder?: 'asc' | 'desc'\n readonly with?: string\n}\n\nexport interface AddressTransfer {\n readonly amount: string\n readonly blockTime: number | null\n readonly confirmationStatus: 'finalized'\n readonly decimals: number\n readonly feeAmount: string | null\n readonly feeUiAmount: string | null\n readonly fromTokenAccount: string | null\n readonly fromUserAccount: string | null\n readonly innerInstructionIdx: number\n readonly instructionIdx: number\n readonly mint: string | null\n readonly signature: string\n readonly slot: number\n readonly toTokenAccount: string | null\n readonly toUserAccount: string | null\n readonly transactionIdx: number\n readonly type:\n | 'burn'\n | 'changeOwner'\n | 'mint'\n | 'transfer'\n | 'unwrap'\n | 'withdrawWithheldFee'\n | 'wrap'\n readonly uiAmount: string\n readonly [key: string]: unknown\n}\n\nexport interface AddressTransferPage {\n readonly data: readonly AddressTransfer[]\n readonly paginationToken: string | null\n readonly windowStart: number | null\n}\n\nexport interface SolanaHistorySchema {\n readonly getTransactionsForAddress: RpcMethodSpec<\n readonly [address: string, options?: AddressTransactionsOptions],\n AddressTransactionPage | null\n >\n readonly getTransfersByAddress: RpcMethodSpec<\n readonly [address: string, options?: AddressTransfersOptions],\n AddressTransferPage\n >\n}\n\nexport interface PingMeasurement {\n readonly city: string | null\n readonly country: string | null\n readonly fromIp: string | null\n readonly icmpReplied: boolean\n readonly lat: number | null\n readonly lon: number | null\n readonly measuredAt: string | null\n readonly ms: number | null\n readonly org: string | null\n readonly postal: string | null\n readonly region: string | null\n readonly timezone: string | null\n readonly [key: string]: unknown\n}\n\nexport interface LeaderSlot {\n readonly epoch: number\n readonly featureSet: string | null\n readonly gossipPort: number | null\n readonly gossipUpdatedAt: string | null\n readonly identity: string\n readonly ipAddress: string | null\n readonly leaderCity: string | null\n readonly leaderCountry: string | null\n readonly leaderLat: number | null\n readonly leaderLon: number | null\n readonly leaderOrg: string | null\n readonly leaderRegion: string | null\n readonly leaderTimezone: string | null\n readonly pingToLeaders: readonly PingMeasurement[]\n readonly rpcAddress: string | null\n readonly slot: string\n readonly stakeWeight: number\n readonly tpuPort: number | null\n readonly tpuQuicPort: number | null\n readonly version: string | null\n readonly [key: string]: unknown\n}\n\nexport interface LeaderSlotsResult {\n readonly data: readonly LeaderSlot[]\n readonly message: string\n readonly success: boolean\n readonly total: number\n readonly [key: string]: unknown\n}\n\nexport interface ValidatorInformation\n extends Omit<LeaderSlot, 'epoch' | 'slot'> {\n readonly gossipNodeId: number | null\n readonly slotCount: number\n}\n\nexport interface ValidatorsInformationOptions {\n readonly country?: string\n readonly limit?: number\n readonly region?: string\n}\n\nexport interface ValidatorsInformationResult {\n readonly data: readonly ValidatorInformation[]\n readonly epoch: number\n readonly message: string\n readonly success: boolean\n readonly total: number\n readonly totalValidators: number\n readonly [key: string]: unknown\n}\n\nexport interface SolanaLeaderSchema {\n readonly getLeaderSlots: RpcMethodSpec<\n readonly [slot: number],\n LeaderSlotsResult\n >\n readonly getValidatorsInformation: RpcMethodSpec<\n readonly [options: ValidatorsInformationOptions],\n ValidatorsInformationResult\n >\n}\n\nexport type AnalyticsTimeBound = number | string\n\nexport interface TopProgramsOptions {\n readonly includeVotes?: boolean\n readonly limit?: number\n readonly since?: AnalyticsTimeBound\n readonly until?: AnalyticsTimeBound\n}\n\nexport interface TopProgramRow {\n readonly errors: string\n readonly invocations: string\n readonly program: string\n readonly total_cus: string\n readonly [key: string]: unknown\n}\n\nexport type SlotStatsOptions =\n | { readonly slot: number }\n | { readonly fromSlot: number; readonly toSlot: number }\n\nexport interface SlotStatsRow {\n readonly block_time: number\n readonly non_vote_transaction_count: number\n readonly slot: number\n readonly transaction_count: number\n readonly vote_transaction_count: number\n readonly [key: string]: unknown\n}\n\nexport interface TpsTimeseriesOptions {\n readonly bucketSec?: number\n readonly from: AnalyticsTimeBound\n readonly to: AnalyticsTimeBound\n}\n\nexport interface TpsBucket {\n readonly bucket: number\n readonly non_vote_tps: number\n readonly total_tps: number\n readonly [key: string]: unknown\n}\n\nexport interface EpochSummary {\n readonly distinct_programs: string\n readonly epoch: number\n readonly first_block_time: number\n readonly last_block_time: number\n readonly non_vote_txs: string\n readonly program_invocations: string\n readonly slots: string\n readonly total_txs: string\n readonly vote_txs: string\n readonly [key: string]: unknown\n}\n\nexport interface ProgramStatsOptions {\n readonly bucketSec?: number\n readonly programIdBase58: string\n readonly since?: AnalyticsTimeBound\n readonly until?: AnalyticsTimeBound\n}\n\nexport interface ProgramStatsBucket {\n readonly bucket: number\n readonly errors: string\n readonly invocations: string\n readonly total_cus: string\n readonly [key: string]: unknown\n}\n\nexport interface SolanaAnalyticsSchema {\n readonly jetEpochSummary: RpcMethodSpec<\n readonly [options: { readonly epoch: number }],\n EpochSummary | null\n >\n readonly jetProgramStats: RpcMethodSpec<\n readonly [options: ProgramStatsOptions],\n readonly ProgramStatsBucket[]\n >\n readonly jetSlotStats: RpcMethodSpec<\n readonly [options: SlotStatsOptions],\n readonly SlotStatsRow[]\n >\n readonly jetTopPrograms: RpcMethodSpec<\n readonly [options: TopProgramsOptions],\n readonly TopProgramRow[]\n >\n readonly jetTpsTimeseries: RpcMethodSpec<\n readonly [options: TpsTimeseriesOptions],\n readonly TpsBucket[]\n >\n}\n\nexport const SOLANA_RPC_METHODS = [\n 'getAccountInfo',\n 'getBalance',\n 'getBlock',\n 'getBlockCommitment',\n 'getBlockHeight',\n 'getBlockProduction',\n 'getBlockTime',\n 'getBlocks',\n 'getBlocksWithLimit',\n 'getClusterNodes',\n 'getEpochInfo',\n 'getEpochSchedule',\n 'getFeeForMessage',\n 'getFirstAvailableBlock',\n 'getGenesisHash',\n 'getHealth',\n 'getHighestSnapshotSlot',\n 'getIdentity',\n 'getInflationGovernor',\n 'getInflationRate',\n 'getInflationReward',\n 'getLargestAccounts',\n 'getLatestBlockhash',\n 'getLeaderSchedule',\n 'getMaxRetransmitSlot',\n 'getMaxShredInsertSlot',\n 'getMinimumBalanceForRentExemption',\n 'getMultipleAccounts',\n 'getParsedTransaction',\n 'getPriorityFeeEstimate',\n 'getProgramAccounts',\n 'getProgramAccountsV2',\n 'getRecentPerformanceSamples',\n 'getRecentPrioritizationFees',\n 'getSignatureStatuses',\n 'getSignaturesForAddress',\n 'getSlot',\n 'getSlotLeader',\n 'getSlotLeaders',\n 'getStakeMinimumDelegation',\n 'getSupply',\n 'getTokenAccountBalance',\n 'getTokenAccountsByDelegate',\n 'getTokenAccountsByOwner',\n 'getTokenLargestAccounts',\n 'getTokenSupply',\n 'getTransaction',\n 'getTransactionCount',\n 'getVersion',\n 'getVoteAccounts',\n 'isBlockhashValid',\n 'minimumLedgerSlot',\n 'requestAirdrop',\n 'sendTransaction',\n 'simulateTransaction',\n] as const satisfies readonly (keyof SolanaRpcSchema)[]\n\nexport const SOLANA_DAS_METHODS = [\n 'getAsset',\n 'getAssetBatch',\n 'getAssetProof',\n 'getAssetProofBatch',\n 'getAssetsByAuthority',\n 'getAssetsByCreator',\n 'getAssetsByGroup',\n 'getAssetsByOwner',\n 'getNftEditions',\n 'getSignaturesForAsset',\n 'getTokenAccounts',\n 'getTokensByDelegate',\n 'getTokensByOwner',\n 'searchAssets',\n] as const satisfies readonly (keyof SolanaDasSchema)[]\n\nexport const SOLANA_HISTORY_METHODS = [\n 'getTransactionsForAddress',\n 'getTransfersByAddress',\n] as const satisfies readonly (keyof SolanaHistorySchema)[]\n\nexport const SOLANA_LEADER_METHODS = [\n 'getLeaderSlots',\n 'getValidatorsInformation',\n] as const satisfies readonly (keyof SolanaLeaderSchema)[]\n\nexport const SOLANA_ANALYTICS_METHODS = [\n 'jetEpochSummary',\n 'jetProgramStats',\n 'jetSlotStats',\n 'jetTopPrograms',\n 'jetTpsTimeseries',\n] as const satisfies readonly (keyof SolanaAnalyticsSchema)[]\n\nconst heavyRpcMethods = new Set<string>([\n 'getPriorityFeeEstimate',\n 'getProgramAccounts',\n 'getProgramAccountsV2',\n 'getTokenLargestAccounts',\n])\n\nconst validateStandardBatch = (calls: readonly RpcBatchCall[]) => {\n let containsHeavy = false\n let containsStandard = false\n for (const call of calls) {\n if (heavyRpcMethods.has(call.method)) containsHeavy = true\n else containsStandard = true\n }\n if (containsHeavy && containsStandard) {\n throw new ErpcBatchPolicyError(\n 'Solana indexed and standard RPC methods cannot share a batch',\n )\n }\n}\n\nconst rejectLeaderBatch = (calls: readonly RpcBatchCall[]) => {\n if (calls.length > 0) {\n throw new ErpcBatchPolicyError('Leader RPC methods do not support batching')\n }\n}\n\nexport interface SolanaClient {\n readonly analytics: RpcNamespace<SolanaAnalyticsSchema>\n readonly das: RpcNamespace<SolanaDasSchema>\n readonly history: RpcNamespace<SolanaHistorySchema>\n readonly leaders: RpcNamespace<SolanaLeaderSchema>\n readonly rpc: RpcNamespace<SolanaRpcSchema>\n}\n\nexport const createSolanaClient = (\n transport: HttpJsonRpcTransport,\n): SolanaClient => ({\n rpc: createRpcNamespace<SolanaRpcSchema>({\n transport,\n parameterMode: 'positional',\n validateBatch: validateStandardBatch,\n }),\n das: createRpcNamespace<SolanaDasSchema>({\n transport,\n parameterMode: 'named',\n }),\n history: createRpcNamespace<SolanaHistorySchema>({\n transport,\n parameterMode: 'positional',\n }),\n leaders: createRpcNamespace<SolanaLeaderSchema>({\n transport,\n parameterMode: 'positional',\n validateBatch: rejectLeaderBatch,\n }),\n analytics: createRpcNamespace<SolanaAnalyticsSchema>({\n transport,\n parameterMode: 'positional',\n }),\n})\n","import {\n ErpcAbortedError,\n ErpcConfigError,\n ErpcInvalidResponseError,\n ErpcJsonRpcError,\n ErpcTimeoutError,\n ErpcTransportError,\n redactJsonRpcError,\n} from '../errors'\nimport type { JsonRpcTransport } from '../rpc/client'\nimport type {\n JsonRpcErrorObject,\n JsonRpcId,\n JsonRpcParams,\n RpcBatchCall,\n RpcSendOptions,\n} from '../rpc/types'\n\nexport interface RpcNotification {\n readonly jsonrpc: '2.0'\n readonly method: string\n readonly params: unknown\n}\n\nexport type RpcNotificationListener = (notification: RpcNotification) => void\n\nexport interface WebSocketTransportConfig {\n readonly endpoint: URL\n readonly maxBatchSize?: number\n readonly timeoutMs: number\n readonly webSocket?: typeof globalThis.WebSocket\n}\n\ninterface PendingResponse {\n readonly cleanup: () => void\n readonly reject: (reason: unknown) => void\n readonly resolve: (value: unknown) => void\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isRpcError = (value: unknown): value is JsonRpcErrorObject =>\n isObject(value) &&\n typeof value.code === 'number' &&\n typeof value.message === 'string'\n\nconst publicEndpoint = (endpoint: URL): string => {\n const url = new URL(endpoint)\n url.search = ''\n url.hash = ''\n return url.toString()\n}\n\nexport class WebSocketJsonRpcTransport implements JsonRpcTransport {\n readonly endpoint: string\n readonly maxBatchSize: number\n\n readonly #connectionUrl: string\n readonly #credential: string | undefined\n readonly #listeners = new Set<RpcNotificationListener>()\n readonly #pending = new Map<JsonRpcId, PendingResponse>()\n readonly #timeoutMs: number\n readonly #webSocket?: typeof globalThis.WebSocket\n #connectPromise: Promise<void> | undefined\n #nextId = 1\n #socket: WebSocket | undefined\n\n constructor(config: WebSocketTransportConfig) {\n const implementation = config.webSocket ?? globalThis.WebSocket\n if (typeof implementation === 'function') this.#webSocket = implementation\n this.#credential = config.endpoint.searchParams.get('api-key') ?? undefined\n this.#connectionUrl = config.endpoint.toString()\n this.endpoint = publicEndpoint(config.endpoint)\n this.maxBatchSize = config.maxBatchSize ?? 256\n this.#timeoutMs = config.timeoutMs\n }\n\n async connect(): Promise<void> {\n if (this.#socket?.readyState === 1) return\n if (this.#connectPromise) return this.#connectPromise\n if (!this.#webSocket) {\n throw new ErpcConfigError(\n 'A WebSocket implementation is required for subscriptions',\n )\n }\n\n this.#connectPromise = new Promise<void>((resolve, reject) => {\n const socket = new this.#webSocket!(this.#connectionUrl)\n this.#socket = socket\n\n const timeout = setTimeout(() => {\n socket.close()\n reject(new ErpcTimeoutError(this.#timeoutMs))\n }, this.#timeoutMs)\n\n socket.addEventListener(\n 'open',\n () => {\n clearTimeout(timeout)\n resolve()\n },\n { once: true },\n )\n socket.addEventListener(\n 'error',\n () => {\n clearTimeout(timeout)\n reject(new ErpcTransportError('Unable to connect to ERPC WebSocket'))\n },\n { once: true },\n )\n socket.addEventListener('message', (event: MessageEvent<unknown>) => {\n void this.#onMessage(event.data)\n })\n socket.addEventListener('close', () => {\n this.#socket = undefined\n this.#connectPromise = undefined\n const error = new ErpcTransportError('ERPC WebSocket connection closed')\n for (const pending of this.#pending.values()) pending.reject(error)\n this.#pending.clear()\n })\n }).catch((error: unknown) => {\n this.#connectPromise = undefined\n throw error\n })\n\n return this.#connectPromise\n }\n\n close(code = 1000, reason = 'Client closed connection'): void {\n this.#socket?.close(code, reason)\n this.#socket = undefined\n this.#connectPromise = undefined\n }\n\n onNotification(listener: RpcNotificationListener): () => void {\n this.#listeners.add(listener)\n return () => this.#listeners.delete(listener)\n }\n\n async request<TResult>(\n method: string,\n params?: JsonRpcParams,\n options: RpcSendOptions = {},\n ): Promise<TResult> {\n await this.connect()\n const id = this.#id()\n const promise = this.#waitFor<TResult>(id, options)\n const request: Record<string, unknown> = { jsonrpc: '2.0', id, method }\n if (params !== undefined) request.params = params\n this.#send(request, id)\n return promise\n }\n\n async batch<TResult extends readonly unknown[]>(\n calls: readonly RpcBatchCall[],\n options: RpcSendOptions = {},\n ): Promise<TResult> {\n if (calls.length === 0) return [] as unknown as TResult\n if (calls.length > this.maxBatchSize) {\n throw new ErpcInvalidResponseError(\n `A batch may contain at most ${this.maxBatchSize} calls`,\n )\n }\n\n await this.connect()\n const requests = calls.map((call) => {\n const id = this.#id()\n const request: Record<string, unknown> = {\n jsonrpc: '2.0',\n id,\n method: call.method,\n }\n if (call.params !== undefined) request.params = call.params\n return { id, request, response: this.#waitFor(id, options) }\n })\n\n try {\n this.#socket?.send(JSON.stringify(requests.map(({ request }) => request)))\n } catch (error) {\n for (const { id } of requests) this.#reject(id, error)\n }\n return Promise.all(requests.map(({ response }) => response)) as unknown as Promise<TResult>\n }\n\n #id(): number {\n const id = this.#nextId\n this.#nextId = id >= Number.MAX_SAFE_INTEGER ? 1 : id + 1\n return id\n }\n\n #send(request: unknown, id: JsonRpcId): void {\n try {\n this.#socket?.send(JSON.stringify(request))\n } catch (error) {\n this.#reject(id, error)\n }\n }\n\n #waitFor<TResult>(\n id: JsonRpcId,\n options: RpcSendOptions,\n ): Promise<TResult> {\n return new Promise<TResult>((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.#pending.delete(id)\n reject(new ErpcTimeoutError(this.#timeoutMs))\n }, this.#timeoutMs)\n\n const abort = () => {\n clearTimeout(timeout)\n this.#pending.delete(id)\n reject(new ErpcAbortedError())\n }\n options.signal?.addEventListener('abort', abort, { once: true })\n\n const cleanup = () => {\n clearTimeout(timeout)\n options.signal?.removeEventListener('abort', abort)\n }\n this.#pending.set(id, {\n resolve: (value) => resolve(value as TResult),\n reject,\n cleanup,\n })\n if (options.signal?.aborted) abort()\n })\n }\n\n #reject(id: JsonRpcId, _reason: unknown): void {\n const pending = this.#pending.get(id)\n if (!pending) return\n pending.cleanup()\n this.#pending.delete(id)\n // A custom WebSocket implementation may include its connection URL in a\n // thrown error, so never retain the original error as a public cause.\n pending.reject(\n new ErpcTransportError('Unable to send ERPC WebSocket request'),\n )\n }\n\n async #onMessage(data: unknown): Promise<void> {\n const text = await this.#messageText(data)\n if (text === null) return\n\n let parsed: unknown\n try {\n parsed = JSON.parse(text) as unknown\n } catch {\n return\n }\n\n if (Array.isArray(parsed)) {\n for (const item of parsed) this.#dispatch(item)\n } else {\n this.#dispatch(parsed)\n }\n }\n\n async #messageText(data: unknown): Promise<string | null> {\n if (typeof data === 'string') return data\n if (data instanceof ArrayBuffer) return new TextDecoder().decode(data)\n if (ArrayBuffer.isView(data)) {\n return new TextDecoder().decode(\n new Uint8Array(data.buffer, data.byteOffset, data.byteLength),\n )\n }\n if (typeof Blob !== 'undefined' && data instanceof Blob) return data.text()\n return null\n }\n\n #dispatch(message: unknown): void {\n if (!isObject(message)) return\n const id = message.id\n if (typeof id === 'number' || typeof id === 'string') {\n const pending = this.#pending.get(id)\n if (!pending) return\n pending.cleanup()\n this.#pending.delete(id)\n if (isRpcError(message.error)) {\n pending.reject(\n new ErpcJsonRpcError(\n redactJsonRpcError(message.error, this.#credential),\n ),\n )\n }\n else if ('result' in message) pending.resolve(message.result)\n else pending.reject(new ErpcInvalidResponseError())\n return\n }\n\n if (\n message.jsonrpc === '2.0' &&\n typeof message.method === 'string' &&\n 'params' in message\n ) {\n const notification: RpcNotification = {\n jsonrpc: '2.0',\n method: message.method,\n params: message.params,\n }\n for (const listener of this.#listeners) listener(notification)\n }\n }\n}\n","import { createRpcNamespace, type RpcNamespace } from './rpc/client'\nimport type { EthereumSubscriptionSchema } from './rpc/ethereum'\nimport type { RpcMethodSpec } from './rpc/types'\nimport {\n WebSocketJsonRpcTransport,\n type RpcNotification,\n type RpcNotificationListener,\n} from './transport/websocket'\n\nexport type SubscriptionId = number | string\nexport type SubscriptionListener<TResult> = (result: TResult) => void\n\ninterface NotificationParams {\n readonly result: unknown\n readonly subscription: SubscriptionId\n}\n\nconst notificationParams = (\n notification: RpcNotification,\n): NotificationParams | null => {\n if (typeof notification.params !== 'object' || notification.params === null) {\n return null\n }\n const params = notification.params as Record<string, unknown>\n if (\n (typeof params.subscription !== 'number' &&\n typeof params.subscription !== 'string') ||\n !('result' in params)\n ) {\n return null\n }\n return {\n subscription: params.subscription,\n result: params.result,\n }\n}\n\nexport class RpcSubscription<TId extends SubscriptionId = SubscriptionId> {\n readonly id: TId\n readonly #unsubscribe: () => Promise<boolean>\n #closed = false\n\n constructor(id: TId, unsubscribe: () => Promise<boolean>) {\n this.id = id\n this.#unsubscribe = unsubscribe\n }\n\n async unsubscribe(): Promise<boolean> {\n if (this.#closed) return true\n const result = await this.#unsubscribe()\n if (result) this.#closed = true\n return result\n }\n}\n\nexport class EthereumSubscriptions {\n readonly rpc: RpcNamespace<EthereumSubscriptionSchema>\n readonly #transport: WebSocketJsonRpcTransport\n\n constructor(transport: WebSocketJsonRpcTransport) {\n this.#transport = transport\n this.rpc = createRpcNamespace<EthereumSubscriptionSchema>({\n transport,\n parameterMode: 'positional',\n })\n }\n\n close(): void {\n this.#transport.close()\n }\n\n onNotification(listener: RpcNotificationListener): () => void {\n return this.#transport.onNotification(listener)\n }\n\n async subscribe<TResult = unknown>(\n subscription: string,\n listener: SubscriptionListener<TResult>,\n ...options: readonly unknown[]\n ): Promise<RpcSubscription<string>> {\n let id: string | undefined\n const removeListener = this.#transport.onNotification((notification) => {\n const params = notificationParams(notification)\n if (params && params.subscription === id) listener(params.result as TResult)\n })\n\n try {\n id = await this.#transport.request<string>('eth_subscribe', [\n subscription,\n ...options,\n ])\n } catch (error) {\n removeListener()\n throw error\n }\n\n return new RpcSubscription(id, async () => {\n const result = await this.#transport.request<boolean>('eth_unsubscribe', [\n id,\n ])\n if (result) removeListener()\n return result\n })\n }\n}\n\nexport interface SolanaEnhancedSubscriptionSchema {\n readonly accountSubscribe: RpcMethodSpec<\n readonly [address: string, options?: Readonly<Record<string, unknown>>],\n number\n >\n readonly accountUnsubscribe: RpcMethodSpec<\n readonly [subscriptionId: number],\n boolean\n >\n readonly transactionSubscribe: RpcMethodSpec<\n readonly [\n filter: Readonly<Record<string, unknown>>,\n options?: Readonly<Record<string, unknown>>,\n ],\n number\n >\n readonly transactionUnsubscribe: RpcMethodSpec<\n readonly [subscriptionId: number],\n boolean\n >\n}\n\nexport const SOLANA_ENHANCED_SUBSCRIPTION_METHODS = [\n 'accountSubscribe',\n 'accountUnsubscribe',\n 'transactionSubscribe',\n 'transactionUnsubscribe',\n] as const satisfies readonly (keyof SolanaEnhancedSubscriptionSchema)[]\n\nexport class SolanaSubscriptions {\n readonly rpc: RpcNamespace<SolanaEnhancedSubscriptionSchema>\n readonly #transport: WebSocketJsonRpcTransport\n\n constructor(transport: WebSocketJsonRpcTransport) {\n this.#transport = transport\n this.rpc = createRpcNamespace<SolanaEnhancedSubscriptionSchema>({\n transport,\n parameterMode: 'positional',\n })\n }\n\n close(): void {\n this.#transport.close()\n }\n\n onNotification(listener: RpcNotificationListener): () => void {\n return this.#transport.onNotification(listener)\n }\n\n accountSubscribe<TResult = unknown>(\n address: string,\n listener: SubscriptionListener<TResult>,\n options?: Readonly<Record<string, unknown>>,\n ): Promise<RpcSubscription<number>> {\n const params = options === undefined ? [address] : [address, options]\n return this.#subscribe<number, TResult>(\n 'accountSubscribe',\n params,\n 'accountUnsubscribe',\n listener,\n )\n }\n\n transactionSubscribe<TResult = unknown>(\n filter: Readonly<Record<string, unknown>>,\n listener: SubscriptionListener<TResult>,\n options?: Readonly<Record<string, unknown>>,\n ): Promise<RpcSubscription<number>> {\n const params = options === undefined ? [filter] : [filter, options]\n return this.#subscribe<number, TResult>(\n 'transactionSubscribe',\n params,\n 'transactionUnsubscribe',\n listener,\n )\n }\n\n async rawSubscribe<TResult = unknown>(\n subscribeMethod: string,\n params: readonly unknown[],\n unsubscribeMethod: string,\n listener: SubscriptionListener<TResult>,\n ): Promise<RpcSubscription> {\n return this.#subscribe(\n subscribeMethod,\n params,\n unsubscribeMethod,\n listener,\n )\n }\n\n async #subscribe<TId extends SubscriptionId, TResult>(\n subscribeMethod: string,\n params: readonly unknown[],\n unsubscribeMethod: string,\n listener: SubscriptionListener<TResult>,\n ): Promise<RpcSubscription<TId>> {\n let id: TId | undefined\n const removeListener = this.#transport.onNotification((notification) => {\n const value = notificationParams(notification)\n if (value && value.subscription === id) listener(value.result as TResult)\n })\n\n try {\n id = await this.#transport.request<TId>(subscribeMethod, params)\n } catch (error) {\n removeListener()\n throw error\n }\n\n return new RpcSubscription(id, async () => {\n const result = await this.#transport.request<boolean>(unsubscribeMethod, [\n id,\n ])\n if (result) removeListener()\n return result\n })\n }\n}\n","import {\n ErpcAbortedError,\n ErpcHttpError,\n ErpcInvalidResponseError,\n ErpcJsonRpcError,\n ErpcTimeoutError,\n ErpcTransportError,\n redactJsonRpcError,\n} from '../errors'\nimport type {\n JsonRpcFailure,\n JsonRpcId,\n JsonRpcParams,\n JsonRpcRequest,\n JsonRpcResponse,\n RpcBatchCall,\n RpcSendOptions,\n} from '../rpc/types'\n\nexport interface HttpTransportConfig {\n readonly apiKey: string\n readonly endpoint: URL\n readonly fetch: typeof globalThis.fetch\n readonly headers: Readonly<Record<string, string>>\n readonly maxBatchSize?: number\n readonly timeoutMs: number\n}\n\ninterface ControlledSignal {\n readonly cleanup: () => void\n readonly signal: AbortSignal\n readonly timedOut: () => boolean\n}\n\nconst controlledSignal = (\n timeoutMs: number,\n external?: AbortSignal,\n): ControlledSignal => {\n const controller = new AbortController()\n let didTimeOut = false\n\n const timeout = setTimeout(() => {\n didTimeOut = true\n controller.abort()\n }, timeoutMs)\n\n const abort = () => controller.abort()\n if (external?.aborted) controller.abort()\n else external?.addEventListener('abort', abort, { once: true })\n\n return {\n signal: controller.signal,\n timedOut: () => didTimeOut,\n cleanup: () => {\n clearTimeout(timeout)\n external?.removeEventListener('abort', abort)\n },\n }\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isFailure = (value: unknown): value is JsonRpcFailure =>\n isObject(value) &&\n isObject(value.error) &&\n typeof value.error.code === 'number' &&\n typeof value.error.message === 'string'\n\nconst parseJson = (text: string): unknown => {\n try {\n return JSON.parse(text) as unknown\n } catch {\n throw new ErpcInvalidResponseError('ERPC returned malformed JSON')\n }\n}\n\nexport class HttpJsonRpcTransport {\n readonly endpoint: string\n readonly maxBatchSize: number\n\n readonly #apiKey: string\n readonly #fetch: typeof globalThis.fetch\n readonly #headers: Readonly<Record<string, string>>\n readonly #timeoutMs: number\n #nextId = 1\n\n constructor(config: HttpTransportConfig) {\n this.#apiKey = config.apiKey\n this.#fetch = config.fetch\n this.#headers = config.headers\n this.#timeoutMs = config.timeoutMs\n this.maxBatchSize = config.maxBatchSize ?? 256\n\n const endpoint = new URL(config.endpoint)\n endpoint.search = ''\n endpoint.hash = ''\n this.endpoint = endpoint.toString()\n }\n\n async request<TResult>(\n method: string,\n params?: JsonRpcParams,\n options: RpcSendOptions = {},\n ): Promise<TResult> {\n const id = this.#id()\n const request = this.#request(id, method, params)\n const response = await this.#post(request, options)\n return this.#unwrap<TResult>(response, id)\n }\n\n async batch<TResult extends readonly unknown[]>(\n calls: readonly RpcBatchCall[],\n options: RpcSendOptions = {},\n ): Promise<TResult> {\n if (calls.length === 0) return [] as unknown as TResult\n if (calls.length > this.maxBatchSize) {\n throw new ErpcInvalidResponseError(\n `A batch may contain at most ${this.maxBatchSize} calls`,\n )\n }\n\n const requests = calls.map((call) => {\n const id = this.#id()\n return this.#request(id, call.method, call.params)\n })\n const raw = await this.#post(requests, options)\n if (!Array.isArray(raw)) {\n if (isFailure(raw)) {\n throw new ErpcJsonRpcError(redactJsonRpcError(raw.error, this.#apiKey))\n }\n throw new ErpcInvalidResponseError('ERPC returned a non-array batch response')\n }\n\n const expectedIds = new Set<JsonRpcId>(requests.map((request) => request.id))\n const byId = new Map<JsonRpcId, unknown>()\n for (const response of raw) {\n if (!isObject(response) || !('id' in response)) {\n throw new ErpcInvalidResponseError('ERPC returned an invalid batch item')\n }\n const id = response.id\n if (typeof id !== 'number' && typeof id !== 'string') {\n throw new ErpcInvalidResponseError('ERPC returned an invalid batch id')\n }\n if (!expectedIds.has(id)) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an unexpected batch response id',\n )\n }\n if (byId.has(id)) {\n throw new ErpcInvalidResponseError(\n `ERPC returned duplicate batch response id ${String(id)}`,\n )\n }\n byId.set(id, response)\n }\n\n const results = requests.map((request) => {\n const response = byId.get(request.id)\n if (response === undefined) {\n throw new ErpcInvalidResponseError(\n `ERPC omitted batch response id ${String(request.id)}`,\n )\n }\n return this.#unwrap(response, request.id)\n })\n return results as unknown as TResult\n }\n\n #id(): number {\n const id = this.#nextId\n this.#nextId = id >= Number.MAX_SAFE_INTEGER ? 1 : id + 1\n return id\n }\n\n #request(\n id: JsonRpcId,\n method: string,\n params?: JsonRpcParams,\n ): JsonRpcRequest<JsonRpcParams> {\n const request: {\n jsonrpc: '2.0'\n id: JsonRpcId\n method: string\n params?: JsonRpcParams\n } = { jsonrpc: '2.0', id, method }\n if (params !== undefined) request.params = params\n return request\n }\n\n async #post(\n body: unknown,\n options: RpcSendOptions,\n ): Promise<unknown> {\n const url = new URL(this.endpoint)\n url.searchParams.set('api-key', this.#apiKey)\n const controlled = controlledSignal(this.#timeoutMs, options.signal)\n\n try {\n const response = await this.#fetch(url, {\n method: 'POST',\n headers: {\n ...this.#headers,\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n signal: controlled.signal,\n })\n const text = await response.text()\n if (!response.ok) throw new ErpcHttpError(response.status)\n return parseJson(text)\n } catch (error) {\n if (error instanceof ErpcHttpError || error instanceof ErpcInvalidResponseError) {\n throw error\n }\n if (controlled.timedOut()) throw new ErpcTimeoutError(this.#timeoutMs)\n if (options.signal?.aborted) throw new ErpcAbortedError()\n // Do not retain the underlying fetch error: custom runtimes may include\n // the credential-bearing request URL or headers in its message.\n throw new ErpcTransportError('Unable to reach ERPC')\n } finally {\n controlled.cleanup()\n }\n }\n\n #unwrap<TResult>(response: unknown, expectedId: JsonRpcId): TResult {\n if (!isObject(response)) throw new ErpcInvalidResponseError()\n if (response.id !== expectedId) {\n throw new ErpcInvalidResponseError('ERPC returned an unexpected response id')\n }\n if (isFailure(response)) {\n throw new ErpcJsonRpcError(\n redactJsonRpcError(response.error, this.#apiKey),\n )\n }\n if (!('result' in response)) throw new ErpcInvalidResponseError()\n return (response as unknown as JsonRpcResponse<TResult> & { result: TResult })\n .result\n }\n}\n","import { ErpcConfigError, ErpcInvalidResponseError } from './errors'\nimport type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\n\nexport interface MonthlyApiKeyMethodUsage {\n readonly count: number\n readonly creditCost: number\n readonly credits: number\n readonly method: string\n readonly updatedAt: string | null\n}\n\nexport interface MonthlyApiKeyChainUsage {\n readonly chain: string\n readonly count: number\n readonly credits: number\n readonly methods: readonly MonthlyApiKeyMethodUsage[]\n readonly updatedAt: string | null\n}\n\nexport interface MonthlyApiKeyUsageEntry {\n readonly apiKeyLast4: string\n readonly apiKeyLength: number\n readonly chains: readonly MonthlyApiKeyChainUsage[]\n readonly count: number\n readonly credits: number\n readonly keyId: number | null\n readonly updatedAt: string | null\n}\n\nexport interface MonthlyApiKeyUsage {\n readonly apiKeys: readonly MonthlyApiKeyUsageEntry[]\n readonly chains: readonly MonthlyApiKeyChainUsage[]\n readonly hasStrandedUsage: boolean\n readonly keyCount: number\n readonly totalCount: number\n readonly totalCredits: number\n readonly updatedAt: string | null\n readonly yearMonth: string\n}\n\nexport interface MonthlyApiKeyUsageParams {\n /** Calendar month in `YYYY-MM` format. The current month is used when omitted. */\n readonly yearMonth?: string\n}\n\nconst YEAR_MONTH = /^\\d{4}-(0[1-9]|1[0-2])$/\n\nconst objectValue = (value: unknown): Record<string, unknown> | null =>\n typeof value === 'object' && value !== null\n ? value as Record<string, unknown>\n : null\n\nconst isTimestamp = (value: unknown): value is string | null =>\n value === null || typeof value === 'string'\n\nconst parseMethod = (value: unknown): MonthlyApiKeyMethodUsage | null => {\n const method = objectValue(value)\n if (\n method === null ||\n typeof method.count !== 'number' ||\n typeof method.creditCost !== 'number' ||\n typeof method.credits !== 'number' ||\n typeof method.method !== 'string' ||\n !isTimestamp(method.updatedAt)\n ) return null\n return {\n count: method.count,\n creditCost: method.creditCost,\n credits: method.credits,\n method: method.method,\n updatedAt: method.updatedAt,\n }\n}\n\nconst parseChain = (value: unknown): MonthlyApiKeyChainUsage | null => {\n const chain = objectValue(value)\n if (\n chain === null ||\n typeof chain.chain !== 'string' ||\n typeof chain.count !== 'number' ||\n typeof chain.credits !== 'number' ||\n !Array.isArray(chain.methods) ||\n !isTimestamp(chain.updatedAt)\n ) return null\n const methods = chain.methods.map(parseMethod)\n if (methods.some((method) => method === null)) return null\n return {\n chain: chain.chain,\n count: chain.count,\n credits: chain.credits,\n methods: methods as readonly MonthlyApiKeyMethodUsage[],\n updatedAt: chain.updatedAt,\n }\n}\n\nconst parseApiKey = (value: unknown): MonthlyApiKeyUsageEntry | null => {\n const apiKey = objectValue(value)\n if (\n apiKey === null ||\n typeof apiKey.apiKeyLast4 !== 'string' ||\n typeof apiKey.apiKeyLength !== 'number' ||\n !Array.isArray(apiKey.chains) ||\n typeof apiKey.count !== 'number' ||\n typeof apiKey.credits !== 'number' ||\n (apiKey.keyId !== null && typeof apiKey.keyId !== 'number') ||\n !isTimestamp(apiKey.updatedAt)\n ) return null\n const chains = apiKey.chains.map(parseChain)\n if (chains.some((chain) => chain === null)) return null\n return {\n apiKeyLast4: apiKey.apiKeyLast4,\n apiKeyLength: apiKey.apiKeyLength,\n chains: chains as readonly MonthlyApiKeyChainUsage[],\n count: apiKey.count,\n credits: apiKey.credits,\n keyId: apiKey.keyId,\n updatedAt: apiKey.updatedAt,\n }\n}\n\nconst parseMonthlyUsage = (value: unknown): MonthlyApiKeyUsage | null => {\n const usage = objectValue(value)\n if (\n usage === null ||\n !Array.isArray(usage.apiKeys) ||\n !Array.isArray(usage.chains) ||\n typeof usage.hasStrandedUsage !== 'boolean' ||\n typeof usage.keyCount !== 'number' ||\n typeof usage.totalCount !== 'number' ||\n typeof usage.totalCredits !== 'number' ||\n !isTimestamp(usage.updatedAt) ||\n typeof usage.yearMonth !== 'string' ||\n !YEAR_MONTH.test(usage.yearMonth)\n ) return null\n const apiKeys = usage.apiKeys.map(parseApiKey)\n const chains = usage.chains.map(parseChain)\n if (\n apiKeys.some((apiKey) => apiKey === null) ||\n chains.some((chain) => chain === null)\n ) return null\n return {\n apiKeys: apiKeys as readonly MonthlyApiKeyUsageEntry[],\n chains: chains as readonly MonthlyApiKeyChainUsage[],\n hasStrandedUsage: usage.hasStrandedUsage,\n keyCount: usage.keyCount,\n totalCount: usage.totalCount,\n totalCredits: usage.totalCredits,\n updatedAt: usage.updatedAt,\n yearMonth: usage.yearMonth,\n }\n}\n\nexport class UsageClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n async getMonthlyApiKeyUsage(\n params: MonthlyApiKeyUsageParams = {},\n options?: RpcSendOptions,\n ): Promise<MonthlyApiKeyUsage> {\n if (params.yearMonth !== undefined && !YEAR_MONTH.test(params.yearMonth)) {\n throw new ErpcConfigError('yearMonth must use YYYY-MM format')\n }\n\n const response: unknown = await this.#transport.get(\n '/v3/user/api-keys/usage',\n { yearMonth: params.yearMonth },\n options,\n )\n const envelope = objectValue(response)\n const usage = envelope?.success === true\n ? parseMonthlyUsage(envelope.message)\n : null\n if (usage === null) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid monthly API key usage response',\n )\n }\n return usage\n }\n}\n","import { AccountClient } from './account'\nimport {\n endpointWithPath,\n resolveConfig,\n websocketUrl,\n type ErpcClientConfig,\n} from './config'\nimport { PriceClient } from './price'\nimport {\n createEthereumClient,\n type EthereumClient,\n} from './rpc/ethereum'\nimport { createSolanaClient, type SolanaClient } from './rpc/solana'\nimport {\n EthereumSubscriptions,\n SolanaSubscriptions,\n} from './subscriptions'\nimport { HttpJsonRpcTransport } from './transport/http'\nimport { RestTransport } from './transport/rest'\nimport { WebSocketJsonRpcTransport } from './transport/websocket'\nimport { UsageClient } from './usage'\n\nexport interface ErpcSolanaClient extends SolanaClient {\n readonly subscriptions: SolanaSubscriptions\n}\n\nexport interface ErpcEthereumClient extends EthereumClient {\n readonly subscriptions: EthereumSubscriptions\n}\n\nexport type ErpcAvalancheClient = ErpcEthereumClient\n\nexport interface ErpcClient {\n readonly account: AccountClient\n readonly avalanche: ErpcAvalancheClient\n readonly ethereum: ErpcEthereumClient\n readonly price: PriceClient\n readonly solana: ErpcSolanaClient\n readonly usage: UsageClient\n close(): void\n}\n\nexport const createErpcClient = (config: ErpcClientConfig): ErpcClient => {\n const resolved = resolveConfig(config)\n const sharedTransport = {\n apiKey: resolved.apiKey,\n fetch: resolved.fetch,\n headers: resolved.headers,\n timeoutMs: resolved.timeoutMs,\n }\n\n const solanaTransport = new HttpJsonRpcTransport({\n ...sharedTransport,\n endpoint: resolved.endpoint,\n })\n const ethereumEndpoint = endpointWithPath(resolved.endpoint, '/eth')\n const ethereumTransport = new HttpJsonRpcTransport({\n ...sharedTransport,\n endpoint: ethereumEndpoint,\n })\n const avalancheTransport = new HttpJsonRpcTransport({\n ...sharedTransport,\n endpoint: endpointWithPath(resolved.avalancheEndpoint, '/ava'),\n })\n\n const solanaWebSocket = new WebSocketJsonRpcTransport({\n endpoint: websocketUrl(resolved.endpoint, resolved.apiKey),\n timeoutMs: resolved.timeoutMs,\n ...(resolved.webSocket === undefined\n ? {}\n : { webSocket: resolved.webSocket }),\n })\n const ethereumWebSocket = new WebSocketJsonRpcTransport({\n endpoint: websocketUrl(resolved.endpoint, resolved.apiKey, '/eth'),\n timeoutMs: resolved.timeoutMs,\n ...(resolved.webSocket === undefined\n ? {}\n : { webSocket: resolved.webSocket }),\n })\n const avalancheWebSocket = new WebSocketJsonRpcTransport({\n endpoint: websocketUrl(\n resolved.avalancheEndpoint,\n resolved.apiKey,\n '/ava-ws',\n ),\n timeoutMs: resolved.timeoutMs,\n ...(resolved.webSocket === undefined\n ? {}\n : { webSocket: resolved.webSocket }),\n })\n\n const priceTransport = new RestTransport({\n ...sharedTransport,\n endpoint: resolved.endpoint,\n })\n const accountTransport = new RestTransport({\n ...sharedTransport,\n endpoint: resolved.accountEndpoint,\n })\n const userTransport = new RestTransport({\n ...sharedTransport,\n endpoint: resolved.userEndpoint,\n })\n\n const solana: ErpcSolanaClient = {\n ...createSolanaClient(solanaTransport),\n subscriptions: new SolanaSubscriptions(solanaWebSocket),\n }\n const ethereum: ErpcEthereumClient = {\n ...createEthereumClient(ethereumTransport),\n subscriptions: new EthereumSubscriptions(ethereumWebSocket),\n }\n const avalanche: ErpcAvalancheClient = {\n ...createEthereumClient(avalancheTransport),\n subscriptions: new EthereumSubscriptions(avalancheWebSocket),\n }\n\n return {\n solana,\n ethereum,\n avalanche,\n price: new PriceClient(priceTransport),\n account: new AccountClient(accountTransport),\n usage: new UsageClient(userTransport),\n close: () => {\n solana.subscriptions.close()\n ethereum.subscriptions.close()\n avalanche.subscriptions.close()\n },\n }\n}\n","import { ErpcInvalidResponseError } from './errors'\nimport type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\n\nexport type CloudCreditAlertLevel =\n | 'critical'\n | 'normal'\n | 'suspended'\n | 'warning'\n\nexport interface CloudCredit {\n readonly alertLevel: CloudCreditAlertLevel\n readonly balanceCents: number\n readonly burnRateCentsPerHour: number\n readonly quoteExpiresAt: string\n readonly quoteTimestamp: string\n readonly timeToZeroHours: number | null\n}\n\nconst alertLevels: readonly CloudCreditAlertLevel[] = [\n 'critical',\n 'normal',\n 'suspended',\n 'warning',\n]\n\nconst objectValue = (value: unknown): Record<string, unknown> | null =>\n typeof value === 'object' && value !== null\n ? value as Record<string, unknown>\n : null\n\nconst isDateTime = (value: unknown): value is string =>\n typeof value === 'string' && Number.isFinite(Date.parse(value))\n\nconst parseCredit = (value: unknown): CloudCredit | null => {\n const credit = objectValue(value)\n if (\n credit === null ||\n typeof credit.balanceCents !== 'number' ||\n !Number.isInteger(credit.balanceCents) ||\n typeof credit.burnRateCentsPerHour !== 'number' ||\n !Number.isInteger(credit.burnRateCentsPerHour) ||\n credit.burnRateCentsPerHour < 0 ||\n (credit.timeToZeroHours !== null &&\n (typeof credit.timeToZeroHours !== 'number' ||\n !Number.isFinite(credit.timeToZeroHours) ||\n credit.timeToZeroHours < 0)) ||\n typeof credit.alertLevel !== 'string' ||\n !alertLevels.includes(credit.alertLevel as CloudCreditAlertLevel) ||\n !isDateTime(credit.quoteTimestamp) ||\n !isDateTime(credit.quoteExpiresAt)\n ) return null\n\n return {\n alertLevel: credit.alertLevel as CloudCreditAlertLevel,\n balanceCents: credit.balanceCents,\n burnRateCentsPerHour: credit.burnRateCentsPerHour,\n quoteExpiresAt: credit.quoteExpiresAt,\n quoteTimestamp: credit.quoteTimestamp,\n timeToZeroHours: credit.timeToZeroHours,\n }\n}\n\nexport class CloudCreditClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n async get(options?: RpcSendOptions): Promise<CloudCredit> {\n const response: unknown = await this.#transport.get(\n '/v4/cloud/credit',\n undefined,\n options,\n )\n const envelope = objectValue(response)\n const credit = envelope?.success === true\n ? parseCredit(envelope.message)\n : null\n if (credit === null) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud credit snapshot',\n )\n }\n return credit\n }\n}\n","import { ErpcConfigError, ErpcInvalidResponseError } from './errors'\nimport type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\n\nexport type CloudResourceKind =\n | 'bare-metal'\n | 'solana-grpc'\n | 'solana-shredstream'\n | 'vps'\n\nexport type CloudResourceMode = 'dedicated' | 'direct' | 'shared'\n\n/** A credential-free projection of an ERPC Cloud resource. */\nexport interface CloudResource {\n readonly createdAt?: string\n readonly id: string\n readonly kind: CloudResourceKind\n readonly mode?: CloudResourceMode\n readonly name?: string\n readonly region?: string\n readonly status: string\n}\n\nexport interface CloudResourceStatusBilling {\n readonly graceEndsAt?: string\n readonly hourlyCredits?: number\n readonly nextChargeAt?: string\n readonly status: 'active' | 'grace-period' | 'inactive' | 'suspended'\n}\n\nexport interface CloudResourceStatus {\n readonly billing?: CloudResourceStatusBilling\n readonly id: string\n readonly status: string\n}\n\nconst objectValue = (value: unknown): Record<string, unknown> | null =>\n typeof value === 'object' && value !== null\n ? value as Record<string, unknown>\n : null\n\nconst resourceKinds: readonly CloudResourceKind[] = [\n 'bare-metal',\n 'solana-grpc',\n 'solana-shredstream',\n 'vps',\n]\nconst resourceModes: readonly CloudResourceMode[] = [\n 'dedicated',\n 'direct',\n 'shared',\n]\nconst billingStatuses: readonly CloudResourceStatusBilling['status'][] = [\n 'active',\n 'grace-period',\n 'inactive',\n 'suspended',\n]\n\nconst isDateTime = (value: unknown): value is string =>\n typeof value === 'string' && Number.isFinite(Date.parse(value))\n\nconst parseStatusBilling = (\n value: unknown,\n): CloudResourceStatusBilling | null => {\n const billing = objectValue(value)\n if (\n billing === null ||\n typeof billing.status !== 'string' ||\n !billingStatuses.includes(\n billing.status as CloudResourceStatusBilling['status'],\n ) ||\n (billing.hourlyCredits !== undefined &&\n (typeof billing.hourlyCredits !== 'number' ||\n !Number.isFinite(billing.hourlyCredits) ||\n billing.hourlyCredits < 0)) ||\n (billing.nextChargeAt !== undefined &&\n !isDateTime(billing.nextChargeAt)) ||\n (billing.graceEndsAt !== undefined &&\n !isDateTime(billing.graceEndsAt))\n ) return null\n\n return {\n status: billing.status as CloudResourceStatusBilling['status'],\n ...(typeof billing.hourlyCredits === 'number'\n ? { hourlyCredits: billing.hourlyCredits }\n : {}),\n ...(typeof billing.nextChargeAt === 'string'\n ? { nextChargeAt: billing.nextChargeAt }\n : {}),\n ...(typeof billing.graceEndsAt === 'string'\n ? { graceEndsAt: billing.graceEndsAt }\n : {}),\n }\n}\n\nconst parseResourceStatus = (value: unknown): CloudResourceStatus | null => {\n const status = objectValue(value)\n if (\n status === null ||\n typeof status.id !== 'string' ||\n typeof status.status !== 'string'\n ) return null\n const billing = status.billing === undefined\n ? undefined\n : parseStatusBilling(status.billing)\n if (status.billing !== undefined && billing === null) return null\n return {\n id: status.id,\n status: status.status,\n ...(billing ? { billing } : {}),\n }\n}\nconst parseResource = (value: unknown): CloudResource | null => {\n const resource = objectValue(value)\n if (\n resource === null ||\n typeof resource.id !== 'string' ||\n typeof resource.kind !== 'string' ||\n !resourceKinds.includes(resource.kind as CloudResourceKind) ||\n typeof resource.status !== 'string' ||\n (resource.mode !== undefined &&\n (typeof resource.mode !== 'string' ||\n !resourceModes.includes(resource.mode as CloudResourceMode))) ||\n (resource.name !== undefined && typeof resource.name !== 'string') ||\n (resource.region !== undefined && typeof resource.region !== 'string') ||\n (resource.createdAt !== undefined && typeof resource.createdAt !== 'string')\n ) return null\n\n return {\n id: resource.id,\n kind: resource.kind as CloudResourceKind,\n status: resource.status,\n ...(typeof resource.mode === 'string'\n ? { mode: resource.mode as CloudResourceMode }\n : {}),\n ...(typeof resource.name === 'string' ? { name: resource.name } : {}),\n ...(typeof resource.region === 'string' ? { region: resource.region } : {}),\n ...(typeof resource.createdAt === 'string'\n ? { createdAt: resource.createdAt }\n : {}),\n }\n}\n\nexport class CloudResourcesClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n async list(options?: RpcSendOptions): Promise<readonly CloudResource[]> {\n const response: unknown = await this.#transport.get(\n '/v4/cloud/resources',\n undefined,\n options,\n )\n const envelope = objectValue(response)\n const message = objectValue(envelope?.message)\n if (envelope?.success !== true || !Array.isArray(message?.resources)) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud resource list',\n )\n }\n const resources = message.resources.map(parseResource)\n if (resources.some((resource) => resource === null)) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud resource list',\n )\n }\n return resources as readonly CloudResource[]\n }\n\n async get(\n resourceId: string,\n options?: RpcSendOptions,\n ): Promise<CloudResource> {\n const normalizedId = resourceId.trim()\n if (!normalizedId) {\n throw new ErpcConfigError('resourceId must not be empty')\n }\n const response: unknown = await this.#transport.get(\n `/v4/cloud/resources/${encodeURIComponent(normalizedId)}`,\n undefined,\n options,\n )\n const envelope = objectValue(response)\n const message = objectValue(envelope?.message)\n const resource = envelope?.success === true\n ? parseResource(message?.resource)\n : null\n if (resource === null) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud resource',\n )\n }\n return resource\n }\n\n async getStatus(\n resourceId: string,\n options?: RpcSendOptions,\n ): Promise<CloudResourceStatus> {\n const normalizedId = resourceId.trim()\n if (!normalizedId) {\n throw new ErpcConfigError('resourceId must not be empty')\n }\n const response: unknown = await this.#transport.get(\n `/v4/cloud/resources/${encodeURIComponent(normalizedId)}/status`,\n undefined,\n options,\n )\n const envelope = objectValue(response)\n const status = envelope?.success === true\n ? parseResourceStatus(envelope.message)\n : null\n if (status === null) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud resource status',\n )\n }\n return status\n }\n}\n","import { ErpcConfigError } from './errors'\nimport { CloudCatalogClient } from './catalog'\nimport { CloudCreditClient } from './credit'\nimport type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\nimport { UsageClient } from './usage'\nimport { CloudResourcesClient } from './resources'\nimport { DEFAULT_TIMEOUT_MS, DEFAULT_USER_ENDPOINT } from './config'\n\nexport interface ErpcCloudClientConfig {\n readonly accessToken: string\n readonly endpoint?: string\n readonly fetch?: typeof globalThis.fetch\n readonly headers?: Readonly<Record<string, string>>\n readonly timeoutMs?: number\n}\n\nexport interface ErpcCloudClient {\n readonly catalog: CloudCatalogClient\n readonly credit: CloudCreditClient\n readonly resources: CloudResourcesClient\n readonly usage: UsageClient\n}\n\nconst requireFetch = (provided?: typeof globalThis.fetch) => {\n const implementation = provided ?? globalThis.fetch\n if (typeof implementation !== 'function') {\n throw new ErpcConfigError(\n 'A Fetch API implementation is required in this runtime',\n )\n }\n return implementation\n}\n\nconst cloudEndpoint = (value?: string): URL => {\n let endpoint: URL\n try {\n endpoint = new URL(value ?? DEFAULT_USER_ENDPOINT)\n } catch {\n throw new ErpcConfigError('endpoint must be an absolute HTTP(S) URL')\n }\n const isLocalHttp = endpoint.protocol === 'http:' &&\n ['127.0.0.1', '::1', '[::1]', 'localhost'].includes(endpoint.hostname)\n if (endpoint.protocol !== 'https:' && !isLocalHttp) {\n throw new ErpcConfigError('endpoint must use HTTPS except on localhost')\n }\n endpoint.search = ''\n endpoint.hash = ''\n endpoint.pathname = endpoint.pathname.replace(/\\/+$/, '') || '/'\n return endpoint\n}\n\nexport const createErpcCloudClient = (\n config: ErpcCloudClientConfig,\n): ErpcCloudClient => {\n const accessToken = config.accessToken.trim()\n if (!accessToken) {\n throw new ErpcConfigError('accessToken must not be empty')\n }\n const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS\n if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n throw new ErpcConfigError('timeoutMs must be a positive finite number')\n }\n\n const transport = new RestTransport({\n apiKey: accessToken,\n endpoint: cloudEndpoint(config.endpoint),\n fetch: requireFetch(config.fetch),\n headers: config.headers ?? {},\n timeoutMs,\n })\n\n return {\n catalog: new CloudCatalogClient(transport),\n credit: new CloudCreditClient(transport),\n resources: new CloudResourcesClient(transport),\n usage: new UsageClient(transport),\n }\n}\n\nexport type ErpcCloudRequestOptions = RpcSendOptions\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/transport/rest.ts","../src/account.ts","../src/generated/token_catalog.ts","../src/token_catalog.ts","../src/generated/token_rankings.ts","../src/token_rankings.ts","../src/catalog.ts","../src/config.ts","../src/price.ts","../src/rpc/client.ts","../src/rpc/ethereum.ts","../src/rpc/avalanche.ts","../src/rpc/solana.ts","../src/transport/websocket.ts","../src/subscriptions.ts","../src/generated/dex_catalog.ts","../src/dex_catalog.ts","../src/swap.ts","../src/transport/http.ts","../src/usage.ts","../src/client.ts","../src/credit.ts","../src/resources.ts","../src/cloud.ts"],"names":["deepFreeze","isEvmChain","normalizeEvmAddress","isRecord","isKnownChain","controlledSignal","isObject","objectValue","resourceKinds","resourceModes","isDateTime","requireFetch"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { JsonRpcErrorObject } from './rpc/types'\n\nconst REDACTED = '[REDACTED]'\n\nconst credentialVariants = (credential: string): readonly string[] => {\n const queryEncoded = new URLSearchParams({ value: credential })\n .toString()\n .slice('value='.length)\n let componentEncoded: string | undefined\n try {\n componentEncoded = encodeURIComponent(credential)\n } catch {\n // URLSearchParams still provides a safe encoded representation.\n }\n return [...new Set([credential, componentEncoded, queryEncoded])]\n .filter((value): value is string => Boolean(value))\n .sort((left, right) => right.length - left.length)\n}\n\nconst redactString = (value: string, variants: readonly string[]): string => {\n let redacted = value\n for (const variant of variants) redacted = redacted.replaceAll(variant, REDACTED)\n return redacted\n}\n\nconst redactValue = (\n value: unknown,\n variants: readonly string[],\n seen: WeakSet<object>,\n depth: number,\n): unknown => {\n if (typeof value === 'string') return redactString(value, variants)\n if (typeof value !== 'object' || value === null) return value\n if (depth >= 32 || seen.has(value)) return REDACTED\n\n seen.add(value)\n if (Array.isArray(value)) {\n return value.map((item) => redactValue(item, variants, seen, depth + 1))\n }\n\n const result: Record<string, unknown> = {}\n for (const [key, item] of Object.entries(value)) {\n Object.defineProperty(result, key, {\n configurable: true,\n enumerable: true,\n value: redactValue(item, variants, seen, depth + 1),\n writable: true,\n })\n }\n return result\n}\n\nexport const redactJsonRpcError = (\n error: JsonRpcErrorObject,\n credential: string | undefined,\n): JsonRpcErrorObject => {\n if (!credential) return error\n const variants = credentialVariants(credential)\n const result: {\n code: number\n data?: unknown\n message: string\n } = {\n code: error.code,\n message: redactString(error.message, variants),\n }\n if (error.data !== undefined) {\n result.data = redactValue(error.data, variants, new WeakSet(), 0)\n }\n return result\n}\n\nexport type ErpcErrorCode =\n | 'ERPC_ABORTED'\n | 'ERPC_BATCH_POLICY'\n | 'ERPC_CONFIG'\n | 'ERPC_HTTP'\n | 'ERPC_INVALID_RESPONSE'\n | 'ERPC_RPC'\n | 'ERPC_TIMEOUT'\n | 'ERPC_TRANSPORT'\n\nexport class ErpcError extends Error {\n readonly code: ErpcErrorCode\n\n constructor(code: ErpcErrorCode, message: string, options?: ErrorOptions) {\n super(message, options)\n this.name = 'ErpcError'\n this.code = code\n }\n}\n\nexport class ErpcConfigError extends ErpcError {\n constructor(message: string) {\n super('ERPC_CONFIG', message)\n this.name = 'ErpcConfigError'\n }\n}\n\nexport class ErpcTransportError extends ErpcError {\n constructor(message: string, options?: ErrorOptions) {\n super('ERPC_TRANSPORT', message, options)\n this.name = 'ErpcTransportError'\n }\n}\n\nexport class ErpcHttpError extends ErpcError {\n readonly status: number\n\n constructor(status: number, message = `ERPC request failed with HTTP ${status}`) {\n super('ERPC_HTTP', message)\n this.name = 'ErpcHttpError'\n this.status = status\n }\n}\n\nexport class ErpcTimeoutError extends ErpcError {\n readonly timeoutMs: number\n\n constructor(timeoutMs: number) {\n super('ERPC_TIMEOUT', `ERPC request timed out after ${timeoutMs}ms`)\n this.name = 'ErpcTimeoutError'\n this.timeoutMs = timeoutMs\n }\n}\n\nexport class ErpcAbortedError extends ErpcError {\n constructor() {\n super('ERPC_ABORTED', 'ERPC request was aborted')\n this.name = 'ErpcAbortedError'\n }\n}\n\nexport class ErpcInvalidResponseError extends ErpcError {\n constructor(message = 'ERPC returned an invalid response') {\n super('ERPC_INVALID_RESPONSE', message)\n this.name = 'ErpcInvalidResponseError'\n }\n}\n\nexport class ErpcJsonRpcError extends ErpcError {\n readonly rpcCode: number\n readonly data?: unknown\n\n constructor(error: JsonRpcErrorObject) {\n super('ERPC_RPC', error.message)\n this.name = 'ErpcJsonRpcError'\n this.rpcCode = error.code\n if (error.data !== undefined) this.data = error.data\n }\n}\n\nexport class ErpcBatchPolicyError extends ErpcError {\n constructor(message: string) {\n super('ERPC_BATCH_POLICY', message)\n this.name = 'ErpcBatchPolicyError'\n }\n}\n","import {\n ErpcAbortedError,\n ErpcHttpError,\n ErpcInvalidResponseError,\n ErpcTimeoutError,\n ErpcTransportError,\n} from '../errors'\nimport type { RpcSendOptions } from '../rpc/types'\n\nexport type QueryValue =\n | boolean\n | number\n | readonly string[]\n | string\n | undefined\n\nexport type Query = Readonly<Record<string, QueryValue>>\n\nexport interface RestTransportConfig {\n readonly apiKey: string\n readonly endpoint: URL\n readonly fetch: typeof globalThis.fetch\n readonly headers: Readonly<Record<string, string>>\n readonly timeoutMs: number\n}\n\nexport interface RestStreamResponse {\n readonly response: Response\n close(): void\n normalizeError(error: unknown): Error\n}\n\ninterface ControlledSignal {\n readonly cleanup: () => void\n readonly signal: AbortSignal\n readonly stopTimeout: () => void\n readonly timeoutMs: number\n readonly timedOut: () => boolean\n}\n\nconst controlledSignal = (\n timeoutMs: number,\n external?: AbortSignal,\n): ControlledSignal => {\n const controller = new AbortController()\n let didTimeOut = false\n let timeout: ReturnType<typeof setTimeout> | undefined = setTimeout(() => {\n didTimeOut = true\n controller.abort()\n }, timeoutMs)\n\n const abort = () => controller.abort()\n if (external?.aborted) controller.abort()\n else external?.addEventListener('abort', abort, { once: true })\n\n const stopTimeout = () => {\n if (timeout === undefined) return\n clearTimeout(timeout)\n timeout = undefined\n }\n\n return {\n signal: controller.signal,\n stopTimeout,\n timeoutMs,\n timedOut: () => didTimeOut,\n cleanup: () => {\n stopTimeout()\n external?.removeEventListener('abort', abort)\n },\n }\n}\n\nconst normalizeError = (\n error: unknown,\n controlled: ControlledSignal,\n external?: AbortSignal,\n): Error => {\n if (\n error instanceof ErpcAbortedError ||\n error instanceof ErpcHttpError ||\n error instanceof ErpcInvalidResponseError ||\n error instanceof ErpcTimeoutError ||\n error instanceof ErpcTransportError\n ) {\n return error\n }\n if (controlled.timedOut()) {\n return new ErpcTimeoutError(controlled.timeoutMs)\n }\n if (external?.aborted) return new ErpcAbortedError()\n return new ErpcTransportError('Unable to reach ERPC')\n}\n\nconst applyQuery = (url: URL, query?: Query): void => {\n if (!query) return\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined) continue\n if (Array.isArray(value)) {\n for (const item of value) url.searchParams.append(key, item)\n } else {\n url.searchParams.set(key, String(value))\n }\n }\n}\n\nexport class RestTransport {\n readonly endpoint: string\n\n readonly #apiKey: string\n readonly #endpoint: URL\n readonly #fetch: typeof globalThis.fetch\n readonly #headers: Readonly<Record<string, string>>\n readonly #timeoutMs: number\n\n constructor(config: RestTransportConfig) {\n this.#apiKey = config.apiKey\n this.#endpoint = new URL(config.endpoint)\n this.#fetch = config.fetch\n this.#headers = config.headers\n this.#timeoutMs = config.timeoutMs\n const endpoint = new URL(config.endpoint)\n endpoint.search = ''\n endpoint.hash = ''\n this.endpoint = endpoint.toString()\n }\n\n url(path: string, query?: Query): URL {\n const url = new URL(this.#endpoint)\n const base = url.pathname === '/' ? '' : url.pathname.replace(/\\/+$/, '')\n url.pathname = `${base}/${path.replace(/^\\/+/, '')}`.replace(/\\/{2,}/g, '/')\n applyQuery(url, query)\n return url\n }\n\n async get<TResult>(\n path: string,\n query?: Query,\n options: RpcSendOptions = {},\n ): Promise<TResult> {\n const controlled = controlledSignal(this.#timeoutMs, options.signal)\n try {\n const response = await this.#get(path, query, controlled.signal)\n if (!response.ok) throw new ErpcHttpError(response.status)\n const text = await response.text()\n try {\n return JSON.parse(text) as TResult\n } catch {\n throw new ErpcInvalidResponseError('ERPC returned malformed JSON')\n }\n } catch (error) {\n throw normalizeError(error, controlled, options.signal)\n } finally {\n controlled.cleanup()\n }\n }\n\n async stream(\n path: string,\n query?: Query,\n options: RpcSendOptions = {},\n ): Promise<RestStreamResponse> {\n const controlled = controlledSignal(this.#timeoutMs, options.signal)\n try {\n const response = await this.#get(path, query, controlled.signal)\n if (!response.ok) throw new ErpcHttpError(response.status)\n\n // Long-lived streams use the timeout for connection establishment only.\n // The caller's AbortSignal remains attached until close() is called.\n controlled.stopTimeout()\n return {\n response,\n close: controlled.cleanup,\n normalizeError: (error) =>\n normalizeError(error, controlled, options.signal),\n }\n } catch (error) {\n controlled.cleanup()\n throw normalizeError(error, controlled, options.signal)\n }\n }\n\n #get(path: string, query: Query | undefined, signal: AbortSignal) {\n return this.#fetch(this.url(path, query), {\n method: 'GET',\n headers: {\n ...this.#headers,\n authorization: `Bearer ${this.#apiKey}`,\n accept: 'application/json',\n },\n signal,\n })\n }\n}\n","import type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\n\nexport type ErpcPlan = 'business' | 'developer' | 'free' | 'pro'\n\nexport interface TokenBalance {\n readonly max_tokens: number\n readonly next_refill_at: string | null\n readonly plan: ErpcPlan\n readonly remaining_tokens: number\n}\n\nexport class AccountClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n getTokenBalance(options?: RpcSendOptions): Promise<TokenBalance> {\n return this.#transport.get('/v3/erpc/token-balance', undefined, options)\n }\n}\n","/* Generated by registry/generate-token-catalog.mjs. Do not edit. */\n\nexport type TokenRepresentationKind = \"native\" | \"issued\" | \"wrapped\" | \"bridged\" | \"unclassified\";\nexport type TokenStandard = \"native\" | \"erc20\" | \"spl-token\" | \"spl-token-2022\";\nexport type TokenStatus = \"active\" | \"legacy\" | \"winding-down\" | \"retired\";\nexport type TokenStableCurrency = \"USD\" | \"EUR\" | \"JPY\" | null;\n\nexport interface TokenAsset {\n readonly assetId: string;\n readonly name: string;\n readonly representationKind: TokenRepresentationKind;\n readonly stableCurrency: TokenStableCurrency;\n readonly underlyingAssetId: string | null;\n readonly economicReferenceAssetId: string | null;\n}\n\nexport interface TokenDeployment {\n readonly deploymentId: string;\n readonly assetId: string;\n readonly name: string;\n readonly representationKind: TokenRepresentationKind;\n readonly stableCurrency: TokenStableCurrency;\n readonly underlyingAssetId: string | null;\n readonly economicReferenceAssetId: string | null;\n readonly chainId: TokenChainId;\n readonly symbol: string;\n readonly decimals: number;\n readonly standard: TokenStandard;\n readonly address: string | null;\n readonly status: TokenStatus;\n readonly replacedByDeploymentId: string | null;\n}\n\nexport interface TokenAlias {\n readonly namespace: string;\n readonly name: string;\n readonly deploymentId: string;\n}\n\nconst deepFreeze = <T>(value: T): Readonly<T> => {\n if (value && typeof value === \"object\" && !Object.isFrozen(value)) {\n Object.freeze(value);\n for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child);\n }\n return value as Readonly<T>;\n};\n\nexport const TOKEN_CATALOG_VERSION = \"1.0.0\" as const;\nexport const TOKEN_CATALOG_AS_OF_DATE = \"2026-09-15\" as const;\nexport const TOKEN_CATALOG_CONTENT_DIGEST = \"28318f4f6a6bc2cdeef51368eeb17c86685c6f12d1723b0b4dd27f7e54d7235d\" as const;\nexport const TOKEN_CHAIN_IDS = deepFreeze({\n \"ethereumMainnet\": \"eip155:1\",\n \"solanaMainnet\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"avalancheCMainnet\": \"eip155:43114\"\n}) as {\n readonly ethereumMainnet: \"eip155:1\";\n readonly solanaMainnet: \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\";\n readonly avalancheCMainnet: \"eip155:43114\";\n};\nexport type TokenChainId = (typeof TOKEN_CHAIN_IDS)[keyof typeof TOKEN_CHAIN_IDS];\n\nexport const tokens = deepFreeze({\n \"avalancheC\": {\n \"AUSD\": \"deployment-0035\",\n \"AVAX\": \"deployment-0003\",\n \"DISCOVERED_0A7F98C8752F15EE\": \"discovered-token-0a7f98c8752f15ee02ce0d801f25df8ff78864a1d70aff7e204f7bdb3f8a0692\",\n \"DISCOVERED_1847342426B765AD\": \"discovered-token-1847342426b765add3c8b4feb724c6b15121f25097cb7917c967c285ca77e804\",\n \"DISCOVERED_288036A90EE0FA72\": \"discovered-token-288036a90ee0fa72a2751a78a6934cc6ced9e16de91c97ae8e109e2ee6189bc5\",\n \"DISCOVERED_323D07C442F0D089\": \"discovered-token-323d07c442f0d089197ae7eea9b3ebb829910177c5b780161a7623aaed5e4371\",\n \"DISCOVERED_9F9965CC065C9BEC\": \"discovered-token-9f9965cc065c9becf8d2cb58071524baafea37d27fda9bf683a93ea85f2e653d\",\n \"EURC\": \"deployment-0012\",\n \"EUROP\": \"deployment-0045\",\n \"GHO\": \"deployment-0030\",\n \"JOE\": \"deployment-0059\",\n \"JPYC\": \"deployment-0039\",\n \"LINK\": \"deployment-0058\",\n \"USDC\": \"deployment-0009\",\n \"USDC_E\": \"deployment-0018\",\n \"USDT\": \"deployment-0015\",\n \"WAVAX\": \"deployment-0004\"\n },\n \"ethereum\": {\n \"AAVE\": \"deployment-0056\",\n \"AUSD\": \"deployment-0034\",\n \"DAI\": \"deployment-0019\",\n \"DISCOVERED_054D80A64E1F36A7\": \"discovered-token-054d80a64e1f36a756129763ca2f1e7a140b50b04c83876ff01dd5fd497a74c5\",\n \"DISCOVERED_611597BD13DAA43D\": \"discovered-token-611597bd13daa43d01a23caa9cca6a98797c64be7fb5b2677370ddbcdeaf01ec\",\n \"DISCOVERED_69519FD08E31445C\": \"discovered-token-69519fd08e31445cad84b0c17a5346b7ee9c5692e270602af9308ca6d8943bb6\",\n \"DISCOVERED_B475569F6A15E97A\": \"discovered-token-b475569f6a15e97ac04e531dd813e9dcc902521c098d60d6ae4d21d53baf1395\",\n \"DISCOVERED_E375086901067FE3\": \"discovered-token-e375086901067fe3de023bcdc70f1bafca798e1719ed7e676a98f57de3350a07\",\n \"ETH\": \"deployment-0001\",\n \"EURA\": \"deployment-0051\",\n \"EURAU\": \"deployment-0042\",\n \"EURC\": \"deployment-0011\",\n \"EURCV\": \"deployment-0040\",\n \"EURE\": \"deployment-0054\",\n \"EURE_V1\": \"deployment-0053\",\n \"EUROP\": \"deployment-0044\",\n \"EURS\": \"deployment-0052\",\n \"EURT\": \"deployment-0017\",\n \"FDUSD\": \"deployment-0031\",\n \"GHO\": \"deployment-0029\",\n \"GYEN\": \"deployment-0047\",\n \"JPYC\": \"deployment-0038\",\n \"LINK\": \"deployment-0057\",\n \"PYUSD\": \"deployment-0022\",\n \"RLUSD\": \"deployment-0033\",\n \"UNI\": \"deployment-0055\",\n \"USDC\": \"deployment-0008\",\n \"USDE\": \"deployment-0028\",\n \"USDG\": \"deployment-0024\",\n \"USDP\": \"deployment-0026\",\n \"USDS\": \"deployment-0020\",\n \"USDT\": \"deployment-0014\",\n \"WETH\": \"deployment-0002\",\n \"ZUSD\": \"deployment-0049\"\n },\n \"solana\": {\n \"AUSD\": \"deployment-0036\",\n \"EURAU\": \"deployment-0043\",\n \"EURC\": \"deployment-0013\",\n \"EURCV\": \"deployment-0041\",\n \"EUROP\": \"deployment-0046\",\n \"FDUSD\": \"deployment-0032\",\n \"GYEN\": \"deployment-0048\",\n \"JUP\": \"deployment-0060\",\n \"JUPUSD\": \"deployment-0037\",\n \"PYUSD\": \"deployment-0023\",\n \"SOL\": \"deployment-0005\",\n \"USDC\": \"deployment-0010\",\n \"USDG\": \"deployment-0025\",\n \"USDP\": \"deployment-0027\",\n \"USDS\": \"deployment-0021\",\n \"USDT\": \"deployment-0016\",\n \"WSOL\": \"deployment-0006\",\n \"WSOL_TOKEN_2022\": \"deployment-0007\",\n \"ZUSD\": \"deployment-0050\"\n }\n} as const);\nexport const TOKEN_ASSETS: readonly TokenAsset[] = deepFreeze([\n {\n \"assetId\": \"asset-0001\",\n \"name\": \"Ether\",\n \"representationKind\": \"native\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0002\",\n \"name\": \"Wrapped Ether\",\n \"representationKind\": \"wrapped\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": \"asset-0001\",\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0003\",\n \"name\": \"Avalanche\",\n \"representationKind\": \"native\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0004\",\n \"name\": \"Wrapped AVAX\",\n \"representationKind\": \"wrapped\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": \"asset-0003\",\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0005\",\n \"name\": \"Solana\",\n \"representationKind\": \"native\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0006\",\n \"name\": \"Wrapped SOL\",\n \"representationKind\": \"wrapped\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": \"asset-0005\",\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0007\",\n \"name\": \"USD Coin\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0008\",\n \"name\": \"Euro Coin\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0009\",\n \"name\": \"Tether USDt\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0010\",\n \"name\": \"Tether EURt\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0011\",\n \"name\": \"Bridged USD Coin (USDC.e)\",\n \"representationKind\": \"bridged\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": \"asset-0007\"\n },\n {\n \"assetId\": \"asset-0012\",\n \"name\": \"Dai\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0013\",\n \"name\": \"Sky Dollar\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0014\",\n \"name\": \"Bridged Sky Dollar\",\n \"representationKind\": \"bridged\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": \"asset-0013\"\n },\n {\n \"assetId\": \"asset-0015\",\n \"name\": \"PayPal USD (PYUSD)\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0016\",\n \"name\": \"Global Dollar (USDG)\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0017\",\n \"name\": \"Pax Dollar (USDP)\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0018\",\n \"name\": \"USDe\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0019\",\n \"name\": \"GHO\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0020\",\n \"name\": \"Bridged GHO\",\n \"representationKind\": \"bridged\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": \"asset-0019\"\n },\n {\n \"assetId\": \"asset-0021\",\n \"name\": \"First Digital USD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0022\",\n \"name\": \"Ripple USD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0023\",\n \"name\": \"Agora USD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0024\",\n \"name\": \"Jupiter USD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0025\",\n \"name\": \"JPY Coin\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"JPY\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0026\",\n \"name\": \"Euro CoinVertible\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0027\",\n \"name\": \"EURAU\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0028\",\n \"name\": \"EUROP\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0029\",\n \"name\": \"GYEN\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"JPY\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0030\",\n \"name\": \"ZUSD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0031\",\n \"name\": \"Angle EURA\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0032\",\n \"name\": \"STASIS EURS\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0033\",\n \"name\": \"Monerium EURe\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0034\",\n \"name\": \"Uniswap\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0035\",\n \"name\": \"Aave\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0036\",\n \"name\": \"Chainlink\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0037\",\n \"name\": \"Bridged Chainlink\",\n \"representationKind\": \"bridged\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": \"asset-0036\"\n },\n {\n \"assetId\": \"asset-0038\",\n \"name\": \"Trader Joe\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"asset-0039\",\n \"name\": \"Jupiter\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"discovered-token-054d80a64e1f36a756129763ca2f1e7a140b50b04c83876ff01dd5fd497a74c5\",\n \"name\": \"Unclassified token at 0x0f5d2fb29fb7d3cfee444a200298f468908cc942\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"discovered-token-0a7f98c8752f15ee02ce0d801f25df8ff78864a1d70aff7e204f7bdb3f8a0692\",\n \"name\": \"Unclassified token at 0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"discovered-token-1847342426b765add3c8b4feb724c6b15121f25097cb7917c967c285ca77e804\",\n \"name\": \"Unclassified token at 0x02e955e93055e5a9d7fe6e9ee65126b321acef76\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"discovered-token-288036a90ee0fa72a2751a78a6934cc6ced9e16de91c97ae8e109e2ee6189bc5\",\n \"name\": \"Unclassified token at 0xc7198437980c041c805a1edcba50c1ce5db95118\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"discovered-token-323d07c442f0d089197ae7eea9b3ebb829910177c5b780161a7623aaed5e4371\",\n \"name\": \"Unclassified token at 0x3ceeb67533e494c0dc6be579585e3c62916062e0\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"discovered-token-611597bd13daa43d01a23caa9cca6a98797c64be7fb5b2677370ddbcdeaf01ec\",\n \"name\": \"Unclassified token at 0x2b591e99afe9f32eaa6214f7b7629768c40eeb39\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"discovered-token-69519fd08e31445cad84b0c17a5346b7ee9c5692e270602af9308ca6d8943bb6\",\n \"name\": \"Unclassified token at 0x0d8775f648430679a709e98d2b0cb6250d2887ef\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"discovered-token-9f9965cc065c9becf8d2cb58071524baafea37d27fda9bf683a93ea85f2e653d\",\n \"name\": \"Unclassified token at 0x50b7545627a5162f82a992c33b87adc75187b218\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"discovered-token-b475569f6a15e97ac04e531dd813e9dcc902521c098d60d6ae4d21d53baf1395\",\n \"name\": \"Unclassified token at 0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n },\n {\n \"assetId\": \"discovered-token-e375086901067fe3de023bcdc70f1bafca798e1719ed7e676a98f57de3350a07\",\n \"name\": \"Unclassified token at 0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null\n }\n]) as readonly TokenAsset[];\nexport const TOKEN_DEPLOYMENTS: readonly TokenDeployment[] = deepFreeze([\n {\n \"deploymentId\": \"deployment-0001\",\n \"assetId\": \"asset-0001\",\n \"name\": \"Ether\",\n \"representationKind\": \"native\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"ETH\",\n \"decimals\": 18,\n \"standard\": \"native\",\n \"address\": null,\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0002\",\n \"assetId\": \"asset-0002\",\n \"name\": \"Wrapped Ether\",\n \"representationKind\": \"wrapped\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": \"asset-0001\",\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"WETH\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0003\",\n \"assetId\": \"asset-0003\",\n \"name\": \"Avalanche\",\n \"representationKind\": \"native\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"AVAX\",\n \"decimals\": 18,\n \"standard\": \"native\",\n \"address\": null,\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0004\",\n \"assetId\": \"asset-0004\",\n \"name\": \"Wrapped AVAX\",\n \"representationKind\": \"wrapped\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": \"asset-0003\",\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"WAVAX\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0005\",\n \"assetId\": \"asset-0005\",\n \"name\": \"Solana\",\n \"representationKind\": \"native\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"SOL\",\n \"decimals\": 9,\n \"standard\": \"native\",\n \"address\": null,\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0006\",\n \"assetId\": \"asset-0006\",\n \"name\": \"Wrapped SOL\",\n \"representationKind\": \"wrapped\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": \"asset-0005\",\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"WSOL\",\n \"decimals\": 9,\n \"standard\": \"spl-token\",\n \"address\": \"So11111111111111111111111111111111111111112\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0007\",\n \"assetId\": \"asset-0006\",\n \"name\": \"Wrapped SOL\",\n \"representationKind\": \"wrapped\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": \"asset-0005\",\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"WSOL\",\n \"decimals\": 9,\n \"standard\": \"spl-token-2022\",\n \"address\": \"9pan9bMn5HatX4EJdBwg9VgCa7Uz5HL8N1m5D3NdXejP\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0008\",\n \"assetId\": \"asset-0007\",\n \"name\": \"USD Coin\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"USDC\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0009\",\n \"assetId\": \"asset-0007\",\n \"name\": \"USD Coin\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"USDC\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0010\",\n \"assetId\": \"asset-0007\",\n \"name\": \"USD Coin\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"USDC\",\n \"decimals\": 6,\n \"standard\": \"spl-token\",\n \"address\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0011\",\n \"assetId\": \"asset-0008\",\n \"name\": \"Euro Coin\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"EURC\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0x1abaea1f7c830bd89acc67ec4af516284b1bc33c\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0012\",\n \"assetId\": \"asset-0008\",\n \"name\": \"Euro Coin\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"EURC\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0xc891eb4cbdeff6e073e859e987815ed1505c2acd\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0013\",\n \"assetId\": \"asset-0008\",\n \"name\": \"Euro Coin\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"EURC\",\n \"decimals\": 6,\n \"standard\": \"spl-token\",\n \"address\": \"HzwqbKZw8HxMN6bF2yFZNrht3c2iXXzpKcFu7uBEDKtr\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0014\",\n \"assetId\": \"asset-0009\",\n \"name\": \"Tether USDt\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"USDT\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0015\",\n \"assetId\": \"asset-0009\",\n \"name\": \"Tether USDt\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"USDT\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0016\",\n \"assetId\": \"asset-0009\",\n \"name\": \"Tether USDt\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"USDT\",\n \"decimals\": 6,\n \"standard\": \"spl-token\",\n \"address\": \"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0017\",\n \"assetId\": \"asset-0010\",\n \"name\": \"Tether EURt\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"EURT\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0xc581b735a1688071a1746c968e0798d642ede491\",\n \"status\": \"retired\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0018\",\n \"assetId\": \"asset-0011\",\n \"name\": \"Bridged USD Coin (USDC.e)\",\n \"representationKind\": \"bridged\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": \"asset-0007\",\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"USDC.e\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664\",\n \"status\": \"legacy\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0019\",\n \"assetId\": \"asset-0012\",\n \"name\": \"Dai\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"DAI\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x6b175474e89094c44da98b954eedeac495271d0f\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0020\",\n \"assetId\": \"asset-0013\",\n \"name\": \"Sky Dollar\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"USDS\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0xdc035d45d973e3ec169d2276ddab16f1e407384f\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0021\",\n \"assetId\": \"asset-0014\",\n \"name\": \"Bridged Sky Dollar\",\n \"representationKind\": \"bridged\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": \"asset-0013\",\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"USDS\",\n \"decimals\": 6,\n \"standard\": \"spl-token\",\n \"address\": \"USDSwr9ApdHk5bvJKMjzff41FfuX8bSxdKcR81vTwcA\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0022\",\n \"assetId\": \"asset-0015\",\n \"name\": \"PayPal USD (PYUSD)\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"PYUSD\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0x6c3ea9036406852006290770bedfcaba0e23a0e8\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0023\",\n \"assetId\": \"asset-0015\",\n \"name\": \"PayPal USD (PYUSD)\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"PYUSD\",\n \"decimals\": 6,\n \"standard\": \"spl-token-2022\",\n \"address\": \"2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0024\",\n \"assetId\": \"asset-0016\",\n \"name\": \"Global Dollar (USDG)\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"USDG\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0xe343167631d89b6ffc58b88d6b7fb0228795491d\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0025\",\n \"assetId\": \"asset-0016\",\n \"name\": \"Global Dollar (USDG)\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"USDG\",\n \"decimals\": 6,\n \"standard\": \"spl-token-2022\",\n \"address\": \"2u1tszSeqZ3qBWF3uNGPFc8TzMk2tdiwknnRMWGWjGWH\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0026\",\n \"assetId\": \"asset-0017\",\n \"name\": \"Pax Dollar (USDP)\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"USDP\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x8e870d67f660d95d5be530380d0ec0bd388289e1\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0027\",\n \"assetId\": \"asset-0017\",\n \"name\": \"Pax Dollar (USDP)\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"USDP\",\n \"decimals\": 6,\n \"standard\": \"spl-token-2022\",\n \"address\": \"HVbpJAQGNpkgBaYBZQBR1t7yFdvaYVp2vCQQfKKEN4tM\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0028\",\n \"assetId\": \"asset-0018\",\n \"name\": \"USDe\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"USDe\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x4c9edd5852cd905f086c759e8383e09bff1e68b3\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0029\",\n \"assetId\": \"asset-0019\",\n \"name\": \"GHO\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"GHO\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x40d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0030\",\n \"assetId\": \"asset-0020\",\n \"name\": \"Bridged GHO\",\n \"representationKind\": \"bridged\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": \"asset-0019\",\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"GHO\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0xfc421ad3c883bf9e7c4f42de845c4e4405799e73\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0031\",\n \"assetId\": \"asset-0021\",\n \"name\": \"First Digital USD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"FDUSD\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0xc5f0f7b66764f6ec8c8dff7ba683102295e16409\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0032\",\n \"assetId\": \"asset-0021\",\n \"name\": \"First Digital USD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"FDUSD\",\n \"decimals\": 6,\n \"standard\": \"spl-token\",\n \"address\": \"9zNQRsGLjNKwCUU5Gq5LR8beUCPzQMVMqKAi3SSZh54u\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0033\",\n \"assetId\": \"asset-0022\",\n \"name\": \"Ripple USD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"RLUSD\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x8292bb45bf1ee4d140127049757c2e0ff06317ed\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0034\",\n \"assetId\": \"asset-0023\",\n \"name\": \"Agora USD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"AUSD\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0x00000000efe302beaa2b3e6e1b18d08d69a9012a\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0035\",\n \"assetId\": \"asset-0023\",\n \"name\": \"Agora USD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"AUSD\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0x00000000efe302beaa2b3e6e1b18d08d69a9012a\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0036\",\n \"assetId\": \"asset-0023\",\n \"name\": \"Agora USD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"AUSD\",\n \"decimals\": 6,\n \"standard\": \"spl-token-2022\",\n \"address\": \"AUSD1jCcCyPLybk1YnvPWsHQSrZ46dxwoMniN4N2UEB9\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0037\",\n \"assetId\": \"asset-0024\",\n \"name\": \"Jupiter USD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"JupUSD\",\n \"decimals\": 6,\n \"standard\": \"spl-token\",\n \"address\": \"JuprjznTrTSp2UFa3ZBUFgwdAmtZCq4MQCwysN55USD\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0038\",\n \"assetId\": \"asset-0025\",\n \"name\": \"JPY Coin\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"JPY\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"JPYC\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0xe7c3d8c9a439fede00d2600032d5db0be71c3c29\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0039\",\n \"assetId\": \"asset-0025\",\n \"name\": \"JPY Coin\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"JPY\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"JPYC\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0xe7c3d8c9a439fede00d2600032d5db0be71c3c29\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0040\",\n \"assetId\": \"asset-0026\",\n \"name\": \"Euro CoinVertible\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"EURCV\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x5f7827fdeb7c20b443265fc2f40845b715385ff2\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0041\",\n \"assetId\": \"asset-0026\",\n \"name\": \"Euro CoinVertible\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"EURCV\",\n \"decimals\": 2,\n \"standard\": \"spl-token-2022\",\n \"address\": \"DghpMkatCiUsofbTmid3M3kAbDTPqDwKiYHnudXeGG52\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0042\",\n \"assetId\": \"asset-0027\",\n \"name\": \"EURAU\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"EURAU\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0x4933a85b5b5466fbaf179f72d3de273c287ec2c2\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0043\",\n \"assetId\": \"asset-0027\",\n \"name\": \"EURAU\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"EURAU\",\n \"decimals\": 6,\n \"standard\": \"spl-token-2022\",\n \"address\": \"9pCWprxbZMW2rYSMhPTeoyLMV2sN2WJqshdT7DQVt6hS\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0044\",\n \"assetId\": \"asset-0028\",\n \"name\": \"EUROP\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"EUROP\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0x888883b5f5d21fb10dfeb70e8f9722b9fb0e5e51\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0045\",\n \"assetId\": \"asset-0028\",\n \"name\": \"EUROP\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"EUROP\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0x8835a2f66a7aaccb297cb985831a616b75e2e16c\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0046\",\n \"assetId\": \"asset-0028\",\n \"name\": \"EUROP\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"EUROP\",\n \"decimals\": 6,\n \"standard\": \"spl-token-2022\",\n \"address\": \"euro5sNHrZC2wu2RoLvy6xxoVMc3Qnd1vjxoWf4MftA\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0047\",\n \"assetId\": \"asset-0029\",\n \"name\": \"GYEN\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"JPY\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"GYEN\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0xc08512927d12348f6620a698105e1baac6ecd911\",\n \"status\": \"winding-down\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0048\",\n \"assetId\": \"asset-0029\",\n \"name\": \"GYEN\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"JPY\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"GYEN\",\n \"decimals\": 6,\n \"standard\": \"spl-token-2022\",\n \"address\": \"Crn4x1Y2HUKko7ox2EZMT6N2t2ZyH7eKtwkBGVnhEq1g\",\n \"status\": \"winding-down\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0049\",\n \"assetId\": \"asset-0030\",\n \"name\": \"ZUSD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"ZUSD\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0xc56c2b7e71b54d38aab6d52e94a04cbfa8f604fa\",\n \"status\": \"winding-down\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0050\",\n \"assetId\": \"asset-0030\",\n \"name\": \"ZUSD\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"USD\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"ZUSD\",\n \"decimals\": 6,\n \"standard\": \"spl-token-2022\",\n \"address\": \"FrBfWJ4qE5sCzKm3k3JaAtqZcXUh4LvJygDeketsrsH4\",\n \"status\": \"winding-down\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0051\",\n \"assetId\": \"asset-0031\",\n \"name\": \"Angle EURA\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"EURA\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x1a7e4e63778b4f12a199c062f3efdd288afcbce8\",\n \"status\": \"winding-down\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0052\",\n \"assetId\": \"asset-0032\",\n \"name\": \"STASIS EURS\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"EURS\",\n \"decimals\": 2,\n \"standard\": \"erc20\",\n \"address\": \"0xdb25f211ab05b1c97d595516f45794528a807ad8\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0053\",\n \"assetId\": \"asset-0033\",\n \"name\": \"Monerium EURe\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"EURe\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x3231cb76718cdef2155fc47b5286d82e6eda273f\",\n \"status\": \"legacy\",\n \"replacedByDeploymentId\": \"deployment-0054\"\n },\n {\n \"deploymentId\": \"deployment-0054\",\n \"assetId\": \"asset-0033\",\n \"name\": \"Monerium EURe\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": \"EUR\",\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"EURe\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x39b8b6385416f4ca36a20319f70d28621895279d\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0055\",\n \"assetId\": \"asset-0034\",\n \"name\": \"Uniswap\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"UNI\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x1f9840a85d5af5bf1d1762f925bdaddc4201f984\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0056\",\n \"assetId\": \"asset-0035\",\n \"name\": \"Aave\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"AAVE\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0057\",\n \"assetId\": \"asset-0036\",\n \"name\": \"Chainlink\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"LINK\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x514910771af9ca656af840dff83e8264ecf986ca\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0058\",\n \"assetId\": \"asset-0037\",\n \"name\": \"Bridged Chainlink\",\n \"representationKind\": \"bridged\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": \"asset-0036\",\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"LINK\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x5947bb275c521040051d82396192181b413227a3\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0059\",\n \"assetId\": \"asset-0038\",\n \"name\": \"Trader Joe\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"JOE\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"deployment-0060\",\n \"assetId\": \"asset-0039\",\n \"name\": \"Jupiter\",\n \"representationKind\": \"issued\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"symbol\": \"JUP\",\n \"decimals\": 6,\n \"standard\": \"spl-token\",\n \"address\": \"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"discovered-token-054d80a64e1f36a756129763ca2f1e7a140b50b04c83876ff01dd5fd497a74c5\",\n \"assetId\": \"discovered-token-054d80a64e1f36a756129763ca2f1e7a140b50b04c83876ff01dd5fd497a74c5\",\n \"name\": \"Unclassified token at 0x0f5d2fb29fb7d3cfee444a200298f468908cc942\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"0x0f5d2fb29fb7d3cfee444a200298f468908cc942\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x0f5d2fb29fb7d3cfee444a200298f468908cc942\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"discovered-token-0a7f98c8752f15ee02ce0d801f25df8ff78864a1d70aff7e204f7bdb3f8a0692\",\n \"assetId\": \"discovered-token-0a7f98c8752f15ee02ce0d801f25df8ff78864a1d70aff7e204f7bdb3f8a0692\",\n \"name\": \"Unclassified token at 0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"discovered-token-1847342426b765add3c8b4feb724c6b15121f25097cb7917c967c285ca77e804\",\n \"assetId\": \"discovered-token-1847342426b765add3c8b4feb724c6b15121f25097cb7917c967c285ca77e804\",\n \"name\": \"Unclassified token at 0x02e955e93055e5a9d7fe6e9ee65126b321acef76\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"0x02e955e93055e5a9d7fe6e9ee65126b321acef76\",\n \"decimals\": 9,\n \"standard\": \"erc20\",\n \"address\": \"0x02e955e93055e5a9d7fe6e9ee65126b321acef76\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"discovered-token-288036a90ee0fa72a2751a78a6934cc6ced9e16de91c97ae8e109e2ee6189bc5\",\n \"assetId\": \"discovered-token-288036a90ee0fa72a2751a78a6934cc6ced9e16de91c97ae8e109e2ee6189bc5\",\n \"name\": \"Unclassified token at 0xc7198437980c041c805a1edcba50c1ce5db95118\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"0xc7198437980c041c805a1edcba50c1ce5db95118\",\n \"decimals\": 6,\n \"standard\": \"erc20\",\n \"address\": \"0xc7198437980c041c805a1edcba50c1ce5db95118\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"discovered-token-323d07c442f0d089197ae7eea9b3ebb829910177c5b780161a7623aaed5e4371\",\n \"assetId\": \"discovered-token-323d07c442f0d089197ae7eea9b3ebb829910177c5b780161a7623aaed5e4371\",\n \"name\": \"Unclassified token at 0x3ceeb67533e494c0dc6be579585e3c62916062e0\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"0x3ceeb67533e494c0dc6be579585e3c62916062e0\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x3ceeb67533e494c0dc6be579585e3c62916062e0\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"discovered-token-611597bd13daa43d01a23caa9cca6a98797c64be7fb5b2677370ddbcdeaf01ec\",\n \"assetId\": \"discovered-token-611597bd13daa43d01a23caa9cca6a98797c64be7fb5b2677370ddbcdeaf01ec\",\n \"name\": \"Unclassified token at 0x2b591e99afe9f32eaa6214f7b7629768c40eeb39\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"0x2b591e99afe9f32eaa6214f7b7629768c40eeb39\",\n \"decimals\": 8,\n \"standard\": \"erc20\",\n \"address\": \"0x2b591e99afe9f32eaa6214f7b7629768c40eeb39\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"discovered-token-69519fd08e31445cad84b0c17a5346b7ee9c5692e270602af9308ca6d8943bb6\",\n \"assetId\": \"discovered-token-69519fd08e31445cad84b0c17a5346b7ee9c5692e270602af9308ca6d8943bb6\",\n \"name\": \"Unclassified token at 0x0d8775f648430679a709e98d2b0cb6250d2887ef\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"0x0d8775f648430679a709e98d2b0cb6250d2887ef\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x0d8775f648430679a709e98d2b0cb6250d2887ef\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"discovered-token-9f9965cc065c9becf8d2cb58071524baafea37d27fda9bf683a93ea85f2e653d\",\n \"assetId\": \"discovered-token-9f9965cc065c9becf8d2cb58071524baafea37d27fda9bf683a93ea85f2e653d\",\n \"name\": \"Unclassified token at 0x50b7545627a5162f82a992c33b87adc75187b218\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:43114\",\n \"symbol\": \"0x50b7545627a5162f82a992c33b87adc75187b218\",\n \"decimals\": 8,\n \"standard\": \"erc20\",\n \"address\": \"0x50b7545627a5162f82a992c33b87adc75187b218\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"discovered-token-b475569f6a15e97ac04e531dd813e9dcc902521c098d60d6ae4d21d53baf1395\",\n \"assetId\": \"discovered-token-b475569f6a15e97ac04e531dd813e9dcc902521c098d60d6ae4d21d53baf1395\",\n \"name\": \"Unclassified token at 0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2\",\n \"decimals\": 18,\n \"standard\": \"erc20\",\n \"address\": \"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n },\n {\n \"deploymentId\": \"discovered-token-e375086901067fe3de023bcdc70f1bafca798e1719ed7e676a98f57de3350a07\",\n \"assetId\": \"discovered-token-e375086901067fe3de023bcdc70f1bafca798e1719ed7e676a98f57de3350a07\",\n \"name\": \"Unclassified token at 0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\",\n \"representationKind\": \"unclassified\",\n \"stableCurrency\": null,\n \"underlyingAssetId\": null,\n \"economicReferenceAssetId\": null,\n \"chainId\": \"eip155:1\",\n \"symbol\": \"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\",\n \"decimals\": 8,\n \"standard\": \"erc20\",\n \"address\": \"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\",\n \"status\": \"active\",\n \"replacedByDeploymentId\": null\n }\n]) as readonly TokenDeployment[];\nexport const TOKEN_ALIASES: readonly TokenAlias[] = deepFreeze([\n { namespace: \"avalancheC\", name: \"AUSD\", deploymentId: tokens.avalancheC.AUSD },\n { namespace: \"avalancheC\", name: \"AVAX\", deploymentId: tokens.avalancheC.AVAX },\n { namespace: \"avalancheC\", name: \"DISCOVERED_0A7F98C8752F15EE\", deploymentId: tokens.avalancheC.DISCOVERED_0A7F98C8752F15EE },\n { namespace: \"avalancheC\", name: \"DISCOVERED_1847342426B765AD\", deploymentId: tokens.avalancheC.DISCOVERED_1847342426B765AD },\n { namespace: \"avalancheC\", name: \"DISCOVERED_288036A90EE0FA72\", deploymentId: tokens.avalancheC.DISCOVERED_288036A90EE0FA72 },\n { namespace: \"avalancheC\", name: \"DISCOVERED_323D07C442F0D089\", deploymentId: tokens.avalancheC.DISCOVERED_323D07C442F0D089 },\n { namespace: \"avalancheC\", name: \"DISCOVERED_9F9965CC065C9BEC\", deploymentId: tokens.avalancheC.DISCOVERED_9F9965CC065C9BEC },\n { namespace: \"avalancheC\", name: \"EURC\", deploymentId: tokens.avalancheC.EURC },\n { namespace: \"avalancheC\", name: \"EUROP\", deploymentId: tokens.avalancheC.EUROP },\n { namespace: \"avalancheC\", name: \"GHO\", deploymentId: tokens.avalancheC.GHO },\n { namespace: \"avalancheC\", name: \"JOE\", deploymentId: tokens.avalancheC.JOE },\n { namespace: \"avalancheC\", name: \"JPYC\", deploymentId: tokens.avalancheC.JPYC },\n { namespace: \"avalancheC\", name: \"LINK\", deploymentId: tokens.avalancheC.LINK },\n { namespace: \"avalancheC\", name: \"USDC\", deploymentId: tokens.avalancheC.USDC },\n { namespace: \"avalancheC\", name: \"USDC_E\", deploymentId: tokens.avalancheC.USDC_E },\n { namespace: \"avalancheC\", name: \"USDT\", deploymentId: tokens.avalancheC.USDT },\n { namespace: \"avalancheC\", name: \"WAVAX\", deploymentId: tokens.avalancheC.WAVAX },\n { namespace: \"ethereum\", name: \"AAVE\", deploymentId: tokens.ethereum.AAVE },\n { namespace: \"ethereum\", name: \"AUSD\", deploymentId: tokens.ethereum.AUSD },\n { namespace: \"ethereum\", name: \"DAI\", deploymentId: tokens.ethereum.DAI },\n { namespace: \"ethereum\", name: \"DISCOVERED_054D80A64E1F36A7\", deploymentId: tokens.ethereum.DISCOVERED_054D80A64E1F36A7 },\n { namespace: \"ethereum\", name: \"DISCOVERED_611597BD13DAA43D\", deploymentId: tokens.ethereum.DISCOVERED_611597BD13DAA43D },\n { namespace: \"ethereum\", name: \"DISCOVERED_69519FD08E31445C\", deploymentId: tokens.ethereum.DISCOVERED_69519FD08E31445C },\n { namespace: \"ethereum\", name: \"DISCOVERED_B475569F6A15E97A\", deploymentId: tokens.ethereum.DISCOVERED_B475569F6A15E97A },\n { namespace: \"ethereum\", name: \"DISCOVERED_E375086901067FE3\", deploymentId: tokens.ethereum.DISCOVERED_E375086901067FE3 },\n { namespace: \"ethereum\", name: \"ETH\", deploymentId: tokens.ethereum.ETH },\n { namespace: \"ethereum\", name: \"EURA\", deploymentId: tokens.ethereum.EURA },\n { namespace: \"ethereum\", name: \"EURAU\", deploymentId: tokens.ethereum.EURAU },\n { namespace: \"ethereum\", name: \"EURC\", deploymentId: tokens.ethereum.EURC },\n { namespace: \"ethereum\", name: \"EURCV\", deploymentId: tokens.ethereum.EURCV },\n { namespace: \"ethereum\", name: \"EURE\", deploymentId: tokens.ethereum.EURE },\n { namespace: \"ethereum\", name: \"EURE_V1\", deploymentId: tokens.ethereum.EURE_V1 },\n { namespace: \"ethereum\", name: \"EUROP\", deploymentId: tokens.ethereum.EUROP },\n { namespace: \"ethereum\", name: \"EURS\", deploymentId: tokens.ethereum.EURS },\n { namespace: \"ethereum\", name: \"EURT\", deploymentId: tokens.ethereum.EURT },\n { namespace: \"ethereum\", name: \"FDUSD\", deploymentId: tokens.ethereum.FDUSD },\n { namespace: \"ethereum\", name: \"GHO\", deploymentId: tokens.ethereum.GHO },\n { namespace: \"ethereum\", name: \"GYEN\", deploymentId: tokens.ethereum.GYEN },\n { namespace: \"ethereum\", name: \"JPYC\", deploymentId: tokens.ethereum.JPYC },\n { namespace: \"ethereum\", name: \"LINK\", deploymentId: tokens.ethereum.LINK },\n { namespace: \"ethereum\", name: \"PYUSD\", deploymentId: tokens.ethereum.PYUSD },\n { namespace: \"ethereum\", name: \"RLUSD\", deploymentId: tokens.ethereum.RLUSD },\n { namespace: \"ethereum\", name: \"UNI\", deploymentId: tokens.ethereum.UNI },\n { namespace: \"ethereum\", name: \"USDC\", deploymentId: tokens.ethereum.USDC },\n { namespace: \"ethereum\", name: \"USDE\", deploymentId: tokens.ethereum.USDE },\n { namespace: \"ethereum\", name: \"USDG\", deploymentId: tokens.ethereum.USDG },\n { namespace: \"ethereum\", name: \"USDP\", deploymentId: tokens.ethereum.USDP },\n { namespace: \"ethereum\", name: \"USDS\", deploymentId: tokens.ethereum.USDS },\n { namespace: \"ethereum\", name: \"USDT\", deploymentId: tokens.ethereum.USDT },\n { namespace: \"ethereum\", name: \"WETH\", deploymentId: tokens.ethereum.WETH },\n { namespace: \"ethereum\", name: \"ZUSD\", deploymentId: tokens.ethereum.ZUSD },\n { namespace: \"solana\", name: \"AUSD\", deploymentId: tokens.solana.AUSD },\n { namespace: \"solana\", name: \"EURAU\", deploymentId: tokens.solana.EURAU },\n { namespace: \"solana\", name: \"EURC\", deploymentId: tokens.solana.EURC },\n { namespace: \"solana\", name: \"EURCV\", deploymentId: tokens.solana.EURCV },\n { namespace: \"solana\", name: \"EUROP\", deploymentId: tokens.solana.EUROP },\n { namespace: \"solana\", name: \"FDUSD\", deploymentId: tokens.solana.FDUSD },\n { namespace: \"solana\", name: \"GYEN\", deploymentId: tokens.solana.GYEN },\n { namespace: \"solana\", name: \"JUP\", deploymentId: tokens.solana.JUP },\n { namespace: \"solana\", name: \"JUPUSD\", deploymentId: tokens.solana.JUPUSD },\n { namespace: \"solana\", name: \"PYUSD\", deploymentId: tokens.solana.PYUSD },\n { namespace: \"solana\", name: \"SOL\", deploymentId: tokens.solana.SOL },\n { namespace: \"solana\", name: \"USDC\", deploymentId: tokens.solana.USDC },\n { namespace: \"solana\", name: \"USDG\", deploymentId: tokens.solana.USDG },\n { namespace: \"solana\", name: \"USDP\", deploymentId: tokens.solana.USDP },\n { namespace: \"solana\", name: \"USDS\", deploymentId: tokens.solana.USDS },\n { namespace: \"solana\", name: \"USDT\", deploymentId: tokens.solana.USDT },\n { namespace: \"solana\", name: \"WSOL\", deploymentId: tokens.solana.WSOL },\n { namespace: \"solana\", name: \"WSOL_TOKEN_2022\", deploymentId: tokens.solana.WSOL_TOKEN_2022 },\n { namespace: \"solana\", name: \"ZUSD\", deploymentId: tokens.solana.ZUSD },\n]) as readonly TokenAlias[];\n","import {\n TOKEN_ALIASES,\n TOKEN_ASSETS,\n TOKEN_CATALOG_AS_OF_DATE,\n TOKEN_CATALOG_CONTENT_DIGEST,\n TOKEN_CATALOG_VERSION,\n TOKEN_CHAIN_IDS,\n TOKEN_DEPLOYMENTS,\n tokens,\n} from './generated/token_catalog'\nimport type {\n TokenAlias,\n TokenAsset,\n TokenChainId,\n TokenDeployment,\n TokenRepresentationKind,\n TokenStandard,\n TokenStatus,\n} from './generated/token_catalog'\n\nexport {\n TOKEN_ALIASES,\n TOKEN_ASSETS,\n TOKEN_CATALOG_AS_OF_DATE,\n TOKEN_CATALOG_CONTENT_DIGEST,\n TOKEN_CATALOG_VERSION,\n TOKEN_CHAIN_IDS,\n TOKEN_DEPLOYMENTS,\n tokens,\n}\n\nexport type {\n TokenAlias,\n TokenAsset,\n TokenChainId,\n TokenDeployment,\n TokenRepresentationKind,\n TokenStandard,\n TokenStatus,\n}\n\n/** Stable currencies represented by the catalog's stablecoin metadata. */\nexport type StableCurrency = 'USD' | 'EUR' | 'JPY'\n\nexport interface ListTokenDeploymentsOptions {\n readonly chainId?: TokenChainId\n readonly stableCurrency?: StableCurrency\n}\n\nconst EMPTY_DEPLOYMENTS: readonly TokenDeployment[] = Object.freeze([])\n\nconst assetsById = new Map<string, TokenAsset>(\n TOKEN_ASSETS.map((asset) => [asset.assetId, asset]),\n)\n\nconst deploymentsById = new Map<string, TokenDeployment>(\n TOKEN_DEPLOYMENTS.map((deployment) => [deployment.deploymentId, deployment]),\n)\n\nconst deploymentsBySymbol = new Map<string, readonly TokenDeployment[]>()\nfor (const deployment of TOKEN_DEPLOYMENTS) {\n const key = `${deployment.chainId}\\u0000${deployment.symbol}`\n const existing = deploymentsBySymbol.get(key)\n if (existing) {\n deploymentsBySymbol.set(key, [...existing, deployment])\n } else {\n deploymentsBySymbol.set(key, [deployment])\n }\n}\n\nfor (const [key, deployments] of deploymentsBySymbol) {\n deploymentsBySymbol.set(\n key,\n Object.freeze(\n [...deployments].sort((left, right) =>\n left.deploymentId < right.deploymentId\n ? -1\n : left.deploymentId > right.deploymentId\n ? 1\n : 0,\n ),\n ),\n )\n}\n\nconst deploymentsByAddress = new Map<string, TokenDeployment>()\nfor (const deployment of TOKEN_DEPLOYMENTS) {\n if (deployment.address === null || deployment.address === '') continue\n\n const normalizedAddress = isEvmChain(deployment.chainId)\n ? normalizeEvmAddress(deployment.address)\n : deployment.address\n if (normalizedAddress === undefined || isZeroEvmAddress(normalizedAddress)) {\n continue\n }\n\n const key = `${deployment.chainId}\\u0000${normalizedAddress}`\n if (!deploymentsByAddress.has(key)) {\n deploymentsByAddress.set(key, deployment)\n }\n}\n\n/**\n * Return an asset by its opaque, exact asset ID.\n *\n * IDs are intentionally treated as opaque strings. No chain or symbol is\n * inferred from the value.\n */\nexport function getTokenAsset(assetId: string): TokenAsset | undefined {\n return typeof assetId === 'string' ? assetsById.get(assetId) : undefined\n}\n\n/** Return a deployment by its opaque, exact deployment ID. */\nexport function getTokenDeployment(\n deploymentId: string,\n): TokenDeployment | undefined {\n return typeof deploymentId === 'string'\n ? deploymentsById.get(deploymentId)\n : undefined\n}\n\n/**\n * List all catalog deployments, optionally restricted by chain and stable\n * currency. Every status remains visible in the result.\n */\nexport function listTokenDeployments(\n options: ListTokenDeploymentsOptions = {},\n): readonly TokenDeployment[] {\n if (!isRecord(options)) return EMPTY_DEPLOYMENTS\n\n const { chainId, stableCurrency } = options\n if (chainId !== undefined && !isKnownChainId(chainId)) {\n return EMPTY_DEPLOYMENTS\n }\n if (\n stableCurrency !== undefined &&\n !isStableCurrency(stableCurrency)\n ) {\n return EMPTY_DEPLOYMENTS\n }\n\n const filtered = TOKEN_DEPLOYMENTS.filter((deployment) => {\n if (chainId !== undefined && deployment.chainId !== chainId) return false\n if (\n stableCurrency !== undefined &&\n deployment.stableCurrency !== stableCurrency\n ) {\n return false\n }\n return true\n })\n\n return filtered.length === 0 ? EMPTY_DEPLOYMENTS : Object.freeze(filtered)\n}\n\n/**\n * Find every exact-case symbol match on a chain, ordered by deployment ID.\n */\nexport function findTokenDeploymentsBySymbol(\n chainId: TokenChainId,\n symbol: string,\n): readonly TokenDeployment[] {\n if (\n !isKnownChainId(chainId) ||\n typeof symbol !== 'string' ||\n symbol.length === 0\n ) {\n return EMPTY_DEPLOYMENTS\n }\n\n return (\n deploymentsBySymbol.get(`${chainId}\\u0000${symbol}`) ?? EMPTY_DEPLOYMENTS\n )\n}\n\n/**\n * Find a deployment by address. EVM addresses are ASCII hex and are matched\n * case-insensitively; Solana addresses are matched byte-for-byte as strings.\n */\nexport function findTokenDeploymentByAddress(\n chainId: TokenChainId,\n address: string,\n): TokenDeployment | undefined {\n if (!isKnownChainId(chainId) || typeof address !== 'string') return undefined\n if (address.length === 0) return undefined\n\n const normalizedAddress = isEvmChain(chainId)\n ? normalizeEvmAddress(address)\n : address\n if (\n normalizedAddress === undefined ||\n (isEvmChain(chainId) && isZeroEvmAddress(normalizedAddress))\n ) {\n return undefined\n }\n\n return deploymentsByAddress.get(`${chainId}\\u0000${normalizedAddress}`)\n}\n\n/** Find the chain's native deployment. Native deployments use address null. */\nexport function getNativeTokenDeployment(\n chainId: TokenChainId,\n): TokenDeployment | undefined {\n if (!isKnownChainId(chainId)) return undefined\n\n return TOKEN_DEPLOYMENTS.find(\n (deployment) =>\n deployment.chainId === chainId &&\n deployment.standard === 'native' &&\n deployment.address === null,\n )\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction isKnownChainId(value: unknown): value is TokenChainId {\n return (\n value === TOKEN_CHAIN_IDS.ethereumMainnet ||\n value === TOKEN_CHAIN_IDS.solanaMainnet ||\n value === TOKEN_CHAIN_IDS.avalancheCMainnet\n )\n}\n\nfunction isStableCurrency(value: unknown): value is StableCurrency {\n return value === 'USD' || value === 'EUR' || value === 'JPY'\n}\n\nfunction isEvmChain(chainId: string): boolean {\n return (\n chainId === TOKEN_CHAIN_IDS.ethereumMainnet ||\n chainId === TOKEN_CHAIN_IDS.avalancheCMainnet\n )\n}\n\nfunction normalizeEvmAddress(address: string): string | undefined {\n if (!/^0x[0-9a-fA-F]{40}$/.test(address)) return undefined\n return address.toLowerCase()\n}\n\nfunction isZeroEvmAddress(address: string): boolean {\n return address === `0x${'0'.repeat(40)}`\n}\n","/* Generated by registry/generate-token-rankings.mjs. Do not edit. */\n\nexport type TokenRankingMetric = 'onchain-total-supply-value-native' | 'global-circulating-market-cap-usd';\nexport type TokenRankingStatus = 'unconfigured' | 'complete' | 'partial';\nexport interface TokenRankingCoverage { readonly chainId: string; readonly totalDeployments: number; readonly rankedDeployments: number; readonly unrankedDeployments: number; readonly observedAt: string | null; }\nexport interface TokenRankingMetadata { readonly schemaVersion: 1; readonly metric: TokenRankingMetric | null; readonly asOf: string | null; readonly contentDigest: string; readonly status: TokenRankingStatus; readonly coverage: readonly TokenRankingCoverage[]; readonly sourceIds: readonly string[]; }\nexport interface TokenRanking { readonly rank: number; readonly chainId: string; readonly deploymentIds: readonly string[]; readonly metric: TokenRankingMetric; readonly valueNumerator: string; readonly valueDenominator: string; readonly quoteCurrency: 'native' | 'USD'; readonly quoteDeploymentId: string | null; readonly observedAt: string; readonly sourceId: string; readonly sourceAssetId: string | null; }\nconst deepFreeze = <T>(value: T): Readonly<T> => { if (value && typeof value === 'object' && !Object.isFrozen(value)) { Object.freeze(value); for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child); } return value as Readonly<T>; };\nexport const TOKEN_RANKINGS_METADATA = deepFreeze({\n \"schemaVersion\": 1,\n \"metric\": \"onchain-total-supply-value-native\",\n \"asOf\": \"2026-09-16T16:41:59Z\",\n \"contentDigest\": \"26d1dc0a1091c8bfcb475c22877d1ce4ee7384462a184c9d4fc509c57110c0ea\",\n \"status\": \"partial\",\n \"coverage\": [\n {\n \"chainId\": \"eip155:1\",\n \"totalDeployments\": 34,\n \"rankedDeployments\": 8,\n \"unrankedDeployments\": 26,\n \"observedAt\": \"2026-09-16T16:41:59Z\"\n },\n {\n \"chainId\": \"eip155:43114\",\n \"totalDeployments\": 17,\n \"rankedDeployments\": 0,\n \"unrankedDeployments\": 17,\n \"observedAt\": \"2026-09-16T16:57:22Z\"\n },\n {\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"totalDeployments\": 19,\n \"rankedDeployments\": 1,\n \"unrankedDeployments\": 18,\n \"observedAt\": \"2026-09-16T16:57:16Z\"\n }\n ],\n \"sourceIds\": [\n \"rpc-avalanche-c-mainnet\",\n \"rpc-ethereum-mainnet\",\n \"rpc-solana-mainnet\"\n ]\n}) as TokenRankingMetadata;\nexport const TOKEN_RANKINGS = deepFreeze([\n {\n \"rank\": 1,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"deployment-0008\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"207204000029972648356119414046913566875\",\n \"valueDenominator\": \"9901974834827\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 2,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"deployment-0057\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"33884048421157235660750000000000000000000000000\",\n \"valueDenominator\": \"7575670698454356114489\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 3,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"discovered-token-e375086901067fe3de023bcdc70f1bafca798e1719ed7e676a98f57de3350a07\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"2530529372917746092314437530549111\",\n \"valueDenominator\": \"689351076\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 4,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"deployment-0019\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"8563994066253688594928908892314570251695637864181\",\n \"valueDenominator\": \"4480501906764632895725190\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 5,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"discovered-token-054d80a64e1f36a756129763ca2f1e7a140b50b04c83876ff01dd5fd497a74c5\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"33087553822039834447063841834161374382321688576\",\n \"valueDenominator\": \"507606550755599406088755\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 6,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"discovered-token-b475569f6a15e97ac04e531dd813e9dcc902521c098d60d6ae4d21d53baf1395\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"22129458437198611962075707523082974663376278\",\n \"valueDenominator\": \"466235585330384227837\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 7,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"discovered-token-69519fd08e31445cad84b0c17a5346b7ee9c5692e270602af9308ca6d8943bb6\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"461823962164048108560000000000000000000000000\",\n \"valueDenominator\": \"10479085950557704780219\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 8,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"discovered-token-611597bd13daa43d01a23caa9cca6a98797c64be7fb5b2677370ddbcdeaf01ec\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"591208964484530983367688374937406614318\",\n \"valueDenominator\": \"21093793193177765\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 1,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"deploymentIds\": [\n \"deployment-0013\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"8934052641907075195235710143877572821100144726376448\",\n \"valueDenominator\": \"7196706365568923421366403517072759025\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0005\",\n \"observedAt\": \"2026-09-16T16:57:16Z\",\n \"sourceId\": \"rpc-solana-mainnet\",\n \"sourceAssetId\": null\n }\n]) as readonly TokenRanking[];\nexport const TOKEN_RANKINGS_CONTENT_DIGEST = TOKEN_RANKINGS_METADATA.contentDigest;\nexport const TOKEN_RANKINGS_BY_CHAIN = deepFreeze({\n \"eip155:1\": [\n {\n \"rank\": 1,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"deployment-0008\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"207204000029972648356119414046913566875\",\n \"valueDenominator\": \"9901974834827\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 2,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"deployment-0057\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"33884048421157235660750000000000000000000000000\",\n \"valueDenominator\": \"7575670698454356114489\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 3,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"discovered-token-e375086901067fe3de023bcdc70f1bafca798e1719ed7e676a98f57de3350a07\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"2530529372917746092314437530549111\",\n \"valueDenominator\": \"689351076\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 4,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"deployment-0019\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"8563994066253688594928908892314570251695637864181\",\n \"valueDenominator\": \"4480501906764632895725190\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 5,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"discovered-token-054d80a64e1f36a756129763ca2f1e7a140b50b04c83876ff01dd5fd497a74c5\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"33087553822039834447063841834161374382321688576\",\n \"valueDenominator\": \"507606550755599406088755\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 6,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"discovered-token-b475569f6a15e97ac04e531dd813e9dcc902521c098d60d6ae4d21d53baf1395\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"22129458437198611962075707523082974663376278\",\n \"valueDenominator\": \"466235585330384227837\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 7,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"discovered-token-69519fd08e31445cad84b0c17a5346b7ee9c5692e270602af9308ca6d8943bb6\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"461823962164048108560000000000000000000000000\",\n \"valueDenominator\": \"10479085950557704780219\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n },\n {\n \"rank\": 8,\n \"chainId\": \"eip155:1\",\n \"deploymentIds\": [\n \"discovered-token-611597bd13daa43d01a23caa9cca6a98797c64be7fb5b2677370ddbcdeaf01ec\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"591208964484530983367688374937406614318\",\n \"valueDenominator\": \"21093793193177765\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0001\",\n \"observedAt\": \"2026-09-16T16:41:59Z\",\n \"sourceId\": \"rpc-ethereum-mainnet\",\n \"sourceAssetId\": null\n }\n ],\n \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\": [\n {\n \"rank\": 1,\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"deploymentIds\": [\n \"deployment-0013\"\n ],\n \"metric\": \"onchain-total-supply-value-native\",\n \"valueNumerator\": \"8934052641907075195235710143877572821100144726376448\",\n \"valueDenominator\": \"7196706365568923421366403517072759025\",\n \"quoteCurrency\": \"native\",\n \"quoteDeploymentId\": \"deployment-0005\",\n \"observedAt\": \"2026-09-16T16:57:16Z\",\n \"sourceId\": \"rpc-solana-mainnet\",\n \"sourceAssetId\": null\n }\n ]\n}) as Readonly<Record<string, readonly TokenRanking[]>>;\n","import {\n TOKEN_RANKINGS,\n TOKEN_RANKINGS_BY_CHAIN,\n TOKEN_RANKINGS_CONTENT_DIGEST,\n TOKEN_RANKINGS_METADATA,\n} from './generated/token_rankings'\nimport type {\n TokenRanking,\n TokenRankingCoverage,\n TokenRankingMetadata,\n TokenRankingMetric,\n TokenRankingStatus,\n} from './generated/token_rankings'\n\nexport {\n TOKEN_RANKINGS,\n TOKEN_RANKINGS_BY_CHAIN,\n TOKEN_RANKINGS_CONTENT_DIGEST,\n TOKEN_RANKINGS_METADATA,\n}\n\nexport type {\n TokenRanking,\n TokenRankingCoverage,\n TokenRankingMetadata,\n TokenRankingMetric,\n TokenRankingStatus,\n}\n\nconst EMPTY_RANKINGS: readonly TokenRanking[] = Object.freeze([])\n\n/**\n * Return the bundled token rankings for an exact chain ID.\n *\n * Rankings are an offline snapshot. An unknown or empty chain ID is a safe,\n * immutable empty result; no chain aliases or network lookups are inferred.\n */\nexport function listTokenRankings(chainId: string): readonly TokenRanking[] {\n if (typeof chainId !== 'string' || chainId.length === 0) {\n return EMPTY_RANKINGS\n }\n return Object.hasOwn(TOKEN_RANKINGS_BY_CHAIN, chainId)\n ? TOKEN_RANKINGS_BY_CHAIN[chainId] ?? EMPTY_RANKINGS\n : EMPTY_RANKINGS\n}\n","import { ErpcInvalidResponseError } from './errors'\nimport type { CloudResourceKind, CloudResourceMode } from './resources'\nimport type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\n\nexport interface CloudOfferingBilling {\n readonly amountCents: number\n readonly unit: 'cents-per-hour'\n}\n\nexport interface CloudOfferingCompute {\n readonly tenancy: 'bare-metal' | 'virtual-machine'\n}\n\nexport interface CloudOfferingSolana {\n readonly transport: 'grpc' | 'shredstream'\n}\n\nexport interface CloudOffering {\n readonly billing?: CloudOfferingBilling\n readonly capabilities: readonly string[]\n readonly compute?: CloudOfferingCompute\n readonly description: string\n readonly id: string\n readonly kind: CloudResourceKind\n readonly mode?: CloudResourceMode\n readonly name: string\n readonly regions: readonly string[]\n readonly solana?: CloudOfferingSolana\n}\n\nconst resourceKinds: readonly CloudResourceKind[] = [\n 'bare-metal',\n 'solana-grpc',\n 'solana-shredstream',\n 'vps',\n]\nconst resourceModes: readonly CloudResourceMode[] = [\n 'dedicated',\n 'direct',\n 'shared',\n]\n\nconst objectValue = (value: unknown): Record<string, unknown> | null =>\n typeof value === 'object' && value !== null\n ? value as Record<string, unknown>\n : null\n\nconst stringArray = (value: unknown): readonly string[] | null =>\n Array.isArray(value) && value.every((item) => typeof item === 'string')\n ? value\n : null\n\nconst parseOffering = (value: unknown): CloudOffering | null => {\n const offering = objectValue(value)\n if (\n offering === null ||\n typeof offering.id !== 'string' ||\n typeof offering.kind !== 'string' ||\n !resourceKinds.includes(offering.kind as CloudResourceKind) ||\n typeof offering.name !== 'string' ||\n typeof offering.description !== 'string' ||\n (offering.mode !== undefined &&\n (typeof offering.mode !== 'string' ||\n !resourceModes.includes(offering.mode as CloudResourceMode)))\n ) return null\n\n const regions = stringArray(offering.regions)\n const capabilities = stringArray(offering.capabilities)\n if (regions === null || capabilities === null) return null\n\n const compute = offering.compute === undefined\n ? undefined\n : objectValue(offering.compute)\n if (\n compute !== undefined &&\n (compute === null ||\n (compute.tenancy !== 'virtual-machine' &&\n compute.tenancy !== 'bare-metal'))\n ) return null\n\n const solana = offering.solana === undefined\n ? undefined\n : objectValue(offering.solana)\n if (\n solana !== undefined &&\n (solana === null ||\n (solana.transport !== 'grpc' && solana.transport !== 'shredstream'))\n ) return null\n\n const billing = offering.billing === undefined\n ? undefined\n : objectValue(offering.billing)\n if (\n billing !== undefined &&\n (billing === null ||\n billing.unit !== 'cents-per-hour' ||\n typeof billing.amountCents !== 'number' ||\n !Number.isInteger(billing.amountCents) ||\n billing.amountCents < 0)\n ) return null\n\n return {\n id: offering.id,\n kind: offering.kind as CloudResourceKind,\n name: offering.name,\n description: offering.description,\n regions,\n capabilities,\n ...(typeof offering.mode === 'string'\n ? { mode: offering.mode as CloudResourceMode }\n : {}),\n ...(compute &&\n (compute.tenancy === 'virtual-machine' || compute.tenancy === 'bare-metal')\n ? { compute: { tenancy: compute.tenancy } }\n : {}),\n ...(solana &&\n (solana.transport === 'grpc' || solana.transport === 'shredstream')\n ? { solana: { transport: solana.transport } }\n : {}),\n ...(billing &&\n billing.unit === 'cents-per-hour' &&\n typeof billing.amountCents === 'number'\n ? {\n billing: {\n amountCents: billing.amountCents,\n unit: billing.unit,\n },\n }\n : {}),\n }\n}\n\nexport class CloudCatalogClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n async list(options?: RpcSendOptions): Promise<readonly CloudOffering[]> {\n const response: unknown = await this.#transport.get(\n '/v4/cloud/catalog',\n undefined,\n options,\n )\n const envelope = objectValue(response)\n const message = objectValue(envelope?.message)\n if (envelope?.success !== true || !Array.isArray(message?.offerings)) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud catalog',\n )\n }\n const offerings = message.offerings.map(parseOffering)\n if (offerings.some((offering) => offering === null)) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud catalog',\n )\n }\n return offerings as readonly CloudOffering[]\n }\n}\n","import { ErpcConfigError } from './errors'\n\nexport const DEFAULT_ENDPOINT = 'https://edge.erpc.global'\nexport const DEFAULT_AVALANCHE_ENDPOINT = 'https://ava-rpc.erpc.global'\nexport const DEFAULT_ACCOUNT_ENDPOINT = 'https://solana-rpc.erpc.global'\nexport const DEFAULT_USER_ENDPOINT = 'https://user-api.erpc.global'\nexport const DEFAULT_TIMEOUT_MS = 30_000\n\nexport interface ErpcClientConfig {\n readonly accountEndpoint?: string\n readonly apiKey: string\n readonly avalancheEndpoint?: string\n readonly endpoint?: string\n readonly fetch?: typeof globalThis.fetch\n readonly headers?: Readonly<Record<string, string>>\n readonly timeoutMs?: number\n readonly userEndpoint?: string\n readonly webSocket?: typeof globalThis.WebSocket\n}\n\nexport interface ResolvedErpcClientConfig {\n readonly accountEndpoint: URL\n readonly apiKey: string\n readonly avalancheEndpoint: URL\n readonly endpoint: URL\n readonly fetch: typeof globalThis.fetch\n readonly headers: Readonly<Record<string, string>>\n readonly timeoutMs: number\n readonly userEndpoint: URL\n readonly webSocket?: typeof globalThis.WebSocket\n}\n\nconst requireFetch = (provided?: typeof globalThis.fetch) => {\n const implementation = provided ?? globalThis.fetch\n if (typeof implementation !== 'function') {\n throw new ErpcConfigError(\n 'A Fetch API implementation is required in this runtime',\n )\n }\n return implementation\n}\n\nexport const resolveConfig = (\n config: ErpcClientConfig,\n): ResolvedErpcClientConfig => {\n const apiKey = config.apiKey.trim()\n if (!apiKey) throw new ErpcConfigError('apiKey must not be empty')\n\n let endpoint: URL\n let avalancheEndpoint: URL\n let accountEndpoint: URL\n let userEndpoint: URL\n try {\n endpoint = new URL(config.endpoint ?? DEFAULT_ENDPOINT)\n avalancheEndpoint = new URL(\n config.avalancheEndpoint ?? DEFAULT_AVALANCHE_ENDPOINT,\n )\n accountEndpoint = new URL(\n config.accountEndpoint ?? DEFAULT_ACCOUNT_ENDPOINT,\n )\n userEndpoint = new URL(config.userEndpoint ?? DEFAULT_USER_ENDPOINT)\n } catch {\n throw new ErpcConfigError('endpoint must be an absolute HTTP(S) URL')\n }\n\n if (endpoint.protocol !== 'https:' && endpoint.protocol !== 'http:') {\n throw new ErpcConfigError('endpoint must use HTTP or HTTPS')\n }\n if (\n avalancheEndpoint.protocol !== 'https:' &&\n avalancheEndpoint.protocol !== 'http:'\n ) {\n throw new ErpcConfigError('avalancheEndpoint must use HTTP or HTTPS')\n }\n if (\n accountEndpoint.protocol !== 'https:' &&\n accountEndpoint.protocol !== 'http:'\n ) {\n throw new ErpcConfigError('accountEndpoint must use HTTP or HTTPS')\n }\n if (\n userEndpoint.protocol !== 'https:' &&\n userEndpoint.protocol !== 'http:'\n ) {\n throw new ErpcConfigError('userEndpoint must use HTTP or HTTPS')\n }\n\n endpoint.search = ''\n endpoint.hash = ''\n endpoint.pathname = endpoint.pathname.replace(/\\/+$/, '') || '/'\n avalancheEndpoint.search = ''\n avalancheEndpoint.hash = ''\n avalancheEndpoint.pathname =\n avalancheEndpoint.pathname.replace(/\\/+$/, '') || '/'\n accountEndpoint.search = ''\n accountEndpoint.hash = ''\n accountEndpoint.pathname =\n accountEndpoint.pathname.replace(/\\/+$/, '') || '/'\n userEndpoint.search = ''\n userEndpoint.hash = ''\n userEndpoint.pathname = userEndpoint.pathname.replace(/\\/+$/, '') || '/'\n\n const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS\n if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n throw new ErpcConfigError('timeoutMs must be a positive finite number')\n }\n\n return {\n accountEndpoint,\n apiKey,\n avalancheEndpoint,\n endpoint,\n fetch: requireFetch(config.fetch),\n headers: config.headers ?? {},\n timeoutMs,\n userEndpoint,\n ...(config.webSocket === undefined\n ? {}\n : { webSocket: config.webSocket }),\n }\n}\n\nexport const endpointWithPath = (endpoint: URL, path: string): URL => {\n const url = new URL(endpoint)\n const base = endpoint.pathname === '/' ? '' : endpoint.pathname\n url.pathname = `${base}/${path.replace(/^\\/+/, '')}`.replace(/\\/{2,}/g, '/')\n return url\n}\n\nexport const websocketUrl = (\n endpoint: URL,\n apiKey: string,\n path = '',\n): URL => {\n const url = endpointWithPath(endpoint, path)\n url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:'\n url.searchParams.set('api-key', apiKey)\n return url\n}\n","import { ErpcInvalidResponseError } from './errors'\nimport type { RpcSendOptions } from './rpc/types'\nimport type { Query } from './transport/rest'\nimport { RestTransport } from './transport/rest'\n\nexport type PriceEncoding = 'base64' | 'hex'\nexport type PriceAssetType = 'crypto' | 'equity' | 'fx' | 'metal' | 'rates'\n\nexport interface PriceFeedMetadata {\n readonly attributes?: Readonly<Record<string, string>>\n readonly id: string\n}\n\nexport interface PricePoint {\n readonly conf: string\n readonly expo: number\n readonly price: string\n readonly publish_time: number\n}\n\nexport interface ParsedPriceUpdate {\n readonly ema_price: PricePoint\n readonly id: string\n readonly metadata?: {\n readonly prev_publish_time?: number\n readonly proof_available_time?: number\n readonly slot?: number\n }\n readonly price: PricePoint\n}\n\nexport interface BinaryUpdate {\n readonly data: readonly string[]\n readonly encoding: string\n}\n\nexport interface PriceUpdateResponse {\n readonly binary: BinaryUpdate\n readonly parsed?: readonly ParsedPriceUpdate[]\n}\n\nexport interface PriceUpdateOptions {\n readonly encoding?: PriceEncoding\n readonly ids: readonly string[]\n readonly ignoreInvalidPriceIds?: boolean\n readonly parsed?: boolean\n}\n\nexport interface PriceStreamOptions extends PriceUpdateOptions {\n readonly allowUnordered?: boolean\n readonly benchmarksOnly?: boolean\n}\n\nexport interface PublisherStakeCap {\n readonly cap: number\n readonly publisher: string\n}\n\nexport interface PublisherStakeCapsResponse {\n readonly binary: BinaryUpdate\n readonly parsed?: readonly {\n readonly publisher_stake_caps: readonly PublisherStakeCap[]\n }[]\n}\n\nexport interface PriceStreamEvent {\n readonly data: PriceUpdateResponse\n readonly event?: string\n readonly id?: string\n}\n\nconst updateQuery = (options: PriceUpdateOptions): Query => ({\n 'ids[]': options.ids,\n encoding: options.encoding,\n parsed: options.parsed,\n ignore_invalid_price_ids: options.ignoreInvalidPriceIds,\n})\n\nconst parseSseBlock = (block: string): PriceStreamEvent | null => {\n const data: string[] = []\n let event: string | undefined\n let id: string | undefined\n\n for (const line of block.split(/\\r?\\n/)) {\n if (!line || line.startsWith(':')) continue\n const separator = line.indexOf(':')\n const field = separator === -1 ? line : line.slice(0, separator)\n const raw = separator === -1 ? '' : line.slice(separator + 1)\n const value = raw.startsWith(' ') ? raw.slice(1) : raw\n if (field === 'data') data.push(value)\n else if (field === 'event') event = value\n else if (field === 'id') id = value\n }\n\n if (data.length === 0) return null\n let parsed: PriceUpdateResponse\n try {\n parsed = JSON.parse(data.join('\\n')) as PriceUpdateResponse\n } catch {\n throw new ErpcInvalidResponseError('ERPC returned malformed stream data')\n }\n const result: {\n data: PriceUpdateResponse\n event?: string\n id?: string\n } = { data: parsed }\n if (event !== undefined) result.event = event\n if (id !== undefined) result.id = id\n return result\n}\n\nexport class PriceClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n getPriceFeeds(\n options: {\n readonly assetType?: PriceAssetType\n readonly query?: string\n } = {},\n sendOptions?: RpcSendOptions,\n ): Promise<readonly PriceFeedMetadata[]> {\n return this.#transport.get(\n '/v2/price_feeds',\n { query: options.query, asset_type: options.assetType },\n sendOptions,\n )\n }\n\n getLatestPriceUpdates(\n options: PriceUpdateOptions,\n sendOptions?: RpcSendOptions,\n ): Promise<PriceUpdateResponse> {\n return this.#transport.get(\n '/v2/updates/price/latest',\n updateQuery(options),\n sendOptions,\n )\n }\n\n getPriceUpdatesAtTimestamp(\n publishTime: number | string,\n options: PriceUpdateOptions,\n sendOptions?: RpcSendOptions,\n ): Promise<PriceUpdateResponse> {\n return this.#transport.get(\n `/v2/updates/price/${encodeURIComponent(String(publishTime))}`,\n updateQuery(options),\n sendOptions,\n )\n }\n\n getLatestPublisherStakeCaps(\n options: { readonly encoding?: PriceEncoding; readonly parsed?: boolean } = {},\n sendOptions?: RpcSendOptions,\n ): Promise<PublisherStakeCapsResponse> {\n return this.#transport.get(\n '/v2/updates/publisher_stake_caps/latest',\n options,\n sendOptions,\n )\n }\n\n async *streamPriceUpdates(\n options: PriceStreamOptions,\n sendOptions?: RpcSendOptions,\n ): AsyncGenerator<PriceStreamEvent, void, undefined> {\n const stream = await this.#transport.stream(\n '/v2/updates/price/stream',\n {\n ...updateQuery(options),\n allow_unordered: options.allowUnordered,\n benchmarks_only: options.benchmarksOnly,\n },\n sendOptions,\n )\n const response = stream.response\n if (!response.body) {\n stream.close()\n throw new ErpcInvalidResponseError('ERPC returned an empty stream')\n }\n\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n try {\n while (true) {\n const { done, value } = await reader.read()\n buffer += decoder.decode(value, { stream: !done })\n let boundary = buffer.search(/\\r?\\n\\r?\\n/)\n while (boundary !== -1) {\n const separatorLength = buffer.slice(boundary).startsWith('\\r\\n')\n ? 4\n : 2\n const block = buffer.slice(0, boundary)\n buffer = buffer.slice(boundary + separatorLength)\n const event = parseSseBlock(block)\n if (event) yield event\n boundary = buffer.search(/\\r?\\n\\r?\\n/)\n }\n if (done) break\n }\n const finalEvent = parseSseBlock(buffer)\n if (finalEvent) yield finalEvent\n } catch (error) {\n throw stream.normalizeError(error)\n } finally {\n try {\n await reader.cancel()\n } catch {\n // Preserve the original stream result or error.\n } finally {\n reader.releaseLock()\n stream.close()\n }\n }\n }\n}\n","import type {\n JsonRpcParams,\n RpcBatchCall,\n RpcMethodSpec,\n RpcParams,\n RpcResult,\n RpcSendOptions,\n} from './types'\n\nexport interface JsonRpcTransport {\n readonly endpoint: string\n readonly maxBatchSize: number\n\n batch<TResult extends readonly unknown[]>(\n calls: readonly RpcBatchCall[],\n options?: RpcSendOptions,\n ): Promise<TResult>\n\n request<TResult>(\n method: string,\n params?: JsonRpcParams,\n options?: RpcSendOptions,\n ): Promise<TResult>\n}\n\nexport class PendingRpcRequest<TResult> {\n readonly #send: (options?: RpcSendOptions) => Promise<TResult>\n\n constructor(send: (options?: RpcSendOptions) => Promise<TResult>) {\n this.#send = send\n }\n\n send(options?: RpcSendOptions): Promise<TResult> {\n return this.#send(options)\n }\n}\n\nexport class PendingRpcBatchRequest<TResult extends readonly unknown[]> {\n readonly #send: (options?: RpcSendOptions) => Promise<TResult>\n\n constructor(send: (options?: RpcSendOptions) => Promise<TResult>) {\n this.#send = send\n }\n\n send(options?: RpcSendOptions): Promise<TResult> {\n return this.#send(options)\n }\n}\n\ntype SchemaConstraint<TSchema> = {\n readonly [TMethod in keyof TSchema]: RpcMethodSpec<\n JsonRpcParams | undefined,\n unknown\n >\n}\n\ntype MethodName<TSchema> = Extract<keyof TSchema, string>\n\ntype MethodFunction<TSpec> = TSpec extends RpcMethodSpec<\n infer TParams,\n infer TResult\n>\n ? TParams extends readonly unknown[]\n ? (...params: TParams) => PendingRpcRequest<TResult>\n : TParams extends object\n ? (params: TParams) => PendingRpcRequest<TResult>\n : () => PendingRpcRequest<TResult>\n : never\n\ntype BatchCall<TSchema> = {\n readonly [TMethod in MethodName<TSchema>]: RpcParams<\n TSchema[TMethod]\n > extends undefined\n ? { readonly method: TMethod; readonly params?: undefined }\n : {\n readonly method: TMethod\n readonly params: RpcParams<TSchema[TMethod]>\n }\n}[MethodName<TSchema>]\n\ntype BatchResults<\n TSchema,\n TCalls extends readonly BatchCall<TSchema>[],\n> = {\n readonly [TIndex in keyof TCalls]: TCalls[TIndex] extends {\n readonly method: infer TMethod\n }\n ? TMethod extends MethodName<TSchema>\n ? RpcResult<TSchema[TMethod]>\n : never\n : never\n}\n\nexport interface RpcNamespaceBase<TSchema> {\n readonly endpoint: string\n\n batch<const TCalls extends readonly BatchCall<TSchema>[]>(\n calls: TCalls,\n ): PendingRpcBatchRequest<BatchResults<TSchema, TCalls>>\n\n raw<TResult = unknown>(\n method: string,\n params?: JsonRpcParams,\n ): PendingRpcRequest<TResult>\n\n request<TMethod extends MethodName<TSchema>>(\n method: TMethod,\n ...params: RpcParams<TSchema[TMethod]> extends undefined\n ? []\n : [params: RpcParams<TSchema[TMethod]>]\n ): PendingRpcRequest<RpcResult<TSchema[TMethod]>>\n}\n\nexport type RpcNamespace<TSchema extends SchemaConstraint<TSchema>> =\n RpcNamespaceBase<TSchema> & {\n readonly [TMethod in MethodName<TSchema>]: MethodFunction<TSchema[TMethod]>\n }\n\nexport interface CreateRpcNamespaceConfig {\n readonly methodPrefix?: string\n readonly parameterMode: 'named' | 'positional'\n readonly transport: JsonRpcTransport\n readonly validateBatch?: (calls: readonly RpcBatchCall[]) => void\n}\n\nconst methodParams = (\n mode: CreateRpcNamespaceConfig['parameterMode'],\n args: readonly unknown[],\n): JsonRpcParams | undefined => {\n if (mode === 'positional') return args\n if (args.length === 0) return undefined\n return args[0] as object\n}\n\nexport const createRpcNamespace = <\n TSchema extends SchemaConstraint<TSchema>,\n>(config: CreateRpcNamespaceConfig): RpcNamespace<TSchema> => {\n const wireMethod = (method: string) =>\n config.methodPrefix === undefined\n ? method\n : `${config.methodPrefix}.${method}`\n\n const base: RpcNamespaceBase<TSchema> = {\n endpoint: config.transport.endpoint,\n batch: <const TCalls extends readonly BatchCall<TSchema>[]>(calls: TCalls) => {\n const wireCalls = (calls as readonly RpcBatchCall[]).map((call) => ({\n ...call,\n method: wireMethod(call.method),\n }))\n config.validateBatch?.(wireCalls)\n return new PendingRpcBatchRequest((options) =>\n config.transport.batch<BatchResults<TSchema, TCalls>>(\n wireCalls,\n options,\n ),\n )\n },\n raw: <TResult>(method: string, params?: JsonRpcParams) =>\n new PendingRpcRequest<TResult>((options) =>\n config.transport.request<TResult>(method, params, options),\n ),\n request: <TMethod extends MethodName<TSchema>>(\n method: TMethod,\n ...params: RpcParams<TSchema[TMethod]> extends undefined\n ? []\n : [params: RpcParams<TSchema[TMethod]>]\n ) =>\n new PendingRpcRequest<RpcResult<TSchema[TMethod]>>((options) =>\n config.transport.request<RpcResult<TSchema[TMethod]>>(\n wireMethod(method),\n params[0] as JsonRpcParams | undefined,\n options,\n ),\n ),\n }\n\n return new Proxy(base as RpcNamespace<TSchema>, {\n get(target, property, receiver) {\n if (typeof property !== 'string' || property in target) {\n return Reflect.get(target, property, receiver) as unknown\n }\n if (property === 'then') return undefined\n return (...args: readonly unknown[]) =>\n new PendingRpcRequest((options) =>\n config.transport.request(\n wireMethod(property),\n methodParams(config.parameterMode, args),\n options,\n ),\n )\n },\n })\n}\n","import type { HttpJsonRpcTransport } from '../transport/http'\nimport { createRpcNamespace, type RpcNamespace } from './client'\nimport type { JsonValue, RpcMethodSpec } from './types'\n\nexport type Hex = `0x${string}`\nexport type EthereumAddress = Hex\nexport type EthereumBlockTag =\n | 'earliest'\n | 'finalized'\n | 'latest'\n | 'pending'\n | 'safe'\n | Hex\n\nexport type EthereumObject = Readonly<Record<string, unknown>>\nexport type EthereumTransactionRequest = EthereumObject\nexport type EthereumFilter = EthereumObject\n\nexport interface EthereumRpcSchema {\n readonly eth_accounts: RpcMethodSpec<readonly [], readonly EthereumAddress[]>\n readonly eth_baseFee: RpcMethodSpec<readonly [], Hex>\n readonly eth_blobBaseFee: RpcMethodSpec<readonly [], Hex>\n readonly eth_blockNumber: RpcMethodSpec<readonly [], Hex>\n readonly eth_call: RpcMethodSpec<\n readonly [\n transaction: EthereumTransactionRequest,\n block?: EthereumBlockTag,\n stateOverride?: EthereumObject,\n ],\n Hex\n >\n readonly eth_callMany: RpcMethodSpec<\n readonly [\n calls: readonly EthereumObject[],\n simulationContext?: EthereumObject,\n stateOverride?: EthereumObject,\n timeout?: number,\n ],\n JsonValue\n >\n readonly eth_capabilities: RpcMethodSpec<readonly [], JsonValue>\n readonly eth_chainId: RpcMethodSpec<readonly [], Hex>\n readonly eth_createAccessList: RpcMethodSpec<\n readonly [\n transaction: EthereumTransactionRequest,\n block?: EthereumBlockTag,\n ],\n JsonValue\n >\n readonly eth_estimateGas: RpcMethodSpec<\n readonly [\n transaction: EthereumTransactionRequest,\n block?: EthereumBlockTag,\n stateOverride?: EthereumObject,\n ],\n Hex\n >\n readonly eth_feeHistory: RpcMethodSpec<\n readonly [\n blockCount: Hex,\n newestBlock: EthereumBlockTag,\n rewardPercentiles: readonly number[],\n ],\n JsonValue\n >\n readonly eth_gasPrice: RpcMethodSpec<readonly [], Hex>\n readonly eth_getAccount: RpcMethodSpec<\n readonly [address: EthereumAddress, block: EthereumBlockTag],\n JsonValue\n >\n readonly eth_getBalance: RpcMethodSpec<\n readonly [address: EthereumAddress, block?: EthereumBlockTag],\n Hex\n >\n readonly eth_getBlockByHash: RpcMethodSpec<\n readonly [hash: Hex, includeTransactions: boolean],\n JsonValue | null\n >\n readonly eth_getBlockByNumber: RpcMethodSpec<\n readonly [block: EthereumBlockTag, includeTransactions: boolean],\n JsonValue | null\n >\n readonly eth_getBlockReceipts: RpcMethodSpec<\n readonly [block: EthereumBlockTag],\n JsonValue | null\n >\n readonly eth_getBlockTransactionCountByHash: RpcMethodSpec<\n readonly [hash: Hex],\n Hex | null\n >\n readonly eth_getBlockTransactionCountByNumber: RpcMethodSpec<\n readonly [block: EthereumBlockTag],\n Hex | null\n >\n readonly eth_getCode: RpcMethodSpec<\n readonly [address: EthereumAddress, block?: EthereumBlockTag],\n Hex\n >\n readonly eth_getFilterChanges: RpcMethodSpec<readonly [filterId: Hex], JsonValue>\n readonly eth_getFilterLogs: RpcMethodSpec<readonly [filterId: Hex], JsonValue>\n readonly eth_getLogs: RpcMethodSpec<\n readonly [filter?: EthereumFilter],\n JsonValue\n >\n readonly eth_getProof: RpcMethodSpec<\n readonly [\n address: EthereumAddress,\n storageKeys: readonly Hex[],\n block: EthereumBlockTag,\n ],\n JsonValue\n >\n readonly eth_getRawTransactionByHash: RpcMethodSpec<\n readonly [hash: Hex],\n Hex | null\n >\n readonly eth_getStorageAt: RpcMethodSpec<\n readonly [\n address: EthereumAddress,\n position: Hex,\n block?: EthereumBlockTag,\n ],\n Hex\n >\n readonly eth_getTransactionByBlockHashAndIndex: RpcMethodSpec<\n readonly [blockHash: Hex, index: Hex],\n JsonValue | null\n >\n readonly eth_getTransactionByBlockNumberAndIndex: RpcMethodSpec<\n readonly [block: EthereumBlockTag, index: Hex],\n JsonValue | null\n >\n readonly eth_getTransactionByHash: RpcMethodSpec<\n readonly [hash: Hex],\n JsonValue | null\n >\n readonly eth_getTransactionBySenderAndNonce: RpcMethodSpec<\n readonly [sender: EthereumAddress, nonce: Hex],\n JsonValue | null\n >\n readonly eth_getTransactionCount: RpcMethodSpec<\n readonly [address: EthereumAddress, block?: EthereumBlockTag],\n Hex\n >\n readonly eth_getTransactionReceipt: RpcMethodSpec<\n readonly [hash: Hex],\n JsonValue | null\n >\n readonly eth_getUncleCountByBlockHash: RpcMethodSpec<\n readonly [hash: Hex],\n Hex\n >\n readonly eth_getUncleCountByBlockNumber: RpcMethodSpec<\n readonly [block: EthereumBlockTag],\n Hex\n >\n readonly eth_maxPriorityFeePerGas: RpcMethodSpec<readonly [], Hex>\n readonly eth_newBlockFilter: RpcMethodSpec<readonly [], Hex>\n readonly eth_newFilter: RpcMethodSpec<\n readonly [filter?: EthereumFilter],\n Hex\n >\n readonly eth_newPendingTransactionFilter: RpcMethodSpec<readonly [], Hex>\n readonly eth_sendRawTransaction: RpcMethodSpec<\n readonly [transaction: Hex],\n Hex\n >\n readonly eth_signTransaction: RpcMethodSpec<\n readonly [transaction: EthereumTransactionRequest],\n Hex\n >\n readonly eth_simulateV1: RpcMethodSpec<\n readonly [simulation: EthereumObject, block?: EthereumBlockTag],\n JsonValue\n >\n readonly eth_submitWork: RpcMethodSpec<\n readonly [nonce: Hex, proofOfWorkHash: Hex, digest: Hex],\n boolean\n >\n readonly eth_syncing: RpcMethodSpec<readonly [], boolean | JsonValue>\n readonly eth_uninstallFilter: RpcMethodSpec<readonly [filterId: Hex], boolean>\n readonly net_listening: RpcMethodSpec<readonly [], boolean>\n readonly net_peerCount: RpcMethodSpec<readonly [], Hex>\n readonly net_version: RpcMethodSpec<readonly [], string>\n readonly txpool_content: RpcMethodSpec<readonly [], JsonValue>\n readonly txpool_contentFrom: RpcMethodSpec<\n readonly [address: EthereumAddress],\n JsonValue\n >\n readonly txpool_inspect: RpcMethodSpec<readonly [], JsonValue>\n readonly txpool_status: RpcMethodSpec<readonly [], JsonValue>\n readonly web3_clientVersion: RpcMethodSpec<readonly [], string>\n readonly web3_sha3: RpcMethodSpec<readonly [data: Hex], Hex>\n}\n\nexport interface EthereumSubscriptionSchema {\n readonly eth_subscribe: RpcMethodSpec<\n readonly [subscription: string, ...options: readonly unknown[]],\n string\n >\n readonly eth_unsubscribe: RpcMethodSpec<\n readonly [subscriptionId: string],\n boolean\n >\n}\n\nexport const ETHEREUM_RPC_METHODS = [\n 'eth_accounts',\n 'eth_baseFee',\n 'eth_blobBaseFee',\n 'eth_blockNumber',\n 'eth_call',\n 'eth_callMany',\n 'eth_capabilities',\n 'eth_chainId',\n 'eth_createAccessList',\n 'eth_estimateGas',\n 'eth_feeHistory',\n 'eth_gasPrice',\n 'eth_getAccount',\n 'eth_getBalance',\n 'eth_getBlockByHash',\n 'eth_getBlockByNumber',\n 'eth_getBlockReceipts',\n 'eth_getBlockTransactionCountByHash',\n 'eth_getBlockTransactionCountByNumber',\n 'eth_getCode',\n 'eth_getFilterChanges',\n 'eth_getFilterLogs',\n 'eth_getLogs',\n 'eth_getProof',\n 'eth_getRawTransactionByHash',\n 'eth_getStorageAt',\n 'eth_getTransactionByBlockHashAndIndex',\n 'eth_getTransactionByBlockNumberAndIndex',\n 'eth_getTransactionByHash',\n 'eth_getTransactionBySenderAndNonce',\n 'eth_getTransactionCount',\n 'eth_getTransactionReceipt',\n 'eth_getUncleCountByBlockHash',\n 'eth_getUncleCountByBlockNumber',\n 'eth_maxPriorityFeePerGas',\n 'eth_newBlockFilter',\n 'eth_newFilter',\n 'eth_newPendingTransactionFilter',\n 'eth_sendRawTransaction',\n 'eth_signTransaction',\n 'eth_simulateV1',\n 'eth_submitWork',\n 'eth_syncing',\n 'eth_uninstallFilter',\n 'net_listening',\n 'net_peerCount',\n 'net_version',\n 'txpool_content',\n 'txpool_contentFrom',\n 'txpool_inspect',\n 'txpool_status',\n 'web3_clientVersion',\n 'web3_sha3',\n] as const satisfies readonly (keyof EthereumRpcSchema)[]\n\nexport const ETHEREUM_SUBSCRIPTION_METHODS = [\n 'eth_subscribe',\n 'eth_unsubscribe',\n] as const satisfies readonly (keyof EthereumSubscriptionSchema)[]\n\nexport interface EthereumClient {\n readonly rpc: RpcNamespace<EthereumRpcSchema>\n}\n\nexport const createEthereumClient = (\n transport: HttpJsonRpcTransport,\n): EthereumClient => ({\n rpc: createRpcNamespace<EthereumRpcSchema>({\n transport,\n parameterMode: 'positional',\n }),\n})\n","import { ErpcBatchPolicyError } from '../errors'\nimport type { HttpJsonRpcTransport } from '../transport/http'\nimport { createRpcNamespace, type RpcNamespace } from './client'\nimport {\n createEthereumClient,\n type EthereumClient,\n} from './ethereum'\nimport type { JsonValue, RpcBatchCall, RpcMethodSpec } from './types'\n\nexport interface AvalancheEncodingParams {\n readonly encoding?: string\n}\n\nexport interface AvalancheUtxoParams extends AvalancheEncodingParams {\n readonly addresses: readonly string[]\n readonly limit?: number | string\n readonly sourceChain?: string\n readonly startIndex?: Readonly<Record<string, JsonValue>>\n}\n\nexport interface AvalancheAvaxSchema {\n readonly getAtomicTx: RpcMethodSpec<\n AvalancheEncodingParams & { readonly txID: string },\n JsonValue\n >\n readonly getAtomicTxStatus: RpcMethodSpec<\n { readonly txID: string },\n JsonValue\n >\n readonly getUTXOs: RpcMethodSpec<\n AvalancheUtxoParams & { readonly sourceChain: string },\n JsonValue\n >\n readonly issueTx: RpcMethodSpec<\n AvalancheEncodingParams & { readonly tx: string },\n JsonValue\n >\n}\n\nexport interface AvalancheXChainSchema {\n readonly buildGenesis: RpcMethodSpec<\n AvalancheEncodingParams & {\n readonly genesisData: Readonly<Record<string, JsonValue>>\n readonly networkId: number | string\n },\n JsonValue\n >\n readonly getAllBalances: RpcMethodSpec<{ readonly address: string }, JsonValue>\n readonly getAssetDescription: RpcMethodSpec<\n { readonly assetID: string },\n JsonValue\n >\n readonly getBalance: RpcMethodSpec<\n { readonly address: string; readonly assetID: string },\n JsonValue\n >\n readonly getBlockByHeight: RpcMethodSpec<\n AvalancheEncodingParams & { readonly height: number | string },\n JsonValue\n >\n readonly getHeight: RpcMethodSpec<undefined, JsonValue>\n readonly getTx: RpcMethodSpec<\n AvalancheEncodingParams & { readonly txID: string },\n JsonValue\n >\n readonly getTxFee: RpcMethodSpec<undefined, JsonValue>\n readonly getTxStatus: RpcMethodSpec<{ readonly txID: string }, JsonValue>\n readonly getUTXOs: RpcMethodSpec<AvalancheUtxoParams, JsonValue>\n readonly issueTx: RpcMethodSpec<\n AvalancheEncodingParams & { readonly tx: string },\n JsonValue\n >\n}\n\nexport interface AvalanchePChainSchema {\n readonly getAllValidatorsAt: RpcMethodSpec<\n { readonly height: number | string },\n JsonValue\n >\n readonly getBalance: RpcMethodSpec<\n { readonly addresses?: readonly string[] },\n JsonValue\n >\n readonly getBlockchainStatus: RpcMethodSpec<\n { readonly blockchainID?: string },\n JsonValue\n >\n readonly getBlockchains: RpcMethodSpec<undefined, JsonValue>\n readonly getCurrentSupply: RpcMethodSpec<undefined, JsonValue>\n readonly getCurrentValidators: RpcMethodSpec<\n { readonly nodeIDs?: readonly string[]; readonly subnetID?: string },\n JsonValue\n >\n readonly getFeeConfig: RpcMethodSpec<undefined, JsonValue>\n readonly getFeeState: RpcMethodSpec<undefined, JsonValue>\n readonly getHeight: RpcMethodSpec<undefined, JsonValue>\n readonly getMinStake: RpcMethodSpec<undefined, JsonValue>\n readonly getRewardUTXOs: RpcMethodSpec<\n AvalancheEncodingParams & { readonly txID?: string },\n JsonValue\n >\n readonly getStake: RpcMethodSpec<\n AvalancheEncodingParams & {\n readonly addresses?: readonly string[]\n readonly validatorsOnly?: boolean\n },\n JsonValue\n >\n readonly getStakingAssetID: RpcMethodSpec<\n { readonly subnetID?: string },\n JsonValue\n >\n readonly getSubnets: RpcMethodSpec<\n { readonly ids?: readonly string[] },\n JsonValue\n >\n readonly getTimestamp: RpcMethodSpec<undefined, JsonValue>\n readonly getTotalStake: RpcMethodSpec<\n { readonly subnetID?: string },\n JsonValue\n >\n readonly getTx: RpcMethodSpec<\n AvalancheEncodingParams & { readonly txID: string },\n JsonValue\n >\n readonly getTxStatus: RpcMethodSpec<{ readonly txID: string }, JsonValue>\n readonly getUTXOs: RpcMethodSpec<AvalancheUtxoParams, JsonValue>\n readonly getValidatorFeeConfig: RpcMethodSpec<undefined, JsonValue>\n readonly getValidatorFeeState: RpcMethodSpec<undefined, JsonValue>\n readonly getValidatorsAt: RpcMethodSpec<\n { readonly height: number | string; readonly subnetID?: string },\n JsonValue\n >\n readonly issueTx: RpcMethodSpec<\n AvalancheEncodingParams & { readonly tx: string },\n JsonValue\n >\n readonly sampleValidators: RpcMethodSpec<\n { readonly size: number | string; readonly subnetID?: string },\n JsonValue\n >\n readonly validatedBy: RpcMethodSpec<\n { readonly blockchainID: string },\n JsonValue\n >\n readonly validates: RpcMethodSpec<{ readonly subnetID: string }, JsonValue>\n}\n\nexport interface AvalancheProposerVmSchema {\n readonly getCurrentEpoch: RpcMethodSpec<undefined, JsonValue>\n readonly getProposedHeight: RpcMethodSpec<undefined, JsonValue>\n}\n\nexport interface AvalancheInfoSchema {\n readonly upgrades: RpcMethodSpec<undefined, JsonValue>\n}\n\nexport interface AvalancheIndexSchema {\n readonly getContainerByID: RpcMethodSpec<\n AvalancheEncodingParams & { readonly id: string },\n JsonValue\n >\n readonly getContainerByIndex: RpcMethodSpec<\n AvalancheEncodingParams & { readonly index: number | string },\n JsonValue\n >\n readonly getContainerRange: RpcMethodSpec<\n AvalancheEncodingParams & {\n readonly numToFetch: number | string\n readonly startIndex: number | string\n },\n JsonValue\n >\n readonly getIndex: RpcMethodSpec<\n AvalancheEncodingParams & { readonly containerID: string },\n JsonValue\n >\n readonly getLastAccepted: RpcMethodSpec<AvalancheEncodingParams, JsonValue>\n readonly isAccepted: RpcMethodSpec<\n AvalancheEncodingParams & { readonly containerID: string },\n JsonValue\n >\n}\n\nexport const AVALANCHE_AVAX_METHODS = [\n 'avax.getAtomicTx',\n 'avax.getAtomicTxStatus',\n 'avax.getUTXOs',\n 'avax.issueTx',\n] as const\n\nexport const AVALANCHE_X_CHAIN_METHODS = [\n 'avm.buildGenesis',\n 'avm.getAllBalances',\n 'avm.getAssetDescription',\n 'avm.getBalance',\n 'avm.getBlockByHeight',\n 'avm.getHeight',\n 'avm.getTx',\n 'avm.getTxFee',\n 'avm.getTxStatus',\n 'avm.getUTXOs',\n 'avm.issueTx',\n] as const\n\nexport const AVALANCHE_P_CHAIN_METHODS = [\n 'platform.getAllValidatorsAt',\n 'platform.getBalance',\n 'platform.getBlockchainStatus',\n 'platform.getBlockchains',\n 'platform.getCurrentSupply',\n 'platform.getCurrentValidators',\n 'platform.getFeeConfig',\n 'platform.getFeeState',\n 'platform.getHeight',\n 'platform.getMinStake',\n 'platform.getRewardUTXOs',\n 'platform.getStake',\n 'platform.getStakingAssetID',\n 'platform.getSubnets',\n 'platform.getTimestamp',\n 'platform.getTotalStake',\n 'platform.getTx',\n 'platform.getTxStatus',\n 'platform.getUTXOs',\n 'platform.getValidatorFeeConfig',\n 'platform.getValidatorFeeState',\n 'platform.getValidatorsAt',\n 'platform.issueTx',\n 'platform.sampleValidators',\n 'platform.validatedBy',\n 'platform.validates',\n] as const\n\nexport const AVALANCHE_PROPOSER_VM_METHODS = [\n 'proposervm.getCurrentEpoch',\n 'proposervm.getProposedHeight',\n] as const\n\nexport const AVALANCHE_INFO_METHODS = ['info.upgrades'] as const\n\nexport const AVALANCHE_INDEX_METHODS = [\n 'index.getContainerByID',\n 'index.getContainerByIndex',\n 'index.getContainerRange',\n 'index.getIndex',\n 'index.getLastAccepted',\n 'index.isAccepted',\n] as const\n\nconst rejectNativeBatch = (calls: readonly RpcBatchCall[]) => {\n if (calls.length > 0) {\n throw new ErpcBatchPolicyError(\n 'Avalanche native RPC methods do not support batching',\n )\n }\n}\n\nconst nativeNamespace = <\n TSchema extends {\n readonly [TMethod in keyof TSchema]: RpcMethodSpec<\n object | readonly unknown[] | undefined,\n unknown\n >\n },\n>(transport: HttpJsonRpcTransport, methodPrefix: string) =>\n createRpcNamespace<TSchema>({\n methodPrefix,\n parameterMode: 'named',\n transport,\n validateBatch: rejectNativeBatch,\n })\n\nexport interface AvalancheIndexClient {\n readonly cChainBlocks: RpcNamespace<AvalancheIndexSchema>\n readonly pChainBlocks: RpcNamespace<AvalancheIndexSchema>\n readonly xChainBlocks: RpcNamespace<AvalancheIndexSchema>\n readonly xChainTransactions: RpcNamespace<AvalancheIndexSchema>\n}\n\nexport interface AvalancheClient extends EthereumClient {\n readonly avax: RpcNamespace<AvalancheAvaxSchema>\n readonly index: AvalancheIndexClient\n readonly info: RpcNamespace<AvalancheInfoSchema>\n readonly pChain: RpcNamespace<AvalanchePChainSchema>\n readonly proposerVm: RpcNamespace<AvalancheProposerVmSchema>\n readonly xChain: RpcNamespace<AvalancheXChainSchema>\n}\n\nexport interface AvalancheIndexTransports {\n readonly cChainBlocks: HttpJsonRpcTransport\n readonly pChainBlocks: HttpJsonRpcTransport\n readonly xChainBlocks: HttpJsonRpcTransport\n readonly xChainTransactions: HttpJsonRpcTransport\n}\n\nexport const createAvalancheClient = (\n transport: HttpJsonRpcTransport,\n indexTransports: AvalancheIndexTransports,\n): AvalancheClient => ({\n ...createEthereumClient(transport),\n avax: nativeNamespace<AvalancheAvaxSchema>(transport, 'avax'),\n xChain: nativeNamespace<AvalancheXChainSchema>(transport, 'avm'),\n pChain: nativeNamespace<AvalanchePChainSchema>(transport, 'platform'),\n proposerVm: nativeNamespace<AvalancheProposerVmSchema>(\n transport,\n 'proposervm',\n ),\n info: nativeNamespace<AvalancheInfoSchema>(transport, 'info'),\n index: {\n cChainBlocks: nativeNamespace<AvalancheIndexSchema>(\n indexTransports.cChainBlocks,\n 'index',\n ),\n pChainBlocks: nativeNamespace<AvalancheIndexSchema>(\n indexTransports.pChainBlocks,\n 'index',\n ),\n xChainBlocks: nativeNamespace<AvalancheIndexSchema>(\n indexTransports.xChainBlocks,\n 'index',\n ),\n xChainTransactions: nativeNamespace<AvalancheIndexSchema>(\n indexTransports.xChainTransactions,\n 'index',\n ),\n },\n})\n","import { ErpcBatchPolicyError } from '../errors'\nimport type { HttpJsonRpcTransport } from '../transport/http'\nimport { createRpcNamespace, type RpcNamespace } from './client'\nimport type {\n JsonObject,\n JsonValue,\n RpcBatchCall,\n RpcMethodSpec,\n} from './types'\n\nexport type SolanaCommitment = 'confirmed' | 'finalized' | 'processed'\nexport type SolanaEncoding = 'base58' | 'base64' | 'base64+zstd' | 'jsonParsed'\nexport type SolanaConfig = Readonly<Record<string, unknown>>\n\nexport interface SolanaContext {\n readonly apiVersion?: string\n readonly slot: number\n}\n\nexport interface SolanaContextResult<TValue> {\n readonly context: SolanaContext\n readonly value: TValue\n}\n\nexport interface PriorityFeeEstimate {\n readonly priorityFeeEstimate: number\n readonly [key: string]: unknown\n}\n\nexport interface SolanaRpcSchema {\n readonly getAccountInfo: RpcMethodSpec<\n readonly [address: string, config?: SolanaConfig],\n SolanaContextResult<JsonValue | null>\n >\n readonly getBalance: RpcMethodSpec<\n readonly [address: string, config?: SolanaConfig],\n SolanaContextResult<number>\n >\n readonly getBlock: RpcMethodSpec<\n readonly [slot: number, config?: SolanaConfig],\n JsonValue | null\n >\n readonly getBlockCommitment: RpcMethodSpec<\n readonly [slot: number],\n JsonValue\n >\n readonly getBlockHeight: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n number\n >\n readonly getBlockProduction: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getBlockTime: RpcMethodSpec<\n readonly [slot: number],\n number | null\n >\n readonly getBlocks: RpcMethodSpec<\n readonly [startSlot: number, endSlot?: number, commitment?: SolanaCommitment],\n readonly number[]\n >\n readonly getBlocksWithLimit: RpcMethodSpec<\n readonly [startSlot: number, limit: number, commitment?: SolanaCommitment],\n readonly number[]\n >\n readonly getClusterNodes: RpcMethodSpec<readonly [], JsonValue>\n readonly getEpochInfo: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getEpochSchedule: RpcMethodSpec<readonly [], JsonValue>\n readonly getFeeForMessage: RpcMethodSpec<\n readonly [message: string, config?: SolanaConfig],\n SolanaContextResult<number | null>\n >\n readonly getFirstAvailableBlock: RpcMethodSpec<readonly [], number>\n readonly getGenesisHash: RpcMethodSpec<readonly [], string>\n readonly getHealth: RpcMethodSpec<readonly [], string>\n readonly getHighestSnapshotSlot: RpcMethodSpec<readonly [], JsonValue>\n readonly getIdentity: RpcMethodSpec<readonly [], JsonValue>\n readonly getInflationGovernor: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getInflationRate: RpcMethodSpec<readonly [], JsonValue>\n readonly getInflationReward: RpcMethodSpec<\n readonly [addresses: readonly string[], config?: SolanaConfig],\n JsonValue\n >\n readonly getLargestAccounts: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getLatestBlockhash: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getLeaderSchedule: RpcMethodSpec<\n readonly [slot?: number | null, config?: SolanaConfig],\n JsonValue | null\n >\n readonly getMaxRetransmitSlot: RpcMethodSpec<readonly [], number>\n readonly getMaxShredInsertSlot: RpcMethodSpec<readonly [], number>\n readonly getMinimumBalanceForRentExemption: RpcMethodSpec<\n readonly [dataLength: number, config?: SolanaConfig],\n number\n >\n readonly getMultipleAccounts: RpcMethodSpec<\n readonly [addresses: readonly string[], config?: SolanaConfig],\n SolanaContextResult<JsonValue>\n >\n readonly getParsedTransaction: RpcMethodSpec<\n readonly [signature: string, config?: SolanaConfig],\n JsonValue | null\n >\n readonly getPriorityFeeEstimate: RpcMethodSpec<\n readonly [request: SolanaConfig],\n PriorityFeeEstimate\n >\n readonly getProgramAccounts: RpcMethodSpec<\n readonly [programAddress: string, config?: SolanaConfig],\n JsonValue\n >\n readonly getProgramAccountsV2: RpcMethodSpec<\n readonly [programAddress: string, config: SolanaConfig],\n JsonValue\n >\n readonly getRecentPerformanceSamples: RpcMethodSpec<\n readonly [limit?: number],\n JsonValue\n >\n readonly getRecentPrioritizationFees: RpcMethodSpec<\n readonly [addresses?: readonly string[]],\n JsonValue\n >\n readonly getSignatureStatuses: RpcMethodSpec<\n readonly [signatures: readonly string[], config?: SolanaConfig],\n JsonValue\n >\n readonly getSignaturesForAddress: RpcMethodSpec<\n readonly [address: string, config?: SolanaConfig],\n JsonValue\n >\n readonly getSlot: RpcMethodSpec<readonly [config?: SolanaConfig], number>\n readonly getSlotLeader: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n string\n >\n readonly getSlotLeaders: RpcMethodSpec<\n readonly [startSlot: number, limit: number],\n readonly string[]\n >\n readonly getStakeMinimumDelegation: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n SolanaContextResult<number>\n >\n readonly getSupply: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly getTokenAccountBalance: RpcMethodSpec<\n readonly [address: string, config?: SolanaConfig],\n JsonValue\n >\n readonly getTokenAccountsByDelegate: RpcMethodSpec<\n readonly [delegate: string, filter: SolanaConfig, config?: SolanaConfig],\n JsonValue\n >\n readonly getTokenAccountsByOwner: RpcMethodSpec<\n readonly [owner: string, filter: SolanaConfig, config?: SolanaConfig],\n JsonValue\n >\n readonly getTokenLargestAccounts: RpcMethodSpec<\n readonly [mint: string, config?: SolanaConfig],\n JsonValue\n >\n readonly getTokenSupply: RpcMethodSpec<\n readonly [mint: string, config?: SolanaConfig],\n JsonValue\n >\n readonly getTransaction: RpcMethodSpec<\n readonly [signature: string, config?: SolanaConfig],\n JsonValue | null\n >\n readonly getTransactionCount: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n number\n >\n readonly getVersion: RpcMethodSpec<readonly [], JsonObject>\n readonly getVoteAccounts: RpcMethodSpec<\n readonly [config?: SolanaConfig],\n JsonValue\n >\n readonly isBlockhashValid: RpcMethodSpec<\n readonly [blockhash: string, config?: SolanaConfig],\n SolanaContextResult<boolean>\n >\n readonly minimumLedgerSlot: RpcMethodSpec<readonly [], number>\n readonly requestAirdrop: RpcMethodSpec<\n readonly [address: string, lamports: number, config?: SolanaConfig],\n string\n >\n readonly sendTransaction: RpcMethodSpec<\n readonly [transaction: string, config?: SolanaConfig],\n string\n >\n readonly simulateTransaction: RpcMethodSpec<\n readonly [transaction: string, config?: SolanaConfig],\n JsonValue\n >\n}\n\nexport interface AssetRequest {\n readonly id: string\n readonly displayOptions?: Readonly<Record<string, boolean>>\n}\n\nexport interface AssetBatchRequest {\n readonly ids: readonly string[]\n readonly displayOptions?: Readonly<Record<string, boolean>>\n}\n\nexport interface AssetListRequest {\n readonly cursor?: string\n readonly limit?: number\n readonly page?: number\n readonly [key: string]: unknown\n}\n\nexport type IndexedAsset = Readonly<Record<string, unknown>>\nexport type IndexedAssetProof = Readonly<Record<string, unknown>>\n\nexport interface IndexedAssetList<TItem = IndexedAsset> {\n readonly cursor?: string\n readonly items: readonly TItem[]\n readonly limit?: number\n readonly page?: number\n readonly total?: number\n readonly [key: string]: unknown\n}\n\nexport interface SolanaDasSchema {\n readonly getAsset: RpcMethodSpec<AssetRequest, IndexedAsset | null>\n readonly getAssetBatch: RpcMethodSpec<\n AssetBatchRequest,\n readonly (IndexedAsset | null)[]\n >\n readonly getAssetProof: RpcMethodSpec<AssetRequest, IndexedAssetProof | null>\n readonly getAssetProofBatch: RpcMethodSpec<\n AssetBatchRequest,\n readonly (IndexedAssetProof | null)[]\n >\n readonly getAssetsByAuthority: RpcMethodSpec<\n AssetListRequest & { readonly authorityAddress: string },\n IndexedAssetList\n >\n readonly getAssetsByCreator: RpcMethodSpec<\n AssetListRequest & {\n readonly creatorAddress: string\n readonly onlyVerified?: boolean\n },\n IndexedAssetList\n >\n readonly getAssetsByGroup: RpcMethodSpec<\n AssetListRequest & {\n readonly groupKey: string\n readonly groupValue: string\n },\n IndexedAssetList\n >\n readonly getAssetsByOwner: RpcMethodSpec<\n AssetListRequest & { readonly ownerAddress: string },\n IndexedAssetList\n >\n readonly getNftEditions: RpcMethodSpec<\n AssetListRequest & { readonly mint: string },\n Readonly<Record<string, unknown>>\n >\n readonly getSignaturesForAsset: RpcMethodSpec<\n AssetListRequest & { readonly id: string },\n Readonly<Record<string, unknown>>\n >\n readonly getTokenAccounts: RpcMethodSpec<\n AssetListRequest,\n Readonly<Record<string, unknown>>\n >\n readonly getTokensByDelegate: RpcMethodSpec<\n AssetListRequest & { readonly delegate: string },\n Readonly<Record<string, unknown>>\n >\n readonly getTokensByOwner: RpcMethodSpec<\n AssetListRequest & { readonly owner: string },\n Readonly<Record<string, unknown>>\n >\n readonly searchAssets: RpcMethodSpec<AssetListRequest, IndexedAssetList>\n}\n\nexport interface NumericFilter {\n readonly eq?: number\n readonly gt?: number\n readonly gte?: number\n readonly lt?: number\n readonly lte?: number\n}\n\nexport interface AddressTransactionsOptions {\n readonly before?: string\n readonly commitment?: SolanaCommitment\n readonly encoding?: 'base58' | 'base64' | 'json'\n readonly filters?: Readonly<Record<string, unknown>>\n readonly limit?: number\n readonly maxSupportedTransactionVersion?: number\n readonly paginationToken?: string\n readonly sortOrder?: 'asc' | 'desc'\n readonly transactionDetails?: 'full' | 'signatures'\n readonly until?: string\n}\n\nexport interface AddressTransaction {\n readonly blockTime: number | null\n readonly confirmationStatus: SolanaCommitment\n readonly err: unknown\n readonly memo: string | null\n readonly meta?: unknown\n readonly signature: string\n readonly slot: number\n readonly transaction?: unknown\n readonly transactionIndex: number\n readonly version?: unknown\n readonly [key: string]: unknown\n}\n\nexport interface AddressTransactionPage {\n readonly data: readonly AddressTransaction[]\n readonly paginationToken: string | null\n readonly windowStart: number | null\n}\n\nexport interface AddressTransfersOptions {\n readonly commitment?: SolanaCommitment\n readonly direction?: 'any' | 'in' | 'out'\n readonly filters?: {\n readonly amount?: NumericFilter\n readonly blockTime?: NumericFilter\n readonly slot?: NumericFilter\n }\n readonly limit?: number\n readonly mint?: string\n readonly paginationToken?: string\n readonly solMode?: 'merged' | 'separate'\n readonly sortOrder?: 'asc' | 'desc'\n readonly with?: string\n}\n\nexport interface AddressTransfer {\n readonly amount: string\n readonly blockTime: number | null\n readonly confirmationStatus: 'finalized'\n readonly decimals: number\n readonly feeAmount: string | null\n readonly feeUiAmount: string | null\n readonly fromTokenAccount: string | null\n readonly fromUserAccount: string | null\n readonly innerInstructionIdx: number\n readonly instructionIdx: number\n readonly mint: string | null\n readonly signature: string\n readonly slot: number\n readonly toTokenAccount: string | null\n readonly toUserAccount: string | null\n readonly transactionIdx: number\n readonly type:\n | 'burn'\n | 'changeOwner'\n | 'mint'\n | 'transfer'\n | 'unwrap'\n | 'withdrawWithheldFee'\n | 'wrap'\n readonly uiAmount: string\n readonly [key: string]: unknown\n}\n\nexport interface AddressTransferPage {\n readonly data: readonly AddressTransfer[]\n readonly paginationToken: string | null\n readonly windowStart: number | null\n}\n\nexport interface SolanaHistorySchema {\n readonly getTransactionsForAddress: RpcMethodSpec<\n readonly [address: string, options?: AddressTransactionsOptions],\n AddressTransactionPage | null\n >\n readonly getTransfersByAddress: RpcMethodSpec<\n readonly [address: string, options?: AddressTransfersOptions],\n AddressTransferPage\n >\n}\n\nexport interface PingMeasurement {\n readonly city: string | null\n readonly country: string | null\n readonly fromIp: string | null\n readonly icmpReplied: boolean\n readonly lat: number | null\n readonly lon: number | null\n readonly measuredAt: string | null\n readonly ms: number | null\n readonly org: string | null\n readonly postal: string | null\n readonly region: string | null\n readonly timezone: string | null\n readonly [key: string]: unknown\n}\n\nexport interface LeaderSlot {\n readonly epoch: number\n readonly featureSet: string | null\n readonly gossipPort: number | null\n readonly gossipUpdatedAt: string | null\n readonly identity: string\n readonly ipAddress: string | null\n readonly leaderCity: string | null\n readonly leaderCountry: string | null\n readonly leaderLat: number | null\n readonly leaderLon: number | null\n readonly leaderOrg: string | null\n readonly leaderRegion: string | null\n readonly leaderTimezone: string | null\n readonly pingToLeaders: readonly PingMeasurement[]\n readonly rpcAddress: string | null\n readonly slot: string\n readonly stakeWeight: number\n readonly tpuPort: number | null\n readonly tpuQuicPort: number | null\n readonly version: string | null\n readonly [key: string]: unknown\n}\n\nexport interface LeaderSlotsResult {\n readonly data: readonly LeaderSlot[]\n readonly message: string\n readonly success: boolean\n readonly total: number\n readonly [key: string]: unknown\n}\n\nexport interface ValidatorInformation\n extends Omit<LeaderSlot, 'epoch' | 'slot'> {\n readonly gossipNodeId: number | null\n readonly slotCount: number\n}\n\nexport interface ValidatorsInformationOptions {\n readonly country?: string\n readonly limit?: number\n readonly region?: string\n}\n\nexport interface ValidatorsInformationResult {\n readonly data: readonly ValidatorInformation[]\n readonly epoch: number\n readonly message: string\n readonly success: boolean\n readonly total: number\n readonly totalValidators: number\n readonly [key: string]: unknown\n}\n\nexport interface SolanaLeaderSchema {\n readonly getLeaderSlots: RpcMethodSpec<\n readonly [slot: number],\n LeaderSlotsResult\n >\n readonly getValidatorsInformation: RpcMethodSpec<\n readonly [options: ValidatorsInformationOptions],\n ValidatorsInformationResult\n >\n}\n\nexport type AnalyticsTimeBound = number | string\n\nexport interface TopProgramsOptions {\n readonly includeVotes?: boolean\n readonly limit?: number\n readonly since?: AnalyticsTimeBound\n readonly until?: AnalyticsTimeBound\n}\n\nexport interface TopProgramRow {\n readonly errors: string\n readonly invocations: string\n readonly program: string\n readonly total_cus: string\n readonly [key: string]: unknown\n}\n\nexport type SlotStatsOptions =\n | { readonly slot: number }\n | { readonly fromSlot: number; readonly toSlot: number }\n\nexport interface SlotStatsRow {\n readonly block_time: number\n readonly non_vote_transaction_count: number\n readonly slot: number\n readonly transaction_count: number\n readonly vote_transaction_count: number\n readonly [key: string]: unknown\n}\n\nexport interface TpsTimeseriesOptions {\n readonly bucketSec?: number\n readonly from: AnalyticsTimeBound\n readonly to: AnalyticsTimeBound\n}\n\nexport interface TpsBucket {\n readonly bucket: number\n readonly non_vote_tps: number\n readonly total_tps: number\n readonly [key: string]: unknown\n}\n\nexport interface EpochSummary {\n readonly distinct_programs: string\n readonly epoch: number\n readonly first_block_time: number\n readonly last_block_time: number\n readonly non_vote_txs: string\n readonly program_invocations: string\n readonly slots: string\n readonly total_txs: string\n readonly vote_txs: string\n readonly [key: string]: unknown\n}\n\nexport interface ProgramStatsOptions {\n readonly bucketSec?: number\n readonly programIdBase58: string\n readonly since?: AnalyticsTimeBound\n readonly until?: AnalyticsTimeBound\n}\n\nexport interface ProgramStatsBucket {\n readonly bucket: number\n readonly errors: string\n readonly invocations: string\n readonly total_cus: string\n readonly [key: string]: unknown\n}\n\nexport interface SolanaAnalyticsSchema {\n readonly jetEpochSummary: RpcMethodSpec<\n readonly [options: { readonly epoch: number }],\n EpochSummary | null\n >\n readonly jetProgramStats: RpcMethodSpec<\n readonly [options: ProgramStatsOptions],\n readonly ProgramStatsBucket[]\n >\n readonly jetSlotStats: RpcMethodSpec<\n readonly [options: SlotStatsOptions],\n readonly SlotStatsRow[]\n >\n readonly jetTopPrograms: RpcMethodSpec<\n readonly [options: TopProgramsOptions],\n readonly TopProgramRow[]\n >\n readonly jetTpsTimeseries: RpcMethodSpec<\n readonly [options: TpsTimeseriesOptions],\n readonly TpsBucket[]\n >\n}\n\nexport const SOLANA_RPC_METHODS = [\n 'getAccountInfo',\n 'getBalance',\n 'getBlock',\n 'getBlockCommitment',\n 'getBlockHeight',\n 'getBlockProduction',\n 'getBlockTime',\n 'getBlocks',\n 'getBlocksWithLimit',\n 'getClusterNodes',\n 'getEpochInfo',\n 'getEpochSchedule',\n 'getFeeForMessage',\n 'getFirstAvailableBlock',\n 'getGenesisHash',\n 'getHealth',\n 'getHighestSnapshotSlot',\n 'getIdentity',\n 'getInflationGovernor',\n 'getInflationRate',\n 'getInflationReward',\n 'getLargestAccounts',\n 'getLatestBlockhash',\n 'getLeaderSchedule',\n 'getMaxRetransmitSlot',\n 'getMaxShredInsertSlot',\n 'getMinimumBalanceForRentExemption',\n 'getMultipleAccounts',\n 'getParsedTransaction',\n 'getPriorityFeeEstimate',\n 'getProgramAccounts',\n 'getProgramAccountsV2',\n 'getRecentPerformanceSamples',\n 'getRecentPrioritizationFees',\n 'getSignatureStatuses',\n 'getSignaturesForAddress',\n 'getSlot',\n 'getSlotLeader',\n 'getSlotLeaders',\n 'getStakeMinimumDelegation',\n 'getSupply',\n 'getTokenAccountBalance',\n 'getTokenAccountsByDelegate',\n 'getTokenAccountsByOwner',\n 'getTokenLargestAccounts',\n 'getTokenSupply',\n 'getTransaction',\n 'getTransactionCount',\n 'getVersion',\n 'getVoteAccounts',\n 'isBlockhashValid',\n 'minimumLedgerSlot',\n 'requestAirdrop',\n 'sendTransaction',\n 'simulateTransaction',\n] as const satisfies readonly (keyof SolanaRpcSchema)[]\n\nexport const SOLANA_DAS_METHODS = [\n 'getAsset',\n 'getAssetBatch',\n 'getAssetProof',\n 'getAssetProofBatch',\n 'getAssetsByAuthority',\n 'getAssetsByCreator',\n 'getAssetsByGroup',\n 'getAssetsByOwner',\n 'getNftEditions',\n 'getSignaturesForAsset',\n 'getTokenAccounts',\n 'getTokensByDelegate',\n 'getTokensByOwner',\n 'searchAssets',\n] as const satisfies readonly (keyof SolanaDasSchema)[]\n\nexport const SOLANA_HISTORY_METHODS = [\n 'getTransactionsForAddress',\n 'getTransfersByAddress',\n] as const satisfies readonly (keyof SolanaHistorySchema)[]\n\nexport const SOLANA_LEADER_METHODS = [\n 'getLeaderSlots',\n 'getValidatorsInformation',\n] as const satisfies readonly (keyof SolanaLeaderSchema)[]\n\nexport const SOLANA_ANALYTICS_METHODS = [\n 'jetEpochSummary',\n 'jetProgramStats',\n 'jetSlotStats',\n 'jetTopPrograms',\n 'jetTpsTimeseries',\n] as const satisfies readonly (keyof SolanaAnalyticsSchema)[]\n\nconst heavyRpcMethods = new Set<string>([\n 'getPriorityFeeEstimate',\n 'getProgramAccounts',\n 'getProgramAccountsV2',\n 'getTokenLargestAccounts',\n])\n\nconst validateStandardBatch = (calls: readonly RpcBatchCall[]) => {\n let containsHeavy = false\n let containsStandard = false\n for (const call of calls) {\n if (heavyRpcMethods.has(call.method)) containsHeavy = true\n else containsStandard = true\n }\n if (containsHeavy && containsStandard) {\n throw new ErpcBatchPolicyError(\n 'Solana indexed and standard RPC methods cannot share a batch',\n )\n }\n}\n\nconst rejectLeaderBatch = (calls: readonly RpcBatchCall[]) => {\n if (calls.length > 0) {\n throw new ErpcBatchPolicyError('Leader RPC methods do not support batching')\n }\n}\n\nexport interface SolanaClient {\n readonly analytics: RpcNamespace<SolanaAnalyticsSchema>\n readonly das: RpcNamespace<SolanaDasSchema>\n readonly history: RpcNamespace<SolanaHistorySchema>\n readonly leaders: RpcNamespace<SolanaLeaderSchema>\n readonly rpc: RpcNamespace<SolanaRpcSchema>\n}\n\nexport const createSolanaClient = (\n transport: HttpJsonRpcTransport,\n): SolanaClient => ({\n rpc: createRpcNamespace<SolanaRpcSchema>({\n transport,\n parameterMode: 'positional',\n validateBatch: validateStandardBatch,\n }),\n das: createRpcNamespace<SolanaDasSchema>({\n transport,\n parameterMode: 'named',\n }),\n history: createRpcNamespace<SolanaHistorySchema>({\n transport,\n parameterMode: 'positional',\n }),\n leaders: createRpcNamespace<SolanaLeaderSchema>({\n transport,\n parameterMode: 'positional',\n validateBatch: rejectLeaderBatch,\n }),\n analytics: createRpcNamespace<SolanaAnalyticsSchema>({\n transport,\n parameterMode: 'positional',\n }),\n})\n","import {\n ErpcAbortedError,\n ErpcConfigError,\n ErpcInvalidResponseError,\n ErpcJsonRpcError,\n ErpcTimeoutError,\n ErpcTransportError,\n redactJsonRpcError,\n} from '../errors'\nimport type { JsonRpcTransport } from '../rpc/client'\nimport type {\n JsonRpcErrorObject,\n JsonRpcId,\n JsonRpcParams,\n RpcBatchCall,\n RpcSendOptions,\n} from '../rpc/types'\n\nexport interface RpcNotification {\n readonly jsonrpc: '2.0'\n readonly method: string\n readonly params: unknown\n}\n\nexport type RpcNotificationListener = (notification: RpcNotification) => void\n\nexport interface WebSocketTransportConfig {\n readonly endpoint: URL\n readonly maxBatchSize?: number\n readonly timeoutMs: number\n readonly webSocket?: typeof globalThis.WebSocket\n}\n\ninterface PendingResponse {\n readonly cleanup: () => void\n readonly reject: (reason: unknown) => void\n readonly resolve: (value: unknown) => void\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isRpcError = (value: unknown): value is JsonRpcErrorObject =>\n isObject(value) &&\n typeof value.code === 'number' &&\n typeof value.message === 'string'\n\nconst publicEndpoint = (endpoint: URL): string => {\n const url = new URL(endpoint)\n url.search = ''\n url.hash = ''\n return url.toString()\n}\n\nexport class WebSocketJsonRpcTransport implements JsonRpcTransport {\n readonly endpoint: string\n readonly maxBatchSize: number\n\n readonly #connectionUrl: string\n readonly #credential: string | undefined\n readonly #listeners = new Set<RpcNotificationListener>()\n readonly #pending = new Map<JsonRpcId, PendingResponse>()\n readonly #timeoutMs: number\n readonly #webSocket?: typeof globalThis.WebSocket\n #connectPromise: Promise<void> | undefined\n #nextId = 1\n #socket: WebSocket | undefined\n\n constructor(config: WebSocketTransportConfig) {\n const implementation = config.webSocket ?? globalThis.WebSocket\n if (typeof implementation === 'function') this.#webSocket = implementation\n this.#credential = config.endpoint.searchParams.get('api-key') ?? undefined\n this.#connectionUrl = config.endpoint.toString()\n this.endpoint = publicEndpoint(config.endpoint)\n this.maxBatchSize = config.maxBatchSize ?? 256\n this.#timeoutMs = config.timeoutMs\n }\n\n async connect(): Promise<void> {\n if (this.#socket?.readyState === 1) return\n if (this.#connectPromise) return this.#connectPromise\n if (!this.#webSocket) {\n throw new ErpcConfigError(\n 'A WebSocket implementation is required for subscriptions',\n )\n }\n\n this.#connectPromise = new Promise<void>((resolve, reject) => {\n const socket = new this.#webSocket!(this.#connectionUrl)\n this.#socket = socket\n\n const timeout = setTimeout(() => {\n socket.close()\n reject(new ErpcTimeoutError(this.#timeoutMs))\n }, this.#timeoutMs)\n\n socket.addEventListener(\n 'open',\n () => {\n clearTimeout(timeout)\n resolve()\n },\n { once: true },\n )\n socket.addEventListener(\n 'error',\n () => {\n clearTimeout(timeout)\n reject(new ErpcTransportError('Unable to connect to ERPC WebSocket'))\n },\n { once: true },\n )\n socket.addEventListener('message', (event: MessageEvent<unknown>) => {\n void this.#onMessage(event.data)\n })\n socket.addEventListener('close', () => {\n this.#socket = undefined\n this.#connectPromise = undefined\n const error = new ErpcTransportError('ERPC WebSocket connection closed')\n for (const pending of this.#pending.values()) pending.reject(error)\n this.#pending.clear()\n })\n }).catch((error: unknown) => {\n this.#connectPromise = undefined\n throw error\n })\n\n return this.#connectPromise\n }\n\n close(code = 1000, reason = 'Client closed connection'): void {\n this.#socket?.close(code, reason)\n this.#socket = undefined\n this.#connectPromise = undefined\n }\n\n onNotification(listener: RpcNotificationListener): () => void {\n this.#listeners.add(listener)\n return () => this.#listeners.delete(listener)\n }\n\n async request<TResult>(\n method: string,\n params?: JsonRpcParams,\n options: RpcSendOptions = {},\n ): Promise<TResult> {\n await this.connect()\n const id = this.#id()\n const promise = this.#waitFor<TResult>(id, options)\n const request: Record<string, unknown> = { jsonrpc: '2.0', id, method }\n if (params !== undefined) request.params = params\n this.#send(request, id)\n return promise\n }\n\n async batch<TResult extends readonly unknown[]>(\n calls: readonly RpcBatchCall[],\n options: RpcSendOptions = {},\n ): Promise<TResult> {\n if (calls.length === 0) return [] as unknown as TResult\n if (calls.length > this.maxBatchSize) {\n throw new ErpcInvalidResponseError(\n `A batch may contain at most ${this.maxBatchSize} calls`,\n )\n }\n\n await this.connect()\n const requests = calls.map((call) => {\n const id = this.#id()\n const request: Record<string, unknown> = {\n jsonrpc: '2.0',\n id,\n method: call.method,\n }\n if (call.params !== undefined) request.params = call.params\n return { id, request, response: this.#waitFor(id, options) }\n })\n\n try {\n this.#socket?.send(JSON.stringify(requests.map(({ request }) => request)))\n } catch (error) {\n for (const { id } of requests) this.#reject(id, error)\n }\n return Promise.all(requests.map(({ response }) => response)) as unknown as Promise<TResult>\n }\n\n #id(): number {\n const id = this.#nextId\n this.#nextId = id >= Number.MAX_SAFE_INTEGER ? 1 : id + 1\n return id\n }\n\n #send(request: unknown, id: JsonRpcId): void {\n try {\n this.#socket?.send(JSON.stringify(request))\n } catch (error) {\n this.#reject(id, error)\n }\n }\n\n #waitFor<TResult>(\n id: JsonRpcId,\n options: RpcSendOptions,\n ): Promise<TResult> {\n return new Promise<TResult>((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.#pending.delete(id)\n reject(new ErpcTimeoutError(this.#timeoutMs))\n }, this.#timeoutMs)\n\n const abort = () => {\n clearTimeout(timeout)\n this.#pending.delete(id)\n reject(new ErpcAbortedError())\n }\n options.signal?.addEventListener('abort', abort, { once: true })\n\n const cleanup = () => {\n clearTimeout(timeout)\n options.signal?.removeEventListener('abort', abort)\n }\n this.#pending.set(id, {\n resolve: (value) => resolve(value as TResult),\n reject,\n cleanup,\n })\n if (options.signal?.aborted) abort()\n })\n }\n\n #reject(id: JsonRpcId, _reason: unknown): void {\n const pending = this.#pending.get(id)\n if (!pending) return\n pending.cleanup()\n this.#pending.delete(id)\n // A custom WebSocket implementation may include its connection URL in a\n // thrown error, so never retain the original error as a public cause.\n pending.reject(\n new ErpcTransportError('Unable to send ERPC WebSocket request'),\n )\n }\n\n async #onMessage(data: unknown): Promise<void> {\n const text = await this.#messageText(data)\n if (text === null) return\n\n let parsed: unknown\n try {\n parsed = JSON.parse(text) as unknown\n } catch {\n return\n }\n\n if (Array.isArray(parsed)) {\n for (const item of parsed) this.#dispatch(item)\n } else {\n this.#dispatch(parsed)\n }\n }\n\n async #messageText(data: unknown): Promise<string | null> {\n if (typeof data === 'string') return data\n if (data instanceof ArrayBuffer) return new TextDecoder().decode(data)\n if (ArrayBuffer.isView(data)) {\n return new TextDecoder().decode(\n new Uint8Array(data.buffer, data.byteOffset, data.byteLength),\n )\n }\n if (typeof Blob !== 'undefined' && data instanceof Blob) return data.text()\n return null\n }\n\n #dispatch(message: unknown): void {\n if (!isObject(message)) return\n const id = message.id\n if (typeof id === 'number' || typeof id === 'string') {\n const pending = this.#pending.get(id)\n if (!pending) return\n pending.cleanup()\n this.#pending.delete(id)\n if (isRpcError(message.error)) {\n pending.reject(\n new ErpcJsonRpcError(\n redactJsonRpcError(message.error, this.#credential),\n ),\n )\n }\n else if ('result' in message) pending.resolve(message.result)\n else pending.reject(new ErpcInvalidResponseError())\n return\n }\n\n if (\n message.jsonrpc === '2.0' &&\n typeof message.method === 'string' &&\n 'params' in message\n ) {\n const notification: RpcNotification = {\n jsonrpc: '2.0',\n method: message.method,\n params: message.params,\n }\n for (const listener of this.#listeners) listener(notification)\n }\n }\n}\n","import { createRpcNamespace, type RpcNamespace } from './rpc/client'\nimport type { EthereumSubscriptionSchema } from './rpc/ethereum'\nimport type { RpcMethodSpec } from './rpc/types'\nimport {\n WebSocketJsonRpcTransport,\n type RpcNotification,\n type RpcNotificationListener,\n} from './transport/websocket'\n\nexport type SubscriptionId = number | string\nexport type SubscriptionListener<TResult> = (result: TResult) => void\n\ninterface NotificationParams {\n readonly result: unknown\n readonly subscription: SubscriptionId\n}\n\nconst notificationParams = (\n notification: RpcNotification,\n): NotificationParams | null => {\n if (typeof notification.params !== 'object' || notification.params === null) {\n return null\n }\n const params = notification.params as Record<string, unknown>\n if (\n (typeof params.subscription !== 'number' &&\n typeof params.subscription !== 'string') ||\n !('result' in params)\n ) {\n return null\n }\n return {\n subscription: params.subscription,\n result: params.result,\n }\n}\n\nexport class RpcSubscription<TId extends SubscriptionId = SubscriptionId> {\n readonly id: TId\n readonly #unsubscribe: () => Promise<boolean>\n #closed = false\n\n constructor(id: TId, unsubscribe: () => Promise<boolean>) {\n this.id = id\n this.#unsubscribe = unsubscribe\n }\n\n async unsubscribe(): Promise<boolean> {\n if (this.#closed) return true\n const result = await this.#unsubscribe()\n if (result) this.#closed = true\n return result\n }\n}\n\nexport class EthereumSubscriptions {\n readonly rpc: RpcNamespace<EthereumSubscriptionSchema>\n readonly #transport: WebSocketJsonRpcTransport\n\n constructor(transport: WebSocketJsonRpcTransport) {\n this.#transport = transport\n this.rpc = createRpcNamespace<EthereumSubscriptionSchema>({\n transport,\n parameterMode: 'positional',\n })\n }\n\n close(): void {\n this.#transport.close()\n }\n\n onNotification(listener: RpcNotificationListener): () => void {\n return this.#transport.onNotification(listener)\n }\n\n async subscribe<TResult = unknown>(\n subscription: string,\n listener: SubscriptionListener<TResult>,\n ...options: readonly unknown[]\n ): Promise<RpcSubscription<string>> {\n let id: string | undefined\n const removeListener = this.#transport.onNotification((notification) => {\n const params = notificationParams(notification)\n if (params && params.subscription === id) listener(params.result as TResult)\n })\n\n try {\n id = await this.#transport.request<string>('eth_subscribe', [\n subscription,\n ...options,\n ])\n } catch (error) {\n removeListener()\n throw error\n }\n\n return new RpcSubscription(id, async () => {\n const result = await this.#transport.request<boolean>('eth_unsubscribe', [\n id,\n ])\n if (result) removeListener()\n return result\n })\n }\n}\n\nexport interface SolanaEnhancedSubscriptionSchema {\n readonly accountSubscribe: RpcMethodSpec<\n readonly [address: string, options?: Readonly<Record<string, unknown>>],\n number\n >\n readonly accountUnsubscribe: RpcMethodSpec<\n readonly [subscriptionId: number],\n boolean\n >\n readonly transactionSubscribe: RpcMethodSpec<\n readonly [\n filter: Readonly<Record<string, unknown>>,\n options?: Readonly<Record<string, unknown>>,\n ],\n number\n >\n readonly transactionUnsubscribe: RpcMethodSpec<\n readonly [subscriptionId: number],\n boolean\n >\n}\n\nexport const SOLANA_ENHANCED_SUBSCRIPTION_METHODS = [\n 'accountSubscribe',\n 'accountUnsubscribe',\n 'transactionSubscribe',\n 'transactionUnsubscribe',\n] as const satisfies readonly (keyof SolanaEnhancedSubscriptionSchema)[]\n\nexport class SolanaSubscriptions {\n readonly rpc: RpcNamespace<SolanaEnhancedSubscriptionSchema>\n readonly #transport: WebSocketJsonRpcTransport\n\n constructor(transport: WebSocketJsonRpcTransport) {\n this.#transport = transport\n this.rpc = createRpcNamespace<SolanaEnhancedSubscriptionSchema>({\n transport,\n parameterMode: 'positional',\n })\n }\n\n close(): void {\n this.#transport.close()\n }\n\n onNotification(listener: RpcNotificationListener): () => void {\n return this.#transport.onNotification(listener)\n }\n\n accountSubscribe<TResult = unknown>(\n address: string,\n listener: SubscriptionListener<TResult>,\n options?: Readonly<Record<string, unknown>>,\n ): Promise<RpcSubscription<number>> {\n const params = options === undefined ? [address] : [address, options]\n return this.#subscribe<number, TResult>(\n 'accountSubscribe',\n params,\n 'accountUnsubscribe',\n listener,\n )\n }\n\n transactionSubscribe<TResult = unknown>(\n filter: Readonly<Record<string, unknown>>,\n listener: SubscriptionListener<TResult>,\n options?: Readonly<Record<string, unknown>>,\n ): Promise<RpcSubscription<number>> {\n const params = options === undefined ? [filter] : [filter, options]\n return this.#subscribe<number, TResult>(\n 'transactionSubscribe',\n params,\n 'transactionUnsubscribe',\n listener,\n )\n }\n\n async rawSubscribe<TResult = unknown>(\n subscribeMethod: string,\n params: readonly unknown[],\n unsubscribeMethod: string,\n listener: SubscriptionListener<TResult>,\n ): Promise<RpcSubscription> {\n return this.#subscribe(\n subscribeMethod,\n params,\n unsubscribeMethod,\n listener,\n )\n }\n\n async #subscribe<TId extends SubscriptionId, TResult>(\n subscribeMethod: string,\n params: readonly unknown[],\n unsubscribeMethod: string,\n listener: SubscriptionListener<TResult>,\n ): Promise<RpcSubscription<TId>> {\n let id: TId | undefined\n const removeListener = this.#transport.onNotification((notification) => {\n const value = notificationParams(notification)\n if (value && value.subscription === id) listener(value.result as TResult)\n })\n\n try {\n id = await this.#transport.request<TId>(subscribeMethod, params)\n } catch (error) {\n removeListener()\n throw error\n }\n\n return new RpcSubscription(id, async () => {\n const result = await this.#transport.request<boolean>(unsubscribeMethod, [\n id,\n ])\n if (result) removeListener()\n return result\n })\n }\n}\n","/* Generated by registry/generate-dex-catalog.mjs. Do not edit. */\n\nexport type DexStatus = 'active' | 'legacy' | 'winding-down' | 'retired';\nexport type DexChainId = string;\nexport interface DexDeployment { readonly dexDeploymentId: string; readonly protocolId: string; readonly name: string; readonly chainId: DexChainId; readonly programAddress: string; readonly adapterKind: string; readonly status: DexStatus; readonly replacedByDexDeploymentId: string | null; }\nexport interface PoolAdapter { readonly kind: string; readonly feeNumerator: string | null; readonly feeDenominator: string | null; }\nexport interface PoolDefinition { readonly poolDefinitionId: string; readonly dexDeploymentId: string; readonly chainId: DexChainId; readonly address: string; readonly token0DeploymentId: string; readonly token1DeploymentId: string; readonly adapter: Readonly<PoolAdapter>; readonly status: DexStatus; readonly replacedByPoolDefinitionId: string | null; }\nexport interface NativeWrapDefinition { readonly nativeWrapDefinitionId: string; readonly chainId: DexChainId; readonly nativeTokenDeploymentId: string; readonly wrappedTokenDeploymentId: string; readonly status: DexStatus; }\nexport interface DexAlias { readonly namespace: string; readonly name: string; readonly dexDeploymentId: string | null; readonly poolDefinitionId: string | null; }\nfunction deepFreeze<T>(value: T): T { if (value && typeof value === 'object') { Object.freeze(value); for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child); } return value; }\nexport const DEX_CATALOG_VERSION = \"1.0.0\" as const;\nexport const DEX_CATALOG_AS_OF_DATE = \"2026-09-15\" as const;\nexport const DEX_CATALOG_CONTENT_DIGEST = \"caccde1f997648dfa045af41d4f8b7f93a051c59d098cc770bd3a2757185aac1\" as const;\nexport const DEX_CHAIN_IDS = deepFreeze({\n \"ethereum\": \"eip155:1\",\n \"solana\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"avalancheC\": \"eip155:43114\"\n} as const);\nexport const dexes = deepFreeze({\n \"ethereum\": {\n \"UNISWAP_V2\": \"dex-deployment-0001\"\n },\n \"solana\": {\n \"ORCA_WHIRLPOOLS\": \"dex-deployment-0003\",\n \"RAYDIUM_CLMM\": \"dex-deployment-0004\"\n },\n \"avalancheC\": {\n \"LFJ_LEGACY\": \"dex-deployment-0002\"\n }\n} as const);\nexport const pools = deepFreeze({\n \"ethereum\": {\n \"DISCOVERED_POOL_1B98A5F24A364E05\": \"discovered-pool-1b98a5f24a364e05b3d56a9702c3560fc3a71f84b2195c486cfc5f8a956cc0b7\",\n \"DISCOVERED_POOL_6428A1E5DA293B2E\": \"discovered-pool-6428a1e5da293b2ef62027ec823ba27532219a40784def3930feee56a623b809\",\n \"DISCOVERED_POOL_866F890448D13C07\": \"discovered-pool-866f890448d13c078e217a894ebd47430da5941fe5bff7e382fc095916b4614d\",\n \"DISCOVERED_POOL_90805F8995C1D0B8\": \"discovered-pool-90805f8995c1d0b85a45fcd4587928a00066b1f14407baee4e8ed1b634c07804\",\n \"DISCOVERED_POOL_A7F9E600A86951F4\": \"discovered-pool-a7f9e600a86951f40472ff779fae467db8a6bbbc6076356058f427e97d4ae429\",\n \"DISCOVERED_POOL_B8F972F8BAE36C82\": \"discovered-pool-b8f972f8bae36c82b51ed2aeed070d3ef3e7642e2a708c7d3c0c134e6e1946ed\",\n \"DISCOVERED_POOL_E702B0CB56528418\": \"discovered-pool-e702b0cb56528418b4ce089dfc001c6241c94e92aabde72f1a340c4601541780\",\n \"UNISWAP_V2_USDC_WETH\": \"pool-0001\"\n },\n \"solana\": {\n \"ORCA_WHIRLPOOLS_WSOL_EURC\": \"pool-0003\",\n \"RAYDIUM_CLMM_WSOL_EURC\": \"pool-0004\"\n },\n \"avalancheC\": {\n \"DISCOVERED_POOL_1568E761C62F7DC5\": \"discovered-pool-1568e761c62f7dc58207a77f2dc32153805efe03a8d9cce9366ce68efdf276c4\",\n \"DISCOVERED_POOL_3C1E38D02092D16E\": \"discovered-pool-3c1e38d02092d16e396d2f3a22b2bfae55246a1c566831d31f211670e45bd562\",\n \"DISCOVERED_POOL_3F840A40991E755E\": \"discovered-pool-3f840a40991e755e42d242188bd8deb85cd5b9655308269b00c220f5237710cf\",\n \"DISCOVERED_POOL_5D7AA6A767A0C6EA\": \"discovered-pool-5d7aa6a767a0c6ea9ddeb06d1289bd12d85018935d5b25724b165dc8b9832252\",\n \"DISCOVERED_POOL_9E4ED76F76904A4A\": \"discovered-pool-9e4ed76f76904a4ae271946bb1a4b2dc7428e343040b05a42707071bbfac9462\",\n \"DISCOVERED_POOL_A2480F3D4EA5CE12\": \"discovered-pool-a2480f3d4ea5ce12252126acf64b174b9fe678b0f0fda8936a12fef180ae08cd\",\n \"DISCOVERED_POOL_ECE9088CF3894443\": \"discovered-pool-ece9088cf38944438897ff9fb2a1abc6855a687b5a3f0d6ab98dfe06c1a6dfef\",\n \"DISCOVERED_POOL_FB02E85806CD9079\": \"discovered-pool-fb02e85806cd907920126af935137b0775a858ddf04a28d7ca144f761fd7579e\",\n \"LFJ_LEGACY_WAVAX_USDC\": \"pool-0002\"\n }\n} as const);\nexport const DEX_DEPLOYMENTS: ReadonlyArray<Readonly<DexDeployment>> = deepFreeze([\n {\n \"dexDeploymentId\": \"dex-deployment-0001\",\n \"protocolId\": \"uniswap-v2\",\n \"name\": \"Uniswap V2\",\n \"chainId\": \"eip155:1\",\n \"programAddress\": \"0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f\",\n \"adapterKind\": \"evm-constant-product-v2\",\n \"status\": \"active\",\n \"replacedByDexDeploymentId\": null\n },\n {\n \"dexDeploymentId\": \"dex-deployment-0002\",\n \"protocolId\": \"lfj-legacy-constant-product\",\n \"name\": \"LFJ legacy constant-product (Joe V1)\",\n \"chainId\": \"eip155:43114\",\n \"programAddress\": \"0x9ad6c38be94206ca50bb0d90783181662f0cfa10\",\n \"adapterKind\": \"evm-constant-product-v2\",\n \"status\": \"active\",\n \"replacedByDexDeploymentId\": null\n },\n {\n \"dexDeploymentId\": \"dex-deployment-0003\",\n \"protocolId\": \"orca-whirlpools\",\n \"name\": \"Orca Whirlpools\",\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"programAddress\": \"whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc\",\n \"adapterKind\": \"solana-orca-whirlpool\",\n \"status\": \"active\",\n \"replacedByDexDeploymentId\": null\n },\n {\n \"dexDeploymentId\": \"dex-deployment-0004\",\n \"protocolId\": \"raydium-clmm\",\n \"name\": \"Raydium CLMM\",\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"programAddress\": \"CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK\",\n \"adapterKind\": \"solana-raydium-clmm\",\n \"status\": \"active\",\n \"replacedByDexDeploymentId\": null\n }\n]);\nexport const POOL_DEFINITIONS: ReadonlyArray<Readonly<PoolDefinition>> = deepFreeze([\n {\n \"poolDefinitionId\": \"discovered-pool-1568e761c62f7dc58207a77f2dc32153805efe03a8d9cce9366ce68efdf276c4\",\n \"dexDeploymentId\": \"dex-deployment-0002\",\n \"chainId\": \"eip155:43114\",\n \"address\": \"0xd5a37dc5c9a396a03dd1136fc76a1a02b1c88ffa\",\n \"token0DeploymentId\": \"discovered-token-9f9965cc065c9becf8d2cb58071524baafea37d27fda9bf683a93ea85f2e653d\",\n \"token1DeploymentId\": \"deployment-0004\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-1b98a5f24a364e05b3d56a9702c3560fc3a71f84b2195c486cfc5f8a956cc0b7\",\n \"dexDeploymentId\": \"dex-deployment-0001\",\n \"chainId\": \"eip155:1\",\n \"address\": \"0xc2adda861f89bbb333c90c492cb837741916a225\",\n \"token0DeploymentId\": \"discovered-token-b475569f6a15e97ac04e531dd813e9dcc902521c098d60d6ae4d21d53baf1395\",\n \"token1DeploymentId\": \"deployment-0002\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-3c1e38d02092d16e396d2f3a22b2bfae55246a1c566831d31f211670e45bd562\",\n \"dexDeploymentId\": \"dex-deployment-0002\",\n \"chainId\": \"eip155:43114\",\n \"address\": \"0xed8cbd9f0ce3c6986b22002f03c6475ceb7a6256\",\n \"token0DeploymentId\": \"deployment-0004\",\n \"token1DeploymentId\": \"discovered-token-288036a90ee0fa72a2751a78a6934cc6ced9e16de91c97ae8e109e2ee6189bc5\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-3f840a40991e755e42d242188bd8deb85cd5b9655308269b00c220f5237710cf\",\n \"dexDeploymentId\": \"dex-deployment-0002\",\n \"chainId\": \"eip155:43114\",\n \"address\": \"0xfe15c2695f1f920da45c30aae47d11de51007af9\",\n \"token0DeploymentId\": \"discovered-token-0a7f98c8752f15ee02ce0d801f25df8ff78864a1d70aff7e204f7bdb3f8a0692\",\n \"token1DeploymentId\": \"deployment-0004\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-5d7aa6a767a0c6ea9ddeb06d1289bd12d85018935d5b25724b165dc8b9832252\",\n \"dexDeploymentId\": \"dex-deployment-0002\",\n \"chainId\": \"eip155:43114\",\n \"address\": \"0x48f7c83c29e5ecea926d8169864d8cd022deaf3c\",\n \"token0DeploymentId\": \"discovered-token-323d07c442f0d089197ae7eea9b3ebb829910177c5b780161a7623aaed5e4371\",\n \"token1DeploymentId\": \"deployment-0004\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-6428a1e5da293b2ef62027ec823ba27532219a40784def3930feee56a623b809\",\n \"dexDeploymentId\": \"dex-deployment-0001\",\n \"chainId\": \"eip155:1\",\n \"address\": \"0xa2107fa5b38d9bbd2c461d6edf11b11a50f6b974\",\n \"token0DeploymentId\": \"deployment-0057\",\n \"token1DeploymentId\": \"deployment-0002\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-866f890448d13c078e217a894ebd47430da5941fe5bff7e382fc095916b4614d\",\n \"dexDeploymentId\": \"dex-deployment-0001\",\n \"chainId\": \"eip155:1\",\n \"address\": \"0xb6909b960dbbe7392d405429eb2b3649752b4838\",\n \"token0DeploymentId\": \"discovered-token-69519fd08e31445cad84b0c17a5346b7ee9c5692e270602af9308ca6d8943bb6\",\n \"token1DeploymentId\": \"deployment-0002\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-90805f8995c1d0b85a45fcd4587928a00066b1f14407baee4e8ed1b634c07804\",\n \"dexDeploymentId\": \"dex-deployment-0001\",\n \"chainId\": \"eip155:1\",\n \"address\": \"0x55d5c232d921b9eaa6b37b5845e439acd04b4dba\",\n \"token0DeploymentId\": \"discovered-token-611597bd13daa43d01a23caa9cca6a98797c64be7fb5b2677370ddbcdeaf01ec\",\n \"token1DeploymentId\": \"deployment-0002\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-9e4ed76f76904a4ae271946bb1a4b2dc7428e343040b05a42707071bbfac9462\",\n \"dexDeploymentId\": \"dex-deployment-0002\",\n \"chainId\": \"eip155:43114\",\n \"address\": \"0x6f3a0c89f611ef5dc9d96650324ac633d02265d3\",\n \"token0DeploymentId\": \"deployment-0058\",\n \"token1DeploymentId\": \"deployment-0004\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-a2480f3d4ea5ce12252126acf64b174b9fe678b0f0fda8936a12fef180ae08cd\",\n \"dexDeploymentId\": \"dex-deployment-0002\",\n \"chainId\": \"eip155:43114\",\n \"address\": \"0xa389f9430876455c36478deea9769b7ca4e3ddb1\",\n \"token0DeploymentId\": \"deployment-0018\",\n \"token1DeploymentId\": \"deployment-0004\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-a7f9e600a86951f40472ff779fae467db8a6bbbc6076356058f427e97d4ae429\",\n \"dexDeploymentId\": \"dex-deployment-0001\",\n \"chainId\": \"eip155:1\",\n \"address\": \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\",\n \"token0DeploymentId\": \"deployment-0019\",\n \"token1DeploymentId\": \"deployment-0002\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-b8f972f8bae36c82b51ed2aeed070d3ef3e7642e2a708c7d3c0c134e6e1946ed\",\n \"dexDeploymentId\": \"dex-deployment-0001\",\n \"chainId\": \"eip155:1\",\n \"address\": \"0x11b1f53204d03e5529f09eb3091939e4fd8c9cf3\",\n \"token0DeploymentId\": \"discovered-token-054d80a64e1f36a756129763ca2f1e7a140b50b04c83876ff01dd5fd497a74c5\",\n \"token1DeploymentId\": \"deployment-0002\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-e702b0cb56528418b4ce089dfc001c6241c94e92aabde72f1a340c4601541780\",\n \"dexDeploymentId\": \"dex-deployment-0001\",\n \"chainId\": \"eip155:1\",\n \"address\": \"0xbb2b8038a1640196fbe3e38816f3e67cba72d940\",\n \"token0DeploymentId\": \"discovered-token-e375086901067fe3de023bcdc70f1bafca798e1719ed7e676a98f57de3350a07\",\n \"token1DeploymentId\": \"deployment-0002\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-ece9088cf38944438897ff9fb2a1abc6855a687b5a3f0d6ab98dfe06c1a6dfef\",\n \"dexDeploymentId\": \"dex-deployment-0002\",\n \"chainId\": \"eip155:43114\",\n \"address\": \"0x454e67025631c065d3cfad6d71e6892f74487a15\",\n \"token0DeploymentId\": \"deployment-0059\",\n \"token1DeploymentId\": \"deployment-0004\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"discovered-pool-fb02e85806cd907920126af935137b0775a858ddf04a28d7ca144f761fd7579e\",\n \"dexDeploymentId\": \"dex-deployment-0002\",\n \"chainId\": \"eip155:43114\",\n \"address\": \"0xb6a00cead355d1ec492fd72e1d79199c347a74b5\",\n \"token0DeploymentId\": \"discovered-token-1847342426b765add3c8b4feb724c6b15121f25097cb7917c967c285ca77e804\",\n \"token1DeploymentId\": \"deployment-0004\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"pool-0001\",\n \"dexDeploymentId\": \"dex-deployment-0001\",\n \"chainId\": \"eip155:1\",\n \"address\": \"0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc\",\n \"token0DeploymentId\": \"deployment-0008\",\n \"token1DeploymentId\": \"deployment-0002\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"pool-0002\",\n \"dexDeploymentId\": \"dex-deployment-0002\",\n \"chainId\": \"eip155:43114\",\n \"address\": \"0xf4003f4efbe8691b60249e6afbd307abe7758adb\",\n \"token0DeploymentId\": \"deployment-0004\",\n \"token1DeploymentId\": \"deployment-0009\",\n \"adapter\": {\n \"kind\": \"evm-constant-product-v2\",\n \"feeNumerator\": \"3\",\n \"feeDenominator\": \"1000\"\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"pool-0003\",\n \"dexDeploymentId\": \"dex-deployment-0003\",\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"address\": \"FgH1dEvyRQoAqJjbUzzKVoM1HYdxTqPwjEF82kDH1kVe\",\n \"token0DeploymentId\": \"deployment-0006\",\n \"token1DeploymentId\": \"deployment-0013\",\n \"adapter\": {\n \"kind\": \"solana-orca-whirlpool\",\n \"feeNumerator\": null,\n \"feeDenominator\": null\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n },\n {\n \"poolDefinitionId\": \"pool-0004\",\n \"dexDeploymentId\": \"dex-deployment-0004\",\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"address\": \"AwaVyGAF3N6K4YRUJk55Ui1GquKhKdD6vTCmVvCzXpKf\",\n \"token0DeploymentId\": \"deployment-0006\",\n \"token1DeploymentId\": \"deployment-0013\",\n \"adapter\": {\n \"kind\": \"solana-raydium-clmm\",\n \"feeNumerator\": null,\n \"feeDenominator\": null\n },\n \"status\": \"active\",\n \"replacedByPoolDefinitionId\": null\n }\n]);\nexport const NATIVE_WRAP_DEFINITIONS: ReadonlyArray<Readonly<NativeWrapDefinition>> = deepFreeze([\n {\n \"nativeWrapDefinitionId\": \"native-wrap-0001\",\n \"chainId\": \"eip155:1\",\n \"nativeTokenDeploymentId\": \"deployment-0001\",\n \"wrappedTokenDeploymentId\": \"deployment-0002\",\n \"status\": \"active\"\n },\n {\n \"nativeWrapDefinitionId\": \"native-wrap-0002\",\n \"chainId\": \"eip155:43114\",\n \"nativeTokenDeploymentId\": \"deployment-0003\",\n \"wrappedTokenDeploymentId\": \"deployment-0004\",\n \"status\": \"active\"\n },\n {\n \"nativeWrapDefinitionId\": \"native-wrap-0003\",\n \"chainId\": \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\n \"nativeTokenDeploymentId\": \"deployment-0005\",\n \"wrappedTokenDeploymentId\": \"deployment-0006\",\n \"status\": \"active\"\n }\n]);\nexport const DEX_ALIASES: ReadonlyArray<Readonly<DexAlias>> = deepFreeze([\n { namespace: \"avalancheC\", name: \"DISCOVERED_POOL_1568E761C62F7DC5\", dexDeploymentId: null, poolDefinitionId: pools.avalancheC.DISCOVERED_POOL_1568E761C62F7DC5 },\n { namespace: \"avalancheC\", name: \"DISCOVERED_POOL_3C1E38D02092D16E\", dexDeploymentId: null, poolDefinitionId: pools.avalancheC.DISCOVERED_POOL_3C1E38D02092D16E },\n { namespace: \"avalancheC\", name: \"DISCOVERED_POOL_3F840A40991E755E\", dexDeploymentId: null, poolDefinitionId: pools.avalancheC.DISCOVERED_POOL_3F840A40991E755E },\n { namespace: \"avalancheC\", name: \"DISCOVERED_POOL_5D7AA6A767A0C6EA\", dexDeploymentId: null, poolDefinitionId: pools.avalancheC.DISCOVERED_POOL_5D7AA6A767A0C6EA },\n { namespace: \"avalancheC\", name: \"DISCOVERED_POOL_9E4ED76F76904A4A\", dexDeploymentId: null, poolDefinitionId: pools.avalancheC.DISCOVERED_POOL_9E4ED76F76904A4A },\n { namespace: \"avalancheC\", name: \"DISCOVERED_POOL_A2480F3D4EA5CE12\", dexDeploymentId: null, poolDefinitionId: pools.avalancheC.DISCOVERED_POOL_A2480F3D4EA5CE12 },\n { namespace: \"avalancheC\", name: \"DISCOVERED_POOL_ECE9088CF3894443\", dexDeploymentId: null, poolDefinitionId: pools.avalancheC.DISCOVERED_POOL_ECE9088CF3894443 },\n { namespace: \"avalancheC\", name: \"DISCOVERED_POOL_FB02E85806CD9079\", dexDeploymentId: null, poolDefinitionId: pools.avalancheC.DISCOVERED_POOL_FB02E85806CD9079 },\n { namespace: \"avalancheC\", name: \"LFJ_LEGACY\", dexDeploymentId: dexes.avalancheC.LFJ_LEGACY, poolDefinitionId: null },\n { namespace: \"avalancheC\", name: \"LFJ_LEGACY_WAVAX_USDC\", dexDeploymentId: null, poolDefinitionId: pools.avalancheC.LFJ_LEGACY_WAVAX_USDC },\n { namespace: \"ethereum\", name: \"DISCOVERED_POOL_1B98A5F24A364E05\", dexDeploymentId: null, poolDefinitionId: pools.ethereum.DISCOVERED_POOL_1B98A5F24A364E05 },\n { namespace: \"ethereum\", name: \"DISCOVERED_POOL_6428A1E5DA293B2E\", dexDeploymentId: null, poolDefinitionId: pools.ethereum.DISCOVERED_POOL_6428A1E5DA293B2E },\n { namespace: \"ethereum\", name: \"DISCOVERED_POOL_866F890448D13C07\", dexDeploymentId: null, poolDefinitionId: pools.ethereum.DISCOVERED_POOL_866F890448D13C07 },\n { namespace: \"ethereum\", name: \"DISCOVERED_POOL_90805F8995C1D0B8\", dexDeploymentId: null, poolDefinitionId: pools.ethereum.DISCOVERED_POOL_90805F8995C1D0B8 },\n { namespace: \"ethereum\", name: \"DISCOVERED_POOL_A7F9E600A86951F4\", dexDeploymentId: null, poolDefinitionId: pools.ethereum.DISCOVERED_POOL_A7F9E600A86951F4 },\n { namespace: \"ethereum\", name: \"DISCOVERED_POOL_B8F972F8BAE36C82\", dexDeploymentId: null, poolDefinitionId: pools.ethereum.DISCOVERED_POOL_B8F972F8BAE36C82 },\n { namespace: \"ethereum\", name: \"DISCOVERED_POOL_E702B0CB56528418\", dexDeploymentId: null, poolDefinitionId: pools.ethereum.DISCOVERED_POOL_E702B0CB56528418 },\n { namespace: \"ethereum\", name: \"UNISWAP_V2\", dexDeploymentId: dexes.ethereum.UNISWAP_V2, poolDefinitionId: null },\n { namespace: \"ethereum\", name: \"UNISWAP_V2_USDC_WETH\", dexDeploymentId: null, poolDefinitionId: pools.ethereum.UNISWAP_V2_USDC_WETH },\n { namespace: \"solana\", name: \"ORCA_WHIRLPOOLS\", dexDeploymentId: dexes.solana.ORCA_WHIRLPOOLS, poolDefinitionId: null },\n { namespace: \"solana\", name: \"ORCA_WHIRLPOOLS_WSOL_EURC\", dexDeploymentId: null, poolDefinitionId: pools.solana.ORCA_WHIRLPOOLS_WSOL_EURC },\n { namespace: \"solana\", name: \"RAYDIUM_CLMM\", dexDeploymentId: dexes.solana.RAYDIUM_CLMM, poolDefinitionId: null },\n { namespace: \"solana\", name: \"RAYDIUM_CLMM_WSOL_EURC\", dexDeploymentId: null, poolDefinitionId: pools.solana.RAYDIUM_CLMM_WSOL_EURC },\n]) as ReadonlyArray<Readonly<DexAlias>>;\n","import {\n DEX_ALIASES,\n DEX_CATALOG_AS_OF_DATE,\n DEX_CATALOG_CONTENT_DIGEST,\n DEX_CATALOG_VERSION,\n DEX_CHAIN_IDS,\n DEX_DEPLOYMENTS,\n NATIVE_WRAP_DEFINITIONS,\n POOL_DEFINITIONS,\n dexes,\n pools,\n} from './generated/dex_catalog'\nimport type {\n DexAlias,\n DexChainId,\n DexDeployment,\n DexStatus,\n NativeWrapDefinition,\n PoolDefinition,\n} from './generated/dex_catalog'\n\nexport {\n DEX_ALIASES,\n DEX_CATALOG_AS_OF_DATE,\n DEX_CATALOG_CONTENT_DIGEST,\n DEX_CATALOG_VERSION,\n DEX_CHAIN_IDS,\n DEX_DEPLOYMENTS,\n NATIVE_WRAP_DEFINITIONS,\n POOL_DEFINITIONS,\n}\n\nexport type {\n DexAlias,\n DexChainId,\n DexDeployment,\n DexStatus,\n NativeWrapDefinition,\n PoolDefinition,\n}\n\nexport type DexNamespace = 'ethereum' | 'solana' | 'avalancheC'\n\nexport interface ListPoolDefinitionsOptions {\n readonly chainId?: DexChainId\n readonly tokenDeploymentId?: string\n readonly adapterKind?: string\n}\n\nconst EMPTY_POOLS: readonly PoolDefinition[] = Object.freeze([])\n\nconst deepFreeze = <T>(value: T): T => {\n if (value && typeof value === 'object' && !Object.isFrozen(value)) {\n Object.freeze(value)\n for (const child of Object.values(value as Record<string, unknown>)) {\n deepFreeze(child)\n }\n }\n return value\n}\n\n// The generated module is a package data boundary. Freeze it again here so\n// hand-authored generator changes cannot accidentally expose mutable records.\ndeepFreeze(DEX_CHAIN_IDS)\ndeepFreeze(DEX_DEPLOYMENTS)\ndeepFreeze(POOL_DEFINITIONS)\ndeepFreeze(NATIVE_WRAP_DEFINITIONS)\ndeepFreeze(DEX_ALIASES)\ndeepFreeze(dexes)\ndeepFreeze(pools)\n\nconst knownChainIds = new Set<string>(Object.values(DEX_CHAIN_IDS))\nconst dexById = new Map<string, DexDeployment>(\n DEX_DEPLOYMENTS.map((deployment) => [deployment.dexDeploymentId, deployment]),\n)\nconst poolById = new Map<string, PoolDefinition>(\n POOL_DEFINITIONS.map((pool) => [pool.poolDefinitionId, pool]),\n)\nconst wrapByNativeTokenId = new Map<string, NativeWrapDefinition>(\n NATIVE_WRAP_DEFINITIONS.map((definition) => [\n definition.nativeTokenDeploymentId,\n definition,\n ]),\n)\n\n/** Chain-qualified DEX aliases whose values are opaque deployment IDs. */\nexport { dexes }\n\n/** Chain-qualified pool aliases whose values are opaque pool IDs. */\nexport { pools }\n\n/** Return a DEX deployment by its exact opaque ID. */\nexport function getDexDeployment(\n dexDeploymentId: string,\n): DexDeployment | undefined {\n return typeof dexDeploymentId === 'string'\n ? dexById.get(dexDeploymentId)\n : undefined\n}\n\n/** Return a pool definition by its exact opaque ID. */\nexport function getPoolDefinition(\n poolDefinitionId: string,\n): PoolDefinition | undefined {\n return typeof poolDefinitionId === 'string'\n ? poolById.get(poolDefinitionId)\n : undefined\n}\n\n/** Find a pool by its chain-qualified address. */\nexport function findPoolDefinitionByAddress(\n chainId: DexChainId,\n address: string,\n): PoolDefinition | undefined {\n if (!isKnownChain(chainId) || typeof address !== 'string' || address.length === 0) {\n return undefined\n }\n const normalizedAddress = isEvmChain(chainId)\n ? normalizeEvmAddress(address)\n : address\n if (normalizedAddress === undefined) return undefined\n return POOL_DEFINITIONS.find(\n (pool) =>\n pool.chainId === chainId && pool.address === normalizedAddress,\n )\n}\n\n/** Find all pools for an unordered token pair in stable pool-ID order. */\nexport function findPoolDefinitionsByPair(\n chainId: DexChainId,\n tokenADeploymentId: string,\n tokenBDeploymentId: string,\n): readonly PoolDefinition[] {\n if (\n !isKnownChain(chainId) ||\n typeof tokenADeploymentId !== 'string' ||\n typeof tokenBDeploymentId !== 'string' ||\n tokenADeploymentId.length === 0 ||\n tokenBDeploymentId.length === 0 ||\n tokenADeploymentId === tokenBDeploymentId\n ) {\n return EMPTY_POOLS\n }\n\n const wanted = [tokenADeploymentId, tokenBDeploymentId].sort().join('\\u0000')\n const matches = POOL_DEFINITIONS.filter((pool) => {\n const actual = [pool.token0DeploymentId, pool.token1DeploymentId]\n .sort()\n .join('\\u0000')\n return pool.chainId === chainId && actual === wanted\n }).sort((left, right) =>\n left.poolDefinitionId < right.poolDefinitionId\n ? -1\n : left.poolDefinitionId > right.poolDefinitionId\n ? 1\n : 0,\n )\n return matches.length === 0 ? EMPTY_POOLS : Object.freeze(matches)\n}\n\n/** List pool definitions using the optional exact filters. */\nexport function listPoolDefinitions(\n options: ListPoolDefinitionsOptions = {},\n): readonly PoolDefinition[] {\n if (!isRecord(options)) return EMPTY_POOLS\n const { chainId, tokenDeploymentId, adapterKind } = options\n if (chainId !== undefined && !isKnownChain(chainId)) return EMPTY_POOLS\n if (\n tokenDeploymentId !== undefined &&\n (typeof tokenDeploymentId !== 'string' || tokenDeploymentId.length === 0)\n ) {\n return EMPTY_POOLS\n }\n if (\n adapterKind !== undefined &&\n (typeof adapterKind !== 'string' || adapterKind.length === 0)\n ) {\n return EMPTY_POOLS\n }\n\n const matches = POOL_DEFINITIONS.filter((pool) => {\n if (chainId !== undefined && pool.chainId !== chainId) return false\n if (\n tokenDeploymentId !== undefined &&\n pool.token0DeploymentId !== tokenDeploymentId &&\n pool.token1DeploymentId !== tokenDeploymentId\n ) {\n return false\n }\n if (adapterKind !== undefined && pool.adapter.kind !== adapterKind) {\n return false\n }\n return true\n }).sort((left, right) =>\n left.poolDefinitionId < right.poolDefinitionId\n ? -1\n : left.poolDefinitionId > right.poolDefinitionId\n ? 1\n : 0,\n )\n return matches.length === 0 ? EMPTY_POOLS : Object.freeze(matches)\n}\n\n/** Return the active or historical native-to-wrapped relationship for a token. */\nexport function getNativeWrapDefinition(\n nativeTokenDeploymentId: string,\n): NativeWrapDefinition | undefined {\n return typeof nativeTokenDeploymentId === 'string'\n ? wrapByNativeTokenId.get(nativeTokenDeploymentId)\n : undefined\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction isKnownChain(value: unknown): value is DexChainId {\n return typeof value === 'string' && knownChainIds.has(value)\n}\n\nfunction isEvmChain(chainId: string): boolean {\n return (\n chainId === DEX_CHAIN_IDS.ethereum ||\n chainId === DEX_CHAIN_IDS.avalancheC\n )\n}\n\nfunction normalizeEvmAddress(address: string): string | undefined {\n if (!/^0x[0-9a-fA-F]{40}$/u.test(address)) return undefined\n return address.toLowerCase()\n}\n","import {\n DEX_CATALOG_CONTENT_DIGEST,\n DEX_CHAIN_IDS,\n getDexDeployment,\n getPoolDefinition,\n type DexDeployment,\n type PoolDefinition,\n} from './dex_catalog'\nimport {\n getTokenDeployment,\n TOKEN_CATALOG_CONTENT_DIGEST,\n type TokenDeployment,\n} from './token_catalog'\nimport type { HttpJsonRpcTransport } from './transport/http'\nimport type { RpcSendOptions } from './rpc/types'\n\nexport type SwapQuoteErrorCode =\n | 'SWAP_INVALID_ARGUMENT'\n | 'SWAP_UNSUPPORTED_CHAIN'\n | 'SWAP_UNKNOWN_POOL'\n | 'SWAP_UNKNOWN_TOKEN'\n | 'SWAP_TOKEN_NOT_ACTIVE'\n | 'SWAP_UNSUPPORTED_TOKEN_STANDARD'\n | 'SWAP_UNSUPPORTED_ADAPTER'\n | 'SWAP_UNSUPPORTED_TOKEN'\n | 'SWAP_CHAIN_MISMATCH'\n | 'SWAP_POOL_TOKEN_MISMATCH'\n | 'SWAP_PROGRAM_MISMATCH'\n | 'SWAP_INVALID_POOL_STATE'\n | 'SWAP_STATE_STALE'\n | 'SWAP_INSUFFICIENT_LIQUIDITY'\n | 'SWAP_ARITHMETIC'\n\nexport const SWAP_QUOTE_ERROR_MESSAGES: Readonly<\n Record<SwapQuoteErrorCode, string>\n> = Object.freeze({\n SWAP_INVALID_ARGUMENT: 'Swap request is invalid',\n SWAP_UNSUPPORTED_CHAIN: 'Swap chain is unsupported',\n SWAP_UNKNOWN_POOL: 'Swap pool is unknown',\n SWAP_UNKNOWN_TOKEN: 'Swap token is unknown',\n SWAP_TOKEN_NOT_ACTIVE: 'Swap token is not active',\n SWAP_UNSUPPORTED_TOKEN_STANDARD: 'Swap token standard is unsupported',\n SWAP_UNSUPPORTED_ADAPTER: 'Swap adapter is unsupported',\n SWAP_UNSUPPORTED_TOKEN: 'Swap token is unsupported for the selected pool',\n SWAP_CHAIN_MISMATCH: 'Swap chain does not match the selected records',\n SWAP_POOL_TOKEN_MISMATCH: 'Swap pool tokens do not match the request',\n SWAP_PROGRAM_MISMATCH: 'Swap program does not match the selected records',\n SWAP_INVALID_POOL_STATE: 'Swap pool state is invalid',\n SWAP_STATE_STALE: 'Swap pool state is stale',\n SWAP_INSUFFICIENT_LIQUIDITY: 'Swap pool liquidity is insufficient',\n SWAP_ARITHMETIC: 'Swap arithmetic overflowed or produced an invalid result',\n})\n\nexport class SwapQuoteError extends Error {\n readonly code: SwapQuoteErrorCode\n\n constructor(code: SwapQuoteErrorCode) {\n super(SWAP_QUOTE_ERROR_MESSAGES[code])\n this.name = 'SwapQuoteError'\n this.code = code\n }\n}\n\nexport interface SwapFreshness {\n readonly maxBlockAgeSeconds?: number\n readonly maxBlockLag?: number\n readonly maxClockSkewSeconds?: number\n}\n\nexport interface ExactInputQuoteRequest {\n readonly chainId: string\n readonly poolDefinitionId: string\n readonly inputTokenDeploymentId: string\n readonly outputTokenDeploymentId: string\n readonly amountIn: string\n readonly freshness?: SwapFreshness\n}\n\nexport interface ExactInputQuoteResult {\n readonly quoteKind: 'exact-input'\n readonly chainId: string\n readonly poolDefinitionId: string\n readonly dexDeploymentId: string\n readonly adapterKind: string\n readonly inputTokenDeploymentId: string\n readonly outputTokenDeploymentId: string\n readonly amountIn: string\n readonly amountOut: string\n readonly fee: {\n readonly numerator: string\n readonly denominator: string\n }\n readonly snapshot: {\n readonly kind: 'evm-block'\n readonly blockNumber: string\n readonly blockHash: string\n readonly blockTimestamp: string\n }\n readonly tokenCatalogDigest: string\n readonly dexCatalogDigest: string\n}\n\nexport interface SwapClient {\n readonly quoteExactInput: (\n request: ExactInputQuoteRequest,\n options?: RpcSendOptions,\n ) => Promise<ExactInputQuoteResult>\n}\n\ninterface SwapClientOptions {\n readonly ethereum: HttpJsonRpcTransport\n readonly avalanche: HttpJsonRpcTransport\n /** Test-only clock injection. Deliberately not exposed by createErpcClient. */\n readonly clock?: () => number\n}\n\ninterface NormalizedFreshness {\n readonly maxBlockAgeSeconds: number\n readonly maxBlockLag: number\n readonly maxClockSkewSeconds: number\n}\n\ninterface NormalizedRequest {\n readonly request: {\n readonly chainId: string\n readonly poolDefinitionId: string\n readonly inputTokenDeploymentId: string\n readonly outputTokenDeploymentId: string\n readonly amountIn: string\n readonly freshness: NormalizedFreshness\n }\n readonly amountIn: bigint\n readonly pool: PoolDefinition\n readonly dex: DexDeployment\n readonly input: TokenDeployment\n readonly output: TokenDeployment\n readonly freshness: NormalizedFreshness\n}\n\ninterface Header {\n readonly number: bigint\n readonly hash: string\n readonly timestamp: bigint\n}\n\ninterface Reserves {\n readonly reserve0: bigint\n readonly reserve1: bigint\n}\n\ninterface EvmState {\n readonly initial: Header\n readonly latestAfterReads: Header\n readonly reserves: Reserves\n}\n\nconst SUPPORTED_QUOTE_ADAPTER = 'evm-constant-product-v2'\n\ninterface SupportedQuoteCapability {\n readonly chainId: string\n readonly dexDeploymentId: string\n readonly factoryAddress: string\n readonly poolDefinitionId: string\n readonly poolAddress: string\n readonly token0DeploymentId: string\n readonly token0Address: string\n readonly token0Decimals: number\n readonly token0Standard: 'erc20'\n readonly token1DeploymentId: string\n readonly token1Address: string\n readonly token1Decimals: number\n readonly token1Standard: 'erc20'\n readonly adapterKind: typeof SUPPORTED_QUOTE_ADAPTER\n readonly feeNumerator: string\n readonly feeDenominator: string\n}\n\n// Swap eligibility is deliberately a handwritten, reviewed boundary. Catalog\n// growth can add lookup and ranking records without granting RPC quote access.\nconst SUPPORTED_QUOTE_CAPABILITIES: readonly SupportedQuoteCapability[] =\n Object.freeze([\n Object.freeze({\n chainId: 'eip155:1',\n dexDeploymentId: 'dex-deployment-0001',\n factoryAddress: '0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f',\n poolDefinitionId: 'pool-0001',\n poolAddress: '0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc',\n token0DeploymentId: 'deployment-0008',\n token0Address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n token0Decimals: 6,\n token0Standard: 'erc20',\n token1DeploymentId: 'deployment-0002',\n token1Address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n token1Decimals: 18,\n token1Standard: 'erc20',\n adapterKind: SUPPORTED_QUOTE_ADAPTER,\n feeNumerator: '3',\n feeDenominator: '1000',\n }),\n Object.freeze({\n chainId: 'eip155:43114',\n dexDeploymentId: 'dex-deployment-0002',\n factoryAddress: '0x9ad6c38be94206ca50bb0d90783181662f0cfa10',\n poolDefinitionId: 'pool-0002',\n poolAddress: '0xf4003f4efbe8691b60249e6afbd307abe7758adb',\n token0DeploymentId: 'deployment-0004',\n token0Address: '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7',\n token0Decimals: 18,\n token0Standard: 'erc20',\n token1DeploymentId: 'deployment-0009',\n token1Address: '0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e',\n token1Decimals: 6,\n token1Standard: 'erc20',\n adapterKind: SUPPORTED_QUOTE_ADAPTER,\n feeNumerator: '3',\n feeDenominator: '1000',\n }),\n ])\n\nconst matchesSupportedQuoteCapability = (\n pool: PoolDefinition,\n dex: DexDeployment,\n input: TokenDeployment,\n output: TokenDeployment,\n): boolean => {\n const capability = SUPPORTED_QUOTE_CAPABILITIES.find(\n (entry) => entry.poolDefinitionId === pool.poolDefinitionId,\n )\n if (!capability) return false\n if (\n input.representationKind === 'unclassified' ||\n output.representationKind === 'unclassified'\n ) {\n return false\n }\n\n const matchesToken = (\n token: TokenDeployment,\n deploymentId: string,\n address: string,\n decimals: number,\n standard: 'erc20',\n ): boolean =>\n token.chainId === capability.chainId &&\n token.deploymentId === deploymentId &&\n token.address === address &&\n token.decimals === decimals &&\n token.standard === standard\n\n return (\n pool.chainId === capability.chainId &&\n pool.dexDeploymentId === capability.dexDeploymentId &&\n pool.address === capability.poolAddress &&\n pool.token0DeploymentId === capability.token0DeploymentId &&\n pool.token1DeploymentId === capability.token1DeploymentId &&\n dex.chainId === capability.chainId &&\n dex.dexDeploymentId === capability.dexDeploymentId &&\n dex.programAddress === capability.factoryAddress &&\n dex.adapterKind === capability.adapterKind &&\n pool.adapter.kind === capability.adapterKind &&\n pool.adapter.feeNumerator === capability.feeNumerator &&\n pool.adapter.feeDenominator === capability.feeDenominator &&\n (matchesToken(\n input,\n capability.token0DeploymentId,\n capability.token0Address,\n capability.token0Decimals,\n capability.token0Standard,\n ) ||\n matchesToken(\n input,\n capability.token1DeploymentId,\n capability.token1Address,\n capability.token1Decimals,\n capability.token1Standard,\n )) &&\n (matchesToken(\n output,\n capability.token0DeploymentId,\n capability.token0Address,\n capability.token0Decimals,\n capability.token0Standard,\n ) ||\n matchesToken(\n output,\n capability.token1DeploymentId,\n capability.token1Address,\n capability.token1Decimals,\n capability.token1Standard,\n ))\n )\n}\nconst DEFAULT_FRESHNESS: NormalizedFreshness = Object.freeze({\n maxBlockAgeSeconds: 120,\n maxBlockLag: 3,\n maxClockSkewSeconds: 5,\n})\nconst UINT256_MAX = (1n << 256n) - 1n\nconst UINT112_MAX = (1n << 112n) - 1n\nconst UINT32_MAX = (1n << 32n) - 1n\nconst UINT256_DECIMAL = /^[1-9][0-9]*$/u\nconst NONNEGATIVE_DECIMAL = /^(0|[1-9][0-9]*)$/u\nconst HEX_BYTES = /^0x[0-9a-fA-F]*$/u\nconst HEX_QUANTITY = /^0x(?:0|[1-9a-fA-F][0-9a-fA-F]*)$/u\nconst EVM_ADDRESS = /^0x[0-9a-f]{40}$/u\n\nconst FACTORY_GET_PAIR_SELECTOR = '0xe6a43905'\nconst PAIR_FACTORY_SELECTOR = '0xc45a0155'\nconst PAIR_TOKEN0_SELECTOR = '0x0dfe1681'\nconst PAIR_TOKEN1_SELECTOR = '0xd21220a7'\nconst PAIR_GET_RESERVES_SELECTOR = '0x0902f1ac'\n\nfunction swapFail(code: SwapQuoteErrorCode): never {\n throw new SwapQuoteError(code)\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isKnownChain = (value: unknown): value is string =>\n value === DEX_CHAIN_IDS.ethereum ||\n value === DEX_CHAIN_IDS.solana ||\n value === DEX_CHAIN_IDS.avalancheC\n\nconst isOpaqueId = (value: string): boolean =>\n /^[A-Za-z0-9][A-Za-z0-9._:-]*$/u.test(value)\n\nfunction assertRequestShape(\n request: unknown,\n): asserts request is ExactInputQuoteRequest {\n if (!isRecord(request)) swapFail('SWAP_INVALID_ARGUMENT')\n const allowed = new Set([\n 'chainId',\n 'poolDefinitionId',\n 'inputTokenDeploymentId',\n 'outputTokenDeploymentId',\n 'amountIn',\n 'freshness',\n ])\n if (Object.keys(request).some((key) => !allowed.has(key))) {\n swapFail('SWAP_INVALID_ARGUMENT')\n }\n\n for (const key of [\n 'chainId',\n 'poolDefinitionId',\n 'inputTokenDeploymentId',\n 'outputTokenDeploymentId',\n 'amountIn',\n ] as const) {\n const value = request[key]\n if (\n typeof value !== 'string' ||\n value.length === 0 ||\n value.trim() !== value\n ) {\n swapFail('SWAP_INVALID_ARGUMENT')\n }\n }\n\n for (const key of [\n 'poolDefinitionId',\n 'inputTokenDeploymentId',\n 'outputTokenDeploymentId',\n ] as const) {\n const value = request[key]\n if (typeof value !== 'string' || !isOpaqueId(value)) {\n swapFail('SWAP_INVALID_ARGUMENT')\n }\n }\n}\n\nconst normalizeFreshness = (value: unknown): NormalizedFreshness => {\n if (value === undefined) return DEFAULT_FRESHNESS\n if (!isRecord(value)) swapFail('SWAP_INVALID_ARGUMENT')\n const keys = [\n 'maxBlockAgeSeconds',\n 'maxBlockLag',\n 'maxClockSkewSeconds',\n ] as const\n if (Object.keys(value).some((key) => !keys.includes(key as (typeof keys)[number]))) {\n swapFail('SWAP_INVALID_ARGUMENT')\n }\n const ranges = {\n maxBlockAgeSeconds: [0, 86400],\n maxBlockLag: [0, 1024],\n maxClockSkewSeconds: [0, 300],\n } as const\n const result: Record<(typeof keys)[number], number> = {\n maxBlockAgeSeconds: DEFAULT_FRESHNESS.maxBlockAgeSeconds,\n maxBlockLag: DEFAULT_FRESHNESS.maxBlockLag,\n maxClockSkewSeconds: DEFAULT_FRESHNESS.maxClockSkewSeconds,\n }\n for (const key of keys) {\n const current = Object.hasOwn(value, key)\n ? value[key]\n : DEFAULT_FRESHNESS[key]\n const [minimum, maximum] = ranges[key]\n if (\n typeof current !== 'number' ||\n !Number.isSafeInteger(current) ||\n current < minimum ||\n current > maximum\n ) {\n swapFail('SWAP_INVALID_ARGUMENT')\n }\n result[key] = current\n }\n return Object.freeze(result)\n}\n\nconst parseAmountIn = (value: string): bigint => {\n if (!UINT256_DECIMAL.test(value) || value.length > 78) {\n swapFail('SWAP_INVALID_ARGUMENT')\n }\n let parsed: bigint\n try {\n parsed = BigInt(value)\n } catch {\n swapFail('SWAP_INVALID_ARGUMENT')\n }\n if (parsed <= 0n || parsed > UINT256_MAX) {\n swapFail('SWAP_INVALID_ARGUMENT')\n }\n return parsed\n}\n\nconst normalizeQuoteRequest = (request: unknown): NormalizedRequest => {\n assertRequestShape(request)\n const freshness = normalizeFreshness(request.freshness)\n const amountIn = parseAmountIn(request.amountIn)\n\n if (!isKnownChain(request.chainId)) swapFail('SWAP_UNSUPPORTED_CHAIN')\n const pool = getPoolDefinition(request.poolDefinitionId)\n if (!pool) swapFail('SWAP_UNKNOWN_POOL')\n if (pool.chainId !== request.chainId) swapFail('SWAP_CHAIN_MISMATCH')\n if (pool.status !== 'active') swapFail('SWAP_INVALID_POOL_STATE')\n const dex = getDexDeployment(pool.dexDeploymentId)\n if (!dex || dex.status !== 'active') swapFail('SWAP_INVALID_POOL_STATE')\n\n const input = getTokenDeployment(request.inputTokenDeploymentId)\n if (!input) swapFail('SWAP_UNKNOWN_TOKEN')\n const output = getTokenDeployment(request.outputTokenDeploymentId)\n if (!output) swapFail('SWAP_UNKNOWN_TOKEN')\n if (input.chainId !== request.chainId || output.chainId !== request.chainId) {\n swapFail('SWAP_CHAIN_MISMATCH')\n }\n for (const token of [input, output]) {\n if (token.status !== 'active') swapFail('SWAP_TOKEN_NOT_ACTIVE')\n }\n // Native and Token-2022 records are rejected before any address/pool RPC.\n // Classic SPL records continue to the adapter gate so their failure is\n // deterministic and costs zero RPC calls.\n for (const token of [input, output]) {\n if (token.standard !== 'erc20' && token.standard !== 'spl-token') {\n swapFail('SWAP_UNSUPPORTED_TOKEN_STANDARD')\n }\n }\n if (request.inputTokenDeploymentId === request.outputTokenDeploymentId) {\n swapFail('SWAP_POOL_TOKEN_MISMATCH')\n }\n const wanted = [request.inputTokenDeploymentId, request.outputTokenDeploymentId]\n .sort()\n .join('\\u0000')\n const actual = [pool.token0DeploymentId, pool.token1DeploymentId]\n .sort()\n .join('\\u0000')\n if (wanted !== actual) swapFail('SWAP_POOL_TOKEN_MISMATCH')\n if (pool.adapter.kind !== SUPPORTED_QUOTE_ADAPTER || dex.adapterKind !== SUPPORTED_QUOTE_ADAPTER) {\n swapFail('SWAP_UNSUPPORTED_ADAPTER')\n }\n if (input.standard !== 'erc20' || output.standard !== 'erc20') {\n swapFail('SWAP_UNSUPPORTED_TOKEN_STANDARD')\n }\n if (!matchesSupportedQuoteCapability(pool, dex, input, output)) {\n swapFail('SWAP_UNSUPPORTED_TOKEN')\n }\n\n const snapshot = Object.freeze({\n chainId: request.chainId,\n poolDefinitionId: request.poolDefinitionId,\n inputTokenDeploymentId: request.inputTokenDeploymentId,\n outputTokenDeploymentId: request.outputTokenDeploymentId,\n amountIn: request.amountIn,\n freshness,\n })\n return {\n request: snapshot,\n amountIn,\n pool,\n dex,\n input,\n output,\n freshness,\n }\n}\n\nconst ensureUint256 = (\n value: bigint,\n code: SwapQuoteErrorCode = 'SWAP_ARITHMETIC',\n): bigint => {\n if (value < 0n || value > UINT256_MAX) swapFail(code)\n return value\n}\n\nconst parseHexQuantity = (\n value: unknown,\n code: SwapQuoteErrorCode = 'SWAP_INVALID_POOL_STATE',\n): bigint => {\n if (typeof value !== 'string') swapFail(code)\n if (value.length > 66 || !HEX_QUANTITY.test(value)) swapFail(code)\n let parsed: bigint\n try {\n parsed = BigInt(value)\n } catch {\n swapFail(code)\n }\n return ensureUint256(parsed, code)\n}\n\nconst parseHexBytes = (\n value: unknown,\n expectedBytes?: number,\n code: SwapQuoteErrorCode = 'SWAP_INVALID_POOL_STATE',\n): string => {\n if (typeof value !== 'string') swapFail(code)\n if (\n !HEX_BYTES.test(value) ||\n value.length % 2 !== 0 ||\n (expectedBytes !== undefined && value.length !== expectedBytes * 2 + 2)\n ) swapFail(code)\n return value.toLowerCase()\n}\n\nconst parseDecimalQuantity = (\n value: unknown,\n code: SwapQuoteErrorCode = 'SWAP_INVALID_POOL_STATE',\n): bigint => {\n if (typeof value !== 'string') swapFail(code)\n if (value.length > 78 || !NONNEGATIVE_DECIMAL.test(value)) swapFail(code)\n let parsed: bigint\n try {\n parsed = BigInt(value)\n } catch {\n swapFail(code)\n }\n return ensureUint256(parsed, code)\n}\n\nconst addressWord = (value: unknown): string => {\n const bytes = parseHexBytes(value, 32)\n const word = bytes.slice(2)\n if (!/^0{24}[0-9a-f]{40}$/u.test(word)) {\n swapFail('SWAP_INVALID_POOL_STATE')\n }\n return `0x${word.slice(24)}`\n}\n\nconst uintWord = (value: string, maximum: bigint = UINT256_MAX): bigint => {\n const bytes = parseHexBytes(value, 32)\n const parsed = BigInt(`0x${bytes.slice(2)}`)\n if (parsed > maximum) swapFail('SWAP_INVALID_POOL_STATE')\n return parsed\n}\n\nconst reserveWords = (value: unknown): Reserves => {\n const bytes = parseHexBytes(value, 96)\n const payload = bytes.slice(2)\n const reserve0 = uintWord(`0x${payload.slice(0, 64)}`, UINT112_MAX)\n const reserve1 = uintWord(`0x${payload.slice(64, 128)}`, UINT112_MAX)\n uintWord(`0x${payload.slice(128, 192)}`, UINT32_MAX)\n return { reserve0, reserve1 }\n}\n\nconst blockHeader = (value: unknown): Header => {\n if (!isRecord(value)) swapFail('SWAP_STATE_STALE')\n return {\n number: parseHexQuantity(value.number, 'SWAP_STATE_STALE'),\n hash: parseHexBytes(value.hash, 32, 'SWAP_STATE_STALE'),\n timestamp: parseHexQuantity(value.timestamp, 'SWAP_STATE_STALE'),\n }\n}\n\nconst assertChainIdResponse = (value: unknown, chainId: string): void => {\n const network = parseHexQuantity(value, 'SWAP_CHAIN_MISMATCH')\n const expected =\n chainId === DEX_CHAIN_IDS.ethereum\n ? 1n\n : chainId === DEX_CHAIN_IDS.avalancheC\n ? 43114n\n : null\n if (expected === null || network !== expected) swapFail('SWAP_CHAIN_MISMATCH')\n}\n\nconst rpcSelector = (hash: string): Readonly<{ blockHash: string; requireCanonical: true }> => ({\n blockHash: hash,\n requireCanonical: true,\n})\n\nconst abiCall = (to: string, data: string): Readonly<{ to: string; data: string }> => ({\n to,\n data,\n})\n\nconst encodeAddressArgument = (address: string): string => {\n if (!EVM_ADDRESS.test(address)) swapFail('SWAP_INVALID_POOL_STATE')\n return address.slice(2).padStart(64, '0')\n}\n\nconst rpcRequest = async (\n transport: HttpJsonRpcTransport,\n method: string,\n params: readonly unknown[],\n options?: RpcSendOptions,\n): Promise<unknown> => {\n if (options?.signal?.aborted) {\n if (options.signal.reason !== undefined) throw options.signal.reason\n throw new DOMException('The operation was aborted', 'AbortError')\n }\n return transport.request(method, params, options)\n}\n\nconst currentClockSeconds = (\n clock: (() => number) | undefined,\n): number => {\n const value = clock === undefined ? Math.floor(Date.now() / 1000) : clock()\n if (!Number.isSafeInteger(value)) swapFail('SWAP_INVALID_ARGUMENT')\n return value\n}\n\nconst assertFreshness = (\n state: Pick<EvmState, 'initial' | 'latestAfterReads'>,\n freshness: NormalizedFreshness,\n clock: (() => number) | undefined,\n): void => {\n const now = BigInt(currentClockSeconds(clock))\n const initialAge = now - state.initial.timestamp\n if (\n initialAge < -BigInt(freshness.maxClockSkewSeconds) ||\n initialAge > BigInt(freshness.maxBlockAgeSeconds)\n ) {\n swapFail('SWAP_STATE_STALE')\n }\n const latestAge = now - state.latestAfterReads.timestamp\n if (\n latestAge < -BigInt(freshness.maxClockSkewSeconds) ||\n latestAge > BigInt(freshness.maxBlockAgeSeconds)\n ) {\n swapFail('SWAP_STATE_STALE')\n }\n if (\n state.latestAfterReads.number < state.initial.number ||\n state.latestAfterReads.number - state.initial.number > BigInt(freshness.maxBlockLag)\n ) {\n swapFail('SWAP_STATE_STALE')\n }\n if (\n state.latestAfterReads.number === state.initial.number &&\n state.latestAfterReads.hash !== state.initial.hash\n ) {\n swapFail('SWAP_STATE_STALE')\n }\n if (\n state.latestAfterReads.number > state.initial.number &&\n state.latestAfterReads.timestamp < state.initial.timestamp\n ) {\n swapFail('SWAP_STATE_STALE')\n }\n if (\n state.latestAfterReads.hash === state.initial.hash &&\n state.latestAfterReads.number === state.initial.number &&\n state.latestAfterReads.timestamp !== state.initial.timestamp\n ) {\n swapFail('SWAP_STATE_STALE')\n }\n}\n\nconst readEvmState = async (\n transport: HttpJsonRpcTransport,\n normalized: NormalizedRequest,\n clock: (() => number) | undefined,\n options?: RpcSendOptions,\n): Promise<EvmState> => {\n const { pool, dex } = normalized\n const chainId = await rpcRequest(transport, 'eth_chainId', [], options)\n assertChainIdResponse(chainId, pool.chainId)\n\n const initial = blockHeader(\n await rpcRequest(transport, 'eth_getBlockByNumber', ['latest', false], options),\n )\n const selector = rpcSelector(initial.hash)\n\n // Keep all state responses opaque until both final header checks pass. This\n // preserves stale/reorg precedence over malformed ABI data.\n const factoryCodeRaw = await rpcRequest(transport, 'eth_getCode', [\n dex.programAddress,\n selector,\n ], options)\n const poolCodeRaw = await rpcRequest(transport, 'eth_getCode', [\n pool.address,\n selector,\n ], options)\n const token0 = getTokenDeployment(pool.token0DeploymentId)\n const token1 = getTokenDeployment(pool.token1DeploymentId)\n const token0Address = token0?.address\n const token1Address = token1?.address\n if (typeof token0Address !== 'string' || typeof token1Address !== 'string') {\n swapFail('SWAP_INVALID_POOL_STATE')\n }\n const pairCallData = `${FACTORY_GET_PAIR_SELECTOR}${encodeAddressArgument(\n token0Address,\n )}${encodeAddressArgument(token1Address)}`\n const factoryPairRaw = await rpcRequest(transport, 'eth_call', [\n abiCall(dex.programAddress, pairCallData),\n selector,\n ], options)\n const pairFactoryRaw = await rpcRequest(transport, 'eth_call', [\n abiCall(pool.address, PAIR_FACTORY_SELECTOR),\n selector,\n ], options)\n const pairToken0Raw = await rpcRequest(transport, 'eth_call', [\n abiCall(pool.address, PAIR_TOKEN0_SELECTOR),\n selector,\n ], options)\n const pairToken1Raw = await rpcRequest(transport, 'eth_call', [\n abiCall(pool.address, PAIR_TOKEN1_SELECTOR),\n selector,\n ], options)\n const reservesRaw = await rpcRequest(transport, 'eth_call', [\n abiCall(pool.address, PAIR_GET_RESERVES_SELECTOR),\n selector,\n ], options)\n\n const latestAfterReads = blockHeader(\n await rpcRequest(transport, 'eth_getBlockByNumber', ['latest', false], options),\n )\n const reread = blockHeader(\n await rpcRequest(transport, 'eth_getBlockByNumber', [\n `0x${initial.number.toString(16)}`,\n false,\n ], options),\n )\n if (\n reread.number !== initial.number ||\n reread.hash !== initial.hash ||\n reread.timestamp !== initial.timestamp\n ) {\n swapFail('SWAP_STATE_STALE')\n }\n\n assertFreshness({ initial, latestAfterReads }, normalized.freshness, clock)\n\n const factoryCode = parseHexBytes(factoryCodeRaw)\n if (factoryCode.length <= 2) swapFail('SWAP_PROGRAM_MISMATCH')\n const poolCode = parseHexBytes(poolCodeRaw)\n if (poolCode.length <= 2) swapFail('SWAP_INVALID_POOL_STATE')\n\n const factoryPair = addressWord(factoryPairRaw)\n if (factoryPair !== pool.address) swapFail('SWAP_PROGRAM_MISMATCH')\n const pairFactory = addressWord(pairFactoryRaw)\n if (pairFactory !== dex.programAddress) swapFail('SWAP_PROGRAM_MISMATCH')\n const pairToken0 = addressWord(pairToken0Raw)\n const pairToken1 = addressWord(pairToken1Raw)\n if (pairToken0 !== token0Address || pairToken1 !== token1Address) {\n swapFail('SWAP_POOL_TOKEN_MISMATCH')\n }\n const reserves = reserveWords(reservesRaw)\n return { initial, latestAfterReads, reserves }\n}\n\nconst calculateQuote = (\n normalized: NormalizedRequest,\n state: EvmState,\n): { readonly amountOut: bigint; readonly feeNumerator: bigint; readonly feeDenominator: bigint } => {\n const feeNumerator = parseDecimalQuantity(\n normalized.pool.adapter.feeNumerator,\n 'SWAP_ARITHMETIC',\n )\n const feeDenominator = parseDecimalQuantity(\n normalized.pool.adapter.feeDenominator,\n 'SWAP_ARITHMETIC',\n )\n if (feeDenominator <= feeNumerator) swapFail('SWAP_ARITHMETIC')\n\n const token0 = getTokenDeployment(normalized.pool.token0DeploymentId)\n if (!token0?.address || !normalized.input.address || !normalized.output.address) {\n swapFail('SWAP_INVALID_POOL_STATE')\n }\n const inputIsToken0 = normalized.input.address.toLowerCase() === token0.address\n const reserveIn = inputIsToken0 ? state.reserves.reserve0 : state.reserves.reserve1\n const reserveOut = inputIsToken0 ? state.reserves.reserve1 : state.reserves.reserve0\n if (reserveIn <= 0n || reserveOut <= 0n) swapFail('SWAP_INSUFFICIENT_LIQUIDITY')\n\n const adjusted = ensureUint256(\n normalized.amountIn * (feeDenominator - feeNumerator),\n )\n const denominator = ensureUint256(reserveIn * feeDenominator + adjusted)\n if (denominator <= 0n) swapFail('SWAP_ARITHMETIC')\n const numerator = ensureUint256(adjusted * reserveOut)\n const amountOut = numerator / denominator\n ensureUint256(amountOut)\n if (amountOut <= 0n || amountOut > reserveOut) {\n swapFail('SWAP_INSUFFICIENT_LIQUIDITY')\n }\n return { amountOut, feeNumerator, feeDenominator }\n}\n\nconst quoteResult = (\n normalized: NormalizedRequest,\n state: EvmState,\n result: ReturnType<typeof calculateQuote>,\n): ExactInputQuoteResult => {\n const output: ExactInputQuoteResult = {\n quoteKind: 'exact-input',\n chainId: normalized.request.chainId,\n poolDefinitionId: normalized.pool.poolDefinitionId,\n dexDeploymentId: normalized.pool.dexDeploymentId,\n adapterKind: normalized.pool.adapter.kind,\n inputTokenDeploymentId: normalized.request.inputTokenDeploymentId,\n outputTokenDeploymentId: normalized.request.outputTokenDeploymentId,\n amountIn: normalized.amountIn.toString(10),\n amountOut: result.amountOut.toString(10),\n fee: {\n numerator: result.feeNumerator.toString(10),\n denominator: result.feeDenominator.toString(10),\n },\n snapshot: {\n kind: 'evm-block',\n blockNumber: state.initial.number.toString(10),\n blockHash: state.initial.hash,\n blockTimestamp: state.initial.timestamp.toString(10),\n },\n tokenCatalogDigest: TOKEN_CATALOG_CONTENT_DIGEST,\n dexCatalogDigest: DEX_CATALOG_CONTENT_DIGEST,\n }\n return deepFreeze(output)\n}\n\nconst quoteExactInputWithTransports = async (\n request: unknown,\n options: SwapClientOptions,\n requestOptions?: RpcSendOptions,\n): Promise<ExactInputQuoteResult> => {\n const normalized = normalizeQuoteRequest(request)\n if (normalized.pool.adapter.kind !== SUPPORTED_QUOTE_ADAPTER) {\n swapFail('SWAP_UNSUPPORTED_ADAPTER')\n }\n const transport =\n normalized.pool.chainId === DEX_CHAIN_IDS.ethereum\n ? options.ethereum\n : normalized.pool.chainId === DEX_CHAIN_IDS.avalancheC\n ? options.avalanche\n : undefined\n if (!transport) swapFail('SWAP_UNSUPPORTED_ADAPTER')\n const selectedTransport: HttpJsonRpcTransport = transport\n const state = await readEvmState(\n selectedTransport,\n normalized,\n options.clock,\n requestOptions,\n )\n // Repeat freshness immediately before decoding the quote result so the\n // private test clock and the real wall clock cannot silently drift.\n assertFreshness(state, normalized.freshness, options.clock)\n return quoteResult(normalized, state, calculateQuote(normalized, state))\n}\n\nconst deepFreeze = <T>(value: T): T => {\n if (value && typeof value === 'object' && !Object.isFrozen(value)) {\n Object.freeze(value)\n for (const child of Object.values(value as Record<string, unknown>)) {\n deepFreeze(child)\n }\n }\n return value\n}\n\n/** Internal constructor used by the configured client and package tests. */\nexport const createSwapClient = (options: SwapClientOptions): SwapClient =>\n Object.freeze({\n quoteExactInput: (\n request: ExactInputQuoteRequest,\n requestOptions?: RpcSendOptions,\n ) => quoteExactInputWithTransports(request, options, requestOptions),\n })\n","import {\n ErpcAbortedError,\n ErpcHttpError,\n ErpcInvalidResponseError,\n ErpcJsonRpcError,\n ErpcTimeoutError,\n ErpcTransportError,\n redactJsonRpcError,\n} from '../errors'\nimport type {\n JsonRpcFailure,\n JsonRpcId,\n JsonRpcParams,\n JsonRpcRequest,\n JsonRpcResponse,\n RpcBatchCall,\n RpcSendOptions,\n} from '../rpc/types'\n\nexport interface HttpTransportConfig {\n readonly apiKey: string\n readonly endpoint: URL\n readonly fetch: typeof globalThis.fetch\n readonly headers: Readonly<Record<string, string>>\n readonly maxBatchSize?: number\n readonly timeoutMs: number\n}\n\ninterface ControlledSignal {\n readonly cleanup: () => void\n readonly signal: AbortSignal\n readonly timedOut: () => boolean\n}\n\nconst controlledSignal = (\n timeoutMs: number,\n external?: AbortSignal,\n): ControlledSignal => {\n const controller = new AbortController()\n let didTimeOut = false\n\n const timeout = setTimeout(() => {\n didTimeOut = true\n controller.abort()\n }, timeoutMs)\n\n const abort = () => controller.abort()\n if (external?.aborted) controller.abort()\n else external?.addEventListener('abort', abort, { once: true })\n\n return {\n signal: controller.signal,\n timedOut: () => didTimeOut,\n cleanup: () => {\n clearTimeout(timeout)\n external?.removeEventListener('abort', abort)\n },\n }\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isFailure = (value: unknown): value is JsonRpcFailure =>\n isObject(value) &&\n isObject(value.error) &&\n typeof value.error.code === 'number' &&\n typeof value.error.message === 'string'\n\nconst parseJson = (text: string): unknown => {\n try {\n return JSON.parse(text) as unknown\n } catch {\n throw new ErpcInvalidResponseError('ERPC returned malformed JSON')\n }\n}\n\nexport class HttpJsonRpcTransport {\n readonly endpoint: string\n readonly maxBatchSize: number\n\n readonly #apiKey: string\n readonly #fetch: typeof globalThis.fetch\n readonly #headers: Readonly<Record<string, string>>\n readonly #timeoutMs: number\n #nextId = 1\n\n constructor(config: HttpTransportConfig) {\n this.#apiKey = config.apiKey\n this.#fetch = config.fetch\n this.#headers = config.headers\n this.#timeoutMs = config.timeoutMs\n this.maxBatchSize = config.maxBatchSize ?? 256\n\n const endpoint = new URL(config.endpoint)\n endpoint.search = ''\n endpoint.hash = ''\n this.endpoint = endpoint.toString()\n }\n\n async request<TResult>(\n method: string,\n params?: JsonRpcParams,\n options: RpcSendOptions = {},\n ): Promise<TResult> {\n const id = this.#id()\n const request = this.#request(id, method, params)\n const response = await this.#post(request, options)\n return this.#unwrap<TResult>(response, id)\n }\n\n async batch<TResult extends readonly unknown[]>(\n calls: readonly RpcBatchCall[],\n options: RpcSendOptions = {},\n ): Promise<TResult> {\n if (calls.length === 0) return [] as unknown as TResult\n if (calls.length > this.maxBatchSize) {\n throw new ErpcInvalidResponseError(\n `A batch may contain at most ${this.maxBatchSize} calls`,\n )\n }\n\n const requests = calls.map((call) => {\n const id = this.#id()\n return this.#request(id, call.method, call.params)\n })\n const raw = await this.#post(requests, options)\n if (!Array.isArray(raw)) {\n if (isFailure(raw)) {\n throw new ErpcJsonRpcError(redactJsonRpcError(raw.error, this.#apiKey))\n }\n throw new ErpcInvalidResponseError('ERPC returned a non-array batch response')\n }\n\n const expectedIds = new Set<JsonRpcId>(requests.map((request) => request.id))\n const byId = new Map<JsonRpcId, unknown>()\n for (const response of raw) {\n if (!isObject(response) || !('id' in response)) {\n throw new ErpcInvalidResponseError('ERPC returned an invalid batch item')\n }\n const id = response.id\n if (typeof id !== 'number' && typeof id !== 'string') {\n throw new ErpcInvalidResponseError('ERPC returned an invalid batch id')\n }\n if (!expectedIds.has(id)) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an unexpected batch response id',\n )\n }\n if (byId.has(id)) {\n throw new ErpcInvalidResponseError(\n `ERPC returned duplicate batch response id ${String(id)}`,\n )\n }\n byId.set(id, response)\n }\n\n const results = requests.map((request) => {\n const response = byId.get(request.id)\n if (response === undefined) {\n throw new ErpcInvalidResponseError(\n `ERPC omitted batch response id ${String(request.id)}`,\n )\n }\n return this.#unwrap(response, request.id)\n })\n return results as unknown as TResult\n }\n\n #id(): number {\n const id = this.#nextId\n this.#nextId = id >= Number.MAX_SAFE_INTEGER ? 1 : id + 1\n return id\n }\n\n #request(\n id: JsonRpcId,\n method: string,\n params?: JsonRpcParams,\n ): JsonRpcRequest<JsonRpcParams> {\n const request: {\n jsonrpc: '2.0'\n id: JsonRpcId\n method: string\n params?: JsonRpcParams\n } = { jsonrpc: '2.0', id, method }\n if (params !== undefined) request.params = params\n return request\n }\n\n async #post(\n body: unknown,\n options: RpcSendOptions,\n ): Promise<unknown> {\n const url = new URL(this.endpoint)\n url.searchParams.set('api-key', this.#apiKey)\n const controlled = controlledSignal(this.#timeoutMs, options.signal)\n\n try {\n const response = await this.#fetch(url, {\n method: 'POST',\n headers: {\n ...this.#headers,\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n signal: controlled.signal,\n })\n const text = await response.text()\n if (!response.ok) throw new ErpcHttpError(response.status)\n return parseJson(text)\n } catch (error) {\n if (error instanceof ErpcHttpError || error instanceof ErpcInvalidResponseError) {\n throw error\n }\n if (controlled.timedOut()) throw new ErpcTimeoutError(this.#timeoutMs)\n if (options.signal?.aborted) throw new ErpcAbortedError()\n // Do not retain the underlying fetch error: custom runtimes may include\n // the credential-bearing request URL or headers in its message.\n throw new ErpcTransportError('Unable to reach ERPC')\n } finally {\n controlled.cleanup()\n }\n }\n\n #unwrap<TResult>(response: unknown, expectedId: JsonRpcId): TResult {\n if (!isObject(response)) throw new ErpcInvalidResponseError()\n if (response.id !== expectedId) {\n throw new ErpcInvalidResponseError('ERPC returned an unexpected response id')\n }\n if (isFailure(response)) {\n throw new ErpcJsonRpcError(\n redactJsonRpcError(response.error, this.#apiKey),\n )\n }\n if (!('result' in response)) throw new ErpcInvalidResponseError()\n return (response as unknown as JsonRpcResponse<TResult> & { result: TResult })\n .result\n }\n}\n","import { ErpcConfigError, ErpcInvalidResponseError } from './errors'\nimport type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\n\nexport interface MonthlyApiKeyMethodUsage {\n readonly count: number\n readonly creditCost: number\n readonly credits: number\n readonly method: string\n readonly updatedAt: string | null\n}\n\nexport interface MonthlyApiKeyChainUsage {\n readonly chain: string\n readonly count: number\n readonly credits: number\n readonly methods: readonly MonthlyApiKeyMethodUsage[]\n readonly updatedAt: string | null\n}\n\nexport interface MonthlyApiKeyUsageEntry {\n readonly apiKeyLast4: string\n readonly apiKeyLength: number\n readonly chains: readonly MonthlyApiKeyChainUsage[]\n readonly count: number\n readonly credits: number\n readonly keyId: number | null\n readonly updatedAt: string | null\n}\n\nexport interface MonthlyApiKeyUsage {\n readonly apiKeys: readonly MonthlyApiKeyUsageEntry[]\n readonly chains: readonly MonthlyApiKeyChainUsage[]\n readonly hasStrandedUsage: boolean\n readonly keyCount: number\n readonly totalCount: number\n readonly totalCredits: number\n readonly updatedAt: string | null\n readonly yearMonth: string\n}\n\nexport interface MonthlyApiKeyUsageParams {\n /** Calendar month in `YYYY-MM` format. The current month is used when omitted. */\n readonly yearMonth?: string\n}\n\nconst YEAR_MONTH = /^\\d{4}-(0[1-9]|1[0-2])$/\n\nconst objectValue = (value: unknown): Record<string, unknown> | null =>\n typeof value === 'object' && value !== null\n ? value as Record<string, unknown>\n : null\n\nconst isTimestamp = (value: unknown): value is string | null =>\n value === null || typeof value === 'string'\n\nconst parseMethod = (value: unknown): MonthlyApiKeyMethodUsage | null => {\n const method = objectValue(value)\n if (\n method === null ||\n typeof method.count !== 'number' ||\n typeof method.creditCost !== 'number' ||\n typeof method.credits !== 'number' ||\n typeof method.method !== 'string' ||\n !isTimestamp(method.updatedAt)\n ) return null\n return {\n count: method.count,\n creditCost: method.creditCost,\n credits: method.credits,\n method: method.method,\n updatedAt: method.updatedAt,\n }\n}\n\nconst parseChain = (value: unknown): MonthlyApiKeyChainUsage | null => {\n const chain = objectValue(value)\n if (\n chain === null ||\n typeof chain.chain !== 'string' ||\n typeof chain.count !== 'number' ||\n typeof chain.credits !== 'number' ||\n !Array.isArray(chain.methods) ||\n !isTimestamp(chain.updatedAt)\n ) return null\n const methods = chain.methods.map(parseMethod)\n if (methods.some((method) => method === null)) return null\n return {\n chain: chain.chain,\n count: chain.count,\n credits: chain.credits,\n methods: methods as readonly MonthlyApiKeyMethodUsage[],\n updatedAt: chain.updatedAt,\n }\n}\n\nconst parseApiKey = (value: unknown): MonthlyApiKeyUsageEntry | null => {\n const apiKey = objectValue(value)\n if (\n apiKey === null ||\n typeof apiKey.apiKeyLast4 !== 'string' ||\n typeof apiKey.apiKeyLength !== 'number' ||\n !Array.isArray(apiKey.chains) ||\n typeof apiKey.count !== 'number' ||\n typeof apiKey.credits !== 'number' ||\n (apiKey.keyId !== null && typeof apiKey.keyId !== 'number') ||\n !isTimestamp(apiKey.updatedAt)\n ) return null\n const chains = apiKey.chains.map(parseChain)\n if (chains.some((chain) => chain === null)) return null\n return {\n apiKeyLast4: apiKey.apiKeyLast4,\n apiKeyLength: apiKey.apiKeyLength,\n chains: chains as readonly MonthlyApiKeyChainUsage[],\n count: apiKey.count,\n credits: apiKey.credits,\n keyId: apiKey.keyId,\n updatedAt: apiKey.updatedAt,\n }\n}\n\nconst parseMonthlyUsage = (value: unknown): MonthlyApiKeyUsage | null => {\n const usage = objectValue(value)\n if (\n usage === null ||\n !Array.isArray(usage.apiKeys) ||\n !Array.isArray(usage.chains) ||\n typeof usage.hasStrandedUsage !== 'boolean' ||\n typeof usage.keyCount !== 'number' ||\n typeof usage.totalCount !== 'number' ||\n typeof usage.totalCredits !== 'number' ||\n !isTimestamp(usage.updatedAt) ||\n typeof usage.yearMonth !== 'string' ||\n !YEAR_MONTH.test(usage.yearMonth)\n ) return null\n const apiKeys = usage.apiKeys.map(parseApiKey)\n const chains = usage.chains.map(parseChain)\n if (\n apiKeys.some((apiKey) => apiKey === null) ||\n chains.some((chain) => chain === null)\n ) return null\n return {\n apiKeys: apiKeys as readonly MonthlyApiKeyUsageEntry[],\n chains: chains as readonly MonthlyApiKeyChainUsage[],\n hasStrandedUsage: usage.hasStrandedUsage,\n keyCount: usage.keyCount,\n totalCount: usage.totalCount,\n totalCredits: usage.totalCredits,\n updatedAt: usage.updatedAt,\n yearMonth: usage.yearMonth,\n }\n}\n\nexport class UsageClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n async getMonthlyApiKeyUsage(\n params: MonthlyApiKeyUsageParams = {},\n options?: RpcSendOptions,\n ): Promise<MonthlyApiKeyUsage> {\n if (params.yearMonth !== undefined && !YEAR_MONTH.test(params.yearMonth)) {\n throw new ErpcConfigError('yearMonth must use YYYY-MM format')\n }\n\n const response: unknown = await this.#transport.get(\n '/v3/user/api-keys/usage',\n { yearMonth: params.yearMonth },\n options,\n )\n const envelope = objectValue(response)\n const usage = envelope?.success === true\n ? parseMonthlyUsage(envelope.message)\n : null\n if (usage === null) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid monthly API key usage response',\n )\n }\n return usage\n }\n}\n","import { AccountClient } from './account'\nimport {\n endpointWithPath,\n resolveConfig,\n websocketUrl,\n type ErpcClientConfig,\n} from './config'\nimport { PriceClient } from './price'\nimport {\n createAvalancheClient,\n type AvalancheClient,\n} from './rpc/avalanche'\nimport {\n createEthereumClient,\n type EthereumClient,\n} from './rpc/ethereum'\nimport { createSolanaClient, type SolanaClient } from './rpc/solana'\nimport {\n EthereumSubscriptions,\n SolanaSubscriptions,\n} from './subscriptions'\nimport { createSwapClient, type SwapClient } from './swap'\nimport { HttpJsonRpcTransport } from './transport/http'\nimport { RestTransport } from './transport/rest'\nimport { WebSocketJsonRpcTransport } from './transport/websocket'\nimport { UsageClient } from './usage'\n\nexport interface ErpcSolanaClient extends SolanaClient {\n readonly subscriptions: SolanaSubscriptions\n}\n\nexport interface ErpcEthereumClient extends EthereumClient {\n readonly subscriptions: EthereumSubscriptions\n}\n\nexport interface ErpcAvalancheClient extends AvalancheClient {\n readonly subscriptions: EthereumSubscriptions\n}\n\nexport interface ErpcClient {\n readonly account: AccountClient\n readonly avalanche: ErpcAvalancheClient\n readonly ethereum: ErpcEthereumClient\n readonly price: PriceClient\n readonly solana: ErpcSolanaClient\n readonly swap: SwapClient\n readonly usage: UsageClient\n close(): void\n}\n\nexport const createErpcClient = (config: ErpcClientConfig): ErpcClient => {\n const resolved = resolveConfig(config)\n const sharedTransport = {\n apiKey: resolved.apiKey,\n fetch: resolved.fetch,\n headers: resolved.headers,\n timeoutMs: resolved.timeoutMs,\n }\n\n const solanaTransport = new HttpJsonRpcTransport({\n ...sharedTransport,\n endpoint: resolved.endpoint,\n })\n const ethereumEndpoint = endpointWithPath(resolved.endpoint, '/eth')\n const ethereumTransport = new HttpJsonRpcTransport({\n ...sharedTransport,\n endpoint: ethereumEndpoint,\n })\n const avalancheTransport = new HttpJsonRpcTransport({\n ...sharedTransport,\n endpoint: endpointWithPath(resolved.avalancheEndpoint, '/ava'),\n })\n const avalancheIndexTransport = (path: string) =>\n new HttpJsonRpcTransport({\n ...sharedTransport,\n endpoint: endpointWithPath(resolved.avalancheEndpoint, path),\n })\n\n const solanaWebSocket = new WebSocketJsonRpcTransport({\n endpoint: websocketUrl(resolved.endpoint, resolved.apiKey),\n timeoutMs: resolved.timeoutMs,\n ...(resolved.webSocket === undefined\n ? {}\n : { webSocket: resolved.webSocket }),\n })\n const ethereumWebSocket = new WebSocketJsonRpcTransport({\n endpoint: websocketUrl(resolved.endpoint, resolved.apiKey, '/eth'),\n timeoutMs: resolved.timeoutMs,\n ...(resolved.webSocket === undefined\n ? {}\n : { webSocket: resolved.webSocket }),\n })\n const avalancheWebSocket = new WebSocketJsonRpcTransport({\n endpoint: websocketUrl(\n resolved.avalancheEndpoint,\n resolved.apiKey,\n '/ava-ws',\n ),\n timeoutMs: resolved.timeoutMs,\n ...(resolved.webSocket === undefined\n ? {}\n : { webSocket: resolved.webSocket }),\n })\n\n const priceTransport = new RestTransport({\n ...sharedTransport,\n endpoint: resolved.endpoint,\n })\n const accountTransport = new RestTransport({\n ...sharedTransport,\n endpoint: resolved.accountEndpoint,\n })\n const userTransport = new RestTransport({\n ...sharedTransport,\n endpoint: resolved.userEndpoint,\n })\n\n const solana: ErpcSolanaClient = {\n ...createSolanaClient(solanaTransport),\n subscriptions: new SolanaSubscriptions(solanaWebSocket),\n }\n const ethereum: ErpcEthereumClient = {\n ...createEthereumClient(ethereumTransport),\n subscriptions: new EthereumSubscriptions(ethereumWebSocket),\n }\n const avalanche: ErpcAvalancheClient = {\n ...createAvalancheClient(avalancheTransport, {\n cChainBlocks: avalancheIndexTransport('/ava/ext/index/C/block'),\n pChainBlocks: avalancheIndexTransport('/ava/ext/index/P/block'),\n xChainBlocks: avalancheIndexTransport('/ava/ext/index/X/block'),\n xChainTransactions: avalancheIndexTransport('/ava/ext/index/X/tx'),\n }),\n subscriptions: new EthereumSubscriptions(avalancheWebSocket),\n }\n const swap = createSwapClient({\n ethereum: ethereumTransport,\n avalanche: avalancheTransport,\n })\n\n return {\n solana,\n ethereum,\n avalanche,\n price: new PriceClient(priceTransport),\n account: new AccountClient(accountTransport),\n swap,\n usage: new UsageClient(userTransport),\n close: () => {\n solana.subscriptions.close()\n ethereum.subscriptions.close()\n avalanche.subscriptions.close()\n },\n }\n}\n","import { ErpcInvalidResponseError } from './errors'\nimport type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\n\nexport type CloudCreditAlertLevel =\n | 'critical'\n | 'normal'\n | 'suspended'\n | 'warning'\n\nexport interface CloudCredit {\n readonly alertLevel: CloudCreditAlertLevel\n readonly balanceCents: number\n readonly burnRateCentsPerHour: number\n readonly quoteExpiresAt: string\n readonly quoteTimestamp: string\n readonly timeToZeroHours: number | null\n}\n\nconst alertLevels: readonly CloudCreditAlertLevel[] = [\n 'critical',\n 'normal',\n 'suspended',\n 'warning',\n]\n\nconst objectValue = (value: unknown): Record<string, unknown> | null =>\n typeof value === 'object' && value !== null\n ? value as Record<string, unknown>\n : null\n\nconst isDateTime = (value: unknown): value is string =>\n typeof value === 'string' && Number.isFinite(Date.parse(value))\n\nconst parseCredit = (value: unknown): CloudCredit | null => {\n const credit = objectValue(value)\n if (\n credit === null ||\n typeof credit.balanceCents !== 'number' ||\n !Number.isInteger(credit.balanceCents) ||\n typeof credit.burnRateCentsPerHour !== 'number' ||\n !Number.isInteger(credit.burnRateCentsPerHour) ||\n credit.burnRateCentsPerHour < 0 ||\n (credit.timeToZeroHours !== null &&\n (typeof credit.timeToZeroHours !== 'number' ||\n !Number.isFinite(credit.timeToZeroHours) ||\n credit.timeToZeroHours < 0)) ||\n typeof credit.alertLevel !== 'string' ||\n !alertLevels.includes(credit.alertLevel as CloudCreditAlertLevel) ||\n !isDateTime(credit.quoteTimestamp) ||\n !isDateTime(credit.quoteExpiresAt)\n ) return null\n\n return {\n alertLevel: credit.alertLevel as CloudCreditAlertLevel,\n balanceCents: credit.balanceCents,\n burnRateCentsPerHour: credit.burnRateCentsPerHour,\n quoteExpiresAt: credit.quoteExpiresAt,\n quoteTimestamp: credit.quoteTimestamp,\n timeToZeroHours: credit.timeToZeroHours,\n }\n}\n\nexport class CloudCreditClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n async get(options?: RpcSendOptions): Promise<CloudCredit> {\n const response: unknown = await this.#transport.get(\n '/v4/cloud/credit',\n undefined,\n options,\n )\n const envelope = objectValue(response)\n const credit = envelope?.success === true\n ? parseCredit(envelope.message)\n : null\n if (credit === null) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud credit snapshot',\n )\n }\n return credit\n }\n}\n","import { ErpcConfigError, ErpcInvalidResponseError } from './errors'\nimport type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\n\nexport type CloudResourceKind =\n | 'bare-metal'\n | 'solana-grpc'\n | 'solana-shredstream'\n | 'vps'\n\nexport type CloudResourceMode = 'dedicated' | 'direct' | 'shared'\n\n/** A credential-free projection of an ERPC Cloud resource. */\nexport interface CloudResource {\n readonly createdAt?: string\n readonly id: string\n readonly kind: CloudResourceKind\n readonly mode?: CloudResourceMode\n readonly name?: string\n readonly region?: string\n readonly status: string\n}\n\nexport interface CloudResourceStatusBilling {\n readonly graceEndsAt?: string\n readonly hourlyCredits?: number\n readonly nextChargeAt?: string\n readonly status: 'active' | 'grace-period' | 'inactive' | 'suspended'\n}\n\nexport interface CloudResourceStatus {\n readonly billing?: CloudResourceStatusBilling\n readonly id: string\n readonly status: string\n}\n\nconst objectValue = (value: unknown): Record<string, unknown> | null =>\n typeof value === 'object' && value !== null\n ? value as Record<string, unknown>\n : null\n\nconst resourceKinds: readonly CloudResourceKind[] = [\n 'bare-metal',\n 'solana-grpc',\n 'solana-shredstream',\n 'vps',\n]\nconst resourceModes: readonly CloudResourceMode[] = [\n 'dedicated',\n 'direct',\n 'shared',\n]\nconst billingStatuses: readonly CloudResourceStatusBilling['status'][] = [\n 'active',\n 'grace-period',\n 'inactive',\n 'suspended',\n]\n\nconst isDateTime = (value: unknown): value is string =>\n typeof value === 'string' && Number.isFinite(Date.parse(value))\n\nconst parseStatusBilling = (\n value: unknown,\n): CloudResourceStatusBilling | null => {\n const billing = objectValue(value)\n if (\n billing === null ||\n typeof billing.status !== 'string' ||\n !billingStatuses.includes(\n billing.status as CloudResourceStatusBilling['status'],\n ) ||\n (billing.hourlyCredits !== undefined &&\n (typeof billing.hourlyCredits !== 'number' ||\n !Number.isFinite(billing.hourlyCredits) ||\n billing.hourlyCredits < 0)) ||\n (billing.nextChargeAt !== undefined &&\n !isDateTime(billing.nextChargeAt)) ||\n (billing.graceEndsAt !== undefined &&\n !isDateTime(billing.graceEndsAt))\n ) return null\n\n return {\n status: billing.status as CloudResourceStatusBilling['status'],\n ...(typeof billing.hourlyCredits === 'number'\n ? { hourlyCredits: billing.hourlyCredits }\n : {}),\n ...(typeof billing.nextChargeAt === 'string'\n ? { nextChargeAt: billing.nextChargeAt }\n : {}),\n ...(typeof billing.graceEndsAt === 'string'\n ? { graceEndsAt: billing.graceEndsAt }\n : {}),\n }\n}\n\nconst parseResourceStatus = (value: unknown): CloudResourceStatus | null => {\n const status = objectValue(value)\n if (\n status === null ||\n typeof status.id !== 'string' ||\n typeof status.status !== 'string'\n ) return null\n const billing = status.billing === undefined\n ? undefined\n : parseStatusBilling(status.billing)\n if (status.billing !== undefined && billing === null) return null\n return {\n id: status.id,\n status: status.status,\n ...(billing ? { billing } : {}),\n }\n}\nconst parseResource = (value: unknown): CloudResource | null => {\n const resource = objectValue(value)\n if (\n resource === null ||\n typeof resource.id !== 'string' ||\n typeof resource.kind !== 'string' ||\n !resourceKinds.includes(resource.kind as CloudResourceKind) ||\n typeof resource.status !== 'string' ||\n (resource.mode !== undefined &&\n (typeof resource.mode !== 'string' ||\n !resourceModes.includes(resource.mode as CloudResourceMode))) ||\n (resource.name !== undefined && typeof resource.name !== 'string') ||\n (resource.region !== undefined && typeof resource.region !== 'string') ||\n (resource.createdAt !== undefined && typeof resource.createdAt !== 'string')\n ) return null\n\n return {\n id: resource.id,\n kind: resource.kind as CloudResourceKind,\n status: resource.status,\n ...(typeof resource.mode === 'string'\n ? { mode: resource.mode as CloudResourceMode }\n : {}),\n ...(typeof resource.name === 'string' ? { name: resource.name } : {}),\n ...(typeof resource.region === 'string' ? { region: resource.region } : {}),\n ...(typeof resource.createdAt === 'string'\n ? { createdAt: resource.createdAt }\n : {}),\n }\n}\n\nexport class CloudResourcesClient {\n readonly #transport: RestTransport\n\n constructor(transport: RestTransport) {\n this.#transport = transport\n }\n\n async list(options?: RpcSendOptions): Promise<readonly CloudResource[]> {\n const response: unknown = await this.#transport.get(\n '/v4/cloud/resources',\n undefined,\n options,\n )\n const envelope = objectValue(response)\n const message = objectValue(envelope?.message)\n if (envelope?.success !== true || !Array.isArray(message?.resources)) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud resource list',\n )\n }\n const resources = message.resources.map(parseResource)\n if (resources.some((resource) => resource === null)) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud resource list',\n )\n }\n return resources as readonly CloudResource[]\n }\n\n async get(\n resourceId: string,\n options?: RpcSendOptions,\n ): Promise<CloudResource> {\n const normalizedId = resourceId.trim()\n if (!normalizedId) {\n throw new ErpcConfigError('resourceId must not be empty')\n }\n const response: unknown = await this.#transport.get(\n `/v4/cloud/resources/${encodeURIComponent(normalizedId)}`,\n undefined,\n options,\n )\n const envelope = objectValue(response)\n const message = objectValue(envelope?.message)\n const resource = envelope?.success === true\n ? parseResource(message?.resource)\n : null\n if (resource === null) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud resource',\n )\n }\n return resource\n }\n\n async getStatus(\n resourceId: string,\n options?: RpcSendOptions,\n ): Promise<CloudResourceStatus> {\n const normalizedId = resourceId.trim()\n if (!normalizedId) {\n throw new ErpcConfigError('resourceId must not be empty')\n }\n const response: unknown = await this.#transport.get(\n `/v4/cloud/resources/${encodeURIComponent(normalizedId)}/status`,\n undefined,\n options,\n )\n const envelope = objectValue(response)\n const status = envelope?.success === true\n ? parseResourceStatus(envelope.message)\n : null\n if (status === null) {\n throw new ErpcInvalidResponseError(\n 'ERPC returned an invalid Cloud resource status',\n )\n }\n return status\n }\n}\n","import { ErpcConfigError } from './errors'\nimport { CloudCatalogClient } from './catalog'\nimport { CloudCreditClient } from './credit'\nimport type { RpcSendOptions } from './rpc/types'\nimport { RestTransport } from './transport/rest'\nimport { UsageClient } from './usage'\nimport { CloudResourcesClient } from './resources'\nimport { DEFAULT_TIMEOUT_MS, DEFAULT_USER_ENDPOINT } from './config'\n\nexport interface ErpcCloudClientConfig {\n readonly accessToken: string\n readonly endpoint?: string\n readonly fetch?: typeof globalThis.fetch\n readonly headers?: Readonly<Record<string, string>>\n readonly timeoutMs?: number\n}\n\nexport interface ErpcCloudClient {\n readonly catalog: CloudCatalogClient\n readonly credit: CloudCreditClient\n readonly resources: CloudResourcesClient\n readonly usage: UsageClient\n}\n\nconst requireFetch = (provided?: typeof globalThis.fetch) => {\n const implementation = provided ?? globalThis.fetch\n if (typeof implementation !== 'function') {\n throw new ErpcConfigError(\n 'A Fetch API implementation is required in this runtime',\n )\n }\n return implementation\n}\n\nconst cloudEndpoint = (value?: string): URL => {\n let endpoint: URL\n try {\n endpoint = new URL(value ?? DEFAULT_USER_ENDPOINT)\n } catch {\n throw new ErpcConfigError('endpoint must be an absolute HTTP(S) URL')\n }\n const isLocalHttp = endpoint.protocol === 'http:' &&\n ['127.0.0.1', '::1', '[::1]', 'localhost'].includes(endpoint.hostname)\n if (endpoint.protocol !== 'https:' && !isLocalHttp) {\n throw new ErpcConfigError('endpoint must use HTTPS except on localhost')\n }\n endpoint.search = ''\n endpoint.hash = ''\n endpoint.pathname = endpoint.pathname.replace(/\\/+$/, '') || '/'\n return endpoint\n}\n\nexport const createErpcCloudClient = (\n config: ErpcCloudClientConfig,\n): ErpcCloudClient => {\n const accessToken = config.accessToken.trim()\n if (!accessToken) {\n throw new ErpcConfigError('accessToken must not be empty')\n }\n const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS\n if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n throw new ErpcConfigError('timeoutMs must be a positive finite number')\n }\n\n const transport = new RestTransport({\n apiKey: accessToken,\n endpoint: cloudEndpoint(config.endpoint),\n fetch: requireFetch(config.fetch),\n headers: config.headers ?? {},\n timeoutMs,\n })\n\n return {\n catalog: new CloudCatalogClient(transport),\n credit: new CloudCreditClient(transport),\n resources: new CloudResourcesClient(transport),\n usage: new UsageClient(transport),\n }\n}\n\nexport type ErpcCloudRequestOptions = RpcSendOptions\n"]}