@chainstream-io/sdk 0.2.4 → 0.2.6

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/chainstream.ts","../src/openapi-client/chainstreamApiClient.ts","../src/stream/stream.ts","../src/stream/stream.fields.ts","../src/openapi-client/generated/blockchain/blockchain.ts","../src/openapi-client/generated/defi-sol-moonshot/defi-sol-moonshot.ts","../src/openapi-client/generated/defi-sol-pumpfun/defi-sol-pumpfun.ts","../src/openapi-client/generated/dex-pool/dex-pool.ts","../src/openapi-client/generated/dex/dex.ts","../src/openapi-client/generated/endpoint/endpoint.ts","../src/openapi-client/generated/ipfs/ipfs.ts","../src/openapi-client/generated/jobs/jobs.ts","../src/openapi-client/generated/kyt/kyt.ts","../src/openapi-client/generated/ranking/ranking.ts","../src/openapi-client/generated/red-packet/red-packet.ts","../src/openapi-client/generated/token/token.ts","../src/openapi-client/generated/trade/trade.ts","../src/openapi-client/generated/transaction/transaction.ts","../src/openapi-client/generated/wallet/wallet.ts","../src/openapi-client/generated/watchlist/watchlist.ts"],"sourcesContent":["import { EventSourcePolyfill } from \"event-source-polyfill\";\nimport { configure } from \"./openapi-client/chainstreamApiClient.js\";\nimport { StreamApi } from \"./stream/index.js\";\n\n// Import all API modules\nimport * as blockchainApi from \"./openapi-client/generated/blockchain/blockchain.js\";\nimport * as moonshotApi from \"./openapi-client/generated/defi-sol-moonshot/defi-sol-moonshot.js\";\nimport * as pumpfunApi from \"./openapi-client/generated/defi-sol-pumpfun/defi-sol-pumpfun.js\";\nimport * as dexPoolApi from \"./openapi-client/generated/dex-pool/dex-pool.js\";\nimport * as dexApi from \"./openapi-client/generated/dex/dex.js\";\nimport * as endpointApi from \"./openapi-client/generated/endpoint/endpoint.js\";\nimport * as ipfsApi from \"./openapi-client/generated/ipfs/ipfs.js\";\nimport * as jobsApi from \"./openapi-client/generated/jobs/jobs.js\";\nimport * as kytApi from \"./openapi-client/generated/kyt/kyt.js\";\nimport * as rankingApi from \"./openapi-client/generated/ranking/ranking.js\";\nimport * as redPacketApi from \"./openapi-client/generated/red-packet/red-packet.js\";\nimport * as tokenApi from \"./openapi-client/generated/token/token.js\";\nimport * as tradeApi from \"./openapi-client/generated/trade/trade.js\";\nimport * as transactionApi from \"./openapi-client/generated/transaction/transaction.js\";\nimport * as walletApi from \"./openapi-client/generated/wallet/wallet.js\";\nimport * as watchlistApi from \"./openapi-client/generated/watchlist/watchlist.js\";\n\nexport interface TokenProvider {\n getToken(): Promise<string> | string;\n}\n\nexport interface ChainStreamRequestContext {\n baseUrl: string;\n streamUrl: string;\n accessToken: string | TokenProvider;\n}\n\nexport interface ChainStreamClientOptions {\n debug?: boolean;\n serverUrl?: string;\n streamUrl?: string;\n /**\n * Whether to automatically connect to WebSocket on initialization.\n * Default: false\n *\n * If set to true, WebSocket will connect automatically.\n * If false or not set, you need to manually call `client.stream.connect()` when needed.\n */\n autoConnectWebSocket?: boolean;\n}\n\nexport class ChainStreamClient {\n public readonly requestCtx: ChainStreamRequestContext;\n\n // WebSocket streaming client\n public readonly stream: StreamApi;\n\n // REST API modules\n public readonly token: typeof tokenApi;\n public readonly dex: typeof dexApi;\n public readonly dexpool: typeof dexPoolApi;\n public readonly trade: typeof tradeApi;\n public readonly ranking: typeof rankingApi;\n public readonly transaction: typeof transactionApi;\n public readonly moonshot: typeof moonshotApi;\n public readonly pumpfun: typeof pumpfunApi;\n public readonly wallet: typeof walletApi;\n public readonly redPacket: typeof redPacketApi;\n public readonly ipfs: typeof ipfsApi;\n public readonly blockchain: typeof blockchainApi;\n public readonly watchlist: typeof watchlistApi;\n public readonly jobs: typeof jobsApi;\n public readonly kyt: typeof kytApi;\n public readonly endpoint: typeof endpointApi;\n\n public constructor(accessToken: string | TokenProvider, options: ChainStreamClientOptions = {}) {\n const baseUrl: string = options.serverUrl ?? \"https://api-dex.chainstream.io\";\n const streamUrl: string =\n options.streamUrl ?? \"wss://realtime-dex.chainstream.io/connection/websocket\";\n\n this.requestCtx = { baseUrl, streamUrl, accessToken };\n\n // Configure the API client with authentication\n configure({\n accessToken,\n basePath: baseUrl,\n debugging: options.debug,\n });\n\n // Assign API modules\n this.token = tokenApi;\n this.dex = dexApi;\n this.dexpool = dexPoolApi;\n this.trade = tradeApi;\n this.ranking = rankingApi;\n this.transaction = transactionApi;\n this.moonshot = moonshotApi;\n this.pumpfun = pumpfunApi;\n this.wallet = walletApi;\n this.redPacket = redPacketApi;\n this.ipfs = ipfsApi;\n this.blockchain = blockchainApi;\n this.watchlist = watchlistApi;\n this.jobs = jobsApi;\n this.kyt = kytApi;\n this.endpoint = endpointApi;\n\n // Initialize WebSocket streaming client\n this.stream = new StreamApi(this.requestCtx);\n\n // Only auto-connect WebSocket if explicitly enabled\n if (options.autoConnectWebSocket === true) {\n this.stream.connect();\n }\n }\n\n /**\n * Wait for a job to complete using Server-Sent Events (SSE)\n * @param jobId - The job ID to wait for\n * @param timeout - Timeout in milliseconds (default: 60000)\n * @returns Promise that resolves with the job result\n */\n async waitForJob<T>(jobId: string, timeout = 60000): Promise<T> {\n const accessToken =\n typeof this.requestCtx.accessToken === \"string\"\n ? this.requestCtx.accessToken\n : await this.requestCtx.accessToken.getToken();\n\n return new Promise((resolve, reject) => {\n const sse = new EventSourcePolyfill(`${this.requestCtx.baseUrl}/jobs/${jobId}/streaming`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n });\n\n const timeoutId = setTimeout(() => {\n sse.close();\n reject(new Error(`Job ${jobId} timed out after ${timeout}ms`));\n }, timeout);\n\n sse.onmessage = event => {\n try {\n console.log(\"event.data: \", event.data);\n const data = JSON.parse(event.data as string);\n\n if (data.status === \"error\") {\n sse.close();\n reject(new Error(`Error: ${data.message}`));\n } else if (data.status === \"completed\") {\n clearTimeout(timeoutId);\n sse.close();\n resolve(data as T);\n }\n } catch {\n clearTimeout(timeoutId);\n sse.close();\n reject(new Error(\"Error parsing event data\"));\n }\n };\n\n sse.onopen = () => {\n console.log(\"SSE connection opened\");\n };\n\n sse.onerror = error => {\n const errorEvent = error as Event & { message?: string };\n if (errorEvent.message?.includes(\"No activity within\")) {\n console.log(\"SSE reconnecting due to inactivity...\");\n return;\n }\n\n clearTimeout(timeoutId);\n sse.close();\n reject(new Error(`Error in SSE connection: ${error}`));\n };\n });\n }\n}\n\nexport interface PostOptions {\n idempotencyKey?: string;\n}\n","import Axios, { AxiosInstance, AxiosRequestConfig } from \"axios\";\nimport axiosRetry, { exponentialDelay } from \"axios-retry\";\n\nimport type { TokenProvider } from \"../chainstream.js\";\n\n/**\n * The options for the ChainStream API client.\n */\nexport type ChainStreamApiOptions = {\n /**\n * The access token for authentication.\n * Can be a string or a TokenProvider that dynamically provides tokens.\n */\n accessToken: string | TokenProvider;\n\n /** The base path for the API. Defaults to https://api-dex.chainstream.io */\n basePath?: string;\n\n /** If true, logs API requests and responses to the console. */\n debugging?: boolean;\n\n /** The source for the API request, used for analytics. */\n source?: string;\n\n /** The version of the source for the API request, used for analytics. */\n sourceVersion?: string;\n};\n\nlet axiosInstance: AxiosInstance;\nlet currentOptions: ChainStreamApiOptions | undefined = undefined;\n\n/**\n * Configures the ChainStream API client with the given options.\n *\n * @param {ChainStreamApiOptions} options - The ChainStream API options.\n */\nexport const configure = (options: ChainStreamApiOptions) => {\n const baseURL = options.basePath || \"https://api-dex.chainstream.io\";\n\n currentOptions = {\n ...options,\n basePath: baseURL,\n };\n\n axiosInstance = Axios.create({\n baseURL,\n });\n\n axiosRetry(axiosInstance, {\n retryDelay: exponentialDelay,\n });\n\n // Add request interceptor for authentication\n axiosInstance.interceptors.request.use(async config => {\n const token =\n typeof options.accessToken === \"string\"\n ? options.accessToken\n : await options.accessToken.getToken();\n\n config.headers.Authorization = `Bearer ${token}`;\n config.headers[\"Content-Type\"] = \"application/json\";\n\n if (options.source) {\n config.headers[\"X-Source\"] = options.source;\n }\n if (options.sourceVersion) {\n config.headers[\"X-Source-Version\"] = options.sourceVersion;\n }\n\n if (options.debugging) {\n console.log(`[ChainStream API] ${config.method?.toUpperCase()} ${config.url}`);\n }\n\n return config;\n });\n\n // Add response interceptor for debugging\n if (options.debugging) {\n axiosInstance.interceptors.response.use(\n response => {\n console.log(`[ChainStream API] Response:`, response.status, response.data);\n return response;\n },\n error => {\n console.error(`[ChainStream API] Error:`, error.response?.status, error.response?.data);\n return Promise.reject(error);\n },\n );\n }\n};\n\n/**\n * Adds an idempotency key to request config if provided\n *\n * @param config - The Axios request configuration.\n * @param idempotencyKey - The idempotency key.\n * @returns The Axios request configuration with the idempotency key.\n */\nconst addIdempotencyKey = (\n config: AxiosRequestConfig,\n idempotencyKey?: string,\n): AxiosRequestConfig => {\n if (!idempotencyKey) {\n return config;\n }\n\n return {\n ...config,\n headers: {\n ...(config.headers || {}),\n \"X-Idempotency-Key\": idempotencyKey,\n },\n };\n};\n\n/**\n * The ChainStream API client function that handles authentication and error handling.\n *\n * @param {AxiosRequestConfig} config - The Axios request configuration.\n * @param idempotencyKey - Optional idempotency key.\n * @returns {Promise<T>} A promise that resolves to the response data.\n * @throws {Error} If the request fails.\n */\nexport const chainstreamApiClient = async <T>(\n config: AxiosRequestConfig,\n idempotencyKey?: string,\n): Promise<T> => {\n if (!axiosInstance) {\n throw new Error(\"ChainStream API client not configured. Call configure() first.\");\n }\n\n if (!config.url || config.url === \"\") {\n throw new Error(\"AxiosRequestConfig URL is empty.\");\n }\n\n if (!config.method || config.method === \"\") {\n throw new Error(\"AxiosRequestConfig method is empty.\");\n }\n\n // Add idempotency key to the request headers if provided\n const configWithIdempotencyKey = addIdempotencyKey(config, idempotencyKey);\n\n try {\n const response = await axiosInstance(configWithIdempotencyKey);\n return response.data as T;\n } catch (error) {\n // eslint-disable-next-line import/no-named-as-default-member\n if (Axios.isAxiosError(error) && error.response) {\n const statusCode = error.response.status;\n const responseData = error.response.data;\n\n throw new Error(\n `ChainStream API error (${statusCode}): ${\n typeof responseData === \"string\" ? responseData : JSON.stringify(responseData)\n }`,\n );\n }\n\n throw error;\n }\n};\n\n/**\n * Get the current configuration\n */\nexport const getConfig = () => currentOptions;\n","import { Centrifuge, ConnectionTokenContext } from \"@chainstream-io/centrifuge\";\nimport { ChainStreamRequestContext } from \"../chainstream.js\";\nimport { Resolution } from \"../openapi-client/index.js\";\nimport {\n WsDexPoolBalance,\n WsNewToken,\n WsTokenMetadata,\n WsTokenHolder,\n WsTokenStat,\n WsTokenLiquidity,\n WsTokenMaxLiquidity,\n WsTokenTotalLiquidity,\n WsWalletBalance,\n WsTokenSupply,\n WsWalletPnl,\n WsChannelType,\n WsTokenCandle,\n WsTradeActivity,\n WsWalletTokenPnl,\n WsRankingType,\n WsDex,\n WsRankingTokenList,\n WsTokenBondingCurve,\n} from \"./stream.model.js\";\nimport { replaceFilterFields } from \"./stream.fields.js\";\n\nexport interface Unsubscribable {\n unsubscribe(): void;\n}\n\nexport class StreamApi {\n private realtimeClient!: Centrifuge;\n private listenersMap: Map<string, Set<(data: unknown) => void>>;\n private context: ChainStreamRequestContext;\n private initPromise: Promise<void> | null = null;\n\n constructor(context: ChainStreamRequestContext) {\n this.context = context;\n this.listenersMap = new Map();\n }\n\n /**\n * Initialize Centrifuge client with current token\n * This is called lazily when connect() is called\n */\n private async initClient(): Promise<void> {\n if (this.realtimeClient) {\n return;\n }\n\n // Get initial token for URL\n const token = await this.getTokenValue();\n const realtimeEndpoint = this.buildWsUrl(this.context.streamUrl, token);\n\n this.realtimeClient = new Centrifuge(realtimeEndpoint, {\n getToken: async (_ctx: ConnectionTokenContext) => {\n return this.getTokenValue();\n },\n });\n\n this.realtimeClient\n .on(\"connected\", () => {\n console.log(\"[streaming] connected\");\n })\n .on(\"disconnected\", ctx => {\n console.warn(\"[streaming] disconnected\", ctx);\n })\n .on(\"error\", err => {\n console.error(\"[streaming] error: \", err);\n });\n }\n\n /**\n * Wait for initialization to complete\n * If not initialized, auto-connect first\n */\n private async ensureInitialized(): Promise<void> {\n if (!this.initPromise) {\n // Auto-connect if not initialized\n this.connect();\n }\n await this.initPromise;\n }\n\n /**\n * Get token value from string or TokenProvider\n */\n private async getTokenValue(): Promise<string> {\n return typeof this.context.accessToken === \"string\"\n ? this.context.accessToken\n : await this.context.accessToken.getToken();\n }\n\n /**\n * Build WebSocket URL with token as query parameter\n */\n private buildWsUrl(endpoint: string, token: string): string {\n const url = new URL(endpoint);\n url.searchParams.set(\"token\", token);\n return url.toString();\n }\n\n /**\n * Connect to the WebSocket server.\n * This is automatically called when you use subscribe methods if not already connected.\n * You can also call this method manually for explicit control.\n */\n connect(): void {\n // Start initialization and store the promise\n this.initPromise = this.initClient().then(() => {\n this.realtimeClient.connect();\n });\n }\n\n /**\n * Disconnect from the WebSocket server.\n * All subscriptions will be automatically removed.\n */\n disconnect(): void {\n if (this.realtimeClient) {\n this.realtimeClient.disconnect();\n }\n }\n\n /**\n * Check if the WebSocket is currently connected.\n */\n isConnected(): boolean {\n return this.realtimeClient?.state === \"connected\";\n }\n\n /**\n * Start batching commands for efficient bulk operations\n * All subscription commands after this call will be batched until stopBatching is called\n */\n startBatching(): void {\n if (this.realtimeClient) {\n this.realtimeClient.startBatching();\n }\n }\n\n /**\n * Stop batching and flush all collected commands to the server\n * This will send all batched subscription commands in a single network request\n */\n stopBatching(): void {\n if (this.realtimeClient) {\n this.realtimeClient.stopBatching();\n }\n }\n\n /**\n * Batch subscribe method that accepts a function containing subscription calls\n * All subscription methods called within the function will be batched\n * @param batchFunction Function containing subscription method calls\n * @returns Array of unsubscribe functions\n */\n batchSubscribe(batchFunction: () => Unsubscribable[]): Unsubscribable[] {\n // Start batching commands\n this.startBatching();\n\n // Execute the batch function (all subscription calls will be batched)\n const unsubscribables = batchFunction();\n\n // Stop batching and flush all commands\n this.stopBatching();\n\n return unsubscribables;\n }\n\n /**\n * Batch unsubscribe method that accepts an array of unsubscribe functions\n * All unsubscribe calls will be executed at once\n * @param unsubscribables Array of unsubscribe functions to execute\n */\n batchUnsubscribe(unsubscribables: Unsubscribable[]): void {\n if (!unsubscribables || unsubscribables.length === 0) {\n return;\n }\n\n // Execute all unsubscribe calls\n unsubscribables.forEach(unsub => {\n if (unsub && typeof unsub.unsubscribe === \"function\") {\n unsub.unsubscribe();\n }\n });\n }\n\n subscribe<T = unknown>(\n channel: string,\n fn: (data: T) => void,\n filter?: string,\n methodName?: string,\n ): Unsubscribable {\n // Add listener immediately\n let listeners = this.listenersMap.get(channel);\n if (!listeners) {\n listeners = new Set();\n this.listenersMap.set(channel, listeners);\n }\n listeners.add(fn as (data: unknown) => void);\n\n // Perform subscription after initialization is complete\n this.ensureInitialized().then(() => {\n let sub = this.realtimeClient.getSubscription(channel);\n\n if (!sub) {\n console.log(\"[xrealtime] create new sub: \", channel);\n\n // Process filter expression with method-specific field mappings\n const processedFilter =\n filter && methodName ? replaceFilterFields(filter, methodName) : filter;\n\n sub = this.realtimeClient.newSubscription(channel, {\n delta: \"fossil\",\n ...(processedFilter && { filter: processedFilter }),\n });\n\n sub\n .on(\"subscribed\", () => {\n console.log(\"[xrealtime] subscribed\", channel);\n })\n .on(\"unsubscribed\", () => {\n console.log(\"[xrealtime] unsubscribed\", channel);\n })\n .on(\"publication\", ctx => {\n const currentListeners = this.listenersMap.get(channel);\n currentListeners?.forEach(it => it(ctx.data));\n })\n .subscribe();\n }\n });\n\n return new StreamUnsubscribable<T>(this, channel, fn);\n }\n\n unsubscribe<T = unknown>(channel: string, fn: (data: T) => void): void {\n const listeners = this.listenersMap.get(channel);\n if (!listeners) {\n return;\n }\n\n listeners.delete(fn as (data: unknown) => void);\n console.log(\"unsubscribe, remain listeners: \", listeners.size);\n\n if (listeners.size === 0) {\n console.log(\"unsubscribe channel: \", channel);\n this.listenersMap.delete(channel);\n\n // Remove subscription after initialization is complete\n this.ensureInitialized().then(() => {\n const sub = this.realtimeClient.getSubscription(channel);\n if (sub) {\n sub.unsubscribe();\n this.realtimeClient.removeSubscription(sub);\n }\n });\n }\n }\n\n private formatScientificNotation(value: unknown): string {\n if (value === null || value === undefined) {\n return \"0\";\n }\n\n const strValue = value.toString();\n if (strValue.includes(\"e-\") || strValue.includes(\"E-\")) {\n return Number(value)\n .toFixed(20)\n .replace(/\\.?0+$/, \"\");\n }\n\n return strValue;\n }\n\n subscribeTokenCandles({\n chain,\n tokenAddress,\n resolution,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n resolution: Resolution;\n callback: (data: WsTokenCandle) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-candle:${chain}_${tokenAddress}_${resolution}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) => {\n callback({\n open: data.o as string,\n close: data.c as string,\n high: data.h as string,\n low: data.l as string,\n volume: data.v as string,\n resolution: data.r as Resolution,\n time: data.t as number,\n number: data.n as number,\n });\n },\n filter,\n \"subscribeTokenCandles\",\n );\n }\n\n subscribeTokenStats({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenStat) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-stats:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n address: data.a as string,\n timestamp: data.t as number,\n buys1m: data.b1m as number,\n sells1m: data.s1m as number,\n buyers1m: data.be1m as number,\n sellers1m: data.se1m as number,\n buyVolumeInUsd1m: this.formatScientificNotation(data.bviu1m),\n sellVolumeInUsd1m: this.formatScientificNotation(data.sviu1m),\n price1m: this.formatScientificNotation(data.p1m),\n openInUsd1m: this.formatScientificNotation(data.oiu1m),\n closeInUsd1m: this.formatScientificNotation(data.ciu1m),\n\n buys5m: data.b5m as number,\n sells5m: data.s5m as number,\n buyers5m: data.be5m as number,\n sellers5m: data.se5m as number,\n buyVolumeInUsd5m: this.formatScientificNotation(data.bviu5m),\n sellVolumeInUsd5m: this.formatScientificNotation(data.sviu5m),\n price5m: this.formatScientificNotation(data.p5m),\n openInUsd5m: this.formatScientificNotation(data.oiu5m),\n closeInUsd5m: this.formatScientificNotation(data.ciu5m),\n\n buys15m: data.b15m as number,\n sells15m: data.s15m as number,\n buyers15m: data.be15m as number,\n sellers15m: data.se15m as number,\n buyVolumeInUsd15m: this.formatScientificNotation(data.bviu15m),\n sellVolumeInUsd15m: this.formatScientificNotation(data.sviu15m),\n price15m: this.formatScientificNotation(data.p15m),\n openInUsd15m: this.formatScientificNotation(data.oiu15m),\n closeInUsd15m: this.formatScientificNotation(data.ciu15m),\n\n buys30m: data.b30m as number,\n sells30m: data.s30m as number,\n buyers30m: data.be30m as number,\n sellers30m: data.se30m as number,\n buyVolumeInUsd30m: this.formatScientificNotation(data.bviu30m),\n sellVolumeInUsd30m: this.formatScientificNotation(data.sviu30m),\n price30m: this.formatScientificNotation(data.p30m),\n openInUsd30m: this.formatScientificNotation(data.oiu30m),\n closeInUsd30m: this.formatScientificNotation(data.ciu30m),\n\n buys1h: data.b1h as number,\n sells1h: data.s1h as number,\n buyers1h: data.be1h as number,\n sellers1h: data.se1h as number,\n buyVolumeInUsd1h: this.formatScientificNotation(data.bviu1h),\n sellVolumeInUsd1h: this.formatScientificNotation(data.sviu1h),\n price1h: this.formatScientificNotation(data.p1h),\n openInUsd1h: this.formatScientificNotation(data.oiu1h),\n closeInUsd1h: this.formatScientificNotation(data.ciu1h),\n\n buys4h: data.b4h as number,\n sells4h: data.s4h as number,\n buyers4h: data.be4h as number,\n sellers4h: data.se4h as number,\n buyVolumeInUsd4h: this.formatScientificNotation(data.bviu4h),\n sellVolumeInUsd4h: this.formatScientificNotation(data.sviu4h),\n price4h: this.formatScientificNotation(data.p4h),\n openInUsd4h: this.formatScientificNotation(data.oiu4h),\n closeInUsd4h: this.formatScientificNotation(data.ciu4h),\n\n buys24h: data.b24h as number,\n sells24h: data.s24h as number,\n buyers24h: data.be24h as number,\n sellers24h: data.se24h as number,\n buyVolumeInUsd24h: this.formatScientificNotation(data.bviu24h),\n sellVolumeInUsd24h: this.formatScientificNotation(data.sviu24h),\n price24h: this.formatScientificNotation(data.p24h),\n openInUsd24h: this.formatScientificNotation(data.oiu24h),\n closeInUsd24h: this.formatScientificNotation(data.ciu24h),\n\n price: this.formatScientificNotation(data.p),\n }),\n filter,\n \"subscribeTokenStats\",\n );\n }\n\n subscribeTokenHolders({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenHolder) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-holding:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n holders: data.h as number,\n top100HoldersAmount: this.formatScientificNotation(data.t100a),\n top50HoldersAmount: this.formatScientificNotation(data.t50a),\n top10HoldersAmount: this.formatScientificNotation(data.t10a),\n top100Holders: data.t100h as number,\n top50Holders: data.t50h as number,\n top10Holders: data.t10h as number,\n top100HoldersRatio: this.formatScientificNotation(data.t100r),\n top50HoldersRatio: this.formatScientificNotation(data.t50r),\n top10HoldersRatio: this.formatScientificNotation(data.t10r),\n creatorsHolders: data.ch as number,\n creatorsAmount: this.formatScientificNotation(data.ca),\n creatorsRatio: this.formatScientificNotation(data.cr),\n balanceTagFreshHolders: data.btfh as number,\n balanceTagFreshAmount: this.formatScientificNotation(data.btfa),\n balanceTagFreshRatio: this.formatScientificNotation(data.btfr),\n balanceTagSandwichHolders: data.btsh as number,\n balanceTagSandwichAmount: this.formatScientificNotation(data.btsa),\n balanceTagSandwichRatio: this.formatScientificNotation(data.btsr),\n balanceTagBundleHolders: data.btbh as number,\n balanceTagBundleAmount: this.formatScientificNotation(data.btba),\n balanceTagBundleRatio: this.formatScientificNotation(data.btbr),\n balanceTagSniperHolders: data.btsnh as number,\n balanceTagSniperAmount: this.formatScientificNotation(data.btsna),\n balanceTagSniperRatio: this.formatScientificNotation(data.btsnr),\n balanceTagDevHolders: data.btdh as number,\n balanceTagDevAmount: this.formatScientificNotation(data.btda),\n balanceTagDevRatio: this.formatScientificNotation(data.btdr),\n balanceTagProHolders: data.btph as number,\n balanceTagProAmount: this.formatScientificNotation(data.btpa),\n balanceTagProRatio: this.formatScientificNotation(data.btpr),\n balanceTagInsiderHolders: data.btih as number,\n balanceTagInsiderAmount: this.formatScientificNotation(data.btia),\n balanceTagInsiderRatio: this.formatScientificNotation(data.btir),\n balanceTagSmartHolders: data.btsmh as number,\n balanceTagSmartAmount: this.formatScientificNotation(data.btsma),\n balanceTagSmartRatio: this.formatScientificNotation(data.btsmr),\n balanceTagKolHolders: data.btkh as number,\n balanceTagKolAmount: this.formatScientificNotation(data.btka),\n balanceTagKolRatio: this.formatScientificNotation(data.btkr),\n balanceTagPhishingHolders: data.btphh as number,\n balanceTagPhishingAmount: this.formatScientificNotation(data.btpha),\n balanceTagPhishingRatio: this.formatScientificNotation(data.btphr),\n balanceTagBluechipHolders: data.btblh as number,\n balanceTagBluechipAmount: this.formatScientificNotation(data.btbla),\n balanceTagBluechipRatio: this.formatScientificNotation(data.btblr),\n balanceTagRatHolders: data.btrh as number,\n balanceTagRatAmount: this.formatScientificNotation(data.btra),\n balanceTagRatRatio: this.formatScientificNotation(data.btrr),\n timestamp: data.ts as number,\n }),\n filter,\n \"subscribeTokenHolders\",\n );\n }\n\n subscribeNewToken({\n chain,\n callback,\n filter,\n }: {\n chain: string;\n callback: (data: WsNewToken) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-new-token:${chain}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) => {\n const result: WsNewToken = {\n tokenAddress: data.a as string,\n name: data.n as string,\n symbol: data.s as string,\n createdAtMs: data.cts as number,\n };\n\n if (data.dec) {\n result.decimals = data.dec as number;\n }\n\n if (data.lf) {\n const lf = data.lf as Record<string, unknown>;\n result.launchFrom = {};\n if (lf.pa) {\n result.launchFrom.programAddress = lf.pa as string;\n }\n if (lf.pf) {\n result.launchFrom.protocolFamily = lf.pf as string;\n }\n if (lf.pn) {\n result.launchFrom.protocolName = lf.pn as string;\n }\n }\n\n callback(result);\n },\n filter,\n \"subscribeNewToken\",\n );\n }\n\n subscribeNewTokensMetadata({\n chain,\n callback,\n }: {\n chain: string;\n callback: (data: WsTokenMetadata[]) => void;\n }): Unsubscribable {\n const channel = `dex-new-tokens-metadata:${chain}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data.map(it => ({\n tokenAddress: it.a as string,\n name: it.n as string,\n symbol: it.s as string,\n imageUrl: it.iu as string,\n description: it.de as string,\n socialMedia: (() => {\n const sm = it.sm as Record<string, unknown> | undefined;\n if (!sm) return undefined;\n return {\n twitter: sm.tw as string | undefined,\n telegram: sm.tg as string | undefined,\n website: sm.w as string | undefined,\n tiktok: sm.tt as string | undefined,\n discord: sm.dc as string | undefined,\n facebook: sm.fb as string | undefined,\n github: sm.gh as string | undefined,\n instagram: sm.ig as string | undefined,\n linkedin: sm.li as string | undefined,\n medium: sm.md as string | undefined,\n reddit: sm.rd as string | undefined,\n youtube: sm.yt as string | undefined,\n bitbucket: sm.bb as string | undefined,\n };\n })(),\n createdAtMs: it.cts as number,\n })),\n ),\n );\n }\n\n subscribeTokenSupply({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenSupply) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-supply:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n supply: data.s as string,\n marketCapInUsd: data.mc as string,\n timestamp: data.ts as number,\n }),\n filter,\n \"subscribeTokenSupply\",\n );\n }\n\n subscribeTokenLiquidity({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenLiquidity) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-general-stat-num:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n metricType: data.t as WsTokenLiquidity[\"metricType\"],\n value: data.v as string,\n timestamp: data.ts as number,\n }),\n filter,\n \"subscribeTokenLiquidity\",\n );\n }\n\n /**\n * Subscribe to token max liquidity updates\n * Pushes the max liquidity info of a token in a single pool\n * Channel: dex-token-liquidity:{chain}_{token_address}\n */\n subscribeTokenMaxLiquidity({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenMaxLiquidity) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-liquidity:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n poolAddress: data.p as string,\n liquidityInUsd: data.liu as string,\n liquidityInNative: data.lin as string,\n timestamp: data.ts as number,\n }),\n filter,\n \"subscribeTokenMaxLiquidity\",\n );\n }\n\n /**\n * Subscribe to token total liquidity updates\n * Pushes the total liquidity info of a token across all pools\n * Channel: dex-token-total-liquidity:{chain}_{token_address}\n */\n subscribeTokenTotalLiquidity({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenTotalLiquidity) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-total-liquidity:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n liquidityInUsd: data.liu as string,\n liquidityInNative: data.lin as string,\n poolCount: data.pc as number,\n timestamp: data.ts as number,\n }),\n filter,\n \"subscribeTokenTotalLiquidity\",\n );\n }\n\n subscribeRankingTokensLiquidity({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: WsChannelType;\n callback: (data: WsTokenLiquidity[]) => void;\n }): Unsubscribable {\n const channel = `dex-ranking-token-general_stat_num-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(it => ({\n tokenAddress: it.a as string,\n metricType: it.t as WsTokenLiquidity[\"metricType\"],\n value: it.v as string,\n timestamp: it.ts as number,\n })),\n ),\n );\n }\n\n subscribeRankingTokensList({\n chain,\n ranking_type,\n dex,\n callback,\n }: {\n chain: string;\n ranking_type: WsRankingType;\n dex?: WsDex;\n callback: (data: WsRankingTokenList[]) => void;\n }): Unsubscribable {\n const channel = dex\n ? `dex-ranking-list:${chain}_${ranking_type}_${dex}`\n : `dex-ranking-list:${chain}_${ranking_type}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(item => {\n const result: WsRankingTokenList = {};\n const t = item.t as Record<string, unknown> | undefined;\n const bc = item.bc as Record<string, unknown> | undefined;\n const h = item.h as Record<string, unknown> | undefined;\n const s = item.s as Record<string, unknown> | undefined;\n const ts = item.ts as Record<string, unknown> | undefined;\n\n // TokenMetadata (t)\n if (t) {\n result.metadata = {\n tokenAddress: t.a as string,\n };\n if (t.n) {\n result.metadata.name = t.n as string;\n }\n if (t.s) {\n result.metadata.symbol = t.s as string;\n }\n if (t.iu) {\n result.metadata.imageUrl = t.iu as string;\n }\n if (t.de) {\n result.metadata.description = t.de as string;\n }\n if (t.dec) {\n result.metadata.decimals = t.dec as number;\n }\n if (t.cts) {\n result.metadata.createdAtMs = t.cts as number;\n }\n if (t.lf) {\n const lf = t.lf as Record<string, unknown>;\n result.metadata.launchFrom = {};\n if (lf.pa) {\n result.metadata.launchFrom.programAddress = lf.pa as string;\n }\n if (lf.pf) {\n result.metadata.launchFrom.protocolFamily = lf.pf as string;\n }\n if (lf.pn) {\n result.metadata.launchFrom.protocolName = lf.pn as string;\n }\n }\n if (t.mt) {\n const mt = t.mt as Record<string, unknown>;\n result.metadata.migratedTo = {};\n if (mt.pa) {\n result.metadata.migratedTo.programAddress = mt.pa as string;\n }\n if (mt.pf) {\n result.metadata.migratedTo.protocolFamily = mt.pf as string;\n }\n if (mt.pn) {\n result.metadata.migratedTo.protocolName = mt.pn as string;\n }\n }\n if (t.sm) {\n const sm = t.sm as Record<string, unknown>;\n result.metadata.socialMedia = {};\n if (sm.tw) {\n result.metadata.socialMedia.twitter = sm.tw as string;\n }\n if (sm.tg) {\n result.metadata.socialMedia.telegram = sm.tg as string;\n }\n if (sm.w) {\n result.metadata.socialMedia.website = sm.w as string;\n }\n if (sm.tt) {\n result.metadata.socialMedia.tiktok = sm.tt as string;\n }\n if (sm.dc) {\n result.metadata.socialMedia.discord = sm.dc as string;\n }\n if (sm.fb) {\n result.metadata.socialMedia.facebook = sm.fb as string;\n }\n if (sm.gh) {\n result.metadata.socialMedia.github = sm.gh as string;\n }\n if (sm.ig) {\n result.metadata.socialMedia.instagram = sm.ig as string;\n }\n if (sm.li) {\n result.metadata.socialMedia.linkedin = sm.li as string;\n }\n if (sm.md) {\n result.metadata.socialMedia.medium = sm.md as string;\n }\n if (sm.rd) {\n result.metadata.socialMedia.reddit = sm.rd as string;\n }\n if (sm.yt) {\n result.metadata.socialMedia.youtube = sm.yt as string;\n }\n if (sm.bb) {\n result.metadata.socialMedia.bitbucket = sm.bb as string;\n }\n }\n }\n\n // WsTokenBondingCurve (bc)\n if (bc) {\n result.bondingCurve = {};\n if (bc.pr) {\n result.bondingCurve.progressRatio = this.formatScientificNotation(bc.pr);\n }\n }\n\n // TokenHolder (h)\n if (h) {\n result.holder = {\n tokenAddress: h.a as string,\n timestamp: (h.ts as number) || 0,\n };\n if (h.h) {\n result.holder.holders = h.h as number;\n }\n if (h.t100a) {\n result.holder.top100HoldersAmount = this.formatScientificNotation(h.t100a);\n }\n if (h.t50a) {\n result.holder.top50HoldersAmount = this.formatScientificNotation(h.t50a);\n }\n if (h.t10a) {\n result.holder.top10HoldersAmount = this.formatScientificNotation(h.t10a);\n }\n if (h.t100h) {\n result.holder.top100Holders = h.t100h as number;\n }\n if (h.t50h) {\n result.holder.top50Holders = h.t50h as number;\n }\n if (h.t10h) {\n result.holder.top10Holders = h.t10h as number;\n }\n if (h.t100r) {\n result.holder.top100HoldersRatio = this.formatScientificNotation(h.t100r);\n }\n if (h.t50r) {\n result.holder.top50HoldersRatio = this.formatScientificNotation(h.t50r);\n }\n if (h.t10r) {\n result.holder.top10HoldersRatio = this.formatScientificNotation(h.t10r);\n }\n }\n\n // WsTokenSupply (s)\n if (s) {\n result.supply = {\n tokenAddress: s.a as string,\n timestamp: (s.ts as number) || 0,\n };\n if (s.s) {\n result.supply.supply = s.s as string;\n }\n if (s.mc) {\n result.supply.marketCapInUsd = s.mc as string;\n }\n }\n\n // TokenStat (ts)\n if (ts) {\n result.stat = {\n address: ts.a as string,\n timestamp: (ts.t as number) || 0,\n };\n\n // 1m data\n if (ts.b1m) {\n result.stat.buys1m = ts.b1m as number;\n }\n if (ts.s1m) {\n result.stat.sells1m = ts.s1m as number;\n }\n if (ts.be1m) {\n result.stat.buyers1m = ts.be1m as number;\n }\n if (ts.se1m) {\n result.stat.sellers1m = ts.se1m as number;\n }\n if (ts.bviu1m) {\n result.stat.buyVolumeInUsd1m = this.formatScientificNotation(ts.bviu1m);\n }\n if (ts.sviu1m) {\n result.stat.sellVolumeInUsd1m = this.formatScientificNotation(ts.sviu1m);\n }\n if (ts.p1m) {\n result.stat.price1m = this.formatScientificNotation(ts.p1m);\n }\n\n // Current price\n if (ts.p) {\n result.stat.price = this.formatScientificNotation(ts.p);\n }\n }\n\n return result;\n }),\n ),\n );\n }\n\n subscribeRankingTokensStats({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: WsChannelType;\n callback: (data: WsTokenStat[]) => void;\n }): Unsubscribable {\n const channel = `dex-ranking-token-stats-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(\n it =>\n ({\n address: it.a,\n timestamp: it.t,\n buys1m: it.b1m,\n sells1m: it.s1m,\n buyers1m: it.be1m,\n sellers1m: it.se1m,\n buyVolumeInUsd1m: this.formatScientificNotation(it.bviu1m),\n sellVolumeInUsd1m: this.formatScientificNotation(it.sviu1m),\n price1m: this.formatScientificNotation(it.p1m),\n openInUsd1m: this.formatScientificNotation(it.oiu1m),\n closeInUsd1m: this.formatScientificNotation(it.ciu1m),\n buys5m: it.b5m,\n sells5m: it.s5m,\n buyers5m: it.be5m,\n sellers5m: it.se5m,\n buyVolumeInUsd5m: this.formatScientificNotation(it.bviu5m),\n sellVolumeInUsd5m: this.formatScientificNotation(it.sviu5m),\n price5m: this.formatScientificNotation(it.p5m),\n openInUsd5m: this.formatScientificNotation(it.oiu5m),\n closeInUsd5m: this.formatScientificNotation(it.ciu5m),\n price: this.formatScientificNotation(it.p),\n }) as WsTokenStat,\n ),\n ),\n );\n }\n\n subscribeRankingTokensHolders({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: WsChannelType;\n callback: (data: WsTokenHolder[]) => void;\n }): Unsubscribable {\n const channel = `dex-ranking-token-holding-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(\n it =>\n ({\n tokenAddress: it.a,\n holders: it.h,\n top100HoldersAmount: this.formatScientificNotation(it.t100a),\n top50HoldersAmount: this.formatScientificNotation(it.t50a),\n top10HoldersAmount: this.formatScientificNotation(it.t10a),\n top100Holders: it.t100h,\n top50Holders: it.t50h,\n top10Holders: it.t10h,\n top100HoldersRatio: this.formatScientificNotation(it.t100r),\n top50HoldersRatio: this.formatScientificNotation(it.t50r),\n top10HoldersRatio: this.formatScientificNotation(it.t10r),\n timestamp: it.ts,\n }) as WsTokenHolder,\n ),\n ),\n );\n }\n\n subscribeRankingTokensSupply({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: WsChannelType;\n callback: (data: WsTokenSupply[]) => void;\n }): Unsubscribable {\n const channel = `dex-ranking-token-supply-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(it => ({\n tokenAddress: it.a as string,\n supply: it.s as string,\n marketCapInUsd: it.mc as string,\n timestamp: it.ts as number,\n })),\n ),\n );\n }\n\n subscribeRankingTokensBondingCurve({\n chain,\n callback,\n }: {\n chain: string;\n callback: (data: WsTokenBondingCurve[]) => void;\n }): Unsubscribable {\n const channel = `dex-ranking-token-bounding-curve-list:${chain}_new`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(it => ({\n tokenAddress: it.a as string,\n progressRatio: it.pr as string,\n })),\n ),\n );\n }\n\n subscribeWalletBalance({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WsWalletBalance[]) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-wallet-balance:${chain}_${walletAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback([\n {\n walletAddress: data.a as string,\n tokenAddress: data.ta as string,\n tokenPriceInUsd: data.tpiu as string,\n balance: data.b as string,\n timestamp: data.t as number,\n },\n ]),\n filter,\n \"subscribeWalletBalance\",\n );\n }\n\n subscribeWalletPnl({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WsWalletTokenPnl) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-wallet-token-pnl:${chain}_${walletAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n walletAddress: data.a as string,\n tokenAddress: data.ta as string,\n tokenPriceInUsd: data.tpiu as string,\n timestamp: data.t as number,\n opentime: data.ot as number,\n lasttime: data.lt as number,\n closetime: data.ct as number,\n buyAmount: data.ba as string,\n buyAmountInUsd: data.baiu as string,\n buyCount: data.bs as number,\n buyCount30d: data.bs30d as number,\n buyCount7d: data.bs7d as number,\n sellAmount: data.sa as string,\n sellAmountInUsd: data.saiu as string,\n sellCount: data.ss as number,\n sellCount30d: data.ss30d as number,\n sellCount7d: data.ss7d as number,\n heldDurationTimestamp: data.hdts as number,\n averageBuyPriceInUsd: data.abpiu as string,\n averageSellPriceInUsd: data.aspiu as string,\n unrealizedProfitInUsd: data.upiu as string,\n unrealizedProfitRatio: data.upr as string,\n realizedProfitInUsd: data.rpiu as string,\n realizedProfitRatio: data.rpr as string,\n totalRealizedProfitInUsd: data.trpiu as string,\n totalRealizedProfitRatio: data.trr as string,\n }),\n filter,\n \"subscribeWalletPnl\",\n );\n }\n\n subscribeWalletPnlList({\n chain,\n walletAddress,\n callback,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WsWalletPnl[]) => void;\n }): Unsubscribable {\n const channel = `dex-wallet-pnl-list:${chain}_${walletAddress}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(\n it =>\n ({\n walletAddress: it.a,\n buys: it.bs,\n buyAmount: it.ba,\n buyAmountInUsd: it.baiu,\n averageBuyPriceInUsd: it.abpiu,\n sellAmount: it.sa,\n sellAmountInUsd: it.saiu,\n sells: it.ss,\n wins: it.ws,\n winRatio: it.wr,\n pnlInUsd: it.piu,\n averagePnlInUsd: it.apiu,\n pnlRatio: it.pr,\n profitableDays: it.pd,\n losingDays: it.ld,\n tokens: it.ts,\n resolution: it.r,\n }) as WsWalletPnl,\n ),\n ),\n );\n }\n\n subscribeTokenTrade({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTradeActivity) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-trade:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n timestamp: data.t as number,\n kind: data.k as string,\n buyAmount: data.ba as string,\n buyAmountInUsd: data.baiu as string,\n buyTokenAddress: data.btma as string,\n buyTokenName: data.btn as string,\n buyTokenSymbol: data.bts as string,\n buyWalletAddress: data.bwa as string,\n sellAmount: data.sa as string,\n sellAmountInUsd: data.saiu as string,\n sellTokenAddress: data.stma as string,\n sellTokenName: data.stn as string,\n sellTokenSymbol: data.sts as string,\n sellWalletAddress: data.swa as string,\n txHash: data.h as string,\n }),\n filter,\n \"subscribeTokenTrades\",\n );\n }\n\n subscribeWalletTrade({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WsTradeActivity) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-wallet-trade:${chain}_${walletAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n timestamp: data.t as number,\n kind: data.k as string,\n buyAmount: data.ba as string,\n buyAmountInUsd: data.baiu as string,\n buyTokenAddress: data.btma as string,\n buyTokenName: data.btn as string,\n buyTokenSymbol: data.bts as string,\n buyWalletAddress: data.bwa as string,\n sellAmount: data.sa as string,\n sellAmountInUsd: data.saiu as string,\n sellTokenAddress: data.stma as string,\n sellTokenName: data.stn as string,\n sellTokenSymbol: data.sts as string,\n sellWalletAddress: data.swa as string,\n txHash: data.h as string,\n }),\n filter,\n \"subscribeTokenTrades\",\n );\n }\n\n subscribeDexPoolBalance({\n chain,\n poolAddress,\n callback,\n }: {\n chain: string;\n poolAddress: string;\n callback: (data: WsDexPoolBalance) => void;\n }): Unsubscribable {\n const channel = `dex-pool-balance:${chain}_${poolAddress}`;\n return this.subscribe(channel, (data: Record<string, unknown>) =>\n callback({\n poolAddress: data.a as string,\n tokenAAddress: data.taa as string,\n tokenALiquidityInUsd: data.taliu as string,\n tokenBAddress: data.tba as string,\n tokenBLiquidityInUsd: data.tbliu as string,\n }),\n );\n }\n}\n\nclass StreamUnsubscribable<T> {\n constructor(\n private readonly streamApi: StreamApi,\n private readonly channel: string,\n private readonly fn: (data: T) => void,\n ) {}\n\n unsubscribe(): void {\n this.streamApi.unsubscribe(this.channel, this.fn);\n }\n}\n","/**\n * Field mappings for CEL filter expressions\n * Maps human-readable field names to short field names used in the API\n * Organized by subscription method to handle field name conflicts\n */\n\nexport interface FieldMapping {\n readonly [key: string]: string;\n}\n\nexport interface MethodFieldMappings {\n readonly [methodName: string]: FieldMapping;\n}\n\n/**\n * Field mappings organized by subscription method\n * Each method can have its own field mappings to handle conflicts\n */\nexport const CEL_FIELD_MAPPINGS: MethodFieldMappings = {\n // Wallet balance subscription fields\n subscribeWalletBalance: {\n walletAddress: \"a\",\n tokenAddress: \"ta\",\n tokenPriceInUsd: \"tpiu\",\n balance: \"b\",\n timestamp: \"t\",\n },\n\n // Token candles subscription fields\n subscribeTokenCandles: {\n open: \"o\",\n close: \"c\",\n high: \"h\",\n low: \"l\",\n volume: \"v\",\n resolution: \"r\",\n time: \"t\",\n number: \"n\",\n },\n\n // Token stats subscription fields\n subscribeTokenStats: {\n address: \"a\",\n timestamp: \"t\",\n buys1m: \"b1m\",\n sells1m: \"s1m\",\n buyers1m: \"be1m\",\n sellers1m: \"se1m\",\n buyVolumeInUsd1m: \"bviu1m\",\n sellVolumeInUsd1m: \"sviu1m\",\n price1m: \"p1m\",\n openInUsd1m: \"oiu1m\",\n closeInUsd1m: \"ciu1m\",\n buys5m: \"b5m\",\n sells5m: \"s5m\",\n buyers5m: \"be5m\",\n sellers5m: \"se5m\",\n buyVolumeInUsd5m: \"bviu5m\",\n sellVolumeInUsd5m: \"sviu5m\",\n price5m: \"p5m\",\n openInUsd5m: \"oiu5m\",\n closeInUsd5m: \"ciu5m\",\n buys15m: \"b15m\",\n sells15m: \"s15m\",\n buyers15m: \"be15m\",\n sellers15m: \"se15m\",\n buyVolumeInUsd15m: \"bviu15m\",\n sellVolumeInUsd15m: \"sviu15m\",\n price15m: \"p15m\",\n openInUsd15m: \"oiu15m\",\n closeInUsd15m: \"ciu15m\",\n buys30m: \"b30m\",\n sells30m: \"s30m\",\n buyers30m: \"be30m\",\n sellers30m: \"se30m\",\n buyVolumeInUsd30m: \"bviu30m\",\n sellVolumeInUsd30m: \"sviu30m\",\n price30m: \"p30m\",\n openInUsd30m: \"oiu30m\",\n closeInUsd30m: \"ciu30m\",\n buys1h: \"b1h\",\n sells1h: \"s1h\",\n buyers1h: \"be1h\",\n sellers1h: \"se1h\",\n buyVolumeInUsd1h: \"bviu1h\",\n sellVolumeInUsd1h: \"sviu1h\",\n price1h: \"p1h\",\n openInUsd1h: \"oiu1h\",\n closeInUsd1h: \"ciu1h\",\n buys4h: \"b4h\",\n sells4h: \"s4h\",\n buyers4h: \"be4h\",\n sellers4h: \"se4h\",\n buyVolumeInUsd4h: \"bviu4h\",\n sellVolumeInUsd4h: \"sviu4h\",\n price4h: \"p4h\",\n openInUsd4h: \"oiu4h\",\n closeInUsd4h: \"ciu4h\",\n buys24h: \"b24h\",\n sells24h: \"s24h\",\n buyers24h: \"be24h\",\n sellers24h: \"se24h\",\n buyVolumeInUsd24h: \"bviu24h\",\n sellVolumeInUsd24h: \"sviu24h\",\n price24h: \"p24h\",\n price: \"p\",\n openInUsd24h: \"oiu24h\",\n closeInUsd24h: \"ciu24h\",\n },\n\n // Token holder subscription fields\n subscribeTokenHolders: {\n tokenAddress: \"a\",\n holders: \"h\",\n top100HoldersAmount: \"t100a\",\n top50HoldersAmount: \"t50a\",\n top10HoldersAmount: \"t10a\",\n top100Holders: \"t100h\",\n top50Holders: \"t50h\",\n top10Holders: \"t10h\",\n top100HoldersRatio: \"t100r\",\n top50HoldersRatio: \"t50r\",\n top10HoldersRatio: \"t10r\",\n creatorsHolders: \"ch\",\n creatorsAmount: \"ca\",\n creatorsRatio: \"cr\",\n balanceTagFreshHolders: \"btfh\",\n balanceTagFreshAmount: \"btfa\",\n balanceTagFreshRatio: \"btfr\",\n balanceTagSandwichHolders: \"btsh\",\n balanceTagSandwichAmount: \"btsa\",\n balanceTagSandwichRatio: \"btsr\",\n balanceTagBundleHolders: \"btbh\",\n balanceTagBundleAmount: \"btba\",\n balanceTagBundleRatio: \"btbr\",\n balanceTagSniperHolders: \"btsnh\",\n balanceTagSniperAmount: \"btsna\",\n balanceTagSniperRatio: \"btsnr\",\n balanceTagDevHolders: \"btdh\",\n balanceTagDevAmount: \"btda\",\n balanceTagDevRatio: \"btdr\",\n balanceTagProHolders: \"btph\",\n balanceTagProAmount: \"btpa\",\n balanceTagProRatio: \"btpr\",\n balanceTagInsiderHolders: \"btih\",\n balanceTagInsiderAmount: \"btia\",\n balanceTagInsiderRatio: \"btir\",\n balanceTagSmartHolders: \"btsmh\",\n balanceTagSmartAmount: \"btsma\",\n balanceTagSmartRatio: \"btsmr\",\n balanceTagKolHolders: \"btkh\",\n balanceTagKolAmount: \"btka\",\n balanceTagKolRatio: \"btkr\",\n balanceTagPhishingHolders: \"btphh\",\n balanceTagPhishingAmount: \"btpha\",\n balanceTagPhishingRatio: \"btphr\",\n balanceTagBluechipHolders: \"btblh\",\n balanceTagBluechipAmount: \"btbla\",\n balanceTagBluechipRatio: \"btblr\",\n balanceTagRatHolders: \"btrh\",\n balanceTagRatAmount: \"btra\",\n balanceTagRatRatio: \"btrr\",\n timestamp: \"ts\",\n },\n\n // New token subscription fields\n subscribeNewToken: {\n tokenAddress: \"a\",\n name: \"n\",\n symbol: \"s\",\n createdAtMs: \"cts\",\n },\n\n // Token supply subscription fields\n subscribeTokenSupply: {\n tokenAddress: \"a\",\n supply: \"s\",\n timestamp: \"ts\",\n },\n\n // Dex pool balance subscription fields\n subscribeDexPoolBalance: {\n poolAddress: \"a\",\n tokenAAddress: \"taa\",\n tokenALiquidityInUsd: \"taliu\",\n tokenBAddress: \"tba\",\n tokenBLiquidityInUsd: \"tbliu\",\n },\n\n // Token liquidity subscription fields\n subscribeTokenLiquidity: {\n tokenAddress: \"a\",\n metricType: \"t\",\n value: \"v\",\n timestamp: \"ts\",\n },\n\n // New token metadata subscription fields\n subscribeNewTokensMetadata: {\n tokenAddress: \"a\",\n name: \"n\",\n symbol: \"s\",\n imageUrl: \"iu\",\n description: \"de\",\n socialMedia: \"sm\",\n createdAtMs: \"cts\",\n },\n\n // Token trades subscription fields\n subscribeTokenTrades: {\n tokenAddress: \"a\",\n timestamp: \"t\",\n kind: \"k\",\n buyAmount: \"ba\",\n buyAmountInUsd: \"baiu\",\n buyTokenAddress: \"btma\",\n buyTokenName: \"btn\",\n buyTokenSymbol: \"bts\",\n buyWalletAddress: \"bwa\",\n sellAmount: \"sa\",\n sellAmountInUsd: \"saiu\",\n sellTokenAddress: \"stma\",\n sellTokenName: \"stn\",\n sellTokenSymbol: \"sts\",\n sellWalletAddress: \"swa\",\n txHash: \"h\",\n },\n\n // Wallet token PnL subscription fields\n subscribeWalletPnl: {\n walletAddress: \"a\",\n tokenAddress: \"ta\",\n tokenPriceInUsd: \"tpiu\",\n timestamp: \"t\",\n opentime: \"ot\",\n lasttime: \"lt\",\n closetime: \"ct\",\n buyAmount: \"ba\",\n buyAmountInUsd: \"baiu\",\n buyCount: \"bs\",\n buyCount30d: \"bs30d\",\n buyCount7d: \"bs7d\",\n sellAmount: \"sa\",\n sellAmountInUsd: \"saiu\",\n sellCount: \"ss\",\n sellCount30d: \"ss30d\",\n sellCount7d: \"ss7d\",\n heldDurationTimestamp: \"hdts\",\n averageBuyPriceInUsd: \"abpiu\",\n averageSellPriceInUsd: \"aspiu\",\n unrealizedProfitInUsd: \"upiu\",\n unrealizedProfitRatio: \"upr\",\n realizedProfitInUsd: \"rpiu\",\n realizedProfitRatio: \"rpr\",\n totalRealizedProfitInUsd: \"trpiu\",\n totalRealizedProfitRatio: \"trr\",\n },\n\n // Token max liquidity subscription fields\n subscribeTokenMaxLiquidity: {\n tokenAddress: \"a\",\n poolAddress: \"p\",\n liquidityInUsd: \"liu\",\n liquidityInNative: \"lin\",\n timestamp: \"ts\",\n },\n\n // Token total liquidity subscription fields\n subscribeTokenTotalLiquidity: {\n tokenAddress: \"a\",\n liquidityInUsd: \"liu\",\n liquidityInNative: \"lin\",\n poolCount: \"pc\",\n timestamp: \"ts\",\n },\n} as const;\n\n/**\n * Get field mappings for a specific subscription method\n * @param methodName - The name of the subscription method\n * @returns Field mapping object for the method, or empty object if not found\n */\nexport function getFieldMappings(methodName: string): FieldMapping {\n return CEL_FIELD_MAPPINGS[methodName] || {};\n}\n\n/**\n * Replace long field names with short field names in a filter expression\n * Automatically adds meta. prefix if not present\n * @param filter - Original filter expression\n * @param methodName - The name of the subscription method\n * @returns Filter expression with short field names and meta. prefix\n */\nexport function replaceFilterFields(filter: string, methodName: string): string {\n if (!filter) {\n return filter;\n }\n\n const fieldMappings = getFieldMappings(methodName);\n let result = filter;\n\n // Replace all long field names with short field names\n for (const [longField, shortField] of Object.entries(fieldMappings)) {\n // Handle both cases: with and without meta. prefix\n const patterns = [\n // Pattern 1: fieldName (without meta. prefix)\n new RegExp(`\\\\b${longField}\\\\b`, \"g\"),\n // Pattern 2: meta.fieldName (with meta. prefix)\n new RegExp(`\\\\bmeta\\\\.${longField}\\\\b`, \"g\"),\n ];\n\n patterns.forEach(pattern => {\n result = result.replace(pattern, `meta.${shortField}`);\n });\n }\n\n return result;\n}\n\n/**\n * Type-safe field mapping for specific subscription methods\n */\nexport type SubscriptionMethod = keyof typeof CEL_FIELD_MAPPINGS;\n\n/**\n * Get available field names for a specific subscription method\n * @param methodName - The name of the subscription method\n * @returns Array of available field names\n */\nexport function getAvailableFields(methodName: string): string[] {\n const mappings = getFieldMappings(methodName);\n return Object.keys(mappings);\n}\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n BlockchainDTO,\n BlockchainLatestBlockDTO,\n ChainSymbol,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.GET_SUPPORTED_BLOCKCHAINS.DESCRIPTION\n * @summary CONTROLLER.GET_SUPPORTED_BLOCKCHAINS.SUMMARY\n */\nexport const getSupportedBlockchains = (options?: SecondParameter<typeof chainstreamApiClient>) => {\n return chainstreamApiClient<BlockchainDTO[]>({ url: `/v1/blockchain`, method: \"GET\" }, options);\n};\n/**\n * CONTROLLER.GET_LATEST_BLOCK.DESCRIPTION\n * @summary CONTROLLER.GET_LATEST_BLOCK.SUMMARY\n */\nexport const getLatestBlock = (\n chain: ChainSymbol,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<BlockchainLatestBlockDTO>(\n { url: `/v1/blockchain/${chain}/latest_block`, method: \"GET\" },\n options,\n );\n};\nexport type GetSupportedBlockchainsResult = NonNullable<\n Awaited<ReturnType<typeof getSupportedBlockchains>>\n>;\nexport type GetLatestBlockResult = NonNullable<Awaited<ReturnType<typeof getLatestBlock>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n MoonshotCreateTokenInput,\n MoonshotCreateTokenReply,\n MoonshotSubmitCreateToken200,\n MoonshotSubmitCreateTokenInput,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.MOONSHOT.CREATE_TOKEN.DESCRIPTION\n * @summary CONTROLLER.MOONSHOT.CREATE_TOKEN.SUMMARY\n */\nexport const moonshotCreateToken = (\n moonshotCreateTokenInput: MoonshotCreateTokenInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<MoonshotCreateTokenReply>(\n {\n url: `/v1/sol/moonshot/create`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: moonshotCreateTokenInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.MOONSHOT.SUBMIT_CREATE_TOKEN.DESCRIPTION\n * @summary CONTROLLER.MOONSHOT.SUBMIT_CREATE_TOKEN.SUMMARY\n */\nexport const moonshotSubmitCreateToken = (\n moonshotSubmitCreateTokenInput: MoonshotSubmitCreateTokenInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<MoonshotSubmitCreateToken200>(\n {\n url: `/v1/sol/moonshot/submitCreateToken`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: moonshotSubmitCreateTokenInput,\n },\n options,\n );\n};\nexport type MoonshotCreateTokenResult = NonNullable<\n Awaited<ReturnType<typeof moonshotCreateToken>>\n>;\nexport type MoonshotSubmitCreateTokenResult = NonNullable<\n Awaited<ReturnType<typeof moonshotSubmitCreateToken>>\n>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type { PumpCreateTokenInput, PumpCreateTokenReply } from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.PUMPFUN.CREATE_TOKEN.DESCRIPTION\n * @summary CONTROLLER.PUMPFUN.CREATE_TOKEN.SUMMARY\n */\nexport const pumpfunCreateToken = (\n pumpCreateTokenInput: PumpCreateTokenInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<PumpCreateTokenReply>(\n {\n url: `/v1/sol/pumpfun/create`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: pumpCreateTokenInput,\n },\n options,\n );\n};\nexport type PumpfunCreateTokenResult = NonNullable<Awaited<ReturnType<typeof pumpfunCreateToken>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n ChainSymbol,\n DexPoolDTO,\n DexPoolSnapshotPage,\n GetDexpoolSnapshotsParams,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.DEXPOOL.GET.DESCRIPTION\n * @summary CONTROLLER.DEXPOOL.GET.SUMMARY\n */\nexport const getDexpool = (\n chain: ChainSymbol,\n poolAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DexPoolDTO>(\n { url: `/v1/dexpools/${chain}/${poolAddress}`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.DEXPOOL.SNAPSHOTS.DESCRIPTION\n * @summary CONTROLLER.DEXPOOL.SNAPSHOTS.SUMMARY\n */\nexport const getDexpoolSnapshots = (\n chain: ChainSymbol,\n poolAddress: string,\n params?: GetDexpoolSnapshotsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DexPoolSnapshotPage>(\n { url: `/v1/dexpools/${chain}/${poolAddress}/snapshots`, method: \"GET\", params },\n options,\n );\n};\nexport type GetDexpoolResult = NonNullable<Awaited<ReturnType<typeof getDexpool>>>;\nexport type GetDexpoolSnapshotsResult = NonNullable<\n Awaited<ReturnType<typeof getDexpoolSnapshots>>\n>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n ChainSymbol,\n CreateTokenInput,\n CreateTokenReply,\n DexPage,\n DexQuoteResponse,\n ListDexParams,\n QuoteParams,\n SwapInput,\n SwapReply,\n SwapRouteInput,\n SwapRouteResponse,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.DEX.SWAP.DESCRIPTION\n * @summary CONTROLLER.DEX.SWAP.SUMMARY\n */\nexport const swap = (\n chain: ChainSymbol,\n swapInput: SwapInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<SwapReply>(\n {\n url: `/v1/dex/${chain}/swap`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: swapInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.DEX.ROUTE.DESCRIPTION\n * @summary CONTROLLER.DEX.ROUTE.SUMMARY\n */\nexport const route = (\n chain: ChainSymbol,\n swapRouteInput: SwapRouteInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<SwapRouteResponse>(\n {\n url: `/v1/dex/${chain}/route`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: swapRouteInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.DEX.QUOTE.DESCRIPTION\n * @summary CONTROLLER.DEX.QUOTE.SUMMARY\n */\nexport const quote = (\n chain: ChainSymbol,\n params: QuoteParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DexQuoteResponse>(\n { url: `/v1/dex/${chain}/quote`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.DEX.CREATE.DESCRIPTION\n * @summary CONTROLLER.DEX.CREATE.SUMMARY\n */\nexport const createToken = (\n chain: ChainSymbol,\n createTokenInput: CreateTokenInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<CreateTokenReply>(\n {\n url: `/v1/dex/${chain}/create`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createTokenInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.DEX.LIST.DESCRIPTION\n * @summary CONTROLLER.DEX.LIST.SUMMARY\n */\nexport const listDex = (\n params?: ListDexParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DexPage>({ url: `/v1/dex`, method: \"GET\", params }, options);\n};\nexport type SwapResult = NonNullable<Awaited<ReturnType<typeof swap>>>;\nexport type RouteResult = NonNullable<Awaited<ReturnType<typeof route>>>;\nexport type QuoteResult = NonNullable<Awaited<ReturnType<typeof quote>>>;\nexport type CreateTokenResult = NonNullable<Awaited<ReturnType<typeof createToken>>>;\nexport type ListDexResult = NonNullable<Awaited<ReturnType<typeof listDex>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n CreateEndpointInput,\n EndpointListResponse,\n EndpointOperationResponse,\n EndpointResponse,\n EndpointSecretResponse,\n ListEndpointsParams,\n UpdateEndpointInput,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.ENDPOINT.LIST.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.LIST.SUMMARY\n */\nexport const listEndpoints = (\n params?: ListEndpointsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointListResponse>(\n { url: `/v1/webhook/endpoint`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.CREATE.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.CREATE.SUMMARY\n */\nexport const createEndpoint = (\n createEndpointInput: CreateEndpointInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointResponse>(\n {\n url: `/v1/webhook/endpoint`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createEndpointInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.UPDATE.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.UPDATE.SUMMARY\n */\nexport const updateEndpoint = (\n updateEndpointInput: UpdateEndpointInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointResponse>(\n {\n url: `/v1/webhook/endpoint`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateEndpointInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.GET.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.GET.SUMMARY\n */\nexport const getEndpoint = (id: string, options?: SecondParameter<typeof chainstreamApiClient>) => {\n return chainstreamApiClient<EndpointResponse>(\n { url: `/v1/webhook/endpoint/${id}`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.DELETE.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.DELETE.SUMMARY\n */\nexport const deleteEndpoint = (\n id: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointOperationResponse>(\n { url: `/v1/webhook/endpoint/${id}`, method: \"DELETE\" },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.GET.SECRET.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.GET.SECRET.SUMMARY\n */\nexport const getEndpointSecret = (\n id: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointSecretResponse>(\n { url: `/v1/webhook/endpoint/${id}/secret`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.ROTATE.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.ROTATE.SUMMARY\n */\nexport const rotateEndpointSecret = (\n id: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointOperationResponse>(\n { url: `/v1/webhook/endpoint/${id}/secret/rotate`, method: \"POST\" },\n options,\n );\n};\nexport type ListEndpointsResult = NonNullable<Awaited<ReturnType<typeof listEndpoints>>>;\nexport type CreateEndpointResult = NonNullable<Awaited<ReturnType<typeof createEndpoint>>>;\nexport type UpdateEndpointResult = NonNullable<Awaited<ReturnType<typeof updateEndpoint>>>;\nexport type GetEndpointResult = NonNullable<Awaited<ReturnType<typeof getEndpoint>>>;\nexport type DeleteEndpointResult = NonNullable<Awaited<ReturnType<typeof deleteEndpoint>>>;\nexport type GetEndpointSecretResult = NonNullable<Awaited<ReturnType<typeof getEndpointSecret>>>;\nexport type RotateEndpointSecretResult = NonNullable<\n Awaited<ReturnType<typeof rotateEndpointSecret>>\n>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.IPFS.PRESIGN.DESCRIPTION\n * @summary CONTROLLER.IPFS.PRESIGN.SUMMARY\n */\nexport const presign = (options?: SecondParameter<typeof chainstreamApiClient>) => {\n return chainstreamApiClient<string>({ url: `/v1/ipfs/presign`, method: \"POST\" }, options);\n};\nexport type PresignResult = NonNullable<Awaited<ReturnType<typeof presign>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type { JobDTO, JobStreamingDTO } from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.JOB.GET.DESCRIPTION\n * @summary CONTROLLER.JOB.GET.SUMMARY\n */\nexport const get = (id: string, options?: SecondParameter<typeof chainstreamApiClient>) => {\n return chainstreamApiClient<JobDTO>({ url: `/jobs/${id}`, method: \"GET\" }, options);\n};\n/**\n * CONTROLLER.JOB.STREAMING.DESCRIPTION\n * @summary CONTROLLER.JOB.STREAMING.SUMMARY\n */\nexport const streaming = (id: string, options?: SecondParameter<typeof chainstreamApiClient>) => {\n return chainstreamApiClient<JobStreamingDTO>(\n { url: `/jobs/${id}/streaming`, method: \"GET\" },\n options,\n );\n};\nexport type GetResult = NonNullable<Awaited<ReturnType<typeof get>>>;\nexport type StreamingResult = NonNullable<Awaited<ReturnType<typeof streaming>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n AddressRiskResponseDTO,\n KYTRegisterTransferRequest,\n KYTRegisterWithdrawalRequest,\n RegisterAddressRequest,\n RegisterAddressResponseDTO,\n TransferAlertsResponseDTO,\n TransferBaseResponseDTO,\n TransferDirectExposureResponseDTO,\n TransferNetworkIdentificationsResponseDTO,\n WithdrawalAddressIdentificationsResponseDTO,\n WithdrawalBaseResponseDTO,\n WithdrawalFraudAssessmentResponseDTO,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.KYT.REGISTER_TRANSFER.DESCRIPTION\n * @summary CONTROLLER.KYT.REGISTER_TRANSFER.SUMMARY\n */\nexport const registerTransfer = (\n kYTRegisterTransferRequest: KYTRegisterTransferRequest,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferBaseResponseDTO>(\n {\n url: `/v1/kyt/transfer`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: kYTRegisterTransferRequest,\n },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_TRANSFER_SUMMARY.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_TRANSFER_SUMMARY.SUMMARY\n */\nexport const getTransferSummary = (\n transferId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferBaseResponseDTO>(\n { url: `/v1/kyt/transfers/${transferId}/summary`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_TRANSFER_DIRECT_EXPOSURE.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_TRANSFER_DIRECT_EXPOSURE.SUMMARY\n */\nexport const getTransferDirectExposure = (\n transferId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferDirectExposureResponseDTO>(\n { url: `/v1/kyt/transfers/${transferId}/exposures/direct`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_TRANSFER_ALERTS.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_TRANSFER_ALERTS.SUMMARY\n */\nexport const getTransferAlerts = (\n transferId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferAlertsResponseDTO>(\n { url: `/v1/kyt/transfers/${transferId}/alerts`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_TRANSFER_NETWORK_IDENTIFICATIONS.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_TRANSFER_NETWORK_IDENTIFICATIONS.SUMMARY\n */\nexport const getTransferNetworkIdentifications = (\n transferId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferNetworkIdentificationsResponseDTO>(\n { url: `/v1/kyt/transfers/${transferId}/network-identifications`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.REGISTER_WITHDRAWAL.DESCRIPTION\n * @summary CONTROLLER.KYT.REGISTER_WITHDRAWAL.SUMMARY\n */\nexport const registerWithdrawal = (\n kYTRegisterWithdrawalRequest: KYTRegisterWithdrawalRequest,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WithdrawalBaseResponseDTO>(\n {\n url: `/v1/kyt/withdrawal`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: kYTRegisterWithdrawalRequest,\n },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_SUMMARY.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_SUMMARY.SUMMARY\n */\nexport const getWithdrawalSummary = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WithdrawalBaseResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/summary`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_DIRECT_EXPOSURE.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_DIRECT_EXPOSURE.SUMMARY\n */\nexport const getWithdrawalDirectExposure = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferDirectExposureResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/exposures/direct`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_ALERTS.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_ALERTS.SUMMARY\n */\nexport const getWithdrawalAlerts = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferAlertsResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/alerts`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_ADDRESS_IDENTIFICATIONS.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_ADDRESS_IDENTIFICATIONS.SUMMARY\n */\nexport const getWithdrawalAddressIdentifications = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WithdrawalAddressIdentificationsResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/address-identifications`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_NETWORK_IDENTIFICATIONS.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_NETWORK_IDENTIFICATIONS.SUMMARY\n */\nexport const getWithdrawalNetworkIdentifications = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferNetworkIdentificationsResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/network-identifications`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_FRAUD_ASSESSMENT.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_FRAUD_ASSESSMENT.SUMMARY\n */\nexport const getWithdrawalFraudAssessment = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WithdrawalFraudAssessmentResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/fraud-assessment`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.REGISTER_ADDRESS.DESCRIPTION\n * @summary CONTROLLER.KYT.REGISTER_ADDRESS.SUMMARY\n */\nexport const registerAddress = (\n registerAddressRequest: RegisterAddressRequest,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RegisterAddressResponseDTO>(\n {\n url: `/v1/kyt/address`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: registerAddressRequest,\n },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_ADDRESS_RISK.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_ADDRESS_RISK.SUMMARY\n */\nexport const getAddressRisk = (\n address: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<AddressRiskResponseDTO>(\n { url: `/v1/kyt/addresses/${address}/risk`, method: \"GET\" },\n options,\n );\n};\nexport type RegisterTransferResult = NonNullable<Awaited<ReturnType<typeof registerTransfer>>>;\nexport type GetTransferSummaryResult = NonNullable<Awaited<ReturnType<typeof getTransferSummary>>>;\nexport type GetTransferDirectExposureResult = NonNullable<\n Awaited<ReturnType<typeof getTransferDirectExposure>>\n>;\nexport type GetTransferAlertsResult = NonNullable<Awaited<ReturnType<typeof getTransferAlerts>>>;\nexport type GetTransferNetworkIdentificationsResult = NonNullable<\n Awaited<ReturnType<typeof getTransferNetworkIdentifications>>\n>;\nexport type RegisterWithdrawalResult = NonNullable<Awaited<ReturnType<typeof registerWithdrawal>>>;\nexport type GetWithdrawalSummaryResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalSummary>>\n>;\nexport type GetWithdrawalDirectExposureResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalDirectExposure>>\n>;\nexport type GetWithdrawalAlertsResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalAlerts>>\n>;\nexport type GetWithdrawalAddressIdentificationsResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalAddressIdentifications>>\n>;\nexport type GetWithdrawalNetworkIdentificationsResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalNetworkIdentifications>>\n>;\nexport type GetWithdrawalFraudAssessmentResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalFraudAssessment>>\n>;\nexport type RegisterAddressResult = NonNullable<Awaited<ReturnType<typeof registerAddress>>>;\nexport type GetAddressRiskResult = NonNullable<Awaited<ReturnType<typeof getAddressRisk>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n ChainSymbol,\n GetFinalStretchTokensParams,\n GetHotTokensParams,\n GetMigratedTokensParams,\n GetNewTokensParams,\n GetStocksTokensParams,\n Token,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.RANKING.HOT_TOKENS.DESCRIPTION\n * @summary CONTROLLER.RANKING.HOT_TOKENS.SUMMARY\n */\nexport const getHotTokens = (\n chain: ChainSymbol,\n duration: \"1m\" | \"5m\" | \"1h\" | \"4h\" | \"24h\",\n params?: GetHotTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/ranking/${chain}/hotTokens/${duration}`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RANKING.NEW_TOKENS.DESCRIPTION\n * @summary CONTROLLER.RANKING.NEW_TOKENS.SUMMARY\n */\nexport const getNewTokens = (\n chain: ChainSymbol,\n params?: GetNewTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/ranking/${chain}/newTokens`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RANKING.STOCKS_TOKENS.DESCRIPTION\n * @summary CONTROLLER.RANKING.STOCKS_TOKENS.SUMMARY\n */\nexport const getStocksTokens = (\n chain: ChainSymbol,\n params?: GetStocksTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/ranking/${chain}/stocks`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RANKING.FINAL_STRETCH_TOKENS.DESCRIPTION\n * @summary CONTROLLER.RANKING.FINAL_STRETCH_TOKENS.SUMMARY\n */\nexport const getFinalStretchTokens = (\n chain: ChainSymbol,\n params?: GetFinalStretchTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/ranking/${chain}/finalStretch`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RANKING.MIGRATED_TOKENS.DESCRIPTION\n * @summary CONTROLLER.RANKING.MIGRATED_TOKENS.SUMMARY\n */\nexport const getMigratedTokens = (\n chain: ChainSymbol,\n params?: GetMigratedTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/ranking/${chain}/migrated`, method: \"GET\", params },\n options,\n );\n};\nexport type GetHotTokensResult = NonNullable<Awaited<ReturnType<typeof getHotTokens>>>;\nexport type GetNewTokensResult = NonNullable<Awaited<ReturnType<typeof getNewTokens>>>;\nexport type GetStocksTokensResult = NonNullable<Awaited<ReturnType<typeof getStocksTokens>>>;\nexport type GetFinalStretchTokensResult = NonNullable<\n Awaited<ReturnType<typeof getFinalStretchTokens>>\n>;\nexport type GetMigratedTokensResult = NonNullable<Awaited<ReturnType<typeof getMigratedTokens>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n ChainSymbol,\n ClaimRedPacketInput,\n CreateRedPacketInput,\n CreateRedPacketReply,\n GetClaimsByAddressParams,\n GetClaimsParams,\n GetRedpacketsByAddressParams,\n GetRedpacketsParams,\n RedPacketClaimsPage,\n RedPacketDTO,\n RedPacketReply,\n RedPacketSendTxInput,\n RedPacketSendTxResponse,\n RedPacketsPage,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.RED_PACKET.CREATE.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.CREATE.SUMMARY\n */\nexport const createRedpacket = (\n chain: ChainSymbol,\n createRedPacketInput: CreateRedPacketInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<CreateRedPacketReply>(\n {\n url: `/v1/redpacket/${chain}/create`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createRedPacketInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.CLAIM.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.CLAIM.SUMMARY\n */\nexport const claimRedpacket = (\n chain: ChainSymbol,\n claimRedPacketInput: ClaimRedPacketInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketReply>(\n {\n url: `/v1/redpacket/${chain}/claim`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: claimRedPacketInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.GET.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.GET.SUMMARY\n */\nexport const getRedpacket = (\n id: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketDTO>({ url: `/v1/redpacket/${id}`, method: \"GET\" }, options);\n};\n/**\n * CONTROLLER.RED_PACKET.GET_CLAIMS.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.GET_CLAIMS.SUMMARY\n */\nexport const getClaims = (\n id: string,\n params?: GetClaimsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketClaimsPage>(\n { url: `/v1/redpacket/${id}/claims`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.GET_REDPACKETS.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.GET_REDPACKETS.SUMMARY\n */\nexport const getRedpackets = (\n params?: GetRedpacketsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketsPage>(\n { url: `/v1/redpacket`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.GET_CLAIMS_BY_ADDRESS.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.GET_CLAIMS_BY_ADDRESS.SUMMARY\n */\nexport const getClaimsByAddress = (\n address: string,\n params?: GetClaimsByAddressParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketClaimsPage>(\n { url: `/v1/redpacket/wallet/${address}/claims`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.GET_REDPACKETS_BY_ADDRESS.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.GET_REDPACKETS_BY_ADDRESS.SUMMARY\n */\nexport const getRedpacketsByAddress = (\n address: string,\n params?: GetRedpacketsByAddressParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketsPage>(\n { url: `/v1/redpacket/wallet/${address}/redpackets`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.SEND.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.SEND.SUMMARY\n */\nexport const redpacketSend = (\n chain: ChainSymbol,\n redPacketSendTxInput: RedPacketSendTxInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketSendTxResponse>(\n {\n url: `/v1/redpacket/${chain}/send`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: redPacketSendTxInput,\n },\n options,\n );\n};\nexport type CreateRedpacketResult = NonNullable<Awaited<ReturnType<typeof createRedpacket>>>;\nexport type ClaimRedpacketResult = NonNullable<Awaited<ReturnType<typeof claimRedpacket>>>;\nexport type GetRedpacketResult = NonNullable<Awaited<ReturnType<typeof getRedpacket>>>;\nexport type GetClaimsResult = NonNullable<Awaited<ReturnType<typeof getClaims>>>;\nexport type GetRedpacketsResult = NonNullable<Awaited<ReturnType<typeof getRedpackets>>>;\nexport type GetClaimsByAddressResult = NonNullable<Awaited<ReturnType<typeof getClaimsByAddress>>>;\nexport type GetRedpacketsByAddressResult = NonNullable<\n Awaited<ReturnType<typeof getRedpacketsByAddress>>\n>;\nexport type RedpacketSendResult = NonNullable<Awaited<ReturnType<typeof redpacketSend>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n Candle,\n ChainSymbol,\n DevTokenDTO,\n DexPoolDTO,\n GetCandlesParams,\n GetHoldersMultiParams,\n GetHoldersParams,\n GetMarketDataMulti200,\n GetMarketDataMultiParams,\n GetMetadataMulti200,\n GetMetadataMultiParams,\n GetMintAndBurnParams,\n GetPoolsParams,\n GetPriceByTimeParams,\n GetPricesParams,\n GetSecurity200,\n GetStatsMulti200,\n GetStatsMultiParams,\n GetTokenLiquiditySnapshotsParams,\n GetTokensParams,\n ListTokenParams,\n SearchParams,\n Token,\n TokenCreationDTO,\n TokenCreationPage,\n TokenHolder,\n TokenHolderPage,\n TokenLiquiditySnapshotPage,\n TokenListPage,\n TokenMarketData,\n TokenMetadata,\n TokenPage,\n TokenPriceDTO,\n TokenPricePage,\n TokenStat,\n TokenTrader,\n TokenTraderTag,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.TOKEN.SEARCH.DESCRIPTION\n * @summary CONTROLLER.TOKEN.SEARCH.SUMMARY\n */\nexport const search = (\n params?: SearchParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenPage>(\n { url: `/v1/token/search`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_TOKENS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_TOKENS.SUMMARY\n */\nexport const getTokens = (\n chain: ChainSymbol,\n params: GetTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/token/${chain}/multi`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET.SUMMARY\n */\nexport const getToken = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token>(\n { url: `/v1/token/${chain}/${tokenAddress}`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_METADATA.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_METADATA.SUMMARY\n */\nexport const getMetadata = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenMetadata>(\n { url: `/v1/token/${chain}/${tokenAddress}/metadata`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_METADATA_MULTI.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_METADATA_MULTI.SUMMARY\n */\nexport const getMetadataMulti = (\n chain: ChainSymbol,\n params: GetMetadataMultiParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<GetMetadataMulti200>(\n { url: `/v1/token/${chain}/metadata/multi`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_POOLS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_POOLS.SUMMARY\n */\nexport const getPools = (\n chain: ChainSymbol,\n tokenAddress: string,\n params?: GetPoolsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DexPoolDTO[]>(\n { url: `/v1/token/${chain}/${tokenAddress}/pools`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_STATS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_STATS.SUMMARY\n */\nexport const getStats = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenStat>(\n { url: `/v1/token/${chain}/${tokenAddress}/stats`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_STATS_MULTI.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_STATS_MULTI.SUMMARY\n */\nexport const getStatsMulti = (\n chain: ChainSymbol,\n params: GetStatsMultiParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<GetStatsMulti200>(\n { url: `/v1/token/${chain}/stats/multi`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_HOLDERS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_HOLDERS.SUMMARY\n */\nexport const getHolders = (\n chain: ChainSymbol,\n tokenAddress: string,\n params?: GetHoldersParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenHolderPage>(\n { url: `/v1/token/${chain}/${tokenAddress}/holders`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_HOLDERS_MULTI.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_HOLDERS_MULTI.SUMMARY\n */\nexport const getHoldersMulti = (\n chain: ChainSymbol,\n tokenAddress: string,\n params: GetHoldersMultiParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenHolder[]>(\n { url: `/v1/token/${chain}/${tokenAddress}/holders/multi`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_CANDLES.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_CANDLES.SUMMARY\n */\nexport const getCandles = (\n chain: ChainSymbol,\n tokenAddress: string,\n params: GetCandlesParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Candle[]>(\n { url: `/v1/token/${chain}/${tokenAddress}/candles`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_TOP_HOLDERS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_TOP_HOLDERS.SUMMARY\n */\nexport const getTopHolders = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenHolderPage>(\n { url: `/v1/token/${chain}/${tokenAddress}/topHolders`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_MARKET_CAP.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_MARKET_CAP.SUMMARY\n */\nexport const getMarketData = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenMarketData>(\n { url: `/v1/token/${chain}/${tokenAddress}/marketData`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_MARKET_DATA_MULTI.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_MARKET_DATA_MULTI.SUMMARY\n */\nexport const getMarketDataMulti = (\n chain: ChainSymbol,\n params: GetMarketDataMultiParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<GetMarketDataMulti200>(\n { url: `/v1/token/${chain}/marketData/multi`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_PRICES.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_PRICES.SUMMARY\n */\nexport const getPrices = (\n chain: ChainSymbol,\n tokenAddress: string,\n params?: GetPricesParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenPricePage>(\n { url: `/v1/token/${chain}/${tokenAddress}/prices`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_PRICE_BY_TIME.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_PRICE_BY_TIME.SUMMARY\n */\nexport const getPriceByTime = (\n chain: ChainSymbol,\n tokenAddress: string,\n params: GetPriceByTimeParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenPriceDTO>(\n { url: `/v1/token/${chain}/${tokenAddress}/price`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_CREATION.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_CREATION.SUMMARY\n */\nexport const getCreation = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenCreationDTO>(\n { url: `/v1/token/${chain}/${tokenAddress}/creation`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_MINT_AND_BURN.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_MINT_AND_BURN.SUMMARY\n */\nexport const getMintAndBurn = (\n chain: ChainSymbol,\n tokenAddress: string,\n params?: GetMintAndBurnParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenCreationPage>(\n { url: `/v1/token/${chain}/${tokenAddress}/mintAndBurn`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_TOKEN_LIST.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_TOKEN_LIST.SUMMARY\n */\nexport const listToken = (\n chain: ChainSymbol,\n params?: ListTokenParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenListPage>(\n { url: `/v1/token/${chain}/list`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_SECURITY.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_SECURITY.SUMMARY\n */\nexport const getSecurity = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<GetSecurity200>(\n { url: `/v1/token/${chain}/${tokenAddress}/security`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_DEV_TOKENS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_DEV_TOKENS.SUMMARY\n */\nexport const getDevTokens = (\n chain: ChainSymbol,\n devAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DevTokenDTO[]>(\n { url: `/v1/token/${chain}/dev/${devAddress}/tokens`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_TOKEN_TRADERS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_TOKEN_TRADERS.SUMMARY\n */\nexport const getTokenTraders = (\n chain: ChainSymbol,\n tokenAddress: string,\n tag: TokenTraderTag,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenTrader[]>(\n { url: `/v1/token/${chain}/${tokenAddress}/traders/${tag}`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_LIQUIDITY_SNAPSHOTS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_LIQUIDITY_SNAPSHOTS.SUMMARY\n */\nexport const getTokenLiquiditySnapshots = (\n chain: ChainSymbol,\n tokenAddress: string,\n params?: GetTokenLiquiditySnapshotsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenLiquiditySnapshotPage>(\n { url: `/v1/token/${chain}/${tokenAddress}/liquiditySnapshots`, method: \"GET\", params },\n options,\n );\n};\nexport type SearchResult = NonNullable<Awaited<ReturnType<typeof search>>>;\nexport type GetTokensResult = NonNullable<Awaited<ReturnType<typeof getTokens>>>;\nexport type GetTokenResult = NonNullable<Awaited<ReturnType<typeof getToken>>>;\nexport type GetMetadataResult = NonNullable<Awaited<ReturnType<typeof getMetadata>>>;\nexport type GetMetadataMultiResult = NonNullable<Awaited<ReturnType<typeof getMetadataMulti>>>;\nexport type GetPoolsResult = NonNullable<Awaited<ReturnType<typeof getPools>>>;\nexport type GetStatsResult = NonNullable<Awaited<ReturnType<typeof getStats>>>;\nexport type GetStatsMultiResult = NonNullable<Awaited<ReturnType<typeof getStatsMulti>>>;\nexport type GetHoldersResult = NonNullable<Awaited<ReturnType<typeof getHolders>>>;\nexport type GetHoldersMultiResult = NonNullable<Awaited<ReturnType<typeof getHoldersMulti>>>;\nexport type GetCandlesResult = NonNullable<Awaited<ReturnType<typeof getCandles>>>;\nexport type GetTopHoldersResult = NonNullable<Awaited<ReturnType<typeof getTopHolders>>>;\nexport type GetMarketDataResult = NonNullable<Awaited<ReturnType<typeof getMarketData>>>;\nexport type GetMarketDataMultiResult = NonNullable<Awaited<ReturnType<typeof getMarketDataMulti>>>;\nexport type GetPricesResult = NonNullable<Awaited<ReturnType<typeof getPrices>>>;\nexport type GetPriceByTimeResult = NonNullable<Awaited<ReturnType<typeof getPriceByTime>>>;\nexport type GetCreationResult = NonNullable<Awaited<ReturnType<typeof getCreation>>>;\nexport type GetMintAndBurnResult = NonNullable<Awaited<ReturnType<typeof getMintAndBurn>>>;\nexport type ListTokenResult = NonNullable<Awaited<ReturnType<typeof listToken>>>;\nexport type GetSecurityResult = NonNullable<Awaited<ReturnType<typeof getSecurity>>>;\nexport type GetDevTokensResult = NonNullable<Awaited<ReturnType<typeof getDevTokens>>>;\nexport type GetTokenTradersResult = NonNullable<Awaited<ReturnType<typeof getTokenTraders>>>;\nexport type GetTokenLiquiditySnapshotsResult = NonNullable<\n Awaited<ReturnType<typeof getTokenLiquiditySnapshots>>\n>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n ChainSymbol,\n GetActivitiesParams,\n GetTopTradersParams,\n GetTradesParams,\n TopTradersPage,\n TradePage,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.TRADE.GET.TOKEN.DESCRIPTION\n * @summary CONTROLLER.TRADE.GET.TOKEN.SUMMARY\n */\nexport const getTrades = (\n chain: ChainSymbol,\n params?: GetTradesParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TradePage>(\n { url: `/v1/trade/${chain}`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TRADE.GET.TOKEN_ACTIVITIES.DESCRIPTION\n * @summary CONTROLLER.TRADE.GET.TOKEN_ACTIVITIES.SUMMARY\n */\nexport const getActivities = (\n chain: ChainSymbol,\n params?: GetActivitiesParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TradePage>(\n { url: `/v1/trade/${chain}/activities`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TRADE.GET.TOP_TRADERS.DESCRIPTION\n * @summary CONTROLLER.TRADE.GET.TOP_TRADERS.SUMMARY\n */\nexport const getTopTraders = (\n chain: ChainSymbol,\n params: GetTopTradersParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TopTradersPage>(\n { url: `/v1/trade/${chain}/top-traders`, method: \"GET\", params },\n options,\n );\n};\nexport type GetTradesResult = NonNullable<Awaited<ReturnType<typeof getTrades>>>;\nexport type GetActivitiesResult = NonNullable<Awaited<ReturnType<typeof getActivities>>>;\nexport type GetTopTradersResult = NonNullable<Awaited<ReturnType<typeof getTopTraders>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n EstimateGasLimitInput,\n EstimateGasLimitResponse,\n GasPriceResponse,\n SendTxInput,\n SendTxResponse,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.TRANSACTION.SEND.DESCRIPTION\n * @summary CONTROLLER.TRANSACTION.SEND.SUMMARY\n */\nexport const send = (\n chain: string,\n sendTxInput: SendTxInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<SendTxResponse>(\n {\n url: `/v1/transaction/${chain}/send`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: sendTxInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.TRANSACTION.GET_GAS_PRICE.DESCRIPTION\n * @summary CONTROLLER.TRANSACTION.GET_GAS_PRICE.SUMMARY\n */\nexport const getGasPrice = (\n chain: \"bsc\" | \"eth\",\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<GasPriceResponse>(\n { url: `/v1/transaction/${chain}/gas-price`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TRANSACTION.ESTIMATE_GAS_LIMIT.DESCRIPTION\n * @summary CONTROLLER.TRANSACTION.ESTIMATE_GAS_LIMIT.SUMMARY\n */\nexport const getGasLimit = (\n chain: \"bsc\" | \"eth\",\n estimateGasLimitInput: EstimateGasLimitInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EstimateGasLimitResponse>(\n {\n url: `/v1/transaction/${chain}/estimate-gas-limit`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: estimateGasLimitInput,\n },\n options,\n );\n};\nexport type SendResult = NonNullable<Awaited<ReturnType<typeof send>>>;\nexport type GetGasPriceResult = NonNullable<Awaited<ReturnType<typeof getGasPrice>>>;\nexport type GetGasLimitResult = NonNullable<Awaited<ReturnType<typeof getGasLimit>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n BalanceUpdatePage,\n BooleanResultDTO,\n CalculatePnlInput,\n ChainSymbol,\n GetBalanceParams,\n GetBalanceUpdatesParams,\n GetPnlParams,\n WalletBalancesDTO,\n WalletPnlDTO,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.WALLET.GET_PNL.DESCRIPTION\n * @summary CONTROLLER.WALLET.GET_PNL.SUMMARY\n */\nexport const getPnl = (\n chain: ChainSymbol,\n walletAddress: string,\n params?: GetPnlParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WalletPnlDTO[]>(\n { url: `/v1/wallet/${chain}/${walletAddress}/pnl`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.WALLET.GET_PNL_STATS.DESCRIPTION\n * @summary CONTROLLER.WALLET.GET_PNL_STATS.SUMMARY\n */\nexport const getPnlStats = (\n chain: ChainSymbol,\n walletAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WalletPnlDTO[]>(\n { url: `/v1/wallet/${chain}/${walletAddress}/stats`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.WALLET.GET_BALANCES.DESCRIPTION\n * @summary CONTROLLER.WALLET.GET_BALANCES.SUMMARY\n */\nexport const getBalance = (\n chain: ChainSymbol,\n walletAddress: string,\n params?: GetBalanceParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WalletBalancesDTO>(\n { url: `/v1/wallet/${chain}/${walletAddress}/balance`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.WALLET.CALCULATE_PNL.DESCRIPTION\n * @summary CONTROLLER.WALLET.CALCULATE_PNL.SUMMARY\n */\nexport const calculatePnl = (\n chain: ChainSymbol,\n walletAddress: string,\n calculatePnlInput: CalculatePnlInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<BooleanResultDTO>(\n {\n url: `/v1/wallet/${chain}/${walletAddress}/calculate-pnl`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: calculatePnlInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.WALLET.GET_BALANCE_UPDATES.DESCRIPTION\n * @summary CONTROLLER.WALLET.GET_BALANCE_UPDATES.SUMMARY\n */\nexport const getBalanceUpdates = (\n chain: ChainSymbol,\n walletAddress: string,\n params?: GetBalanceUpdatesParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<BalanceUpdatePage>(\n { url: `/v1/wallet/${chain}/${walletAddress}/balance-updates`, method: \"GET\", params },\n options,\n );\n};\nexport type GetPnlResult = NonNullable<Awaited<ReturnType<typeof getPnl>>>;\nexport type GetPnlStatsResult = NonNullable<Awaited<ReturnType<typeof getPnlStats>>>;\nexport type GetBalanceResult = NonNullable<Awaited<ReturnType<typeof getBalance>>>;\nexport type CalculatePnlResult = NonNullable<Awaited<ReturnType<typeof calculatePnl>>>;\nexport type GetBalanceUpdatesResult = NonNullable<Awaited<ReturnType<typeof getBalanceUpdates>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type { BooleanResultDTO, ChainSymbol } from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.WATCHLIST.ADD.DESCRIPTION\n * @summary CONTROLLER.WATCHLIST.ADD.SUMMARY\n */\nexport const watchlistAdd = (\n chain: ChainSymbol,\n walletAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<BooleanResultDTO>(\n { url: `/v1/watchlist/${chain}/${walletAddress}`, method: \"POST\" },\n options,\n );\n};\nexport type WatchlistAddResult = NonNullable<Awaited<ReturnType<typeof watchlistAdd>>>;\n"],"mappings":"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","names":["Axios","axiosRetry"]}
1
+ {"version":3,"sources":["../src/chainstream.ts","../src/openapi-client/chainstreamApiClient.ts","../src/stream/stream.ts","../src/stream/stream.fields.ts","../src/openapi-client/generated/blockchain/blockchain.ts","../src/openapi-client/generated/defi-sol-moonshot/defi-sol-moonshot.ts","../src/openapi-client/generated/defi-sol-pumpfun/defi-sol-pumpfun.ts","../src/openapi-client/generated/dex-pool/dex-pool.ts","../src/openapi-client/generated/dex/dex.ts","../src/openapi-client/generated/endpoint/endpoint.ts","../src/openapi-client/generated/ipfs/ipfs.ts","../src/openapi-client/generated/jobs/jobs.ts","../src/openapi-client/generated/kyt/kyt.ts","../src/openapi-client/generated/ranking/ranking.ts","../src/openapi-client/generated/red-packet/red-packet.ts","../src/openapi-client/generated/token/token.ts","../src/openapi-client/generated/trade/trade.ts","../src/openapi-client/generated/transaction/transaction.ts","../src/openapi-client/generated/wallet/wallet.ts","../src/openapi-client/generated/watchlist/watchlist.ts"],"sourcesContent":["import { EventSourcePolyfill } from \"event-source-polyfill\";\nimport { configure } from \"./openapi-client/chainstreamApiClient.js\";\nimport { StreamApi } from \"./stream/index.js\";\n\n// Import all API modules\nimport * as blockchainApi from \"./openapi-client/generated/blockchain/blockchain.js\";\nimport * as moonshotApi from \"./openapi-client/generated/defi-sol-moonshot/defi-sol-moonshot.js\";\nimport * as pumpfunApi from \"./openapi-client/generated/defi-sol-pumpfun/defi-sol-pumpfun.js\";\nimport * as dexPoolApi from \"./openapi-client/generated/dex-pool/dex-pool.js\";\nimport * as dexApi from \"./openapi-client/generated/dex/dex.js\";\nimport * as endpointApi from \"./openapi-client/generated/endpoint/endpoint.js\";\nimport * as ipfsApi from \"./openapi-client/generated/ipfs/ipfs.js\";\nimport * as jobsApi from \"./openapi-client/generated/jobs/jobs.js\";\nimport * as kytApi from \"./openapi-client/generated/kyt/kyt.js\";\nimport * as rankingApi from \"./openapi-client/generated/ranking/ranking.js\";\nimport * as redPacketApi from \"./openapi-client/generated/red-packet/red-packet.js\";\nimport * as tokenApi from \"./openapi-client/generated/token/token.js\";\nimport * as tradeApi from \"./openapi-client/generated/trade/trade.js\";\nimport * as transactionApi from \"./openapi-client/generated/transaction/transaction.js\";\nimport * as walletApi from \"./openapi-client/generated/wallet/wallet.js\";\nimport * as watchlistApi from \"./openapi-client/generated/watchlist/watchlist.js\";\n\nexport interface TokenProvider {\n getToken(): Promise<string> | string;\n}\n\nexport interface ChainStreamRequestContext {\n baseUrl: string;\n streamUrl: string;\n accessToken: string | TokenProvider;\n}\n\nexport interface ChainStreamClientOptions {\n debug?: boolean;\n serverUrl?: string;\n streamUrl?: string;\n /**\n * Whether to automatically connect to WebSocket on initialization.\n * Default: false\n *\n * If set to true, WebSocket will connect automatically.\n * If false or not set, you need to manually call `client.stream.connect()` when needed.\n */\n autoConnectWebSocket?: boolean;\n}\n\nexport class ChainStreamClient {\n public readonly requestCtx: ChainStreamRequestContext;\n\n // WebSocket streaming client\n public readonly stream: StreamApi;\n\n // REST API modules\n public readonly token: typeof tokenApi;\n public readonly dex: typeof dexApi;\n public readonly dexpool: typeof dexPoolApi;\n public readonly trade: typeof tradeApi;\n public readonly ranking: typeof rankingApi;\n public readonly transaction: typeof transactionApi;\n public readonly moonshot: typeof moonshotApi;\n public readonly pumpfun: typeof pumpfunApi;\n public readonly wallet: typeof walletApi;\n public readonly redPacket: typeof redPacketApi;\n public readonly ipfs: typeof ipfsApi;\n public readonly blockchain: typeof blockchainApi;\n public readonly watchlist: typeof watchlistApi;\n public readonly jobs: typeof jobsApi;\n public readonly kyt: typeof kytApi;\n public readonly endpoint: typeof endpointApi;\n\n public constructor(accessToken: string | TokenProvider, options: ChainStreamClientOptions = {}) {\n const baseUrl: string = options.serverUrl ?? \"https://api-dex.chainstream.io\";\n const streamUrl: string =\n options.streamUrl ?? \"wss://realtime-dex.chainstream.io/connection/websocket\";\n\n this.requestCtx = { baseUrl, streamUrl, accessToken };\n\n // Configure the API client with authentication\n configure({\n accessToken,\n basePath: baseUrl,\n debugging: options.debug,\n });\n\n // Assign API modules\n this.token = tokenApi;\n this.dex = dexApi;\n this.dexpool = dexPoolApi;\n this.trade = tradeApi;\n this.ranking = rankingApi;\n this.transaction = transactionApi;\n this.moonshot = moonshotApi;\n this.pumpfun = pumpfunApi;\n this.wallet = walletApi;\n this.redPacket = redPacketApi;\n this.ipfs = ipfsApi;\n this.blockchain = blockchainApi;\n this.watchlist = watchlistApi;\n this.jobs = jobsApi;\n this.kyt = kytApi;\n this.endpoint = endpointApi;\n\n // Initialize WebSocket streaming client\n this.stream = new StreamApi(this.requestCtx);\n\n // Only auto-connect WebSocket if explicitly enabled\n if (options.autoConnectWebSocket === true) {\n this.stream.connect();\n }\n }\n\n /**\n * Wait for a job to complete using Server-Sent Events (SSE)\n * @param jobId - The job ID to wait for\n * @param timeout - Timeout in milliseconds (default: 60000)\n * @returns Promise that resolves with the job result\n */\n async waitForJob<T>(jobId: string, timeout = 60000): Promise<T> {\n const accessToken =\n typeof this.requestCtx.accessToken === \"string\"\n ? this.requestCtx.accessToken\n : await this.requestCtx.accessToken.getToken();\n\n return new Promise((resolve, reject) => {\n const sse = new EventSourcePolyfill(`${this.requestCtx.baseUrl}/jobs/${jobId}/streaming`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n });\n\n const timeoutId = setTimeout(() => {\n sse.close();\n reject(new Error(`Job ${jobId} timed out after ${timeout}ms`));\n }, timeout);\n\n sse.onmessage = event => {\n try {\n console.log(\"event.data: \", event.data);\n const data = JSON.parse(event.data as string);\n\n if (data.status === \"error\") {\n sse.close();\n reject(new Error(`Error: ${data.message}`));\n } else if (data.status === \"completed\") {\n clearTimeout(timeoutId);\n sse.close();\n resolve(data as T);\n }\n } catch {\n clearTimeout(timeoutId);\n sse.close();\n reject(new Error(\"Error parsing event data\"));\n }\n };\n\n sse.onopen = () => {\n console.log(\"SSE connection opened\");\n };\n\n sse.onerror = error => {\n const errorEvent = error as Event & { message?: string };\n if (errorEvent.message?.includes(\"No activity within\")) {\n console.log(\"SSE reconnecting due to inactivity...\");\n return;\n }\n\n clearTimeout(timeoutId);\n sse.close();\n reject(new Error(`Error in SSE connection: ${error}`));\n };\n });\n }\n}\n\nexport interface PostOptions {\n idempotencyKey?: string;\n}\n","import Axios, { AxiosInstance, AxiosRequestConfig } from \"axios\";\nimport axiosRetry, { exponentialDelay } from \"axios-retry\";\n\nimport type { TokenProvider } from \"../chainstream.js\";\n\n/**\n * The options for the ChainStream API client.\n */\nexport type ChainStreamApiOptions = {\n /**\n * The access token for authentication.\n * Can be a string or a TokenProvider that dynamically provides tokens.\n */\n accessToken: string | TokenProvider;\n\n /** The base path for the API. Defaults to https://api-dex.chainstream.io */\n basePath?: string;\n\n /** If true, logs API requests and responses to the console. */\n debugging?: boolean;\n\n /** The source for the API request, used for analytics. */\n source?: string;\n\n /** The version of the source for the API request, used for analytics. */\n sourceVersion?: string;\n};\n\nlet axiosInstance: AxiosInstance;\nlet currentOptions: ChainStreamApiOptions | undefined = undefined;\n\n/**\n * Configures the ChainStream API client with the given options.\n *\n * @param {ChainStreamApiOptions} options - The ChainStream API options.\n */\nexport const configure = (options: ChainStreamApiOptions) => {\n const baseURL = options.basePath || \"https://api-dex.chainstream.io\";\n\n currentOptions = {\n ...options,\n basePath: baseURL,\n };\n\n axiosInstance = Axios.create({\n baseURL,\n });\n\n axiosRetry(axiosInstance, {\n retryDelay: exponentialDelay,\n });\n\n // Add request interceptor for authentication\n axiosInstance.interceptors.request.use(async config => {\n const token =\n typeof options.accessToken === \"string\"\n ? options.accessToken\n : await options.accessToken.getToken();\n\n config.headers.Authorization = `Bearer ${token}`;\n config.headers[\"Content-Type\"] = \"application/json\";\n\n if (options.source) {\n config.headers[\"X-Source\"] = options.source;\n }\n if (options.sourceVersion) {\n config.headers[\"X-Source-Version\"] = options.sourceVersion;\n }\n\n if (options.debugging) {\n console.log(`[ChainStream API] ${config.method?.toUpperCase()} ${config.url}`);\n }\n\n return config;\n });\n\n // Add response interceptor for debugging\n if (options.debugging) {\n axiosInstance.interceptors.response.use(\n response => {\n console.log(`[ChainStream API] Response:`, response.status, response.data);\n return response;\n },\n error => {\n console.error(`[ChainStream API] Error:`, error.response?.status, error.response?.data);\n return Promise.reject(error);\n },\n );\n }\n};\n\n/**\n * Adds an idempotency key to request config if provided\n *\n * @param config - The Axios request configuration.\n * @param idempotencyKey - The idempotency key.\n * @returns The Axios request configuration with the idempotency key.\n */\nconst addIdempotencyKey = (\n config: AxiosRequestConfig,\n idempotencyKey?: string,\n): AxiosRequestConfig => {\n if (!idempotencyKey) {\n return config;\n }\n\n return {\n ...config,\n headers: {\n ...(config.headers || {}),\n \"X-Idempotency-Key\": idempotencyKey,\n },\n };\n};\n\n/**\n * The ChainStream API client function that handles authentication and error handling.\n *\n * @param {AxiosRequestConfig} config - The Axios request configuration.\n * @param idempotencyKey - Optional idempotency key.\n * @returns {Promise<T>} A promise that resolves to the response data.\n * @throws {Error} If the request fails.\n */\nexport const chainstreamApiClient = async <T>(\n config: AxiosRequestConfig,\n idempotencyKey?: string,\n): Promise<T> => {\n if (!axiosInstance) {\n throw new Error(\"ChainStream API client not configured. Call configure() first.\");\n }\n\n if (!config.url || config.url === \"\") {\n throw new Error(\"AxiosRequestConfig URL is empty.\");\n }\n\n if (!config.method || config.method === \"\") {\n throw new Error(\"AxiosRequestConfig method is empty.\");\n }\n\n // Add idempotency key to the request headers if provided\n const configWithIdempotencyKey = addIdempotencyKey(config, idempotencyKey);\n\n try {\n const response = await axiosInstance(configWithIdempotencyKey);\n return response.data as T;\n } catch (error) {\n // eslint-disable-next-line import/no-named-as-default-member\n if (Axios.isAxiosError(error) && error.response) {\n const statusCode = error.response.status;\n const responseData = error.response.data;\n\n throw new Error(\n `ChainStream API error (${statusCode}): ${\n typeof responseData === \"string\" ? responseData : JSON.stringify(responseData)\n }`,\n );\n }\n\n throw error;\n }\n};\n\n/**\n * Get the current configuration\n */\nexport const getConfig = () => currentOptions;\n","import { Centrifuge, ConnectionTokenContext } from \"@chainstream-io/centrifuge\";\nimport { ChainStreamRequestContext } from \"../chainstream.js\";\nimport { Resolution } from \"../openapi-client/index.js\";\nimport {\n WsDexPoolBalance,\n WsNewToken,\n WsTokenMetadata,\n WsTokenHolder,\n WsTokenStat,\n WsTokenLiquidity,\n WsTokenMaxLiquidity,\n WsTokenTotalLiquidity,\n WsWalletBalance,\n WsTokenSupply,\n WsWalletPnl,\n WsChannelType,\n WsTokenCandle,\n WsTradeActivity,\n WsWalletTokenPnl,\n WsRankingType,\n WsDex,\n WsRankingTokenList,\n WsTokenBondingCurve,\n} from \"./stream.model.js\";\nimport { replaceFilterFields } from \"./stream.fields.js\";\n\nexport interface Unsubscribable {\n unsubscribe(): void;\n}\n\nexport class StreamApi {\n private realtimeClient!: Centrifuge;\n private listenersMap: Map<string, Set<(data: unknown) => void>>;\n private context: ChainStreamRequestContext;\n private initPromise: Promise<void> | null = null;\n\n constructor(context: ChainStreamRequestContext) {\n this.context = context;\n this.listenersMap = new Map();\n }\n\n /**\n * Initialize Centrifuge client with current token\n * This is called lazily when connect() is called\n */\n private async initClient(): Promise<void> {\n if (this.realtimeClient) {\n return;\n }\n\n // Get initial token for URL\n const token = await this.getTokenValue();\n const realtimeEndpoint = this.buildWsUrl(this.context.streamUrl, token);\n\n this.realtimeClient = new Centrifuge(realtimeEndpoint, {\n getToken: async (_ctx: ConnectionTokenContext) => {\n return this.getTokenValue();\n },\n });\n\n this.realtimeClient\n .on(\"connected\", () => {\n console.log(\"[streaming] connected\");\n })\n .on(\"disconnected\", ctx => {\n console.warn(\"[streaming] disconnected\", ctx);\n })\n .on(\"error\", err => {\n console.error(\"[streaming] error: \", err);\n });\n }\n\n /**\n * Wait for initialization to complete\n * If not initialized, auto-connect first\n */\n private async ensureInitialized(): Promise<void> {\n if (!this.initPromise) {\n // Auto-connect if not initialized\n this.connect();\n }\n await this.initPromise;\n }\n\n /**\n * Get token value from string or TokenProvider\n */\n private async getTokenValue(): Promise<string> {\n return typeof this.context.accessToken === \"string\"\n ? this.context.accessToken\n : await this.context.accessToken.getToken();\n }\n\n /**\n * Build WebSocket URL with token as query parameter\n */\n private buildWsUrl(endpoint: string, token: string): string {\n const url = new URL(endpoint);\n url.searchParams.set(\"token\", token);\n return url.toString();\n }\n\n /**\n * Connect to the WebSocket server.\n * This is automatically called when you use subscribe methods if not already connected.\n * You can also call this method manually for explicit control.\n */\n connect(): void {\n // Start initialization and store the promise\n this.initPromise = this.initClient().then(() => {\n this.realtimeClient.connect();\n });\n }\n\n /**\n * Disconnect from the WebSocket server.\n * All subscriptions will be automatically removed.\n */\n disconnect(): void {\n if (this.realtimeClient) {\n this.realtimeClient.disconnect();\n }\n }\n\n /**\n * Check if the WebSocket is currently connected.\n */\n isConnected(): boolean {\n return this.realtimeClient?.state === \"connected\";\n }\n\n /**\n * Start batching commands for efficient bulk operations\n * All subscription commands after this call will be batched until stopBatching is called\n */\n startBatching(): void {\n if (this.realtimeClient) {\n this.realtimeClient.startBatching();\n }\n }\n\n /**\n * Stop batching and flush all collected commands to the server\n * This will send all batched subscription commands in a single network request\n */\n stopBatching(): void {\n if (this.realtimeClient) {\n this.realtimeClient.stopBatching();\n }\n }\n\n /**\n * Batch subscribe method that accepts a function containing subscription calls\n * All subscription methods called within the function will be batched\n * @param batchFunction Function containing subscription method calls\n * @returns Array of unsubscribe functions\n */\n batchSubscribe(batchFunction: () => Unsubscribable[]): Unsubscribable[] {\n // Start batching commands\n this.startBatching();\n\n // Execute the batch function (all subscription calls will be batched)\n const unsubscribables = batchFunction();\n\n // Stop batching and flush all commands\n this.stopBatching();\n\n return unsubscribables;\n }\n\n /**\n * Batch unsubscribe method that accepts an array of unsubscribe functions\n * All unsubscribe calls will be executed at once\n * @param unsubscribables Array of unsubscribe functions to execute\n */\n batchUnsubscribe(unsubscribables: Unsubscribable[]): void {\n if (!unsubscribables || unsubscribables.length === 0) {\n return;\n }\n\n // Execute all unsubscribe calls\n unsubscribables.forEach(unsub => {\n if (unsub && typeof unsub.unsubscribe === \"function\") {\n unsub.unsubscribe();\n }\n });\n }\n\n subscribe<T = unknown>(\n channel: string,\n fn: (data: T) => void,\n filter?: string,\n methodName?: string,\n ): Unsubscribable {\n // Add listener immediately\n let listeners = this.listenersMap.get(channel);\n if (!listeners) {\n listeners = new Set();\n this.listenersMap.set(channel, listeners);\n }\n listeners.add(fn as (data: unknown) => void);\n\n // Perform subscription after initialization is complete\n this.ensureInitialized().then(() => {\n let sub = this.realtimeClient.getSubscription(channel);\n\n if (!sub) {\n console.log(\"[xrealtime] create new sub: \", channel);\n\n // Process filter expression with method-specific field mappings\n const processedFilter =\n filter && methodName ? replaceFilterFields(filter, methodName) : filter;\n\n sub = this.realtimeClient.newSubscription(channel, {\n delta: \"fossil\",\n ...(processedFilter && { filter: processedFilter }),\n });\n\n sub\n .on(\"subscribed\", () => {\n console.log(\"[xrealtime] subscribed\", channel);\n })\n .on(\"unsubscribed\", () => {\n console.log(\"[xrealtime] unsubscribed\", channel);\n })\n .on(\"publication\", ctx => {\n const currentListeners = this.listenersMap.get(channel);\n currentListeners?.forEach(it => it(ctx.data));\n })\n .subscribe();\n }\n });\n\n return new StreamUnsubscribable<T>(this, channel, fn);\n }\n\n unsubscribe<T = unknown>(channel: string, fn: (data: T) => void): void {\n const listeners = this.listenersMap.get(channel);\n if (!listeners) {\n return;\n }\n\n listeners.delete(fn as (data: unknown) => void);\n console.log(\"unsubscribe, remain listeners: \", listeners.size);\n\n if (listeners.size === 0) {\n console.log(\"unsubscribe channel: \", channel);\n this.listenersMap.delete(channel);\n\n // Remove subscription after initialization is complete\n this.ensureInitialized().then(() => {\n const sub = this.realtimeClient.getSubscription(channel);\n if (sub) {\n sub.unsubscribe();\n this.realtimeClient.removeSubscription(sub);\n }\n });\n }\n }\n\n private formatScientificNotation(value: unknown): string {\n if (value === null || value === undefined) {\n return \"0\";\n }\n\n const strValue = value.toString();\n if (strValue.includes(\"e-\") || strValue.includes(\"E-\")) {\n return Number(value)\n .toFixed(20)\n .replace(/\\.?0+$/, \"\");\n }\n\n return strValue;\n }\n\n subscribeTokenCandles({\n chain,\n tokenAddress,\n resolution,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n resolution: Resolution;\n callback: (data: WsTokenCandle) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-candle:${chain}_${tokenAddress}_${resolution}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) => {\n callback({\n open: data.o as string,\n close: data.c as string,\n high: data.h as string,\n low: data.l as string,\n volume: data.v as string,\n resolution: data.r as Resolution,\n time: data.t as number,\n number: data.n as number,\n });\n },\n filter,\n \"subscribeTokenCandles\",\n );\n }\n\n subscribeTokenStats({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenStat) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-stats:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n address: data.a as string,\n timestamp: data.t as number,\n buys1m: data.b1m as number,\n sells1m: data.s1m as number,\n buyers1m: data.be1m as number,\n sellers1m: data.se1m as number,\n buyVolumeInUsd1m: this.formatScientificNotation(data.bviu1m),\n sellVolumeInUsd1m: this.formatScientificNotation(data.sviu1m),\n price1m: this.formatScientificNotation(data.p1m),\n openInUsd1m: this.formatScientificNotation(data.oiu1m),\n closeInUsd1m: this.formatScientificNotation(data.ciu1m),\n\n buys5m: data.b5m as number,\n sells5m: data.s5m as number,\n buyers5m: data.be5m as number,\n sellers5m: data.se5m as number,\n buyVolumeInUsd5m: this.formatScientificNotation(data.bviu5m),\n sellVolumeInUsd5m: this.formatScientificNotation(data.sviu5m),\n price5m: this.formatScientificNotation(data.p5m),\n openInUsd5m: this.formatScientificNotation(data.oiu5m),\n closeInUsd5m: this.formatScientificNotation(data.ciu5m),\n\n buys15m: data.b15m as number,\n sells15m: data.s15m as number,\n buyers15m: data.be15m as number,\n sellers15m: data.se15m as number,\n buyVolumeInUsd15m: this.formatScientificNotation(data.bviu15m),\n sellVolumeInUsd15m: this.formatScientificNotation(data.sviu15m),\n price15m: this.formatScientificNotation(data.p15m),\n openInUsd15m: this.formatScientificNotation(data.oiu15m),\n closeInUsd15m: this.formatScientificNotation(data.ciu15m),\n\n buys30m: data.b30m as number,\n sells30m: data.s30m as number,\n buyers30m: data.be30m as number,\n sellers30m: data.se30m as number,\n buyVolumeInUsd30m: this.formatScientificNotation(data.bviu30m),\n sellVolumeInUsd30m: this.formatScientificNotation(data.sviu30m),\n price30m: this.formatScientificNotation(data.p30m),\n openInUsd30m: this.formatScientificNotation(data.oiu30m),\n closeInUsd30m: this.formatScientificNotation(data.ciu30m),\n\n buys1h: data.b1h as number,\n sells1h: data.s1h as number,\n buyers1h: data.be1h as number,\n sellers1h: data.se1h as number,\n buyVolumeInUsd1h: this.formatScientificNotation(data.bviu1h),\n sellVolumeInUsd1h: this.formatScientificNotation(data.sviu1h),\n price1h: this.formatScientificNotation(data.p1h),\n openInUsd1h: this.formatScientificNotation(data.oiu1h),\n closeInUsd1h: this.formatScientificNotation(data.ciu1h),\n\n buys4h: data.b4h as number,\n sells4h: data.s4h as number,\n buyers4h: data.be4h as number,\n sellers4h: data.se4h as number,\n buyVolumeInUsd4h: this.formatScientificNotation(data.bviu4h),\n sellVolumeInUsd4h: this.formatScientificNotation(data.sviu4h),\n price4h: this.formatScientificNotation(data.p4h),\n openInUsd4h: this.formatScientificNotation(data.oiu4h),\n closeInUsd4h: this.formatScientificNotation(data.ciu4h),\n\n buys24h: data.b24h as number,\n sells24h: data.s24h as number,\n buyers24h: data.be24h as number,\n sellers24h: data.se24h as number,\n buyVolumeInUsd24h: this.formatScientificNotation(data.bviu24h),\n sellVolumeInUsd24h: this.formatScientificNotation(data.sviu24h),\n price24h: this.formatScientificNotation(data.p24h),\n openInUsd24h: this.formatScientificNotation(data.oiu24h),\n closeInUsd24h: this.formatScientificNotation(data.ciu24h),\n\n price: this.formatScientificNotation(data.p),\n }),\n filter,\n \"subscribeTokenStats\",\n );\n }\n\n subscribeTokenHolders({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenHolder) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-holding:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n holders: data.h as number,\n top100HoldersAmount: this.formatScientificNotation(data.t100a),\n top50HoldersAmount: this.formatScientificNotation(data.t50a),\n top10HoldersAmount: this.formatScientificNotation(data.t10a),\n top100Holders: data.t100h as number,\n top50Holders: data.t50h as number,\n top10Holders: data.t10h as number,\n top100HoldersRatio: this.formatScientificNotation(data.t100r),\n top50HoldersRatio: this.formatScientificNotation(data.t50r),\n top10HoldersRatio: this.formatScientificNotation(data.t10r),\n creatorsHolders: data.ch as number,\n creatorsAmount: this.formatScientificNotation(data.ca),\n creatorsRatio: this.formatScientificNotation(data.cr),\n balanceTagFreshHolders: data.btfh as number,\n balanceTagFreshAmount: this.formatScientificNotation(data.btfa),\n balanceTagFreshRatio: this.formatScientificNotation(data.btfr),\n balanceTagSandwichHolders: data.btsh as number,\n balanceTagSandwichAmount: this.formatScientificNotation(data.btsa),\n balanceTagSandwichRatio: this.formatScientificNotation(data.btsr),\n balanceTagBundleHolders: data.btbh as number,\n balanceTagBundleAmount: this.formatScientificNotation(data.btba),\n balanceTagBundleRatio: this.formatScientificNotation(data.btbr),\n balanceTagSniperHolders: data.btsnh as number,\n balanceTagSniperAmount: this.formatScientificNotation(data.btsna),\n balanceTagSniperRatio: this.formatScientificNotation(data.btsnr),\n balanceTagDevHolders: data.btdh as number,\n balanceTagDevAmount: this.formatScientificNotation(data.btda),\n balanceTagDevRatio: this.formatScientificNotation(data.btdr),\n balanceTagProHolders: data.btph as number,\n balanceTagProAmount: this.formatScientificNotation(data.btpa),\n balanceTagProRatio: this.formatScientificNotation(data.btpr),\n balanceTagInsiderHolders: data.btih as number,\n balanceTagInsiderAmount: this.formatScientificNotation(data.btia),\n balanceTagInsiderRatio: this.formatScientificNotation(data.btir),\n balanceTagSmartHolders: data.btsmh as number,\n balanceTagSmartAmount: this.formatScientificNotation(data.btsma),\n balanceTagSmartRatio: this.formatScientificNotation(data.btsmr),\n balanceTagKolHolders: data.btkh as number,\n balanceTagKolAmount: this.formatScientificNotation(data.btka),\n balanceTagKolRatio: this.formatScientificNotation(data.btkr),\n balanceTagPhishingHolders: data.btphh as number,\n balanceTagPhishingAmount: this.formatScientificNotation(data.btpha),\n balanceTagPhishingRatio: this.formatScientificNotation(data.btphr),\n balanceTagBluechipHolders: data.btblh as number,\n balanceTagBluechipAmount: this.formatScientificNotation(data.btbla),\n balanceTagBluechipRatio: this.formatScientificNotation(data.btblr),\n balanceTagRatHolders: data.btrh as number,\n balanceTagRatAmount: this.formatScientificNotation(data.btra),\n balanceTagRatRatio: this.formatScientificNotation(data.btrr),\n timestamp: data.ts as number,\n }),\n filter,\n \"subscribeTokenHolders\",\n );\n }\n\n subscribeNewToken({\n chain,\n callback,\n filter,\n }: {\n chain: string;\n callback: (data: WsNewToken) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-new-token:${chain}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) => {\n const result: WsNewToken = {\n tokenAddress: data.a as string,\n name: data.n as string,\n symbol: data.s as string,\n createdAtMs: data.cts as number,\n };\n\n if (data.dec) {\n result.decimals = data.dec as number;\n }\n\n if (data.lf) {\n const lf = data.lf as Record<string, unknown>;\n result.launchFrom = {};\n if (lf.pa) {\n result.launchFrom.programAddress = lf.pa as string;\n }\n if (lf.pf) {\n result.launchFrom.protocolFamily = lf.pf as string;\n }\n if (lf.pn) {\n result.launchFrom.protocolName = lf.pn as string;\n }\n }\n\n callback(result);\n },\n filter,\n \"subscribeNewToken\",\n );\n }\n\n subscribeNewTokensMetadata({\n chain,\n callback,\n }: {\n chain: string;\n callback: (data: WsTokenMetadata[]) => void;\n }): Unsubscribable {\n const channel = `dex-new-tokens-metadata:${chain}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data.map(it => ({\n tokenAddress: it.a as string,\n name: it.n as string,\n symbol: it.s as string,\n imageUrl: it.iu as string,\n description: it.de as string,\n socialMedia: (() => {\n const sm = it.sm as Record<string, unknown> | undefined;\n if (!sm) return undefined;\n return {\n twitter: sm.tw as string | undefined,\n telegram: sm.tg as string | undefined,\n website: sm.w as string | undefined,\n tiktok: sm.tt as string | undefined,\n discord: sm.dc as string | undefined,\n facebook: sm.fb as string | undefined,\n github: sm.gh as string | undefined,\n instagram: sm.ig as string | undefined,\n linkedin: sm.li as string | undefined,\n medium: sm.md as string | undefined,\n reddit: sm.rd as string | undefined,\n youtube: sm.yt as string | undefined,\n bitbucket: sm.bb as string | undefined,\n };\n })(),\n createdAtMs: it.cts as number,\n })),\n ),\n );\n }\n\n subscribeTokenSupply({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenSupply) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-supply:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n supply: data.s as string,\n marketCapInUsd: data.mc as string,\n timestamp: data.ts as number,\n }),\n filter,\n \"subscribeTokenSupply\",\n );\n }\n\n subscribeTokenLiquidity({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenLiquidity) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-general-stat-num:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n metricType: data.t as WsTokenLiquidity[\"metricType\"],\n value: data.v as string,\n timestamp: data.ts as number,\n }),\n filter,\n \"subscribeTokenLiquidity\",\n );\n }\n\n /**\n * Subscribe to token max liquidity updates\n * Pushes the max liquidity info of a token in a single pool\n * Channel: dex-token-liquidity:{chain}_{token_address}\n */\n subscribeTokenMaxLiquidity({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenMaxLiquidity) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-liquidity:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n poolAddress: data.p as string,\n liquidityInUsd: data.liu as string,\n liquidityInNative: data.lin as string,\n timestamp: data.ts as number,\n }),\n filter,\n \"subscribeTokenMaxLiquidity\",\n );\n }\n\n /**\n * Subscribe to token total liquidity updates\n * Pushes the total liquidity info of a token across all pools\n * Channel: dex-token-total-liquidity:{chain}_{token_address}\n */\n subscribeTokenTotalLiquidity({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTokenTotalLiquidity) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-token-total-liquidity:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n liquidityInUsd: data.liu as string,\n liquidityInNative: data.lin as string,\n poolCount: data.pc as number,\n timestamp: data.ts as number,\n }),\n filter,\n \"subscribeTokenTotalLiquidity\",\n );\n }\n\n subscribeRankingTokensLiquidity({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: WsChannelType;\n callback: (data: WsTokenLiquidity[]) => void;\n }): Unsubscribable {\n const channel = `dex-ranking-token-general_stat_num-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(it => ({\n tokenAddress: it.a as string,\n metricType: it.t as WsTokenLiquidity[\"metricType\"],\n value: it.v as string,\n timestamp: it.ts as number,\n })),\n ),\n );\n }\n\n subscribeRankingTokensList({\n chain,\n ranking_type,\n dex,\n callback,\n }: {\n chain: string;\n ranking_type: WsRankingType;\n dex?: WsDex;\n callback: (data: WsRankingTokenList[]) => void;\n }): Unsubscribable {\n const channel = dex\n ? `dex-ranking-list:${chain}_${ranking_type}_${dex}`\n : `dex-ranking-list:${chain}_${ranking_type}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(item => {\n const result: WsRankingTokenList = {};\n const t = item.t as Record<string, unknown> | undefined;\n const bc = item.bc as Record<string, unknown> | undefined;\n const h = item.h as Record<string, unknown> | undefined;\n const s = item.s as Record<string, unknown> | undefined;\n const ts = item.ts as Record<string, unknown> | undefined;\n\n // TokenMetadata (t)\n if (t) {\n result.metadata = {\n tokenAddress: t.a as string,\n };\n if (t.n) {\n result.metadata.name = t.n as string;\n }\n if (t.s) {\n result.metadata.symbol = t.s as string;\n }\n if (t.iu) {\n result.metadata.imageUrl = t.iu as string;\n }\n if (t.de) {\n result.metadata.description = t.de as string;\n }\n if (t.dec) {\n result.metadata.decimals = t.dec as number;\n }\n if (t.cts) {\n result.metadata.createdAtMs = t.cts as number;\n }\n if (t.lf) {\n const lf = t.lf as Record<string, unknown>;\n result.metadata.launchFrom = {};\n if (lf.pa) {\n result.metadata.launchFrom.programAddress = lf.pa as string;\n }\n if (lf.pf) {\n result.metadata.launchFrom.protocolFamily = lf.pf as string;\n }\n if (lf.pn) {\n result.metadata.launchFrom.protocolName = lf.pn as string;\n }\n }\n if (t.mt) {\n const mt = t.mt as Record<string, unknown>;\n result.metadata.migratedTo = {};\n if (mt.pa) {\n result.metadata.migratedTo.programAddress = mt.pa as string;\n }\n if (mt.pf) {\n result.metadata.migratedTo.protocolFamily = mt.pf as string;\n }\n if (mt.pn) {\n result.metadata.migratedTo.protocolName = mt.pn as string;\n }\n }\n if (t.sm) {\n const sm = t.sm as Record<string, unknown>;\n result.metadata.socialMedia = {};\n if (sm.tw) {\n result.metadata.socialMedia.twitter = sm.tw as string;\n }\n if (sm.tg) {\n result.metadata.socialMedia.telegram = sm.tg as string;\n }\n if (sm.w) {\n result.metadata.socialMedia.website = sm.w as string;\n }\n if (sm.tt) {\n result.metadata.socialMedia.tiktok = sm.tt as string;\n }\n if (sm.dc) {\n result.metadata.socialMedia.discord = sm.dc as string;\n }\n if (sm.fb) {\n result.metadata.socialMedia.facebook = sm.fb as string;\n }\n if (sm.gh) {\n result.metadata.socialMedia.github = sm.gh as string;\n }\n if (sm.ig) {\n result.metadata.socialMedia.instagram = sm.ig as string;\n }\n if (sm.li) {\n result.metadata.socialMedia.linkedin = sm.li as string;\n }\n if (sm.md) {\n result.metadata.socialMedia.medium = sm.md as string;\n }\n if (sm.rd) {\n result.metadata.socialMedia.reddit = sm.rd as string;\n }\n if (sm.yt) {\n result.metadata.socialMedia.youtube = sm.yt as string;\n }\n if (sm.bb) {\n result.metadata.socialMedia.bitbucket = sm.bb as string;\n }\n }\n }\n\n // WsTokenBondingCurve (bc)\n if (bc) {\n result.bondingCurve = {};\n if (bc.pr) {\n result.bondingCurve.progressRatio = this.formatScientificNotation(bc.pr);\n }\n }\n\n // TokenHolder (h)\n if (h) {\n result.holder = {\n tokenAddress: h.a as string,\n timestamp: (h.ts as number) || 0,\n };\n if (h.h) {\n result.holder.holders = h.h as number;\n }\n if (h.t100a) {\n result.holder.top100HoldersAmount = this.formatScientificNotation(h.t100a);\n }\n if (h.t50a) {\n result.holder.top50HoldersAmount = this.formatScientificNotation(h.t50a);\n }\n if (h.t10a) {\n result.holder.top10HoldersAmount = this.formatScientificNotation(h.t10a);\n }\n if (h.t100h) {\n result.holder.top100Holders = h.t100h as number;\n }\n if (h.t50h) {\n result.holder.top50Holders = h.t50h as number;\n }\n if (h.t10h) {\n result.holder.top10Holders = h.t10h as number;\n }\n if (h.t100r) {\n result.holder.top100HoldersRatio = this.formatScientificNotation(h.t100r);\n }\n if (h.t50r) {\n result.holder.top50HoldersRatio = this.formatScientificNotation(h.t50r);\n }\n if (h.t10r) {\n result.holder.top10HoldersRatio = this.formatScientificNotation(h.t10r);\n }\n }\n\n // WsTokenSupply (s)\n if (s) {\n result.supply = {\n tokenAddress: s.a as string,\n timestamp: (s.ts as number) || 0,\n };\n if (s.s) {\n result.supply.supply = s.s as string;\n }\n if (s.mc) {\n result.supply.marketCapInUsd = s.mc as string;\n }\n }\n\n // TokenStat (ts)\n if (ts) {\n result.stat = {\n address: ts.a as string,\n timestamp: (ts.t as number) || 0,\n };\n\n // 1m data\n if (ts.b1m) {\n result.stat.buys1m = ts.b1m as number;\n }\n if (ts.s1m) {\n result.stat.sells1m = ts.s1m as number;\n }\n if (ts.be1m) {\n result.stat.buyers1m = ts.be1m as number;\n }\n if (ts.se1m) {\n result.stat.sellers1m = ts.se1m as number;\n }\n if (ts.bviu1m) {\n result.stat.buyVolumeInUsd1m = this.formatScientificNotation(ts.bviu1m);\n }\n if (ts.sviu1m) {\n result.stat.sellVolumeInUsd1m = this.formatScientificNotation(ts.sviu1m);\n }\n if (ts.p1m) {\n result.stat.price1m = this.formatScientificNotation(ts.p1m);\n }\n\n // Current price\n if (ts.p) {\n result.stat.price = this.formatScientificNotation(ts.p);\n }\n }\n\n return result;\n }),\n ),\n );\n }\n\n subscribeRankingTokensStats({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: WsChannelType;\n callback: (data: WsTokenStat[]) => void;\n }): Unsubscribable {\n const channel = `dex-ranking-token-stats-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(\n it =>\n ({\n address: it.a,\n timestamp: it.t,\n buys1m: it.b1m,\n sells1m: it.s1m,\n buyers1m: it.be1m,\n sellers1m: it.se1m,\n buyVolumeInUsd1m: this.formatScientificNotation(it.bviu1m),\n sellVolumeInUsd1m: this.formatScientificNotation(it.sviu1m),\n price1m: this.formatScientificNotation(it.p1m),\n openInUsd1m: this.formatScientificNotation(it.oiu1m),\n closeInUsd1m: this.formatScientificNotation(it.ciu1m),\n buys5m: it.b5m,\n sells5m: it.s5m,\n buyers5m: it.be5m,\n sellers5m: it.se5m,\n buyVolumeInUsd5m: this.formatScientificNotation(it.bviu5m),\n sellVolumeInUsd5m: this.formatScientificNotation(it.sviu5m),\n price5m: this.formatScientificNotation(it.p5m),\n openInUsd5m: this.formatScientificNotation(it.oiu5m),\n closeInUsd5m: this.formatScientificNotation(it.ciu5m),\n price: this.formatScientificNotation(it.p),\n }) as WsTokenStat,\n ),\n ),\n );\n }\n\n subscribeRankingTokensHolders({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: WsChannelType;\n callback: (data: WsTokenHolder[]) => void;\n }): Unsubscribable {\n const channel = `dex-ranking-token-holding-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(\n it =>\n ({\n tokenAddress: it.a,\n holders: it.h,\n top100HoldersAmount: this.formatScientificNotation(it.t100a),\n top50HoldersAmount: this.formatScientificNotation(it.t50a),\n top10HoldersAmount: this.formatScientificNotation(it.t10a),\n top100Holders: it.t100h,\n top50Holders: it.t50h,\n top10Holders: it.t10h,\n top100HoldersRatio: this.formatScientificNotation(it.t100r),\n top50HoldersRatio: this.formatScientificNotation(it.t50r),\n top10HoldersRatio: this.formatScientificNotation(it.t10r),\n timestamp: it.ts,\n }) as WsTokenHolder,\n ),\n ),\n );\n }\n\n subscribeRankingTokensSupply({\n chain,\n channelType,\n callback,\n }: {\n chain: string;\n channelType: WsChannelType;\n callback: (data: WsTokenSupply[]) => void;\n }): Unsubscribable {\n const channel = `dex-ranking-token-supply-list:${chain}_${channelType}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(it => ({\n tokenAddress: it.a as string,\n supply: it.s as string,\n marketCapInUsd: it.mc as string,\n timestamp: it.ts as number,\n })),\n ),\n );\n }\n\n subscribeRankingTokensBondingCurve({\n chain,\n callback,\n }: {\n chain: string;\n callback: (data: WsTokenBondingCurve[]) => void;\n }): Unsubscribable {\n const channel = `dex-ranking-token-bounding-curve-list:${chain}_new`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(it => ({\n tokenAddress: it.a as string,\n progressRatio: it.pr as string,\n })),\n ),\n );\n }\n\n subscribeWalletBalance({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WsWalletBalance[]) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-wallet-balance:${chain}_${walletAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback([\n {\n walletAddress: data.a as string,\n tokenAddress: data.ta as string,\n tokenPriceInUsd: data.tpiu as string,\n balance: data.b as string,\n timestamp: data.t as number,\n },\n ]),\n filter,\n \"subscribeWalletBalance\",\n );\n }\n\n subscribeWalletPnl({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WsWalletTokenPnl) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-wallet-token-pnl:${chain}_${walletAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n walletAddress: data.a as string,\n tokenAddress: data.ta as string,\n tokenPriceInUsd: data.tpiu as string,\n timestamp: data.t as number,\n opentime: data.ot as number,\n lasttime: data.lt as number,\n closetime: data.ct as number,\n buyAmount: data.ba as string,\n buyAmountInUsd: data.baiu as string,\n buyCount: data.bs as number,\n buyCount30d: data.bs30d as number,\n buyCount7d: data.bs7d as number,\n sellAmount: data.sa as string,\n sellAmountInUsd: data.saiu as string,\n sellCount: data.ss as number,\n sellCount30d: data.ss30d as number,\n sellCount7d: data.ss7d as number,\n heldDurationTimestamp: data.hdts as number,\n averageBuyPriceInUsd: data.abpiu as string,\n averageSellPriceInUsd: data.aspiu as string,\n unrealizedProfitInUsd: data.upiu as string,\n unrealizedProfitRatio: data.upr as string,\n realizedProfitInUsd: data.rpiu as string,\n realizedProfitRatio: data.rpr as string,\n totalRealizedProfitInUsd: data.trpiu as string,\n totalRealizedProfitRatio: data.trr as string,\n }),\n filter,\n \"subscribeWalletPnl\",\n );\n }\n\n subscribeWalletPnlList({\n chain,\n walletAddress,\n callback,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WsWalletPnl[]) => void;\n }): Unsubscribable {\n const channel = `dex-wallet-pnl-list:${chain}_${walletAddress}`;\n return this.subscribe(channel, (data: Record<string, unknown>[]) =>\n callback(\n data?.map(\n it =>\n ({\n walletAddress: it.a,\n buys: it.bs,\n buyAmount: it.ba,\n buyAmountInUsd: it.baiu,\n averageBuyPriceInUsd: it.abpiu,\n sellAmount: it.sa,\n sellAmountInUsd: it.saiu,\n sells: it.ss,\n wins: it.ws,\n winRatio: it.wr,\n pnlInUsd: it.piu,\n averagePnlInUsd: it.apiu,\n pnlRatio: it.pr,\n profitableDays: it.pd,\n losingDays: it.ld,\n tokens: it.ts,\n resolution: it.r,\n }) as WsWalletPnl,\n ),\n ),\n );\n }\n\n subscribeTokenTrade({\n chain,\n tokenAddress,\n callback,\n filter,\n }: {\n chain: string;\n tokenAddress: string;\n callback: (data: WsTradeActivity) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-trade:${chain}_${tokenAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n timestamp: data.t as number,\n kind: data.k as string,\n buyAmount: data.ba as string,\n buyAmountInUsd: data.baiu as string,\n buyTokenAddress: data.btma as string,\n buyTokenName: data.btn as string,\n buyTokenSymbol: data.bts as string,\n buyWalletAddress: data.bwa as string,\n sellAmount: data.sa as string,\n sellAmountInUsd: data.saiu as string,\n sellTokenAddress: data.stma as string,\n sellTokenName: data.stn as string,\n sellTokenSymbol: data.sts as string,\n sellWalletAddress: data.swa as string,\n txHash: data.h as string,\n }),\n filter,\n \"subscribeTokenTrades\",\n );\n }\n\n subscribeWalletTrade({\n chain,\n walletAddress,\n callback,\n filter,\n }: {\n chain: string;\n walletAddress: string;\n callback: (data: WsTradeActivity) => void;\n filter?: string;\n }): Unsubscribable {\n const channel = `dex-wallet-trade:${chain}_${walletAddress}`;\n return this.subscribe(\n channel,\n (data: Record<string, unknown>) =>\n callback({\n tokenAddress: data.a as string,\n timestamp: data.t as number,\n kind: data.k as string,\n buyAmount: data.ba as string,\n buyAmountInUsd: data.baiu as string,\n buyTokenAddress: data.btma as string,\n buyTokenName: data.btn as string,\n buyTokenSymbol: data.bts as string,\n buyWalletAddress: data.bwa as string,\n sellAmount: data.sa as string,\n sellAmountInUsd: data.saiu as string,\n sellTokenAddress: data.stma as string,\n sellTokenName: data.stn as string,\n sellTokenSymbol: data.sts as string,\n sellWalletAddress: data.swa as string,\n txHash: data.h as string,\n }),\n filter,\n \"subscribeTokenTrades\",\n );\n }\n\n subscribeDexPoolBalance({\n chain,\n poolAddress,\n callback,\n }: {\n chain: string;\n poolAddress: string;\n callback: (data: WsDexPoolBalance) => void;\n }): Unsubscribable {\n const channel = `dex-pool-balance:${chain}_${poolAddress}`;\n return this.subscribe(channel, (data: Record<string, unknown>) =>\n callback({\n poolAddress: data.a as string,\n tokenAAddress: data.taa as string,\n tokenALiquidityInUsd: data.taliu as string,\n tokenBAddress: data.tba as string,\n tokenBLiquidityInUsd: data.tbliu as string,\n }),\n );\n }\n}\n\nclass StreamUnsubscribable<T> {\n constructor(\n private readonly streamApi: StreamApi,\n private readonly channel: string,\n private readonly fn: (data: T) => void,\n ) {}\n\n unsubscribe(): void {\n this.streamApi.unsubscribe(this.channel, this.fn);\n }\n}\n","/**\n * Field mappings for CEL filter expressions\n * Maps human-readable field names to short field names used in the API\n * Organized by subscription method to handle field name conflicts\n */\n\nexport interface FieldMapping {\n readonly [key: string]: string;\n}\n\nexport interface MethodFieldMappings {\n readonly [methodName: string]: FieldMapping;\n}\n\n/**\n * Field mappings organized by subscription method\n * Each method can have its own field mappings to handle conflicts\n */\nexport const CEL_FIELD_MAPPINGS: MethodFieldMappings = {\n // Wallet balance subscription fields\n subscribeWalletBalance: {\n walletAddress: \"a\",\n tokenAddress: \"ta\",\n tokenPriceInUsd: \"tpiu\",\n balance: \"b\",\n timestamp: \"t\",\n },\n\n // Token candles subscription fields\n subscribeTokenCandles: {\n open: \"o\",\n close: \"c\",\n high: \"h\",\n low: \"l\",\n volume: \"v\",\n resolution: \"r\",\n time: \"t\",\n number: \"n\",\n },\n\n // Token stats subscription fields\n subscribeTokenStats: {\n address: \"a\",\n timestamp: \"t\",\n buys1m: \"b1m\",\n sells1m: \"s1m\",\n buyers1m: \"be1m\",\n sellers1m: \"se1m\",\n buyVolumeInUsd1m: \"bviu1m\",\n sellVolumeInUsd1m: \"sviu1m\",\n price1m: \"p1m\",\n openInUsd1m: \"oiu1m\",\n closeInUsd1m: \"ciu1m\",\n buys5m: \"b5m\",\n sells5m: \"s5m\",\n buyers5m: \"be5m\",\n sellers5m: \"se5m\",\n buyVolumeInUsd5m: \"bviu5m\",\n sellVolumeInUsd5m: \"sviu5m\",\n price5m: \"p5m\",\n openInUsd5m: \"oiu5m\",\n closeInUsd5m: \"ciu5m\",\n buys15m: \"b15m\",\n sells15m: \"s15m\",\n buyers15m: \"be15m\",\n sellers15m: \"se15m\",\n buyVolumeInUsd15m: \"bviu15m\",\n sellVolumeInUsd15m: \"sviu15m\",\n price15m: \"p15m\",\n openInUsd15m: \"oiu15m\",\n closeInUsd15m: \"ciu15m\",\n buys30m: \"b30m\",\n sells30m: \"s30m\",\n buyers30m: \"be30m\",\n sellers30m: \"se30m\",\n buyVolumeInUsd30m: \"bviu30m\",\n sellVolumeInUsd30m: \"sviu30m\",\n price30m: \"p30m\",\n openInUsd30m: \"oiu30m\",\n closeInUsd30m: \"ciu30m\",\n buys1h: \"b1h\",\n sells1h: \"s1h\",\n buyers1h: \"be1h\",\n sellers1h: \"se1h\",\n buyVolumeInUsd1h: \"bviu1h\",\n sellVolumeInUsd1h: \"sviu1h\",\n price1h: \"p1h\",\n openInUsd1h: \"oiu1h\",\n closeInUsd1h: \"ciu1h\",\n buys4h: \"b4h\",\n sells4h: \"s4h\",\n buyers4h: \"be4h\",\n sellers4h: \"se4h\",\n buyVolumeInUsd4h: \"bviu4h\",\n sellVolumeInUsd4h: \"sviu4h\",\n price4h: \"p4h\",\n openInUsd4h: \"oiu4h\",\n closeInUsd4h: \"ciu4h\",\n buys24h: \"b24h\",\n sells24h: \"s24h\",\n buyers24h: \"be24h\",\n sellers24h: \"se24h\",\n buyVolumeInUsd24h: \"bviu24h\",\n sellVolumeInUsd24h: \"sviu24h\",\n price24h: \"p24h\",\n price: \"p\",\n openInUsd24h: \"oiu24h\",\n closeInUsd24h: \"ciu24h\",\n },\n\n // Token holder subscription fields\n subscribeTokenHolders: {\n tokenAddress: \"a\",\n holders: \"h\",\n top100HoldersAmount: \"t100a\",\n top50HoldersAmount: \"t50a\",\n top10HoldersAmount: \"t10a\",\n top100Holders: \"t100h\",\n top50Holders: \"t50h\",\n top10Holders: \"t10h\",\n top100HoldersRatio: \"t100r\",\n top50HoldersRatio: \"t50r\",\n top10HoldersRatio: \"t10r\",\n creatorsHolders: \"ch\",\n creatorsAmount: \"ca\",\n creatorsRatio: \"cr\",\n balanceTagFreshHolders: \"btfh\",\n balanceTagFreshAmount: \"btfa\",\n balanceTagFreshRatio: \"btfr\",\n balanceTagSandwichHolders: \"btsh\",\n balanceTagSandwichAmount: \"btsa\",\n balanceTagSandwichRatio: \"btsr\",\n balanceTagBundleHolders: \"btbh\",\n balanceTagBundleAmount: \"btba\",\n balanceTagBundleRatio: \"btbr\",\n balanceTagSniperHolders: \"btsnh\",\n balanceTagSniperAmount: \"btsna\",\n balanceTagSniperRatio: \"btsnr\",\n balanceTagDevHolders: \"btdh\",\n balanceTagDevAmount: \"btda\",\n balanceTagDevRatio: \"btdr\",\n balanceTagProHolders: \"btph\",\n balanceTagProAmount: \"btpa\",\n balanceTagProRatio: \"btpr\",\n balanceTagInsiderHolders: \"btih\",\n balanceTagInsiderAmount: \"btia\",\n balanceTagInsiderRatio: \"btir\",\n balanceTagSmartHolders: \"btsmh\",\n balanceTagSmartAmount: \"btsma\",\n balanceTagSmartRatio: \"btsmr\",\n balanceTagKolHolders: \"btkh\",\n balanceTagKolAmount: \"btka\",\n balanceTagKolRatio: \"btkr\",\n balanceTagPhishingHolders: \"btphh\",\n balanceTagPhishingAmount: \"btpha\",\n balanceTagPhishingRatio: \"btphr\",\n balanceTagBluechipHolders: \"btblh\",\n balanceTagBluechipAmount: \"btbla\",\n balanceTagBluechipRatio: \"btblr\",\n balanceTagRatHolders: \"btrh\",\n balanceTagRatAmount: \"btra\",\n balanceTagRatRatio: \"btrr\",\n timestamp: \"ts\",\n },\n\n // New token subscription fields\n subscribeNewToken: {\n tokenAddress: \"a\",\n name: \"n\",\n symbol: \"s\",\n createdAtMs: \"cts\",\n },\n\n // Token supply subscription fields\n subscribeTokenSupply: {\n tokenAddress: \"a\",\n supply: \"s\",\n timestamp: \"ts\",\n },\n\n // Dex pool balance subscription fields\n subscribeDexPoolBalance: {\n poolAddress: \"a\",\n tokenAAddress: \"taa\",\n tokenALiquidityInUsd: \"taliu\",\n tokenBAddress: \"tba\",\n tokenBLiquidityInUsd: \"tbliu\",\n },\n\n // Token liquidity subscription fields\n subscribeTokenLiquidity: {\n tokenAddress: \"a\",\n metricType: \"t\",\n value: \"v\",\n timestamp: \"ts\",\n },\n\n // New token metadata subscription fields\n subscribeNewTokensMetadata: {\n tokenAddress: \"a\",\n name: \"n\",\n symbol: \"s\",\n imageUrl: \"iu\",\n description: \"de\",\n socialMedia: \"sm\",\n createdAtMs: \"cts\",\n },\n\n // Token trades subscription fields\n subscribeTokenTrades: {\n tokenAddress: \"a\",\n timestamp: \"t\",\n kind: \"k\",\n buyAmount: \"ba\",\n buyAmountInUsd: \"baiu\",\n buyTokenAddress: \"btma\",\n buyTokenName: \"btn\",\n buyTokenSymbol: \"bts\",\n buyWalletAddress: \"bwa\",\n sellAmount: \"sa\",\n sellAmountInUsd: \"saiu\",\n sellTokenAddress: \"stma\",\n sellTokenName: \"stn\",\n sellTokenSymbol: \"sts\",\n sellWalletAddress: \"swa\",\n txHash: \"h\",\n },\n\n // Wallet token PnL subscription fields\n subscribeWalletPnl: {\n walletAddress: \"a\",\n tokenAddress: \"ta\",\n tokenPriceInUsd: \"tpiu\",\n timestamp: \"t\",\n opentime: \"ot\",\n lasttime: \"lt\",\n closetime: \"ct\",\n buyAmount: \"ba\",\n buyAmountInUsd: \"baiu\",\n buyCount: \"bs\",\n buyCount30d: \"bs30d\",\n buyCount7d: \"bs7d\",\n sellAmount: \"sa\",\n sellAmountInUsd: \"saiu\",\n sellCount: \"ss\",\n sellCount30d: \"ss30d\",\n sellCount7d: \"ss7d\",\n heldDurationTimestamp: \"hdts\",\n averageBuyPriceInUsd: \"abpiu\",\n averageSellPriceInUsd: \"aspiu\",\n unrealizedProfitInUsd: \"upiu\",\n unrealizedProfitRatio: \"upr\",\n realizedProfitInUsd: \"rpiu\",\n realizedProfitRatio: \"rpr\",\n totalRealizedProfitInUsd: \"trpiu\",\n totalRealizedProfitRatio: \"trr\",\n },\n\n // Token max liquidity subscription fields\n subscribeTokenMaxLiquidity: {\n tokenAddress: \"a\",\n poolAddress: \"p\",\n liquidityInUsd: \"liu\",\n liquidityInNative: \"lin\",\n timestamp: \"ts\",\n },\n\n // Token total liquidity subscription fields\n subscribeTokenTotalLiquidity: {\n tokenAddress: \"a\",\n liquidityInUsd: \"liu\",\n liquidityInNative: \"lin\",\n poolCount: \"pc\",\n timestamp: \"ts\",\n },\n} as const;\n\n/**\n * Get field mappings for a specific subscription method\n * @param methodName - The name of the subscription method\n * @returns Field mapping object for the method, or empty object if not found\n */\nexport function getFieldMappings(methodName: string): FieldMapping {\n return CEL_FIELD_MAPPINGS[methodName] || {};\n}\n\n/**\n * Replace long field names with short field names in a filter expression\n * Automatically adds meta. prefix if not present\n * @param filter - Original filter expression\n * @param methodName - The name of the subscription method\n * @returns Filter expression with short field names and meta. prefix\n */\nexport function replaceFilterFields(filter: string, methodName: string): string {\n if (!filter) {\n return filter;\n }\n\n const fieldMappings = getFieldMappings(methodName);\n let result = filter;\n\n // Replace all long field names with short field names\n for (const [longField, shortField] of Object.entries(fieldMappings)) {\n // Handle both cases: with and without meta. prefix\n const patterns = [\n // Pattern 1: fieldName (without meta. prefix)\n new RegExp(`\\\\b${longField}\\\\b`, \"g\"),\n // Pattern 2: meta.fieldName (with meta. prefix)\n new RegExp(`\\\\bmeta\\\\.${longField}\\\\b`, \"g\"),\n ];\n\n patterns.forEach(pattern => {\n result = result.replace(pattern, `meta.${shortField}`);\n });\n }\n\n return result;\n}\n\n/**\n * Type-safe field mapping for specific subscription methods\n */\nexport type SubscriptionMethod = keyof typeof CEL_FIELD_MAPPINGS;\n\n/**\n * Get available field names for a specific subscription method\n * @param methodName - The name of the subscription method\n * @returns Array of available field names\n */\nexport function getAvailableFields(methodName: string): string[] {\n const mappings = getFieldMappings(methodName);\n return Object.keys(mappings);\n}\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n BlockchainDTO,\n BlockchainLatestBlockDTO,\n ChainSymbol,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.GET_SUPPORTED_BLOCKCHAINS.DESCRIPTION\n * @summary CONTROLLER.GET_SUPPORTED_BLOCKCHAINS.SUMMARY\n */\nexport const getSupportedBlockchains = (options?: SecondParameter<typeof chainstreamApiClient>) => {\n return chainstreamApiClient<BlockchainDTO[]>({ url: `/v1/blockchain`, method: \"GET\" }, options);\n};\n/**\n * CONTROLLER.GET_LATEST_BLOCK.DESCRIPTION\n * @summary CONTROLLER.GET_LATEST_BLOCK.SUMMARY\n */\nexport const getLatestBlock = (\n chain: ChainSymbol,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<BlockchainLatestBlockDTO>(\n { url: `/v1/blockchain/${chain}/latest_block`, method: \"GET\" },\n options,\n );\n};\nexport type GetSupportedBlockchainsResult = NonNullable<\n Awaited<ReturnType<typeof getSupportedBlockchains>>\n>;\nexport type GetLatestBlockResult = NonNullable<Awaited<ReturnType<typeof getLatestBlock>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n MoonshotCreateTokenInput,\n MoonshotCreateTokenReply,\n MoonshotSubmitCreateToken200,\n MoonshotSubmitCreateTokenInput,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.MOONSHOT.CREATE_TOKEN.DESCRIPTION\n * @summary CONTROLLER.MOONSHOT.CREATE_TOKEN.SUMMARY\n */\nexport const moonshotCreateToken = (\n moonshotCreateTokenInput: MoonshotCreateTokenInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<MoonshotCreateTokenReply>(\n {\n url: `/v1/sol/moonshot/create`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: moonshotCreateTokenInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.MOONSHOT.SUBMIT_CREATE_TOKEN.DESCRIPTION\n * @summary CONTROLLER.MOONSHOT.SUBMIT_CREATE_TOKEN.SUMMARY\n */\nexport const moonshotSubmitCreateToken = (\n moonshotSubmitCreateTokenInput: MoonshotSubmitCreateTokenInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<MoonshotSubmitCreateToken200>(\n {\n url: `/v1/sol/moonshot/submitCreateToken`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: moonshotSubmitCreateTokenInput,\n },\n options,\n );\n};\nexport type MoonshotCreateTokenResult = NonNullable<\n Awaited<ReturnType<typeof moonshotCreateToken>>\n>;\nexport type MoonshotSubmitCreateTokenResult = NonNullable<\n Awaited<ReturnType<typeof moonshotSubmitCreateToken>>\n>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type { PumpCreateTokenInput, PumpCreateTokenReply } from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.PUMPFUN.CREATE_TOKEN.DESCRIPTION\n * @summary CONTROLLER.PUMPFUN.CREATE_TOKEN.SUMMARY\n */\nexport const pumpfunCreateToken = (\n pumpCreateTokenInput: PumpCreateTokenInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<PumpCreateTokenReply>(\n {\n url: `/v1/sol/pumpfun/create`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: pumpCreateTokenInput,\n },\n options,\n );\n};\nexport type PumpfunCreateTokenResult = NonNullable<Awaited<ReturnType<typeof pumpfunCreateToken>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n ChainSymbol,\n DexPoolDTO,\n DexPoolSnapshotPage,\n GetDexpoolSnapshotsParams,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.DEXPOOL.GET.DESCRIPTION\n * @summary CONTROLLER.DEXPOOL.GET.SUMMARY\n */\nexport const getDexpool = (\n chain: ChainSymbol,\n poolAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DexPoolDTO>(\n { url: `/v1/dexpools/${chain}/${poolAddress}`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.DEXPOOL.SNAPSHOTS.DESCRIPTION\n * @summary CONTROLLER.DEXPOOL.SNAPSHOTS.SUMMARY\n */\nexport const getDexpoolSnapshots = (\n chain: ChainSymbol,\n poolAddress: string,\n params?: GetDexpoolSnapshotsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DexPoolSnapshotPage>(\n { url: `/v1/dexpools/${chain}/${poolAddress}/snapshots`, method: \"GET\", params },\n options,\n );\n};\nexport type GetDexpoolResult = NonNullable<Awaited<ReturnType<typeof getDexpool>>>;\nexport type GetDexpoolSnapshotsResult = NonNullable<\n Awaited<ReturnType<typeof getDexpoolSnapshots>>\n>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n ChainSymbol,\n CreateTokenInput,\n CreateTokenReply,\n DexPage,\n DexQuoteResponse,\n ListDexParams,\n QuoteParams,\n SwapInput,\n SwapReply,\n SwapRouteInput,\n SwapRouteResponse,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.DEX.SWAP.DESCRIPTION\n * @summary CONTROLLER.DEX.SWAP.SUMMARY\n */\nexport const swap = (\n chain: ChainSymbol,\n swapInput: SwapInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<SwapReply>(\n {\n url: `/v1/dex/${chain}/swap`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: swapInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.DEX.ROUTE.DESCRIPTION\n * @summary CONTROLLER.DEX.ROUTE.SUMMARY\n */\nexport const route = (\n chain: ChainSymbol,\n swapRouteInput: SwapRouteInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<SwapRouteResponse>(\n {\n url: `/v1/dex/${chain}/route`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: swapRouteInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.DEX.QUOTE.DESCRIPTION\n * @summary CONTROLLER.DEX.QUOTE.SUMMARY\n */\nexport const quote = (\n chain: ChainSymbol,\n params: QuoteParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DexQuoteResponse>(\n { url: `/v1/dex/${chain}/quote`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.DEX.CREATE.DESCRIPTION\n * @summary CONTROLLER.DEX.CREATE.SUMMARY\n */\nexport const createToken = (\n chain: ChainSymbol,\n createTokenInput: CreateTokenInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<CreateTokenReply>(\n {\n url: `/v1/dex/${chain}/create`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createTokenInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.DEX.LIST.DESCRIPTION\n * @summary CONTROLLER.DEX.LIST.SUMMARY\n */\nexport const listDex = (\n params?: ListDexParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DexPage>({ url: `/v1/dex`, method: \"GET\", params }, options);\n};\nexport type SwapResult = NonNullable<Awaited<ReturnType<typeof swap>>>;\nexport type RouteResult = NonNullable<Awaited<ReturnType<typeof route>>>;\nexport type QuoteResult = NonNullable<Awaited<ReturnType<typeof quote>>>;\nexport type CreateTokenResult = NonNullable<Awaited<ReturnType<typeof createToken>>>;\nexport type ListDexResult = NonNullable<Awaited<ReturnType<typeof listDex>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n CreateEndpointInput,\n EndpointListResponse,\n EndpointOperationResponse,\n EndpointResponse,\n EndpointSecretResponse,\n ListEndpointsParams,\n UpdateEndpointInput,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.ENDPOINT.LIST.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.LIST.SUMMARY\n */\nexport const listEndpoints = (\n params?: ListEndpointsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointListResponse>(\n { url: `/v1/webhook/endpoint`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.CREATE.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.CREATE.SUMMARY\n */\nexport const createEndpoint = (\n createEndpointInput: CreateEndpointInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointResponse>(\n {\n url: `/v1/webhook/endpoint`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createEndpointInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.UPDATE.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.UPDATE.SUMMARY\n */\nexport const updateEndpoint = (\n updateEndpointInput: UpdateEndpointInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointResponse>(\n {\n url: `/v1/webhook/endpoint`,\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n data: updateEndpointInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.GET.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.GET.SUMMARY\n */\nexport const getEndpoint = (id: string, options?: SecondParameter<typeof chainstreamApiClient>) => {\n return chainstreamApiClient<EndpointResponse>(\n { url: `/v1/webhook/endpoint/${id}`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.DELETE.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.DELETE.SUMMARY\n */\nexport const deleteEndpoint = (\n id: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointOperationResponse>(\n { url: `/v1/webhook/endpoint/${id}`, method: \"DELETE\" },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.GET.SECRET.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.GET.SECRET.SUMMARY\n */\nexport const getEndpointSecret = (\n id: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointSecretResponse>(\n { url: `/v1/webhook/endpoint/${id}/secret`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.ENDPOINT.ROTATE.DESCRIPTION\n * @summary CONTROLLER.ENDPOINT.ROTATE.SUMMARY\n */\nexport const rotateEndpointSecret = (\n id: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EndpointOperationResponse>(\n { url: `/v1/webhook/endpoint/${id}/secret/rotate`, method: \"POST\" },\n options,\n );\n};\nexport type ListEndpointsResult = NonNullable<Awaited<ReturnType<typeof listEndpoints>>>;\nexport type CreateEndpointResult = NonNullable<Awaited<ReturnType<typeof createEndpoint>>>;\nexport type UpdateEndpointResult = NonNullable<Awaited<ReturnType<typeof updateEndpoint>>>;\nexport type GetEndpointResult = NonNullable<Awaited<ReturnType<typeof getEndpoint>>>;\nexport type DeleteEndpointResult = NonNullable<Awaited<ReturnType<typeof deleteEndpoint>>>;\nexport type GetEndpointSecretResult = NonNullable<Awaited<ReturnType<typeof getEndpointSecret>>>;\nexport type RotateEndpointSecretResult = NonNullable<\n Awaited<ReturnType<typeof rotateEndpointSecret>>\n>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.IPFS.PRESIGN.DESCRIPTION\n * @summary CONTROLLER.IPFS.PRESIGN.SUMMARY\n */\nexport const presign = (options?: SecondParameter<typeof chainstreamApiClient>) => {\n return chainstreamApiClient<string>({ url: `/v1/ipfs/presign`, method: \"POST\" }, options);\n};\nexport type PresignResult = NonNullable<Awaited<ReturnType<typeof presign>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type { JobDTO, JobStreamingDTO } from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.JOB.GET.DESCRIPTION\n * @summary CONTROLLER.JOB.GET.SUMMARY\n */\nexport const get = (id: string, options?: SecondParameter<typeof chainstreamApiClient>) => {\n return chainstreamApiClient<JobDTO>({ url: `/v1/jobs/${id}`, method: \"GET\" }, options);\n};\n/**\n * CONTROLLER.JOB.STREAMING.DESCRIPTION\n * @summary CONTROLLER.JOB.STREAMING.SUMMARY\n */\nexport const streaming = (id: string, options?: SecondParameter<typeof chainstreamApiClient>) => {\n return chainstreamApiClient<JobStreamingDTO>(\n { url: `/v1/jobs/${id}/streaming`, method: \"GET\" },\n options,\n );\n};\nexport type GetResult = NonNullable<Awaited<ReturnType<typeof get>>>;\nexport type StreamingResult = NonNullable<Awaited<ReturnType<typeof streaming>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n AddressRiskResponseDTO,\n KYTRegisterTransferRequest,\n KYTRegisterWithdrawalRequest,\n RegisterAddressRequest,\n RegisterAddressResponseDTO,\n TransferAlertsResponseDTO,\n TransferBaseResponseDTO,\n TransferDirectExposureResponseDTO,\n TransferNetworkIdentificationsResponseDTO,\n WithdrawalAddressIdentificationsResponseDTO,\n WithdrawalBaseResponseDTO,\n WithdrawalFraudAssessmentResponseDTO,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.KYT.REGISTER_TRANSFER.DESCRIPTION\n * @summary CONTROLLER.KYT.REGISTER_TRANSFER.SUMMARY\n */\nexport const registerTransfer = (\n kYTRegisterTransferRequest: KYTRegisterTransferRequest,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferBaseResponseDTO>(\n {\n url: `/v1/kyt/transfer`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: kYTRegisterTransferRequest,\n },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_TRANSFER_SUMMARY.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_TRANSFER_SUMMARY.SUMMARY\n */\nexport const getTransferSummary = (\n transferId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferBaseResponseDTO>(\n { url: `/v1/kyt/transfers/${transferId}/summary`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_TRANSFER_DIRECT_EXPOSURE.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_TRANSFER_DIRECT_EXPOSURE.SUMMARY\n */\nexport const getTransferDirectExposure = (\n transferId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferDirectExposureResponseDTO>(\n { url: `/v1/kyt/transfers/${transferId}/exposures/direct`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_TRANSFER_ALERTS.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_TRANSFER_ALERTS.SUMMARY\n */\nexport const getTransferAlerts = (\n transferId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferAlertsResponseDTO>(\n { url: `/v1/kyt/transfers/${transferId}/alerts`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_TRANSFER_NETWORK_IDENTIFICATIONS.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_TRANSFER_NETWORK_IDENTIFICATIONS.SUMMARY\n */\nexport const getTransferNetworkIdentifications = (\n transferId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferNetworkIdentificationsResponseDTO>(\n { url: `/v1/kyt/transfers/${transferId}/network-identifications`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.REGISTER_WITHDRAWAL.DESCRIPTION\n * @summary CONTROLLER.KYT.REGISTER_WITHDRAWAL.SUMMARY\n */\nexport const registerWithdrawal = (\n kYTRegisterWithdrawalRequest: KYTRegisterWithdrawalRequest,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WithdrawalBaseResponseDTO>(\n {\n url: `/v1/kyt/withdrawal`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: kYTRegisterWithdrawalRequest,\n },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_SUMMARY.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_SUMMARY.SUMMARY\n */\nexport const getWithdrawalSummary = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WithdrawalBaseResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/summary`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_DIRECT_EXPOSURE.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_DIRECT_EXPOSURE.SUMMARY\n */\nexport const getWithdrawalDirectExposure = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferDirectExposureResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/exposures/direct`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_ALERTS.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_ALERTS.SUMMARY\n */\nexport const getWithdrawalAlerts = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferAlertsResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/alerts`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_ADDRESS_IDENTIFICATIONS.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_ADDRESS_IDENTIFICATIONS.SUMMARY\n */\nexport const getWithdrawalAddressIdentifications = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WithdrawalAddressIdentificationsResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/address-identifications`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_NETWORK_IDENTIFICATIONS.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_NETWORK_IDENTIFICATIONS.SUMMARY\n */\nexport const getWithdrawalNetworkIdentifications = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TransferNetworkIdentificationsResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/network-identifications`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_WITHDRAWAL_FRAUD_ASSESSMENT.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_WITHDRAWAL_FRAUD_ASSESSMENT.SUMMARY\n */\nexport const getWithdrawalFraudAssessment = (\n withdrawalId: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WithdrawalFraudAssessmentResponseDTO>(\n { url: `/v1/kyt/withdrawal/${withdrawalId}/fraud-assessment`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.REGISTER_ADDRESS.DESCRIPTION\n * @summary CONTROLLER.KYT.REGISTER_ADDRESS.SUMMARY\n */\nexport const registerAddress = (\n registerAddressRequest: RegisterAddressRequest,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RegisterAddressResponseDTO>(\n {\n url: `/v1/kyt/address`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: registerAddressRequest,\n },\n options,\n );\n};\n/**\n * CONTROLLER.KYT.GET_ADDRESS_RISK.DESCRIPTION\n * @summary CONTROLLER.KYT.GET_ADDRESS_RISK.SUMMARY\n */\nexport const getAddressRisk = (\n address: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<AddressRiskResponseDTO>(\n { url: `/v1/kyt/addresses/${address}/risk`, method: \"GET\" },\n options,\n );\n};\nexport type RegisterTransferResult = NonNullable<Awaited<ReturnType<typeof registerTransfer>>>;\nexport type GetTransferSummaryResult = NonNullable<Awaited<ReturnType<typeof getTransferSummary>>>;\nexport type GetTransferDirectExposureResult = NonNullable<\n Awaited<ReturnType<typeof getTransferDirectExposure>>\n>;\nexport type GetTransferAlertsResult = NonNullable<Awaited<ReturnType<typeof getTransferAlerts>>>;\nexport type GetTransferNetworkIdentificationsResult = NonNullable<\n Awaited<ReturnType<typeof getTransferNetworkIdentifications>>\n>;\nexport type RegisterWithdrawalResult = NonNullable<Awaited<ReturnType<typeof registerWithdrawal>>>;\nexport type GetWithdrawalSummaryResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalSummary>>\n>;\nexport type GetWithdrawalDirectExposureResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalDirectExposure>>\n>;\nexport type GetWithdrawalAlertsResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalAlerts>>\n>;\nexport type GetWithdrawalAddressIdentificationsResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalAddressIdentifications>>\n>;\nexport type GetWithdrawalNetworkIdentificationsResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalNetworkIdentifications>>\n>;\nexport type GetWithdrawalFraudAssessmentResult = NonNullable<\n Awaited<ReturnType<typeof getWithdrawalFraudAssessment>>\n>;\nexport type RegisterAddressResult = NonNullable<Awaited<ReturnType<typeof registerAddress>>>;\nexport type GetAddressRiskResult = NonNullable<Awaited<ReturnType<typeof getAddressRisk>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n ChainSymbol,\n GetFinalStretchTokensParams,\n GetHotTokensParams,\n GetMigratedTokensParams,\n GetNewTokensParams,\n GetStocksTokensParams,\n Token,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.RANKING.HOT_TOKENS.DESCRIPTION\n * @summary CONTROLLER.RANKING.HOT_TOKENS.SUMMARY\n */\nexport const getHotTokens = (\n chain: ChainSymbol,\n duration: \"1m\" | \"5m\" | \"1h\" | \"4h\" | \"24h\",\n params?: GetHotTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/ranking/${chain}/hotTokens/${duration}`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RANKING.NEW_TOKENS.DESCRIPTION\n * @summary CONTROLLER.RANKING.NEW_TOKENS.SUMMARY\n */\nexport const getNewTokens = (\n chain: ChainSymbol,\n params?: GetNewTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/ranking/${chain}/newTokens`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RANKING.STOCKS_TOKENS.DESCRIPTION\n * @summary CONTROLLER.RANKING.STOCKS_TOKENS.SUMMARY\n */\nexport const getStocksTokens = (\n chain: ChainSymbol,\n params?: GetStocksTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/ranking/${chain}/stocks`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RANKING.FINAL_STRETCH_TOKENS.DESCRIPTION\n * @summary CONTROLLER.RANKING.FINAL_STRETCH_TOKENS.SUMMARY\n */\nexport const getFinalStretchTokens = (\n chain: ChainSymbol,\n params?: GetFinalStretchTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/ranking/${chain}/finalStretch`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RANKING.MIGRATED_TOKENS.DESCRIPTION\n * @summary CONTROLLER.RANKING.MIGRATED_TOKENS.SUMMARY\n */\nexport const getMigratedTokens = (\n chain: ChainSymbol,\n params?: GetMigratedTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/ranking/${chain}/migrated`, method: \"GET\", params },\n options,\n );\n};\nexport type GetHotTokensResult = NonNullable<Awaited<ReturnType<typeof getHotTokens>>>;\nexport type GetNewTokensResult = NonNullable<Awaited<ReturnType<typeof getNewTokens>>>;\nexport type GetStocksTokensResult = NonNullable<Awaited<ReturnType<typeof getStocksTokens>>>;\nexport type GetFinalStretchTokensResult = NonNullable<\n Awaited<ReturnType<typeof getFinalStretchTokens>>\n>;\nexport type GetMigratedTokensResult = NonNullable<Awaited<ReturnType<typeof getMigratedTokens>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n ChainSymbol,\n ClaimRedPacketInput,\n CreateRedPacketInput,\n CreateRedPacketReply,\n GetClaimsByAddressParams,\n GetClaimsParams,\n GetRedpacketsByAddressParams,\n GetRedpacketsParams,\n RedPacketClaimsPage,\n RedPacketDTO,\n RedPacketReply,\n RedPacketSendTxInput,\n RedPacketSendTxResponse,\n RedPacketsPage,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.RED_PACKET.CREATE.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.CREATE.SUMMARY\n */\nexport const createRedpacket = (\n chain: ChainSymbol,\n createRedPacketInput: CreateRedPacketInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<CreateRedPacketReply>(\n {\n url: `/v1/redpacket/${chain}/create`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: createRedPacketInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.CLAIM.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.CLAIM.SUMMARY\n */\nexport const claimRedpacket = (\n chain: ChainSymbol,\n claimRedPacketInput: ClaimRedPacketInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketReply>(\n {\n url: `/v1/redpacket/${chain}/claim`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: claimRedPacketInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.GET.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.GET.SUMMARY\n */\nexport const getRedpacket = (\n id: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketDTO>({ url: `/v1/redpacket/${id}`, method: \"GET\" }, options);\n};\n/**\n * CONTROLLER.RED_PACKET.GET_CLAIMS.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.GET_CLAIMS.SUMMARY\n */\nexport const getClaims = (\n id: string,\n params?: GetClaimsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketClaimsPage>(\n { url: `/v1/redpacket/${id}/claims`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.GET_REDPACKETS.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.GET_REDPACKETS.SUMMARY\n */\nexport const getRedpackets = (\n params?: GetRedpacketsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketsPage>(\n { url: `/v1/redpacket`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.GET_CLAIMS_BY_ADDRESS.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.GET_CLAIMS_BY_ADDRESS.SUMMARY\n */\nexport const getClaimsByAddress = (\n address: string,\n params?: GetClaimsByAddressParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketClaimsPage>(\n { url: `/v1/redpacket/wallet/${address}/claims`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.GET_REDPACKETS_BY_ADDRESS.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.GET_REDPACKETS_BY_ADDRESS.SUMMARY\n */\nexport const getRedpacketsByAddress = (\n address: string,\n params?: GetRedpacketsByAddressParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketsPage>(\n { url: `/v1/redpacket/wallet/${address}/redpackets`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.RED_PACKET.SEND.DESCRIPTION\n * @summary CONTROLLER.RED_PACKET.SEND.SUMMARY\n */\nexport const redpacketSend = (\n chain: ChainSymbol,\n redPacketSendTxInput: RedPacketSendTxInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<RedPacketSendTxResponse>(\n {\n url: `/v1/redpacket/${chain}/send`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: redPacketSendTxInput,\n },\n options,\n );\n};\nexport type CreateRedpacketResult = NonNullable<Awaited<ReturnType<typeof createRedpacket>>>;\nexport type ClaimRedpacketResult = NonNullable<Awaited<ReturnType<typeof claimRedpacket>>>;\nexport type GetRedpacketResult = NonNullable<Awaited<ReturnType<typeof getRedpacket>>>;\nexport type GetClaimsResult = NonNullable<Awaited<ReturnType<typeof getClaims>>>;\nexport type GetRedpacketsResult = NonNullable<Awaited<ReturnType<typeof getRedpackets>>>;\nexport type GetClaimsByAddressResult = NonNullable<Awaited<ReturnType<typeof getClaimsByAddress>>>;\nexport type GetRedpacketsByAddressResult = NonNullable<\n Awaited<ReturnType<typeof getRedpacketsByAddress>>\n>;\nexport type RedpacketSendResult = NonNullable<Awaited<ReturnType<typeof redpacketSend>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n Candle,\n ChainSymbol,\n DevTokenDTO,\n DexPoolPage,\n GetCandlesParams,\n GetHoldersMultiParams,\n GetHoldersParams,\n GetMarketDataMulti200,\n GetMarketDataMultiParams,\n GetMetadataMulti200,\n GetMetadataMultiParams,\n GetMintAndBurnParams,\n GetPoolsParams,\n GetPriceByTimeParams,\n GetPricesParams,\n GetSecurity200,\n GetStatsMulti200,\n GetStatsMultiParams,\n GetTokenLiquiditySnapshotsParams,\n GetTokensParams,\n ListTokenParams,\n SearchParams,\n Token,\n TokenCreationDTO,\n TokenCreationPage,\n TokenHolder,\n TokenHolderPage,\n TokenLiquiditySnapshotPage,\n TokenListPage,\n TokenMarketData,\n TokenMetadata,\n TokenPage,\n TokenPriceDTO,\n TokenPricePage,\n TokenStat,\n TokenTrader,\n TokenTraderTag,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.TOKEN.SEARCH.DESCRIPTION\n * @summary CONTROLLER.TOKEN.SEARCH.SUMMARY\n */\nexport const search = (\n params?: SearchParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenPage>(\n { url: `/v1/token/search`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_TOKENS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_TOKENS.SUMMARY\n */\nexport const getTokens = (\n chain: ChainSymbol,\n params: GetTokensParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token[]>(\n { url: `/v1/token/${chain}/multi`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET.SUMMARY\n */\nexport const getToken = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Token>(\n { url: `/v1/token/${chain}/${tokenAddress}`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_METADATA.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_METADATA.SUMMARY\n */\nexport const getMetadata = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenMetadata>(\n { url: `/v1/token/${chain}/${tokenAddress}/metadata`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_METADATA_MULTI.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_METADATA_MULTI.SUMMARY\n */\nexport const getMetadataMulti = (\n chain: ChainSymbol,\n params: GetMetadataMultiParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<GetMetadataMulti200>(\n { url: `/v1/token/${chain}/metadata/multi`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_POOLS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_POOLS.SUMMARY\n */\nexport const getPools = (\n chain: ChainSymbol,\n tokenAddress: string,\n params?: GetPoolsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DexPoolPage>(\n { url: `/v1/token/${chain}/${tokenAddress}/pools`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_STATS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_STATS.SUMMARY\n */\nexport const getStats = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenStat>(\n { url: `/v1/token/${chain}/${tokenAddress}/stats`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_STATS_MULTI.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_STATS_MULTI.SUMMARY\n */\nexport const getStatsMulti = (\n chain: ChainSymbol,\n params: GetStatsMultiParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<GetStatsMulti200>(\n { url: `/v1/token/${chain}/stats/multi`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_HOLDERS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_HOLDERS.SUMMARY\n */\nexport const getHolders = (\n chain: ChainSymbol,\n tokenAddress: string,\n params?: GetHoldersParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenHolderPage>(\n { url: `/v1/token/${chain}/${tokenAddress}/holders`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_HOLDERS_MULTI.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_HOLDERS_MULTI.SUMMARY\n */\nexport const getHoldersMulti = (\n chain: ChainSymbol,\n tokenAddress: string,\n params: GetHoldersMultiParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenHolder[]>(\n { url: `/v1/token/${chain}/${tokenAddress}/holders/multi`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_CANDLES.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_CANDLES.SUMMARY\n */\nexport const getCandles = (\n chain: ChainSymbol,\n tokenAddress: string,\n params: GetCandlesParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<Candle[]>(\n { url: `/v1/token/${chain}/${tokenAddress}/candles`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_TOP_HOLDERS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_TOP_HOLDERS.SUMMARY\n */\nexport const getTopHolders = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenHolderPage>(\n { url: `/v1/token/${chain}/${tokenAddress}/topHolders`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_MARKET_CAP.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_MARKET_CAP.SUMMARY\n */\nexport const getMarketData = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenMarketData>(\n { url: `/v1/token/${chain}/${tokenAddress}/marketData`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_MARKET_DATA_MULTI.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_MARKET_DATA_MULTI.SUMMARY\n */\nexport const getMarketDataMulti = (\n chain: ChainSymbol,\n params: GetMarketDataMultiParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<GetMarketDataMulti200>(\n { url: `/v1/token/${chain}/marketData/multi`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_PRICES.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_PRICES.SUMMARY\n */\nexport const getPrices = (\n chain: ChainSymbol,\n tokenAddress: string,\n params?: GetPricesParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenPricePage>(\n { url: `/v1/token/${chain}/${tokenAddress}/prices`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_PRICE_BY_TIME.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_PRICE_BY_TIME.SUMMARY\n */\nexport const getPriceByTime = (\n chain: ChainSymbol,\n tokenAddress: string,\n params: GetPriceByTimeParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenPriceDTO>(\n { url: `/v1/token/${chain}/${tokenAddress}/price`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_CREATION.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_CREATION.SUMMARY\n */\nexport const getCreation = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenCreationDTO>(\n { url: `/v1/token/${chain}/${tokenAddress}/creation`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_MINT_AND_BURN.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_MINT_AND_BURN.SUMMARY\n */\nexport const getMintAndBurn = (\n chain: ChainSymbol,\n tokenAddress: string,\n params?: GetMintAndBurnParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenCreationPage>(\n { url: `/v1/token/${chain}/${tokenAddress}/mintAndBurn`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_TOKEN_LIST.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_TOKEN_LIST.SUMMARY\n */\nexport const listToken = (\n chain: ChainSymbol,\n params?: ListTokenParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenListPage>(\n { url: `/v1/token/${chain}/list`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_SECURITY.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_SECURITY.SUMMARY\n */\nexport const getSecurity = (\n chain: ChainSymbol,\n tokenAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<GetSecurity200>(\n { url: `/v1/token/${chain}/${tokenAddress}/security`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_DEV_TOKENS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_DEV_TOKENS.SUMMARY\n */\nexport const getDevTokens = (\n chain: ChainSymbol,\n devAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<DevTokenDTO[]>(\n { url: `/v1/token/${chain}/dev/${devAddress}/tokens`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_TOKEN_TRADERS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_TOKEN_TRADERS.SUMMARY\n */\nexport const getTokenTraders = (\n chain: ChainSymbol,\n tokenAddress: string,\n tag: TokenTraderTag,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenTrader[]>(\n { url: `/v1/token/${chain}/${tokenAddress}/traders/${tag}`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TOKEN.GET_LIQUIDITY_SNAPSHOTS.DESCRIPTION\n * @summary CONTROLLER.TOKEN.GET_LIQUIDITY_SNAPSHOTS.SUMMARY\n */\nexport const getTokenLiquiditySnapshots = (\n chain: ChainSymbol,\n tokenAddress: string,\n params?: GetTokenLiquiditySnapshotsParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TokenLiquiditySnapshotPage>(\n { url: `/v1/token/${chain}/${tokenAddress}/liquiditySnapshots`, method: \"GET\", params },\n options,\n );\n};\nexport type SearchResult = NonNullable<Awaited<ReturnType<typeof search>>>;\nexport type GetTokensResult = NonNullable<Awaited<ReturnType<typeof getTokens>>>;\nexport type GetTokenResult = NonNullable<Awaited<ReturnType<typeof getToken>>>;\nexport type GetMetadataResult = NonNullable<Awaited<ReturnType<typeof getMetadata>>>;\nexport type GetMetadataMultiResult = NonNullable<Awaited<ReturnType<typeof getMetadataMulti>>>;\nexport type GetPoolsResult = NonNullable<Awaited<ReturnType<typeof getPools>>>;\nexport type GetStatsResult = NonNullable<Awaited<ReturnType<typeof getStats>>>;\nexport type GetStatsMultiResult = NonNullable<Awaited<ReturnType<typeof getStatsMulti>>>;\nexport type GetHoldersResult = NonNullable<Awaited<ReturnType<typeof getHolders>>>;\nexport type GetHoldersMultiResult = NonNullable<Awaited<ReturnType<typeof getHoldersMulti>>>;\nexport type GetCandlesResult = NonNullable<Awaited<ReturnType<typeof getCandles>>>;\nexport type GetTopHoldersResult = NonNullable<Awaited<ReturnType<typeof getTopHolders>>>;\nexport type GetMarketDataResult = NonNullable<Awaited<ReturnType<typeof getMarketData>>>;\nexport type GetMarketDataMultiResult = NonNullable<Awaited<ReturnType<typeof getMarketDataMulti>>>;\nexport type GetPricesResult = NonNullable<Awaited<ReturnType<typeof getPrices>>>;\nexport type GetPriceByTimeResult = NonNullable<Awaited<ReturnType<typeof getPriceByTime>>>;\nexport type GetCreationResult = NonNullable<Awaited<ReturnType<typeof getCreation>>>;\nexport type GetMintAndBurnResult = NonNullable<Awaited<ReturnType<typeof getMintAndBurn>>>;\nexport type ListTokenResult = NonNullable<Awaited<ReturnType<typeof listToken>>>;\nexport type GetSecurityResult = NonNullable<Awaited<ReturnType<typeof getSecurity>>>;\nexport type GetDevTokensResult = NonNullable<Awaited<ReturnType<typeof getDevTokens>>>;\nexport type GetTokenTradersResult = NonNullable<Awaited<ReturnType<typeof getTokenTraders>>>;\nexport type GetTokenLiquiditySnapshotsResult = NonNullable<\n Awaited<ReturnType<typeof getTokenLiquiditySnapshots>>\n>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n ChainSymbol,\n GetActivitiesParams,\n GetTopTradersParams,\n GetTradesParams,\n TopTradersPage,\n TradePage,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.TRADE.GET.TOKEN.DESCRIPTION\n * @summary CONTROLLER.TRADE.GET.TOKEN.SUMMARY\n */\nexport const getTrades = (\n chain: ChainSymbol,\n params?: GetTradesParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TradePage>(\n { url: `/v1/trade/${chain}`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TRADE.GET.TOKEN_ACTIVITIES.DESCRIPTION\n * @summary CONTROLLER.TRADE.GET.TOKEN_ACTIVITIES.SUMMARY\n */\nexport const getActivities = (\n chain: ChainSymbol,\n params?: GetActivitiesParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TradePage>(\n { url: `/v1/trade/${chain}/activities`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.TRADE.GET.TOP_TRADERS.DESCRIPTION\n * @summary CONTROLLER.TRADE.GET.TOP_TRADERS.SUMMARY\n */\nexport const getTopTraders = (\n chain: ChainSymbol,\n params: GetTopTradersParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<TopTradersPage>(\n { url: `/v1/trade/${chain}/top-traders`, method: \"GET\", params },\n options,\n );\n};\nexport type GetTradesResult = NonNullable<Awaited<ReturnType<typeof getTrades>>>;\nexport type GetActivitiesResult = NonNullable<Awaited<ReturnType<typeof getActivities>>>;\nexport type GetTopTradersResult = NonNullable<Awaited<ReturnType<typeof getTopTraders>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n EstimateGasLimitInput,\n EstimateGasLimitResponse,\n GasPriceResponse,\n SendTxInput,\n SendTxResponse,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.TRANSACTION.SEND.DESCRIPTION\n * @summary CONTROLLER.TRANSACTION.SEND.SUMMARY\n */\nexport const send = (\n chain: string,\n sendTxInput: SendTxInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<SendTxResponse>(\n {\n url: `/v1/transaction/${chain}/send`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: sendTxInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.TRANSACTION.GET_GAS_PRICE.DESCRIPTION\n * @summary CONTROLLER.TRANSACTION.GET_GAS_PRICE.SUMMARY\n */\nexport const getGasPrice = (\n chain: \"bsc\" | \"eth\",\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<GasPriceResponse>(\n { url: `/v1/transaction/${chain}/gas-price`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.TRANSACTION.ESTIMATE_GAS_LIMIT.DESCRIPTION\n * @summary CONTROLLER.TRANSACTION.ESTIMATE_GAS_LIMIT.SUMMARY\n */\nexport const getGasLimit = (\n chain: \"bsc\" | \"eth\",\n estimateGasLimitInput: EstimateGasLimitInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<EstimateGasLimitResponse>(\n {\n url: `/v1/transaction/${chain}/estimate-gas-limit`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: estimateGasLimitInput,\n },\n options,\n );\n};\nexport type SendResult = NonNullable<Awaited<ReturnType<typeof send>>>;\nexport type GetGasPriceResult = NonNullable<Awaited<ReturnType<typeof getGasPrice>>>;\nexport type GetGasLimitResult = NonNullable<Awaited<ReturnType<typeof getGasLimit>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type {\n BalanceUpdatePage,\n BooleanResultDTO,\n CalculatePnlInput,\n ChainSymbol,\n GetBalanceParams,\n GetBalanceUpdatesParams,\n GetPnlParams,\n WalletBalancesDTO,\n WalletPnlDTO,\n} from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.WALLET.GET_PNL.DESCRIPTION\n * @summary CONTROLLER.WALLET.GET_PNL.SUMMARY\n */\nexport const getPnl = (\n chain: ChainSymbol,\n walletAddress: string,\n params?: GetPnlParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WalletPnlDTO[]>(\n { url: `/v1/wallet/${chain}/${walletAddress}/pnl`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.WALLET.GET_PNL_STATS.DESCRIPTION\n * @summary CONTROLLER.WALLET.GET_PNL_STATS.SUMMARY\n */\nexport const getPnlStats = (\n chain: ChainSymbol,\n walletAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WalletPnlDTO[]>(\n { url: `/v1/wallet/${chain}/${walletAddress}/stats`, method: \"GET\" },\n options,\n );\n};\n/**\n * CONTROLLER.WALLET.GET_BALANCES.DESCRIPTION\n * @summary CONTROLLER.WALLET.GET_BALANCES.SUMMARY\n */\nexport const getBalance = (\n chain: ChainSymbol,\n walletAddress: string,\n params?: GetBalanceParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<WalletBalancesDTO>(\n { url: `/v1/wallet/${chain}/${walletAddress}/balance`, method: \"GET\", params },\n options,\n );\n};\n/**\n * CONTROLLER.WALLET.CALCULATE_PNL.DESCRIPTION\n * @summary CONTROLLER.WALLET.CALCULATE_PNL.SUMMARY\n */\nexport const calculatePnl = (\n chain: ChainSymbol,\n walletAddress: string,\n calculatePnlInput: CalculatePnlInput,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<BooleanResultDTO>(\n {\n url: `/v1/wallet/${chain}/${walletAddress}/calculate-pnl`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: calculatePnlInput,\n },\n options,\n );\n};\n/**\n * CONTROLLER.WALLET.GET_BALANCE_UPDATES.DESCRIPTION\n * @summary CONTROLLER.WALLET.GET_BALANCE_UPDATES.SUMMARY\n */\nexport const getBalanceUpdates = (\n chain: ChainSymbol,\n walletAddress: string,\n params?: GetBalanceUpdatesParams,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<BalanceUpdatePage>(\n { url: `/v1/wallet/${chain}/${walletAddress}/balance-updates`, method: \"GET\", params },\n options,\n );\n};\nexport type GetPnlResult = NonNullable<Awaited<ReturnType<typeof getPnl>>>;\nexport type GetPnlStatsResult = NonNullable<Awaited<ReturnType<typeof getPnlStats>>>;\nexport type GetBalanceResult = NonNullable<Awaited<ReturnType<typeof getBalance>>>;\nexport type CalculatePnlResult = NonNullable<Awaited<ReturnType<typeof calculatePnl>>>;\nexport type GetBalanceUpdatesResult = NonNullable<Awaited<ReturnType<typeof getBalanceUpdates>>>;\n","/**\n * Generated by orval v7.6.0 🍺\n * Do not edit manually.\n * Dex Aggregator API\n * Dex Aggregator API ⚡️\n * OpenAPI spec version: 1.0\n */\nimport type { BooleanResultDTO, ChainSymbol } from \"../dexAggregatorAPI.schemas\";\n\nimport { chainstreamApiClient } from \"../../chainstreamApiClient.js\";\n\ntype SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n/**\n * CONTROLLER.WATCHLIST.ADD.DESCRIPTION\n * @summary CONTROLLER.WATCHLIST.ADD.SUMMARY\n */\nexport const watchlistAdd = (\n chain: ChainSymbol,\n walletAddress: string,\n options?: SecondParameter<typeof chainstreamApiClient>,\n) => {\n return chainstreamApiClient<BooleanResultDTO>(\n { url: `/v1/watchlist/${chain}/${walletAddress}`, method: \"POST\" },\n options,\n );\n};\nexport type WatchlistAddResult = NonNullable<Awaited<ReturnType<typeof watchlistAdd>>>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAAoC;;;ACApC,mBAAyD;AACzD,yBAA6C;AA2B7C,IAAI;AACJ,IAAI,iBAAoD;AAOjD,IAAM,YAAY,CAAC,YAAmC;AAC3D,QAAM,UAAU,QAAQ,YAAY;AAEpC,mBAAiB;AAAA,IACf,GAAG;AAAA,IACH,UAAU;AAAA,EACZ;AAEA,kBAAgB,aAAAA,QAAM,OAAO;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,yBAAAC,SAAW,eAAe;AAAA,IACxB,YAAY;AAAA,EACd,CAAC;AAGD,gBAAc,aAAa,QAAQ,IAAI,OAAM,WAAU;AACrD,UAAM,QACJ,OAAO,QAAQ,gBAAgB,WAC3B,QAAQ,cACR,MAAM,QAAQ,YAAY,SAAS;AAEzC,WAAO,QAAQ,gBAAgB,UAAU,KAAK;AAC9C,WAAO,QAAQ,cAAc,IAAI;AAEjC,QAAI,QAAQ,QAAQ;AAClB,aAAO,QAAQ,UAAU,IAAI,QAAQ;AAAA,IACvC;AACA,QAAI,QAAQ,eAAe;AACzB,aAAO,QAAQ,kBAAkB,IAAI,QAAQ;AAAA,IAC/C;AAEA,QAAI,QAAQ,WAAW;AACrB,cAAQ,IAAI,qBAAqB,OAAO,QAAQ,YAAY,CAAC,IAAI,OAAO,GAAG,EAAE;AAAA,IAC/E;AAEA,WAAO;AAAA,EACT,CAAC;AAGD,MAAI,QAAQ,WAAW;AACrB,kBAAc,aAAa,SAAS;AAAA,MAClC,cAAY;AACV,gBAAQ,IAAI,+BAA+B,SAAS,QAAQ,SAAS,IAAI;AACzE,eAAO;AAAA,MACT;AAAA,MACA,WAAS;AACP,gBAAQ,MAAM,4BAA4B,MAAM,UAAU,QAAQ,MAAM,UAAU,IAAI;AACtF,eAAO,QAAQ,OAAO,KAAK;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACF;AASA,IAAM,oBAAoB,CACxB,QACA,mBACuB;AACvB,MAAI,CAAC,gBAAgB;AACnB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,MACP,GAAI,OAAO,WAAW,CAAC;AAAA,MACvB,qBAAqB;AAAA,IACvB;AAAA,EACF;AACF;AAUO,IAAM,uBAAuB,OAClC,QACA,mBACe;AACf,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,gEAAgE;AAAA,EAClF;AAEA,MAAI,CAAC,OAAO,OAAO,OAAO,QAAQ,IAAI;AACpC,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AAEA,MAAI,CAAC,OAAO,UAAU,OAAO,WAAW,IAAI;AAC1C,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AAGA,QAAM,2BAA2B,kBAAkB,QAAQ,cAAc;AAEzE,MAAI;AACF,UAAM,WAAW,MAAM,cAAc,wBAAwB;AAC7D,WAAO,SAAS;AAAA,EAClB,SAAS,OAAO;AAEd,QAAI,aAAAD,QAAM,aAAa,KAAK,KAAK,MAAM,UAAU;AAC/C,YAAM,aAAa,MAAM,SAAS;AAClC,YAAM,eAAe,MAAM,SAAS;AAEpC,YAAM,IAAI;AAAA,QACR,0BAA0B,UAAU,MAClC,OAAO,iBAAiB,WAAW,eAAe,KAAK,UAAU,YAAY,CAC/E;AAAA,MACF;AAAA,IACF;AAEA,UAAM;AAAA,EACR;AACF;;;AChKA,wBAAmD;;;ACkB5C,IAAM,qBAA0C;AAAA;AAAA,EAErD,wBAAwB;AAAA,IACtB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA;AAAA,EAGA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAAA;AAAA,EAGA,qBAAqB;AAAA,IACnB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,UAAU;AAAA,IACV,cAAc;AAAA,IACd,eAAe;AAAA,IACf,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,UAAU;AAAA,IACV,cAAc;AAAA,IACd,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,cAAc;AAAA,IACd,eAAe;AAAA,EACjB;AAAA;AAAA,EAGA,uBAAuB;AAAA,IACrB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,cAAc;AAAA,IACd,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,wBAAwB;AAAA,IACxB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,2BAA2B;AAAA,IAC3B,0BAA0B;AAAA,IAC1B,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,IACxB,wBAAwB;AAAA,IACxB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,IACpB,2BAA2B;AAAA,IAC3B,0BAA0B;AAAA,IAC1B,yBAAyB;AAAA,IACzB,2BAA2B;AAAA,IAC3B,0BAA0B;AAAA,IAC1B,yBAAyB;AAAA,IACzB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,IACpB,WAAW;AAAA,EACb;AAAA;AAAA,EAGA,mBAAmB;AAAA,IACjB,cAAc;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AAAA;AAAA,EAGA,sBAAsB;AAAA,IACpB,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AAAA;AAAA,EAGA,yBAAyB;AAAA,IACvB,aAAa;AAAA,IACb,eAAe;AAAA,IACf,sBAAsB;AAAA,IACtB,eAAe;AAAA,IACf,sBAAsB;AAAA,EACxB;AAAA;AAAA,EAGA,yBAAyB;AAAA,IACvB,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA;AAAA,EAGA,4BAA4B;AAAA,IAC1B,cAAc;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA;AAAA,EAGA,sBAAsB;AAAA,IACpB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,MAAM;AAAA,IACN,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,QAAQ;AAAA,EACV;AAAA;AAAA,EAGA,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,cAAc;AAAA,IACd,aAAa;AAAA,IACb,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,0BAA0B;AAAA,IAC1B,0BAA0B;AAAA,EAC5B;AAAA;AAAA,EAGA,4BAA4B;AAAA,IAC1B,cAAc;AAAA,IACd,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,WAAW;AAAA,EACb;AAAA;AAAA,EAGA,8BAA8B;AAAA,IAC5B,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AACF;AAOO,SAAS,iBAAiB,YAAkC;AACjE,SAAO,mBAAmB,UAAU,KAAK,CAAC;AAC5C;AASO,SAAS,oBAAoB,QAAgB,YAA4B;AAC9E,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,iBAAiB,UAAU;AACjD,MAAI,SAAS;AAGb,aAAW,CAAC,WAAW,UAAU,KAAK,OAAO,QAAQ,aAAa,GAAG;AAEnE,UAAM,WAAW;AAAA;AAAA,MAEf,IAAI,OAAO,MAAM,SAAS,OAAO,GAAG;AAAA;AAAA,MAEpC,IAAI,OAAO,aAAa,SAAS,OAAO,GAAG;AAAA,IAC7C;AAEA,aAAS,QAAQ,aAAW;AAC1B,eAAS,OAAO,QAAQ,SAAS,QAAQ,UAAU,EAAE;AAAA,IACvD,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;AD/RO,IAAM,YAAN,MAAgB;AAAA,EAMrB,YAAY,SAAoC;AALhD,wBAAQ;AACR,wBAAQ;AACR,wBAAQ;AACR,wBAAQ,eAAoC;AAG1C,SAAK,UAAU;AACf,SAAK,eAAe,oBAAI,IAAI;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,aAA4B;AACxC,QAAI,KAAK,gBAAgB;AACvB;AAAA,IACF;AAGA,UAAM,QAAQ,MAAM,KAAK,cAAc;AACvC,UAAM,mBAAmB,KAAK,WAAW,KAAK,QAAQ,WAAW,KAAK;AAEtE,SAAK,iBAAiB,IAAI,6BAAW,kBAAkB;AAAA,MACrD,UAAU,OAAO,SAAiC;AAChD,eAAO,KAAK,cAAc;AAAA,MAC5B;AAAA,IACF,CAAC;AAED,SAAK,eACF,GAAG,aAAa,MAAM;AACrB,cAAQ,IAAI,uBAAuB;AAAA,IACrC,CAAC,EACA,GAAG,gBAAgB,SAAO;AACzB,cAAQ,KAAK,4BAA4B,GAAG;AAAA,IAC9C,CAAC,EACA,GAAG,SAAS,SAAO;AAClB,cAAQ,MAAM,uBAAuB,GAAG;AAAA,IAC1C,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,oBAAmC;AAC/C,QAAI,CAAC,KAAK,aAAa;AAErB,WAAK,QAAQ;AAAA,IACf;AACA,UAAM,KAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAiC;AAC7C,WAAO,OAAO,KAAK,QAAQ,gBAAgB,WACvC,KAAK,QAAQ,cACb,MAAM,KAAK,QAAQ,YAAY,SAAS;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAW,UAAkB,OAAuB;AAC1D,UAAM,MAAM,IAAI,IAAI,QAAQ;AAC5B,QAAI,aAAa,IAAI,SAAS,KAAK;AACnC,WAAO,IAAI,SAAS;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAgB;AAEd,SAAK,cAAc,KAAK,WAAW,EAAE,KAAK,MAAM;AAC9C,WAAK,eAAe,QAAQ;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAmB;AACjB,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,WAAW;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAuB;AACrB,WAAO,KAAK,gBAAgB,UAAU;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAsB;AACpB,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,cAAc;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAqB;AACnB,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,aAAa;AAAA,IACnC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,eAAyD;AAEtE,SAAK,cAAc;AAGnB,UAAM,kBAAkB,cAAc;AAGtC,SAAK,aAAa;AAElB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB,iBAAyC;AACxD,QAAI,CAAC,mBAAmB,gBAAgB,WAAW,GAAG;AACpD;AAAA,IACF;AAGA,oBAAgB,QAAQ,WAAS;AAC/B,UAAI,SAAS,OAAO,MAAM,gBAAgB,YAAY;AACpD,cAAM,YAAY;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,UACE,SACA,IACA,QACA,YACgB;AAEhB,QAAI,YAAY,KAAK,aAAa,IAAI,OAAO;AAC7C,QAAI,CAAC,WAAW;AACd,kBAAY,oBAAI,IAAI;AACpB,WAAK,aAAa,IAAI,SAAS,SAAS;AAAA,IAC1C;AACA,cAAU,IAAI,EAA6B;AAG3C,SAAK,kBAAkB,EAAE,KAAK,MAAM;AAClC,UAAI,MAAM,KAAK,eAAe,gBAAgB,OAAO;AAErD,UAAI,CAAC,KAAK;AACR,gBAAQ,IAAI,gCAAgC,OAAO;AAGnD,cAAM,kBACJ,UAAU,aAAa,oBAAoB,QAAQ,UAAU,IAAI;AAEnE,cAAM,KAAK,eAAe,gBAAgB,SAAS;AAAA,UACjD,OAAO;AAAA,UACP,GAAI,mBAAmB,EAAE,QAAQ,gBAAgB;AAAA,QACnD,CAAC;AAED,YACG,GAAG,cAAc,MAAM;AACtB,kBAAQ,IAAI,0BAA0B,OAAO;AAAA,QAC/C,CAAC,EACA,GAAG,gBAAgB,MAAM;AACxB,kBAAQ,IAAI,4BAA4B,OAAO;AAAA,QACjD,CAAC,EACA,GAAG,eAAe,SAAO;AACxB,gBAAM,mBAAmB,KAAK,aAAa,IAAI,OAAO;AACtD,4BAAkB,QAAQ,QAAM,GAAG,IAAI,IAAI,CAAC;AAAA,QAC9C,CAAC,EACA,UAAU;AAAA,MACf;AAAA,IACF,CAAC;AAED,WAAO,IAAI,qBAAwB,MAAM,SAAS,EAAE;AAAA,EACtD;AAAA,EAEA,YAAyB,SAAiB,IAA6B;AACrE,UAAM,YAAY,KAAK,aAAa,IAAI,OAAO;AAC/C,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AAEA,cAAU,OAAO,EAA6B;AAC9C,YAAQ,IAAI,mCAAmC,UAAU,IAAI;AAE7D,QAAI,UAAU,SAAS,GAAG;AACxB,cAAQ,IAAI,yBAAyB,OAAO;AAC5C,WAAK,aAAa,OAAO,OAAO;AAGhC,WAAK,kBAAkB,EAAE,KAAK,MAAM;AAClC,cAAM,MAAM,KAAK,eAAe,gBAAgB,OAAO;AACvD,YAAI,KAAK;AACP,cAAI,YAAY;AAChB,eAAK,eAAe,mBAAmB,GAAG;AAAA,QAC5C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,yBAAyB,OAAwB;AACvD,QAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,MAAM,SAAS;AAChC,QAAI,SAAS,SAAS,IAAI,KAAK,SAAS,SAAS,IAAI,GAAG;AACtD,aAAO,OAAO,KAAK,EAChB,QAAQ,EAAE,EACV,QAAQ,UAAU,EAAE;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,sBAAsB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMmB;AACjB,UAAM,UAAU,cAAc,KAAK,IAAI,YAAY,IAAI,UAAU;AACjE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SAAkC;AACjC,iBAAS;AAAA,UACP,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,MAAM,KAAK;AAAA,UACX,KAAK,KAAK;AAAA,UACV,QAAQ,KAAK;AAAA,UACb,YAAY,KAAK;AAAA,UACjB,MAAM,KAAK;AAAA,UACX,QAAQ,KAAK;AAAA,QACf,CAAC;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,oBAAoB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKmB;AACjB,UAAM,UAAU,mBAAmB,KAAK,IAAI,YAAY;AACxD,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SACC,SAAS;AAAA,QACP,SAAS,KAAK;AAAA,QACd,WAAW,KAAK;AAAA,QAChB,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK;AAAA,QACd,UAAU,KAAK;AAAA,QACf,WAAW,KAAK;AAAA,QAChB,kBAAkB,KAAK,yBAAyB,KAAK,MAAM;AAAA,QAC3D,mBAAmB,KAAK,yBAAyB,KAAK,MAAM;AAAA,QAC5D,SAAS,KAAK,yBAAyB,KAAK,GAAG;AAAA,QAC/C,aAAa,KAAK,yBAAyB,KAAK,KAAK;AAAA,QACrD,cAAc,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAEtD,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK;AAAA,QACd,UAAU,KAAK;AAAA,QACf,WAAW,KAAK;AAAA,QAChB,kBAAkB,KAAK,yBAAyB,KAAK,MAAM;AAAA,QAC3D,mBAAmB,KAAK,yBAAyB,KAAK,MAAM;AAAA,QAC5D,SAAS,KAAK,yBAAyB,KAAK,GAAG;AAAA,QAC/C,aAAa,KAAK,yBAAyB,KAAK,KAAK;AAAA,QACrD,cAAc,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAEtD,SAAS,KAAK;AAAA,QACd,UAAU,KAAK;AAAA,QACf,WAAW,KAAK;AAAA,QAChB,YAAY,KAAK;AAAA,QACjB,mBAAmB,KAAK,yBAAyB,KAAK,OAAO;AAAA,QAC7D,oBAAoB,KAAK,yBAAyB,KAAK,OAAO;AAAA,QAC9D,UAAU,KAAK,yBAAyB,KAAK,IAAI;AAAA,QACjD,cAAc,KAAK,yBAAyB,KAAK,MAAM;AAAA,QACvD,eAAe,KAAK,yBAAyB,KAAK,MAAM;AAAA,QAExD,SAAS,KAAK;AAAA,QACd,UAAU,KAAK;AAAA,QACf,WAAW,KAAK;AAAA,QAChB,YAAY,KAAK;AAAA,QACjB,mBAAmB,KAAK,yBAAyB,KAAK,OAAO;AAAA,QAC7D,oBAAoB,KAAK,yBAAyB,KAAK,OAAO;AAAA,QAC9D,UAAU,KAAK,yBAAyB,KAAK,IAAI;AAAA,QACjD,cAAc,KAAK,yBAAyB,KAAK,MAAM;AAAA,QACvD,eAAe,KAAK,yBAAyB,KAAK,MAAM;AAAA,QAExD,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK;AAAA,QACd,UAAU,KAAK;AAAA,QACf,WAAW,KAAK;AAAA,QAChB,kBAAkB,KAAK,yBAAyB,KAAK,MAAM;AAAA,QAC3D,mBAAmB,KAAK,yBAAyB,KAAK,MAAM;AAAA,QAC5D,SAAS,KAAK,yBAAyB,KAAK,GAAG;AAAA,QAC/C,aAAa,KAAK,yBAAyB,KAAK,KAAK;AAAA,QACrD,cAAc,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAEtD,QAAQ,KAAK;AAAA,QACb,SAAS,KAAK;AAAA,QACd,UAAU,KAAK;AAAA,QACf,WAAW,KAAK;AAAA,QAChB,kBAAkB,KAAK,yBAAyB,KAAK,MAAM;AAAA,QAC3D,mBAAmB,KAAK,yBAAyB,KAAK,MAAM;AAAA,QAC5D,SAAS,KAAK,yBAAyB,KAAK,GAAG;AAAA,QAC/C,aAAa,KAAK,yBAAyB,KAAK,KAAK;AAAA,QACrD,cAAc,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAEtD,SAAS,KAAK;AAAA,QACd,UAAU,KAAK;AAAA,QACf,WAAW,KAAK;AAAA,QAChB,YAAY,KAAK;AAAA,QACjB,mBAAmB,KAAK,yBAAyB,KAAK,OAAO;AAAA,QAC7D,oBAAoB,KAAK,yBAAyB,KAAK,OAAO;AAAA,QAC9D,UAAU,KAAK,yBAAyB,KAAK,IAAI;AAAA,QACjD,cAAc,KAAK,yBAAyB,KAAK,MAAM;AAAA,QACvD,eAAe,KAAK,yBAAyB,KAAK,MAAM;AAAA,QAExD,OAAO,KAAK,yBAAyB,KAAK,CAAC;AAAA,MAC7C,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,sBAAsB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKmB;AACjB,UAAM,UAAU,qBAAqB,KAAK,IAAI,YAAY;AAC1D,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SACC,SAAS;AAAA,QACP,cAAc,KAAK;AAAA,QACnB,SAAS,KAAK;AAAA,QACd,qBAAqB,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAC7D,oBAAoB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC3D,oBAAoB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC3D,eAAe,KAAK;AAAA,QACpB,cAAc,KAAK;AAAA,QACnB,cAAc,KAAK;AAAA,QACnB,oBAAoB,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAC5D,mBAAmB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC1D,mBAAmB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC1D,iBAAiB,KAAK;AAAA,QACtB,gBAAgB,KAAK,yBAAyB,KAAK,EAAE;AAAA,QACrD,eAAe,KAAK,yBAAyB,KAAK,EAAE;AAAA,QACpD,wBAAwB,KAAK;AAAA,QAC7B,uBAAuB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC9D,sBAAsB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC7D,2BAA2B,KAAK;AAAA,QAChC,0BAA0B,KAAK,yBAAyB,KAAK,IAAI;AAAA,QACjE,yBAAyB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAChE,yBAAyB,KAAK;AAAA,QAC9B,wBAAwB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC/D,uBAAuB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC9D,yBAAyB,KAAK;AAAA,QAC9B,wBAAwB,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAChE,uBAAuB,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAC/D,sBAAsB,KAAK;AAAA,QAC3B,qBAAqB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC5D,oBAAoB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC3D,sBAAsB,KAAK;AAAA,QAC3B,qBAAqB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC5D,oBAAoB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC3D,0BAA0B,KAAK;AAAA,QAC/B,yBAAyB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAChE,wBAAwB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC/D,wBAAwB,KAAK;AAAA,QAC7B,uBAAuB,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAC/D,sBAAsB,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAC9D,sBAAsB,KAAK;AAAA,QAC3B,qBAAqB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC5D,oBAAoB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC3D,2BAA2B,KAAK;AAAA,QAChC,0BAA0B,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAClE,yBAAyB,KAAK,yBAAyB,KAAK,KAAK;AAAA,QACjE,2BAA2B,KAAK;AAAA,QAChC,0BAA0B,KAAK,yBAAyB,KAAK,KAAK;AAAA,QAClE,yBAAyB,KAAK,yBAAyB,KAAK,KAAK;AAAA,QACjE,sBAAsB,KAAK;AAAA,QAC3B,qBAAqB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC5D,oBAAoB,KAAK,yBAAyB,KAAK,IAAI;AAAA,QAC3D,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAImB;AACjB,UAAM,UAAU,iBAAiB,KAAK;AACtC,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SAAkC;AACjC,cAAM,SAAqB;AAAA,UACzB,cAAc,KAAK;AAAA,UACnB,MAAM,KAAK;AAAA,UACX,QAAQ,KAAK;AAAA,UACb,aAAa,KAAK;AAAA,QACpB;AAEA,YAAI,KAAK,KAAK;AACZ,iBAAO,WAAW,KAAK;AAAA,QACzB;AAEA,YAAI,KAAK,IAAI;AACX,gBAAM,KAAK,KAAK;AAChB,iBAAO,aAAa,CAAC;AACrB,cAAI,GAAG,IAAI;AACT,mBAAO,WAAW,iBAAiB,GAAG;AAAA,UACxC;AACA,cAAI,GAAG,IAAI;AACT,mBAAO,WAAW,iBAAiB,GAAG;AAAA,UACxC;AACA,cAAI,GAAG,IAAI;AACT,mBAAO,WAAW,eAAe,GAAG;AAAA,UACtC;AAAA,QACF;AAEA,iBAAS,MAAM;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,2BAA2B;AAAA,IACzB;AAAA,IACA;AAAA,EACF,GAGmB;AACjB,UAAM,UAAU,2BAA2B,KAAK;AAChD,WAAO,KAAK;AAAA,MAAU;AAAA,MAAS,CAAC,SAC9B;AAAA,QACE,KAAK,IAAI,SAAO;AAAA,UACd,cAAc,GAAG;AAAA,UACjB,MAAM,GAAG;AAAA,UACT,QAAQ,GAAG;AAAA,UACX,UAAU,GAAG;AAAA,UACb,aAAa,GAAG;AAAA,UAChB,cAAc,MAAM;AAClB,kBAAM,KAAK,GAAG;AACd,gBAAI,CAAC,GAAI,QAAO;AAChB,mBAAO;AAAA,cACL,SAAS,GAAG;AAAA,cACZ,UAAU,GAAG;AAAA,cACb,SAAS,GAAG;AAAA,cACZ,QAAQ,GAAG;AAAA,cACX,SAAS,GAAG;AAAA,cACZ,UAAU,GAAG;AAAA,cACb,QAAQ,GAAG;AAAA,cACX,WAAW,GAAG;AAAA,cACd,UAAU,GAAG;AAAA,cACb,QAAQ,GAAG;AAAA,cACX,QAAQ,GAAG;AAAA,cACX,SAAS,GAAG;AAAA,cACZ,WAAW,GAAG;AAAA,YAChB;AAAA,UACF,GAAG;AAAA,UACH,aAAa,GAAG;AAAA,QAClB,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EAEA,qBAAqB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKmB;AACjB,UAAM,UAAU,oBAAoB,KAAK,IAAI,YAAY;AACzD,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SACC,SAAS;AAAA,QACP,cAAc,KAAK;AAAA,QACnB,QAAQ,KAAK;AAAA,QACb,gBAAgB,KAAK;AAAA,QACrB,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,wBAAwB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKmB;AACjB,UAAM,UAAU,8BAA8B,KAAK,IAAI,YAAY;AACnE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SACC,SAAS;AAAA,QACP,cAAc,KAAK;AAAA,QACnB,YAAY,KAAK;AAAA,QACjB,OAAO,KAAK;AAAA,QACZ,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,2BAA2B;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKmB;AACjB,UAAM,UAAU,uBAAuB,KAAK,IAAI,YAAY;AAC5D,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SACC,SAAS;AAAA,QACP,cAAc,KAAK;AAAA,QACnB,aAAa,KAAK;AAAA,QAClB,gBAAgB,KAAK;AAAA,QACrB,mBAAmB,KAAK;AAAA,QACxB,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,6BAA6B;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKmB;AACjB,UAAM,UAAU,6BAA6B,KAAK,IAAI,YAAY;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SACC,SAAS;AAAA,QACP,cAAc,KAAK;AAAA,QACnB,gBAAgB,KAAK;AAAA,QACrB,mBAAmB,KAAK;AAAA,QACxB,WAAW,KAAK;AAAA,QAChB,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,gCAAgC;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAImB;AACjB,UAAM,UAAU,2CAA2C,KAAK,IAAI,WAAW;AAC/E,WAAO,KAAK;AAAA,MAAU;AAAA,MAAS,CAAC,SAC9B;AAAA,QACE,MAAM,IAAI,SAAO;AAAA,UACf,cAAc,GAAG;AAAA,UACjB,YAAY,GAAG;AAAA,UACf,OAAO,GAAG;AAAA,UACV,WAAW,GAAG;AAAA,QAChB,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EAEA,2BAA2B;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKmB;AACjB,UAAM,UAAU,MACZ,oBAAoB,KAAK,IAAI,YAAY,IAAI,GAAG,KAChD,oBAAoB,KAAK,IAAI,YAAY;AAC7C,WAAO,KAAK;AAAA,MAAU;AAAA,MAAS,CAAC,SAC9B;AAAA,QACE,MAAM,IAAI,UAAQ;AAChB,gBAAM,SAA6B,CAAC;AACpC,gBAAM,IAAI,KAAK;AACf,gBAAM,KAAK,KAAK;AAChB,gBAAM,IAAI,KAAK;AACf,gBAAM,IAAI,KAAK;AACf,gBAAM,KAAK,KAAK;AAGhB,cAAI,GAAG;AACL,mBAAO,WAAW;AAAA,cAChB,cAAc,EAAE;AAAA,YAClB;AACA,gBAAI,EAAE,GAAG;AACP,qBAAO,SAAS,OAAO,EAAE;AAAA,YAC3B;AACA,gBAAI,EAAE,GAAG;AACP,qBAAO,SAAS,SAAS,EAAE;AAAA,YAC7B;AACA,gBAAI,EAAE,IAAI;AACR,qBAAO,SAAS,WAAW,EAAE;AAAA,YAC/B;AACA,gBAAI,EAAE,IAAI;AACR,qBAAO,SAAS,cAAc,EAAE;AAAA,YAClC;AACA,gBAAI,EAAE,KAAK;AACT,qBAAO,SAAS,WAAW,EAAE;AAAA,YAC/B;AACA,gBAAI,EAAE,KAAK;AACT,qBAAO,SAAS,cAAc,EAAE;AAAA,YAClC;AACA,gBAAI,EAAE,IAAI;AACR,oBAAM,KAAK,EAAE;AACb,qBAAO,SAAS,aAAa,CAAC;AAC9B,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,WAAW,iBAAiB,GAAG;AAAA,cACjD;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,WAAW,iBAAiB,GAAG;AAAA,cACjD;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,WAAW,eAAe,GAAG;AAAA,cAC/C;AAAA,YACF;AACA,gBAAI,EAAE,IAAI;AACR,oBAAM,KAAK,EAAE;AACb,qBAAO,SAAS,aAAa,CAAC;AAC9B,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,WAAW,iBAAiB,GAAG;AAAA,cACjD;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,WAAW,iBAAiB,GAAG;AAAA,cACjD;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,WAAW,eAAe,GAAG;AAAA,cAC/C;AAAA,YACF;AACA,gBAAI,EAAE,IAAI;AACR,oBAAM,KAAK,EAAE;AACb,qBAAO,SAAS,cAAc,CAAC;AAC/B,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,UAAU,GAAG;AAAA,cAC3C;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,WAAW,GAAG;AAAA,cAC5C;AACA,kBAAI,GAAG,GAAG;AACR,uBAAO,SAAS,YAAY,UAAU,GAAG;AAAA,cAC3C;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,SAAS,GAAG;AAAA,cAC1C;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,UAAU,GAAG;AAAA,cAC3C;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,WAAW,GAAG;AAAA,cAC5C;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,SAAS,GAAG;AAAA,cAC1C;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,YAAY,GAAG;AAAA,cAC7C;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,WAAW,GAAG;AAAA,cAC5C;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,SAAS,GAAG;AAAA,cAC1C;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,SAAS,GAAG;AAAA,cAC1C;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,UAAU,GAAG;AAAA,cAC3C;AACA,kBAAI,GAAG,IAAI;AACT,uBAAO,SAAS,YAAY,YAAY,GAAG;AAAA,cAC7C;AAAA,YACF;AAAA,UACF;AAGA,cAAI,IAAI;AACN,mBAAO,eAAe,CAAC;AACvB,gBAAI,GAAG,IAAI;AACT,qBAAO,aAAa,gBAAgB,KAAK,yBAAyB,GAAG,EAAE;AAAA,YACzE;AAAA,UACF;AAGA,cAAI,GAAG;AACL,mBAAO,SAAS;AAAA,cACd,cAAc,EAAE;AAAA,cAChB,WAAY,EAAE,MAAiB;AAAA,YACjC;AACA,gBAAI,EAAE,GAAG;AACP,qBAAO,OAAO,UAAU,EAAE;AAAA,YAC5B;AACA,gBAAI,EAAE,OAAO;AACX,qBAAO,OAAO,sBAAsB,KAAK,yBAAyB,EAAE,KAAK;AAAA,YAC3E;AACA,gBAAI,EAAE,MAAM;AACV,qBAAO,OAAO,qBAAqB,KAAK,yBAAyB,EAAE,IAAI;AAAA,YACzE;AACA,gBAAI,EAAE,MAAM;AACV,qBAAO,OAAO,qBAAqB,KAAK,yBAAyB,EAAE,IAAI;AAAA,YACzE;AACA,gBAAI,EAAE,OAAO;AACX,qBAAO,OAAO,gBAAgB,EAAE;AAAA,YAClC;AACA,gBAAI,EAAE,MAAM;AACV,qBAAO,OAAO,eAAe,EAAE;AAAA,YACjC;AACA,gBAAI,EAAE,MAAM;AACV,qBAAO,OAAO,eAAe,EAAE;AAAA,YACjC;AACA,gBAAI,EAAE,OAAO;AACX,qBAAO,OAAO,qBAAqB,KAAK,yBAAyB,EAAE,KAAK;AAAA,YAC1E;AACA,gBAAI,EAAE,MAAM;AACV,qBAAO,OAAO,oBAAoB,KAAK,yBAAyB,EAAE,IAAI;AAAA,YACxE;AACA,gBAAI,EAAE,MAAM;AACV,qBAAO,OAAO,oBAAoB,KAAK,yBAAyB,EAAE,IAAI;AAAA,YACxE;AAAA,UACF;AAGA,cAAI,GAAG;AACL,mBAAO,SAAS;AAAA,cACd,cAAc,EAAE;AAAA,cAChB,WAAY,EAAE,MAAiB;AAAA,YACjC;AACA,gBAAI,EAAE,GAAG;AACP,qBAAO,OAAO,SAAS,EAAE;AAAA,YAC3B;AACA,gBAAI,EAAE,IAAI;AACR,qBAAO,OAAO,iBAAiB,EAAE;AAAA,YACnC;AAAA,UACF;AAGA,cAAI,IAAI;AACN,mBAAO,OAAO;AAAA,cACZ,SAAS,GAAG;AAAA,cACZ,WAAY,GAAG,KAAgB;AAAA,YACjC;AAGA,gBAAI,GAAG,KAAK;AACV,qBAAO,KAAK,SAAS,GAAG;AAAA,YAC1B;AACA,gBAAI,GAAG,KAAK;AACV,qBAAO,KAAK,UAAU,GAAG;AAAA,YAC3B;AACA,gBAAI,GAAG,MAAM;AACX,qBAAO,KAAK,WAAW,GAAG;AAAA,YAC5B;AACA,gBAAI,GAAG,MAAM;AACX,qBAAO,KAAK,YAAY,GAAG;AAAA,YAC7B;AACA,gBAAI,GAAG,QAAQ;AACb,qBAAO,KAAK,mBAAmB,KAAK,yBAAyB,GAAG,MAAM;AAAA,YACxE;AACA,gBAAI,GAAG,QAAQ;AACb,qBAAO,KAAK,oBAAoB,KAAK,yBAAyB,GAAG,MAAM;AAAA,YACzE;AACA,gBAAI,GAAG,KAAK;AACV,qBAAO,KAAK,UAAU,KAAK,yBAAyB,GAAG,GAAG;AAAA,YAC5D;AAGA,gBAAI,GAAG,GAAG;AACR,qBAAO,KAAK,QAAQ,KAAK,yBAAyB,GAAG,CAAC;AAAA,YACxD;AAAA,UACF;AAEA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,4BAA4B;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAImB;AACjB,UAAM,UAAU,gCAAgC,KAAK,IAAI,WAAW;AACpE,WAAO,KAAK;AAAA,MAAU;AAAA,MAAS,CAAC,SAC9B;AAAA,QACE,MAAM;AAAA,UACJ,SACG;AAAA,YACC,SAAS,GAAG;AAAA,YACZ,WAAW,GAAG;AAAA,YACd,QAAQ,GAAG;AAAA,YACX,SAAS,GAAG;AAAA,YACZ,UAAU,GAAG;AAAA,YACb,WAAW,GAAG;AAAA,YACd,kBAAkB,KAAK,yBAAyB,GAAG,MAAM;AAAA,YACzD,mBAAmB,KAAK,yBAAyB,GAAG,MAAM;AAAA,YAC1D,SAAS,KAAK,yBAAyB,GAAG,GAAG;AAAA,YAC7C,aAAa,KAAK,yBAAyB,GAAG,KAAK;AAAA,YACnD,cAAc,KAAK,yBAAyB,GAAG,KAAK;AAAA,YACpD,QAAQ,GAAG;AAAA,YACX,SAAS,GAAG;AAAA,YACZ,UAAU,GAAG;AAAA,YACb,WAAW,GAAG;AAAA,YACd,kBAAkB,KAAK,yBAAyB,GAAG,MAAM;AAAA,YACzD,mBAAmB,KAAK,yBAAyB,GAAG,MAAM;AAAA,YAC1D,SAAS,KAAK,yBAAyB,GAAG,GAAG;AAAA,YAC7C,aAAa,KAAK,yBAAyB,GAAG,KAAK;AAAA,YACnD,cAAc,KAAK,yBAAyB,GAAG,KAAK;AAAA,YACpD,OAAO,KAAK,yBAAyB,GAAG,CAAC;AAAA,UAC3C;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,8BAA8B;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAImB;AACjB,UAAM,UAAU,kCAAkC,KAAK,IAAI,WAAW;AACtE,WAAO,KAAK;AAAA,MAAU;AAAA,MAAS,CAAC,SAC9B;AAAA,QACE,MAAM;AAAA,UACJ,SACG;AAAA,YACC,cAAc,GAAG;AAAA,YACjB,SAAS,GAAG;AAAA,YACZ,qBAAqB,KAAK,yBAAyB,GAAG,KAAK;AAAA,YAC3D,oBAAoB,KAAK,yBAAyB,GAAG,IAAI;AAAA,YACzD,oBAAoB,KAAK,yBAAyB,GAAG,IAAI;AAAA,YACzD,eAAe,GAAG;AAAA,YAClB,cAAc,GAAG;AAAA,YACjB,cAAc,GAAG;AAAA,YACjB,oBAAoB,KAAK,yBAAyB,GAAG,KAAK;AAAA,YAC1D,mBAAmB,KAAK,yBAAyB,GAAG,IAAI;AAAA,YACxD,mBAAmB,KAAK,yBAAyB,GAAG,IAAI;AAAA,YACxD,WAAW,GAAG;AAAA,UAChB;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,6BAA6B;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAImB;AACjB,UAAM,UAAU,iCAAiC,KAAK,IAAI,WAAW;AACrE,WAAO,KAAK;AAAA,MAAU;AAAA,MAAS,CAAC,SAC9B;AAAA,QACE,MAAM,IAAI,SAAO;AAAA,UACf,cAAc,GAAG;AAAA,UACjB,QAAQ,GAAG;AAAA,UACX,gBAAgB,GAAG;AAAA,UACnB,WAAW,GAAG;AAAA,QAChB,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mCAAmC;AAAA,IACjC;AAAA,IACA;AAAA,EACF,GAGmB;AACjB,UAAM,UAAU,yCAAyC,KAAK;AAC9D,WAAO,KAAK;AAAA,MAAU;AAAA,MAAS,CAAC,SAC9B;AAAA,QACE,MAAM,IAAI,SAAO;AAAA,UACf,cAAc,GAAG;AAAA,UACjB,eAAe,GAAG;AAAA,QACpB,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EAEA,uBAAuB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKmB;AACjB,UAAM,UAAU,sBAAsB,KAAK,IAAI,aAAa;AAC5D,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SACC,SAAS;AAAA,QACP;AAAA,UACE,eAAe,KAAK;AAAA,UACpB,cAAc,KAAK;AAAA,UACnB,iBAAiB,KAAK;AAAA,UACtB,SAAS,KAAK;AAAA,UACd,WAAW,KAAK;AAAA,QAClB;AAAA,MACF,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBAAmB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKmB;AACjB,UAAM,UAAU,wBAAwB,KAAK,IAAI,aAAa;AAC9D,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SACC,SAAS;AAAA,QACP,eAAe,KAAK;AAAA,QACpB,cAAc,KAAK;AAAA,QACnB,iBAAiB,KAAK;AAAA,QACtB,WAAW,KAAK;AAAA,QAChB,UAAU,KAAK;AAAA,QACf,UAAU,KAAK;AAAA,QACf,WAAW,KAAK;AAAA,QAChB,WAAW,KAAK;AAAA,QAChB,gBAAgB,KAAK;AAAA,QACrB,UAAU,KAAK;AAAA,QACf,aAAa,KAAK;AAAA,QAClB,YAAY,KAAK;AAAA,QACjB,YAAY,KAAK;AAAA,QACjB,iBAAiB,KAAK;AAAA,QACtB,WAAW,KAAK;AAAA,QAChB,cAAc,KAAK;AAAA,QACnB,aAAa,KAAK;AAAA,QAClB,uBAAuB,KAAK;AAAA,QAC5B,sBAAsB,KAAK;AAAA,QAC3B,uBAAuB,KAAK;AAAA,QAC5B,uBAAuB,KAAK;AAAA,QAC5B,uBAAuB,KAAK;AAAA,QAC5B,qBAAqB,KAAK;AAAA,QAC1B,qBAAqB,KAAK;AAAA,QAC1B,0BAA0B,KAAK;AAAA,QAC/B,0BAA0B,KAAK;AAAA,MACjC,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,uBAAuB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAImB;AACjB,UAAM,UAAU,uBAAuB,KAAK,IAAI,aAAa;AAC7D,WAAO,KAAK;AAAA,MAAU;AAAA,MAAS,CAAC,SAC9B;AAAA,QACE,MAAM;AAAA,UACJ,SACG;AAAA,YACC,eAAe,GAAG;AAAA,YAClB,MAAM,GAAG;AAAA,YACT,WAAW,GAAG;AAAA,YACd,gBAAgB,GAAG;AAAA,YACnB,sBAAsB,GAAG;AAAA,YACzB,YAAY,GAAG;AAAA,YACf,iBAAiB,GAAG;AAAA,YACpB,OAAO,GAAG;AAAA,YACV,MAAM,GAAG;AAAA,YACT,UAAU,GAAG;AAAA,YACb,UAAU,GAAG;AAAA,YACb,iBAAiB,GAAG;AAAA,YACpB,UAAU,GAAG;AAAA,YACb,gBAAgB,GAAG;AAAA,YACnB,YAAY,GAAG;AAAA,YACf,QAAQ,GAAG;AAAA,YACX,YAAY,GAAG;AAAA,UACjB;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,oBAAoB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKmB;AACjB,UAAM,UAAU,aAAa,KAAK,IAAI,YAAY;AAClD,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SACC,SAAS;AAAA,QACP,cAAc,KAAK;AAAA,QACnB,WAAW,KAAK;AAAA,QAChB,MAAM,KAAK;AAAA,QACX,WAAW,KAAK;AAAA,QAChB,gBAAgB,KAAK;AAAA,QACrB,iBAAiB,KAAK;AAAA,QACtB,cAAc,KAAK;AAAA,QACnB,gBAAgB,KAAK;AAAA,QACrB,kBAAkB,KAAK;AAAA,QACvB,YAAY,KAAK;AAAA,QACjB,iBAAiB,KAAK;AAAA,QACtB,kBAAkB,KAAK;AAAA,QACvB,eAAe,KAAK;AAAA,QACpB,iBAAiB,KAAK;AAAA,QACtB,mBAAmB,KAAK;AAAA,QACxB,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,qBAAqB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAKmB;AACjB,UAAM,UAAU,oBAAoB,KAAK,IAAI,aAAa;AAC1D,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,SACC,SAAS;AAAA,QACP,cAAc,KAAK;AAAA,QACnB,WAAW,KAAK;AAAA,QAChB,MAAM,KAAK;AAAA,QACX,WAAW,KAAK;AAAA,QAChB,gBAAgB,KAAK;AAAA,QACrB,iBAAiB,KAAK;AAAA,QACtB,cAAc,KAAK;AAAA,QACnB,gBAAgB,KAAK;AAAA,QACrB,kBAAkB,KAAK;AAAA,QACvB,YAAY,KAAK;AAAA,QACjB,iBAAiB,KAAK;AAAA,QACtB,kBAAkB,KAAK;AAAA,QACvB,eAAe,KAAK;AAAA,QACpB,iBAAiB,KAAK;AAAA,QACtB,mBAAmB,KAAK;AAAA,QACxB,QAAQ,KAAK;AAAA,MACf,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,wBAAwB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAImB;AACjB,UAAM,UAAU,oBAAoB,KAAK,IAAI,WAAW;AACxD,WAAO,KAAK;AAAA,MAAU;AAAA,MAAS,CAAC,SAC9B,SAAS;AAAA,QACP,aAAa,KAAK;AAAA,QAClB,eAAe,KAAK;AAAA,QACpB,sBAAsB,KAAK;AAAA,QAC3B,eAAe,KAAK;AAAA,QACpB,sBAAsB,KAAK;AAAA,MAC7B,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,IAAM,uBAAN,MAA8B;AAAA,EAC5B,YACmB,WACA,SACA,IACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAEH,cAAoB;AAClB,SAAK,UAAU,YAAY,KAAK,SAAS,KAAK,EAAE;AAAA,EAClD;AACF;;;AE1uCA;AAAA;AAAA;AAAA;AAAA;AAqBO,IAAM,0BAA0B,CAAC,YAA2D;AACjG,SAAO,qBAAsC,EAAE,KAAK,kBAAkB,QAAQ,MAAM,GAAG,OAAO;AAChG;AAKO,IAAM,iBAAiB,CAC5B,OACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,kBAAkB,KAAK,iBAAiB,QAAQ,MAAM;AAAA,IAC7D;AAAA,EACF;AACF;;;ACpCA;AAAA;AAAA;AAAA;AAAA;AAsBO,IAAM,sBAAsB,CACjC,0BACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,4BAA4B,CACvC,gCACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;;;ACrDA;AAAA;AAAA;AAAA;AAiBO,IAAM,qBAAqB,CAChC,sBACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;;;AC9BA;AAAA;AAAA;AAAA;AAAA;AAsBO,IAAM,aAAa,CACxB,OACA,aACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,gBAAgB,KAAK,IAAI,WAAW,IAAI,QAAQ,MAAM;AAAA,IAC7D;AAAA,EACF;AACF;AAKO,IAAM,sBAAsB,CACjC,OACA,aACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,gBAAgB,KAAK,IAAI,WAAW,cAAc,QAAQ,OAAO,OAAO;AAAA,IAC/E;AAAA,EACF;AACF;;;AC9CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BO,IAAM,OAAO,CAClB,OACA,WACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK,WAAW,KAAK;AAAA,MACrB,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,QAAQ,CACnB,OACA,gBACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK,WAAW,KAAK;AAAA,MACrB,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,QAAQ,CACnB,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,WAAW,KAAK,UAAU,QAAQ,OAAO,OAAO;AAAA,IACvD;AAAA,EACF;AACF;AAKO,IAAM,cAAc,CACzB,OACA,kBACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK,WAAW,KAAK;AAAA,MACrB,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,UAAU,CACrB,QACA,YACG;AACH,SAAO,qBAA8B,EAAE,KAAK,WAAW,QAAQ,OAAO,OAAO,GAAG,OAAO;AACzF;;;ACzGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBO,IAAM,gBAAgB,CAC3B,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,wBAAwB,QAAQ,OAAO,OAAO;AAAA,IACrD;AAAA,EACF;AACF;AAKO,IAAM,iBAAiB,CAC5B,qBACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,iBAAiB,CAC5B,qBACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,cAAc,CAAC,IAAY,YAA2D;AACjG,SAAO;AAAA,IACL,EAAE,KAAK,wBAAwB,EAAE,IAAI,QAAQ,MAAM;AAAA,IACnD;AAAA,EACF;AACF;AAKO,IAAM,iBAAiB,CAC5B,IACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,wBAAwB,EAAE,IAAI,QAAQ,SAAS;AAAA,IACtD;AAAA,EACF;AACF;AAKO,IAAM,oBAAoB,CAC/B,IACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,wBAAwB,EAAE,WAAW,QAAQ,MAAM;AAAA,IAC1D;AAAA,EACF;AACF;AAKO,IAAM,uBAAuB,CAClC,IACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,wBAAwB,EAAE,kBAAkB,QAAQ,OAAO;AAAA,IAClE;AAAA,EACF;AACF;;;ACtHA;AAAA;AAAA;AAAA;AAeO,IAAM,UAAU,CAAC,YAA2D;AACjF,SAAO,qBAA6B,EAAE,KAAK,oBAAoB,QAAQ,OAAO,GAAG,OAAO;AAC1F;;;ACjBA;AAAA;AAAA;AAAA;AAAA;AAiBO,IAAM,MAAM,CAAC,IAAY,YAA2D;AACzF,SAAO,qBAA6B,EAAE,KAAK,YAAY,EAAE,IAAI,QAAQ,MAAM,GAAG,OAAO;AACvF;AAKO,IAAM,YAAY,CAAC,IAAY,YAA2D;AAC/F,SAAO;AAAA,IACL,EAAE,KAAK,YAAY,EAAE,cAAc,QAAQ,MAAM;AAAA,IACjD;AAAA,EACF;AACF;;;AC7BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BO,IAAM,mBAAmB,CAC9B,4BACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,qBAAqB,CAChC,YACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,qBAAqB,UAAU,YAAY,QAAQ,MAAM;AAAA,IAChE;AAAA,EACF;AACF;AAKO,IAAM,4BAA4B,CACvC,YACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,qBAAqB,UAAU,qBAAqB,QAAQ,MAAM;AAAA,IACzE;AAAA,EACF;AACF;AAKO,IAAM,oBAAoB,CAC/B,YACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,qBAAqB,UAAU,WAAW,QAAQ,MAAM;AAAA,IAC/D;AAAA,EACF;AACF;AAKO,IAAM,oCAAoC,CAC/C,YACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,qBAAqB,UAAU,4BAA4B,QAAQ,MAAM;AAAA,IAChF;AAAA,EACF;AACF;AAKO,IAAM,qBAAqB,CAChC,8BACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,uBAAuB,CAClC,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,sBAAsB,YAAY,YAAY,QAAQ,MAAM;AAAA,IACnE;AAAA,EACF;AACF;AAKO,IAAM,8BAA8B,CACzC,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,sBAAsB,YAAY,qBAAqB,QAAQ,MAAM;AAAA,IAC5E;AAAA,EACF;AACF;AAKO,IAAM,sBAAsB,CACjC,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,sBAAsB,YAAY,WAAW,QAAQ,MAAM;AAAA,IAClE;AAAA,EACF;AACF;AAKO,IAAM,sCAAsC,CACjD,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,sBAAsB,YAAY,4BAA4B,QAAQ,MAAM;AAAA,IACnF;AAAA,EACF;AACF;AAKO,IAAM,sCAAsC,CACjD,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,sBAAsB,YAAY,4BAA4B,QAAQ,MAAM;AAAA,IACnF;AAAA,EACF;AACF;AAKO,IAAM,+BAA+B,CAC1C,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,sBAAsB,YAAY,qBAAqB,QAAQ,MAAM;AAAA,IAC5E;AAAA,EACF;AACF;AAKO,IAAM,kBAAkB,CAC7B,wBACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,iBAAiB,CAC5B,SACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,qBAAqB,OAAO,SAAS,QAAQ,MAAM;AAAA,IAC1D;AAAA,EACF;AACF;;;AC9NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBO,IAAM,eAAe,CAC1B,OACA,UACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,eAAe,KAAK,cAAc,QAAQ,IAAI,QAAQ,OAAO,OAAO;AAAA,IAC3E;AAAA,EACF;AACF;AAKO,IAAM,eAAe,CAC1B,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,eAAe,KAAK,cAAc,QAAQ,OAAO,OAAO;AAAA,IAC/D;AAAA,EACF;AACF;AAKO,IAAM,kBAAkB,CAC7B,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,eAAe,KAAK,WAAW,QAAQ,OAAO,OAAO;AAAA,IAC5D;AAAA,EACF;AACF;AAKO,IAAM,wBAAwB,CACnC,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,eAAe,KAAK,iBAAiB,QAAQ,OAAO,OAAO;AAAA,IAClE;AAAA,EACF;AACF;AAKO,IAAM,oBAAoB,CAC/B,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,eAAe,KAAK,aAAa,QAAQ,OAAO,OAAO;AAAA,IAC9D;AAAA,EACF;AACF;;;AC3FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCO,IAAM,kBAAkB,CAC7B,OACA,sBACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK,iBAAiB,KAAK;AAAA,MAC3B,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,iBAAiB,CAC5B,OACA,qBACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK,iBAAiB,KAAK;AAAA,MAC3B,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,eAAe,CAC1B,IACA,YACG;AACH,SAAO,qBAAmC,EAAE,KAAK,iBAAiB,EAAE,IAAI,QAAQ,MAAM,GAAG,OAAO;AAClG;AAKO,IAAM,YAAY,CACvB,IACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,iBAAiB,EAAE,WAAW,QAAQ,OAAO,OAAO;AAAA,IAC3D;AAAA,EACF;AACF;AAKO,IAAM,gBAAgB,CAC3B,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,iBAAiB,QAAQ,OAAO,OAAO;AAAA,IAC9C;AAAA,EACF;AACF;AAKO,IAAM,qBAAqB,CAChC,SACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,wBAAwB,OAAO,WAAW,QAAQ,OAAO,OAAO;AAAA,IACvE;AAAA,EACF;AACF;AAKO,IAAM,yBAAyB,CACpC,SACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,wBAAwB,OAAO,eAAe,QAAQ,OAAO,OAAO;AAAA,IAC3E;AAAA,EACF;AACF;AAKO,IAAM,gBAAgB,CAC3B,OACA,sBACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK,iBAAiB,KAAK;AAAA,MAC3B,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;;;ACrJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuDO,IAAM,SAAS,CACpB,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,oBAAoB,QAAQ,OAAO,OAAO;AAAA,IACjD;AAAA,EACF;AACF;AAKO,IAAM,YAAY,CACvB,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,UAAU,QAAQ,OAAO,OAAO;AAAA,IACzD;AAAA,EACF;AACF;AAKO,IAAM,WAAW,CACtB,OACA,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,IAAI,QAAQ,MAAM;AAAA,IAC3D;AAAA,EACF;AACF;AAKO,IAAM,cAAc,CACzB,OACA,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,aAAa,QAAQ,MAAM;AAAA,IACpE;AAAA,EACF;AACF;AAKO,IAAM,mBAAmB,CAC9B,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,mBAAmB,QAAQ,OAAO,OAAO;AAAA,IAClE;AAAA,EACF;AACF;AAKO,IAAM,WAAW,CACtB,OACA,cACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,UAAU,QAAQ,OAAO,OAAO;AAAA,IACzE;AAAA,EACF;AACF;AAKO,IAAM,WAAW,CACtB,OACA,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,UAAU,QAAQ,MAAM;AAAA,IACjE;AAAA,EACF;AACF;AAKO,IAAM,gBAAgB,CAC3B,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,gBAAgB,QAAQ,OAAO,OAAO;AAAA,IAC/D;AAAA,EACF;AACF;AAKO,IAAM,aAAa,CACxB,OACA,cACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,YAAY,QAAQ,OAAO,OAAO;AAAA,IAC3E;AAAA,EACF;AACF;AAKO,IAAM,kBAAkB,CAC7B,OACA,cACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,kBAAkB,QAAQ,OAAO,OAAO;AAAA,IACjF;AAAA,EACF;AACF;AAKO,IAAM,aAAa,CACxB,OACA,cACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,YAAY,QAAQ,OAAO,OAAO;AAAA,IAC3E;AAAA,EACF;AACF;AAKO,IAAM,gBAAgB,CAC3B,OACA,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,eAAe,QAAQ,MAAM;AAAA,IACtE;AAAA,EACF;AACF;AAKO,IAAM,gBAAgB,CAC3B,OACA,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,eAAe,QAAQ,MAAM;AAAA,IACtE;AAAA,EACF;AACF;AAKO,IAAM,qBAAqB,CAChC,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,qBAAqB,QAAQ,OAAO,OAAO;AAAA,IACpE;AAAA,EACF;AACF;AAKO,IAAM,YAAY,CACvB,OACA,cACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,WAAW,QAAQ,OAAO,OAAO;AAAA,IAC1E;AAAA,EACF;AACF;AAKO,IAAM,iBAAiB,CAC5B,OACA,cACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,UAAU,QAAQ,OAAO,OAAO;AAAA,IACzE;AAAA,EACF;AACF;AAKO,IAAM,cAAc,CACzB,OACA,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,aAAa,QAAQ,MAAM;AAAA,IACpE;AAAA,EACF;AACF;AAKO,IAAM,iBAAiB,CAC5B,OACA,cACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,gBAAgB,QAAQ,OAAO,OAAO;AAAA,IAC/E;AAAA,EACF;AACF;AAKO,IAAM,YAAY,CACvB,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,SAAS,QAAQ,OAAO,OAAO;AAAA,IACxD;AAAA,EACF;AACF;AAKO,IAAM,cAAc,CACzB,OACA,cACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,aAAa,QAAQ,MAAM;AAAA,IACpE;AAAA,EACF;AACF;AAKO,IAAM,eAAe,CAC1B,OACA,YACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,QAAQ,UAAU,WAAW,QAAQ,MAAM;AAAA,IACpE;AAAA,EACF;AACF;AAKO,IAAM,kBAAkB,CAC7B,OACA,cACA,KACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,YAAY,GAAG,IAAI,QAAQ,MAAM;AAAA,IAC1E;AAAA,EACF;AACF;AAKO,IAAM,6BAA6B,CACxC,OACA,cACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,YAAY,uBAAuB,QAAQ,OAAO,OAAO;AAAA,IACtF;AAAA,EACF;AACF;;;AC5XA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBO,IAAM,YAAY,CACvB,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,IAAI,QAAQ,OAAO,OAAO;AAAA,IACnD;AAAA,EACF;AACF;AAKO,IAAM,gBAAgB,CAC3B,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,eAAe,QAAQ,OAAO,OAAO;AAAA,IAC9D;AAAA,EACF;AACF;AAKO,IAAM,gBAAgB,CAC3B,OACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,aAAa,KAAK,gBAAgB,QAAQ,OAAO,OAAO;AAAA,IAC/D;AAAA,EACF;AACF;;;AC7DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBO,IAAM,OAAO,CAClB,OACA,aACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK,mBAAmB,KAAK;AAAA,MAC7B,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,cAAc,CACzB,OACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,mBAAmB,KAAK,cAAc,QAAQ,MAAM;AAAA,IAC3D;AAAA,EACF;AACF;AAKO,IAAM,cAAc,CACzB,OACA,uBACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK,mBAAmB,KAAK;AAAA,MAC7B,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;;;ACrEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BO,IAAM,SAAS,CACpB,OACA,eACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,cAAc,KAAK,IAAI,aAAa,QAAQ,QAAQ,OAAO,OAAO;AAAA,IACzE;AAAA,EACF;AACF;AAKO,IAAM,cAAc,CACzB,OACA,eACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,cAAc,KAAK,IAAI,aAAa,UAAU,QAAQ,MAAM;AAAA,IACnE;AAAA,EACF;AACF;AAKO,IAAM,aAAa,CACxB,OACA,eACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,cAAc,KAAK,IAAI,aAAa,YAAY,QAAQ,OAAO,OAAO;AAAA,IAC7E;AAAA,EACF;AACF;AAKO,IAAM,eAAe,CAC1B,OACA,eACA,mBACA,YACG;AACH,SAAO;AAAA,IACL;AAAA,MACE,KAAK,cAAc,KAAK,IAAI,aAAa;AAAA,MACzC,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACF;AAKO,IAAM,oBAAoB,CAC/B,OACA,eACA,QACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,cAAc,KAAK,IAAI,aAAa,oBAAoB,QAAQ,OAAO,OAAO;AAAA,IACrF;AAAA,EACF;AACF;;;ACrGA;AAAA;AAAA;AAAA;AAiBO,IAAM,eAAe,CAC1B,OACA,eACA,YACG;AACH,SAAO;AAAA,IACL,EAAE,KAAK,iBAAiB,KAAK,IAAI,aAAa,IAAI,QAAQ,OAAO;AAAA,IACjE;AAAA,EACF;AACF;;;AnBoBO,IAAM,oBAAN,MAAwB;AAAA,EAwBtB,YAAY,aAAqC,UAAoC,CAAC,GAAG;AAvBhG,wBAAgB;AAGhB;AAAA,wBAAgB;AAGhB;AAAA,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAChB,wBAAgB;AAGd,UAAM,UAAkB,QAAQ,aAAa;AAC7C,UAAM,YACJ,QAAQ,aAAa;AAEvB,SAAK,aAAa,EAAE,SAAS,WAAW,YAAY;AAGpD,cAAU;AAAA,MACR;AAAA,MACA,UAAU;AAAA,MACV,WAAW,QAAQ;AAAA,IACrB,CAAC;AAGD,SAAK,QAAQ;AACb,SAAK,MAAM;AACX,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,UAAU;AACf,SAAK,cAAc;AACnB,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,SAAS;AACd,SAAK,YAAY;AACjB,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,SAAK,OAAO;AACZ,SAAK,MAAM;AACX,SAAK,WAAW;AAGhB,SAAK,SAAS,IAAI,UAAU,KAAK,UAAU;AAG3C,QAAI,QAAQ,yBAAyB,MAAM;AACzC,WAAK,OAAO,QAAQ;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WAAc,OAAe,UAAU,KAAmB;AAC9D,UAAM,cACJ,OAAO,KAAK,WAAW,gBAAgB,WACnC,KAAK,WAAW,cAChB,MAAM,KAAK,WAAW,YAAY,SAAS;AAEjD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,MAAM,IAAI,iDAAoB,GAAG,KAAK,WAAW,OAAO,SAAS,KAAK,cAAc;AAAA,QACxF,SAAS;AAAA,UACP,eAAe,UAAU,WAAW;AAAA,QACtC;AAAA,MACF,CAAC;AAED,YAAM,YAAY,WAAW,MAAM;AACjC,YAAI,MAAM;AACV,eAAO,IAAI,MAAM,OAAO,KAAK,oBAAoB,OAAO,IAAI,CAAC;AAAA,MAC/D,GAAG,OAAO;AAEV,UAAI,YAAY,WAAS;AACvB,YAAI;AACF,kBAAQ,IAAI,gBAAgB,MAAM,IAAI;AACtC,gBAAM,OAAO,KAAK,MAAM,MAAM,IAAc;AAE5C,cAAI,KAAK,WAAW,SAAS;AAC3B,gBAAI,MAAM;AACV,mBAAO,IAAI,MAAM,UAAU,KAAK,OAAO,EAAE,CAAC;AAAA,UAC5C,WAAW,KAAK,WAAW,aAAa;AACtC,yBAAa,SAAS;AACtB,gBAAI,MAAM;AACV,oBAAQ,IAAS;AAAA,UACnB;AAAA,QACF,QAAQ;AACN,uBAAa,SAAS;AACtB,cAAI,MAAM;AACV,iBAAO,IAAI,MAAM,0BAA0B,CAAC;AAAA,QAC9C;AAAA,MACF;AAEA,UAAI,SAAS,MAAM;AACjB,gBAAQ,IAAI,uBAAuB;AAAA,MACrC;AAEA,UAAI,UAAU,WAAS;AACrB,cAAM,aAAa;AACnB,YAAI,WAAW,SAAS,SAAS,oBAAoB,GAAG;AACtD,kBAAQ,IAAI,uCAAuC;AACnD;AAAA,QACF;AAEA,qBAAa,SAAS;AACtB,YAAI,MAAM;AACV,eAAO,IAAI,MAAM,4BAA4B,KAAK,EAAE,CAAC;AAAA,MACvD;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":["Axios","axiosRetry"]}