@liberfi.io/client 0.3.5 → 0.3.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.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts","../src/errors.ts","../src/phase3Http.ts","../src/utils.ts","../src/client.ts"],"names":["version_default","NotImplementedError","method","detail","isNotImplementedError","error","DEFAULT_SERVER_URL","resolveAccessToken","provider","appendQuery","params","key","value","request","ctx","path","query","url","v","search","token","res","body","buildPhase3Context","accessToken","serverUrl","getTokenHolders","chain","tokenAddress","getActivities","getWalletNetWorthByTokens","walletAddress","getWalletPnlDetails","nullToUndefined","toChainDTO","Chain","ChainSymbol","toResolutionDTO","resolution","Resolution","toSortDirectionDTO","direction","toSearchFieldDTO","field","SearchSortBy","toFieldDTO","TokenField","toRangeFiltersDTO","filters","it","cond","SafeBigNumber","fromChainDTO","fromTokenCreatorDTO","input","fromTokenDTO","k","fromTokenStatsDTO","fromTokenMarketDataDTO","parseTokenStatsByResolution","toOptionalNumber","period","fromTokenLiquidityDTO","fromTokenCandle","fromResolutionDTO","fromTokenSecurity","solanaChains","EVM_NATIVE_ADDRESS","KYBERSWAP_NATIVE_SENTINEL","toJupiterMint","address","SOLANA_TOKENS","toKyberSwapMint","effectiveDex","toMintForDex","dex","toMintForRoute","toSwapRouteInput","inputMint","outputMint","API","SwapRouteInputSwapMode","toSendTxInput","toDateFromMs","ms","toTagArray","fromTokenHolderPage","holder","fromTokenPage","pageExtra","fromSwapRoute","fromLatestBlock","fromSendTxResult","fromWalletPortfolios","portfolios","item","fromWalletPnlSummary","fromPnlItemDTO","fromPnlDetailsPage","fromWalletNetWorthByTokens","fromPnlDetailItems","fromTradePage","fromTradeDetailDTO","isBuy","fromActivityPage","fromActivityDetailDTO","type","tsMs","fromTokenSubscribed","fromTokenMetadataSubscribed","fromWsCandle","fromWsTokenStats","timeframes","record","result","tf","buys","sells","buyers","sellers","buyVolumeInUsd","sellVolumeInUsd","trades","price","openInUsd","closeInUsd","totalTrades","totalTraders","totalVolumesInUsd","priceChange","fromWsTokenMarketDataFromStats","fromWsTokenDataSubscribed","fromWsTokenSupplyToSubscribed","fromWsTokenHolderToSubscribed","fromWsTokenMarketDataFromHolder","fromWsTokenLiquidityToSubscribed","WsMetricType","fromWsTokenBondingCurveToSubscribed","fromWsTokenMaxLiquidityToSubscribed","fromWsTokenTotalLiquidityToSubscribed","fromWsTradeActivity","fromWsActivity","Client","_Client","options","ChainStreamClient","addresses","c","security","stats","holders","marketData","tokenPage","route","latestBlock","txHash","timeout","success","chainParam","netWorth","pnl","detailsPage","tokenAddresses","_chain","_address","_options","_creator","callback","chainDTO","subs","data","s","rankingSub","WsChannelType","d","bondingSub","base","qs","raw","decimals","divisor","whole","fracStr","amount","nativeAddr","nativePortfolio","p","parseLaunchPlatformFromFilters","target","tradePage","page","channelType","filter"],"mappings":"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","file":"index.js","sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/client\"] = \"0.3.5\";\n}\n\nexport default \"0.3.5\";\n","/**\n * Error thrown when a Client method is called against a server endpoint\n * that has not yet shipped. This is distinct from a network / auth error:\n * the SDK is structurally ready to call the endpoint but the backend\n * side is not.\n *\n * Widgets can use `instanceof NotImplementedError` (or check `code`) to\n * render a \"coming soon\" empty state instead of a generic error surface.\n */\nexport class NotImplementedError extends Error {\n /** Stable discriminant, useful across package boundaries where `instanceof` may be brittle. */\n readonly code = \"NotImplemented\" as const;\n\n constructor(method: string, detail?: string) {\n super(\n detail\n ? `${method} is not yet implemented by the backend: ${detail}`\n : `${method} is not yet implemented by the backend`,\n );\n this.name = \"NotImplementedError\";\n }\n}\n\n/** Type guard using the stable code so it survives bundling across realms. */\nexport function isNotImplementedError(\n error: unknown,\n): error is NotImplementedError {\n return (\n error instanceof Error &&\n (error as { code?: string }).code === \"NotImplemented\"\n );\n}\n","/**\n * Phase 3 HTTP helpers.\n *\n * The bundled `@chainstream-io/sdk` version pins an older schema that does not\n * recognize the Phase 3 parameters (`sortBy`, `positionState`, `resolution`) or\n * response fields (`gasFee`, `traderTags`, `tags`, `lastActiveAt`, `avgCostUsd`,\n * `isActive`, `walletTokenTags`, `isClosed`, `firstBuyAt`, `lastSellAt`).\n *\n * Rather than wait for the SDK to be regenerated, this module issues direct\n * `fetch` calls against the same REST endpoints the SDK would have hit, and\n * types the raw DTOs as described in the 2026-05-01 Phase 3 spec. Mapping from\n * DTO → domain type stays in `utils.ts`.\n *\n * Once the SDK adopts Phase 3, this module can be deleted and Client can call\n * the SDK methods again without touching any consumer code.\n */\nimport { ClientTokenProvider } from \"./client\";\n\n/** Shared default; matches the SDK's built-in default. */\nconst DEFAULT_SERVER_URL = \"https://api.chainstream.io\";\n\nexport interface Phase3RequestContext {\n baseUrl: string;\n accessToken: ClientTokenProvider;\n}\n\nasync function resolveAccessToken(\n provider: ClientTokenProvider,\n): Promise<string> {\n if (typeof provider === \"string\") return provider;\n return Promise.resolve(provider.getToken());\n}\n\nfunction appendQuery(params: URLSearchParams, key: string, value: unknown) {\n if (value === undefined || value === null) return;\n if (value instanceof Date) {\n params.set(key, String(value.getTime()));\n return;\n }\n params.set(key, String(value));\n}\n\nasync function request<T>(\n ctx: Phase3RequestContext,\n path: string,\n query: Record<string, unknown>,\n): Promise<T> {\n const url = new URL(path, ctx.baseUrl);\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) appendQuery(params, k, v);\n const search = params.toString();\n if (search) url.search = search;\n\n const token = await resolveAccessToken(ctx.accessToken);\n const res = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new Error(\n `[phase3Http] ${res.status} ${res.statusText} ${url.pathname}: ${body}`,\n );\n }\n return (await res.json()) as T;\n}\n\nexport function buildPhase3Context(\n accessToken: ClientTokenProvider,\n serverUrl?: string,\n): Phase3RequestContext {\n return {\n baseUrl: serverUrl ?? DEFAULT_SERVER_URL,\n accessToken,\n };\n}\n\n// ============================================================================\n// DTO shapes (Phase 3)\n// ----------------------------------------------------------------------------\n// These mirror the response bodies documented in `servicesapi-interface-manual-\n// 2026-05-01.md`. They are intentionally defined here (rather than imported\n// from the SDK) because the SDK's generated types omit Phase 3 fields.\n// ============================================================================\n\nexport interface CursorPageDTO<T> {\n data: Array<T>;\n hasNext: boolean;\n hasPrev: boolean;\n startCursor?: string | null;\n endCursor?: string | null;\n}\n\nexport interface Phase3TokenHolderDTO {\n walletAddress: string;\n amount: string;\n amountInUsd: string;\n percentage: string;\n tags?: Array<string>;\n lastActiveAt?: number | null;\n startHoldingAt?: number | null;\n}\n\nexport interface Phase3ActivityDTO {\n transactionSignature: string;\n chain: string;\n blockHeight?: number;\n blockTimestamp: number;\n type: string;\n\n tokenAddress: string;\n tokenName?: string;\n tokenSymbol: string;\n tokenImageUrl?: string | null;\n tokenAmount: string;\n tokenAmountInUsd: string;\n tokenPriceInUsd?: string;\n tokenAmountInNative?: string;\n tokenPriceInNative?: string;\n\n sideTokenAddress: string;\n sideTokenName?: string;\n sideTokenSymbol: string;\n sideTokenImageUrl?: string | null;\n sideTokenAmount: string;\n sideTokenAmountInUsd: string;\n sideTokenPriceInUsd?: string;\n\n accountOwnerAddress: string;\n gasFee?: number | null;\n traderTags?: Array<string>;\n\n poolAddress?: string | null;\n dexProgramAddress?: string | null;\n dexProtocolFamily?: string | null;\n dexImage?: string | null;\n\n status?: string;\n}\n\nexport interface Phase3NetWorthTokenDTO {\n chain: string;\n tokenAddress: string;\n name: string;\n symbol: string;\n decimals: number;\n logoUri?: string | null;\n amount: string;\n priceInUsd: string;\n priceInNative: string;\n valueInUsd: string;\n valueInNative: string;\n isActive?: boolean;\n avgCostUsd?: string | null;\n lastActiveAt?: number | null;\n walletTokenTags?: Array<string>;\n}\n\nexport interface Phase3NetWorthByTokensDTO {\n walletAddress: string;\n totalValueInUsd: string;\n totalValueInNative: string;\n currentTimestamp?: number;\n data: Array<Phase3NetWorthTokenDTO>;\n}\n\nexport interface Phase3PnlSummaryDTO {\n tokens?: number | string;\n totalTrades?: number | string;\n buys?: number | string;\n sells?: number | string;\n wins?: number | string;\n losses?: number | string;\n winRate?: string | null;\n realizedProfitInUsd?: string | null;\n unrealizedProfitInUsd?: string | null;\n totalProfitInUsd?: string | null;\n totalProfitRatio?: string | null;\n currentValue?: string | null;\n buyAmountInUsd?: string | null;\n sellAmountInUsd?: string | null;\n totalCostInUsd?: string;\n avgProfitPerTradeInUsd?: string | null;\n}\n\nexport interface Phase3PnlItemDTO {\n tokenAddress: string;\n symbol?: string;\n name?: string;\n decimals?: number;\n logoUri?: string | null;\n walletAddress?: string;\n chain?: string;\n\n balance: string;\n priceInUsd: string;\n currentValue: string;\n\n realizedProfitInUsd?: string;\n realizedProfitRatio?: string;\n unrealizedProfitInUsd?: string;\n unrealizedProfitRatio?: string;\n totalProfitInUsd?: string;\n totalProfitRatio?: string;\n\n buys?: number | string;\n sells?: number | string;\n totalTrades?: number | string;\n wins?: number | string;\n losses?: number | string;\n buyAmount?: string;\n sellAmount?: string;\n buyAmountInUsd?: string;\n sellAmountInUsd?: string;\n avgBuyPriceInUsd?: string;\n avgSellPriceInUsd?: string;\n avgProfitPerTradeInUsd?: string;\n totalCostInUsd?: string;\n\n isClosed?: boolean;\n firstBuyAt?: number | null;\n lastSellAt?: number | null;\n}\n\nexport interface Phase3PnlDetailsDTO extends CursorPageDTO<Phase3PnlItemDTO> {\n summary: Phase3PnlSummaryDTO;\n}\n\n// ============================================================================\n// Query param types\n// ============================================================================\n\nexport interface GetTokenHoldersQuery {\n /**\n * Sort field. `realizedPnl` is accepted by newer servers for the Top\n * Traders view; if the backend does not recognize it, it typically falls\n * back to `holdingUsd` and the widget surfaces an empty state cue.\n */\n sortBy?: \"holdingUsd\" | \"lastActiveAt\" | \"realizedPnl\";\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\nexport interface GetActivitiesQuery {\n tokenAddress?: string;\n walletAddress?: string;\n poolAddress?: string;\n type?: string;\n sortBy?: \"timestamp\" | \"totalUsd\";\n beforeTimestamp?: number;\n afterTimestamp?: number;\n beforeBlockHeight?: number;\n afterBlockHeight?: number;\n transactionsSignature?: string;\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\nexport interface GetNetWorthByTokensQuery {\n tokenAddresses: string;\n}\n\nexport interface GetPnlDetailsQuery {\n resolution: \"7d\" | \"30d\" | \"90d\";\n positionState?: \"open\" | \"closed\" | \"all\";\n sortBy?: \"totalPnl\" | \"realizedPnl\" | \"unrealizedPnl\";\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\n// ============================================================================\n// Endpoint wrappers\n// ============================================================================\n\n/** `GET /v2/token/{chain}/{tokenAddress}/holders` */\nexport function getTokenHolders(\n ctx: Phase3RequestContext,\n chain: string,\n tokenAddress: string,\n query: GetTokenHoldersQuery,\n): Promise<CursorPageDTO<Phase3TokenHolderDTO>> {\n return request(\n ctx,\n `/v2/token/${encodeURIComponent(chain)}/${encodeURIComponent(\n tokenAddress,\n )}/holders`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/trade/{chain}/activities` */\nexport function getActivities(\n ctx: Phase3RequestContext,\n chain: string,\n query: GetActivitiesQuery,\n): Promise<CursorPageDTO<Phase3ActivityDTO>> {\n return request(\n ctx,\n `/v2/trade/${encodeURIComponent(chain)}/activities`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/wallet/{chain}/{walletAddress}/net-worth/tokens` */\nexport function getWalletNetWorthByTokens(\n ctx: Phase3RequestContext,\n chain: string,\n walletAddress: string,\n query: GetNetWorthByTokensQuery,\n): Promise<Phase3NetWorthByTokensDTO> {\n return request(\n ctx,\n `/v2/wallet/${encodeURIComponent(chain)}/${encodeURIComponent(\n walletAddress,\n )}/net-worth/tokens`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/wallet/{chain}/{walletAddress}/pnl-details` */\nexport function getWalletPnlDetails(\n ctx: Phase3RequestContext,\n chain: string,\n walletAddress: string,\n query: GetPnlDetailsQuery,\n): Promise<Phase3PnlDetailsDTO> {\n return request(\n ctx,\n `/v2/wallet/${encodeURIComponent(chain)}/${encodeURIComponent(\n walletAddress,\n )}/pnl-details`,\n query as unknown as Record<string, unknown>,\n );\n}\n","import {\n Token as TokenDTO,\n Resolution,\n TokenCandle as SdkTokenCandle,\n TokenStats as SdkTokenStats,\n TokenMarketData as SdkTokenMarketData,\n TokenField,\n RangeFilterCondition,\n SearchSortBy,\n TokenPage as ChainStreamTokenPage,\n SwapRouteResponse,\n SwapRouteInput,\n SwapRouteInputSwapMode,\n SendTxInput,\n SendTxResponse,\n WalletNetWorthPage,\n PageResponseTradeDetail,\n DexPool,\n ChainSymbol,\n TokenCreator as SdkTokenCreator,\n WsNewToken,\n WsTokenMetadata,\n WsCandle,\n WsTokenStat,\n WsTradeActivity,\n WsTokenHolder as WsTokenHolderDTO,\n WsTokenSupply,\n WsTokenLiquidity,\n WsTokenMaxLiquidity,\n WsTokenTotalLiquidity,\n WsTokenBondingCurve,\n WsMetricType,\n WalletPnlSummary,\n PnlDetailsResult,\n NetWorthByTokensResult,\n BlockchainLatestBlock as SdkBlockchainLatestBlock,\n} from \"@chainstream-io/sdk\";\nimport {\n API,\n Chain,\n Token,\n TokenCandle,\n TokenCreator,\n TokenHolder,\n TokenLiquidity,\n TokenMarketData,\n TokenResolution,\n TokenSecurity,\n TokenStats,\n TokenStatsByResolution,\n Activity,\n ActivityType,\n HolderTag,\n TraderTag,\n Trade,\n Portfolio,\n PortfolioPnl,\n WalletPnl,\n WalletPortfolioPnls,\n WalletPortfolios,\n WalletTokenTag,\n} from \"@liberfi.io/types\";\nimport { SafeBigNumber, SOLANA_TOKENS } from \"@liberfi.io/utils\";\nimport type {\n CursorPageDTO,\n Phase3ActivityDTO,\n Phase3NetWorthByTokensDTO,\n Phase3PnlDetailsDTO,\n Phase3PnlItemDTO,\n Phase3TokenHolderDTO,\n} from \"./phase3Http\";\n\nfunction nullToUndefined<T>(value: T | null | undefined): T | undefined {\n return value ?? undefined;\n}\n\nexport function toChainDTO(chain: Chain): ChainSymbol {\n switch (chain) {\n case Chain.ETHEREUM:\n return ChainSymbol.eth;\n case Chain.BINANCE:\n return ChainSymbol.bsc;\n case Chain.SOLANA:\n return ChainSymbol.sol;\n }\n throw new Error(`Unsupported chain: ${chain}`);\n}\n\nexport function toResolutionDTO(resolution: TokenResolution): Resolution {\n switch (resolution) {\n case \"1s\":\n return Resolution[\"1s\"];\n case \"15s\":\n return Resolution[\"15s\"];\n case \"30s\":\n return Resolution[\"30s\"];\n case \"1m\":\n return Resolution[\"1m\"];\n case \"5m\":\n return Resolution[\"5m\"];\n case \"15m\":\n return Resolution[\"15m\"];\n case \"30m\":\n case \"1h\":\n return Resolution[\"1h\"];\n case \"4h\":\n return Resolution[\"4h\"];\n case \"12h\":\n return Resolution[\"12h\"];\n case \"24h\":\n return Resolution[\"1d\"];\n }\n}\n\nexport function toSortDirectionDTO(direction: \"asc\" | \"desc\"): string {\n return direction;\n}\n\nexport function toSearchFieldDTO(field: API.TokenFieldOption): string {\n switch (field) {\n case \"marketCap\":\n return SearchSortBy.marketCapInUsd;\n case \"tvl\":\n return SearchSortBy.liquidityInUsd;\n case \"price\":\n return SearchSortBy.priceInUsd;\n case \"holders\":\n return SearchSortBy.holderCount;\n case \"volumes24h\":\n return SearchSortBy.h24VolumeInUsd;\n case \"trades24h\":\n return SearchSortBy.h24Transactions;\n case \"createdAt\":\n return SearchSortBy.tokenCreatedAt;\n }\n throw new Error(`Unsupported search field: ${field}`);\n}\n\nexport function toFieldDTO(field: API.TokenFieldOption): string {\n switch (field) {\n case \"price\":\n return TokenField.marketDatapriceInUsd;\n case \"priceChange1m\":\n return TokenField.statspriceChangeRatioInUsd1m;\n case \"priceChange5m\":\n return TokenField.statspriceChangeRatioInUsd5m;\n case \"priceChange1h\":\n return TokenField.statspriceChangeRatioInUsd1h;\n case \"priceChange4h\":\n return TokenField.statspriceChangeRatioInUsd4h;\n case \"priceChange24h\":\n return TokenField.statspriceChangeRatioInUsd24h;\n case \"marketCap\":\n return TokenField.marketDatamarketCapInUsd;\n case \"tvl\":\n return TokenField.marketDatamaxPoolTvlInUsd;\n case \"top10Holdings\":\n return TokenField.marketDatatop10TotalHoldings;\n case \"top10Ratio\":\n return TokenField.marketDatatop10HoldingsRatio;\n case \"top100Holdings\":\n return TokenField.marketDatatop100TotalHoldings;\n case \"top100Ratio\":\n return TokenField.marketDatatop100HoldingsRatio;\n case \"holders\":\n return TokenField.marketDataholders;\n case \"creatorsHoldings\":\n return TokenField.marketDatacreatorHoldings;\n case \"creatorsRatio\":\n return TokenField.marketDatacreatorHoldingsRatio;\n case \"buys1m\":\n return TokenField.statsbuys1m;\n case \"buys5m\":\n return TokenField.statsbuys5m;\n case \"buys15m\":\n return TokenField.statsbuys15m;\n case \"buys30m\":\n return TokenField.statsbuys30m;\n case \"buys1h\":\n return TokenField.statsbuys1h;\n case \"buys4h\":\n return TokenField.statsbuys4h;\n case \"buys24h\":\n return TokenField.statsbuys24h;\n case \"sells1m\":\n return TokenField.statssells1m;\n case \"sells5m\":\n return TokenField.statssells5m;\n case \"sells15m\":\n return TokenField.statssells15m;\n case \"sells30m\":\n return TokenField.statssells30m;\n case \"sells1h\":\n return TokenField.statssells1h;\n case \"sells4h\":\n return TokenField.statssells4h;\n case \"sells24h\":\n return TokenField.statssells24h;\n case \"trades1m\":\n return TokenField.statstrades1m;\n case \"trades5m\":\n return TokenField.statstrades5m;\n case \"trades1h\":\n return TokenField.statstrades1h;\n case \"trades4h\":\n return TokenField.statstrades4h;\n case \"trades24h\":\n return TokenField.statstrades24h;\n case \"traders1m\":\n return TokenField.statstraders1m;\n case \"traders5m\":\n return TokenField.statstraders5m;\n case \"traders1h\":\n return TokenField.statstraders1h;\n case \"traders4h\":\n return TokenField.statstraders4h;\n case \"traders24h\":\n return TokenField.statstraders24h;\n case \"volumes1m\":\n return TokenField.statsvolumesInUsd1m;\n case \"volumes5m\":\n return TokenField.statsvolumesInUsd5m;\n case \"volumes1h\":\n return TokenField.statsvolumesInUsd1h;\n case \"volumes4h\":\n return TokenField.statsvolumesInUsd4h;\n case \"volumes24h\":\n return TokenField.statsvolumesInUsd24h;\n case \"createdAt\":\n return TokenField.tokenCreatedAt;\n }\n throw new Error(`Unsupported sortBy: ${field}`);\n}\n\nexport function toRangeFiltersDTO(\n filters: Array<API.TokenFilterOption>,\n): Array<RangeFilterCondition> {\n return filters\n .filter(\n (it) => [\"gt\", \"gte\", \"lt\", \"lte\", \"between\"].indexOf(it.operator) >= 0,\n )\n .map((it) => {\n const cond = { field: toFieldDTO(it.field) } as RangeFilterCondition;\n if ([\"gt\", \"gte\", \"between\"].indexOf(it.operator) >= 0) {\n cond.min =\n typeof it.value === \"number\"\n ? new SafeBigNumber(it.value).toString()\n : (it.value as string);\n }\n if ([\"lt\", \"lte\", \"between\"].indexOf(it.operator) >= 0) {\n cond.max =\n typeof it.value === \"number\"\n ? new SafeBigNumber(it.value).toString()\n : (it.value as string);\n }\n return cond;\n });\n}\n\nexport function fromChainDTO(chain: string): Chain {\n switch (chain) {\n case ChainSymbol.eth:\n return Chain.ETHEREUM;\n case ChainSymbol.bsc:\n return Chain.BINANCE;\n case ChainSymbol.sol:\n case \"solana\":\n return Chain.SOLANA;\n }\n throw new Error(`Unsupported chain: ${chain}`);\n}\n\nexport function fromTokenCreatorDTO(input: SdkTokenCreator): TokenCreator {\n return {\n address: input.address ?? undefined,\n share: input.share ?? undefined,\n isVerified: input.isVerified ?? undefined,\n };\n}\n\nexport function fromTokenDTO(input: TokenDTO): Token {\n return {\n chain: fromChainDTO(input.chain),\n name: input.name,\n symbol: input.symbol,\n address: input.address,\n decimals: input.decimals,\n image: input.imageUrl ?? undefined,\n description: input.description ?? undefined,\n creators: input.tokenCreators?.map(fromTokenCreatorDTO),\n launchedFrom: {\n programAddress: input.extra?.launchFromProgramAddress ?? undefined,\n protocolFamily: input.extra?.launchFromProtocolFamily ?? undefined,\n },\n migrateProgress: input.marketData?.completionRatio\n ? new SafeBigNumber(input.marketData.completionRatio)\n .shiftedBy(2)\n .toString()\n : undefined,\n migratedTo: {\n programAddress: input.extra?.migratedToProgramAddress ?? undefined,\n protocolFamily: input.extra?.migratedToProtocolFamily ?? undefined,\n poolAddress: input.extra?.migratedToPoolAddress ?? undefined,\n migratedAt: input.extra?.migratedAt\n ? new Date(input.extra.migratedAt)\n : undefined,\n },\n socialMedias: input.socialMedias\n ? Object.fromEntries(\n Object.entries(input.socialMedias)\n .filter(([, v]) => v != null)\n .map(([k, v]) => [k, v as string]),\n )\n : undefined,\n stats: input.stats ? fromTokenStatsDTO(input.stats) : undefined,\n marketData: input.marketData\n ? fromTokenMarketDataDTO(input.marketData)\n : undefined,\n createdAt: input.tokenCreatedAt\n ? new Date(input.tokenCreatedAt)\n : undefined,\n };\n}\n\nexport function fromTokenStatsDTO(input: SdkTokenStats): TokenStats {\n return {\n [\"1m\"]: parseTokenStatsByResolution(input, \"1m\"),\n [\"5m\"]: parseTokenStatsByResolution(input, \"5m\"),\n [\"15m\"]: parseTokenStatsByResolution(input, \"15m\"),\n [\"30m\"]: parseTokenStatsByResolution(input, \"30m\"),\n [\"1h\"]: parseTokenStatsByResolution(input, \"1h\"),\n [\"4h\"]: parseTokenStatsByResolution(input, \"4h\"),\n [\"24h\"]: parseTokenStatsByResolution(input, \"24h\"),\n };\n}\n\nfunction toOptionalNumber(value: string | undefined): number | undefined {\n return value === undefined ? undefined : parseInt(value);\n}\n\nfunction parseTokenStatsByResolution(\n input: SdkTokenStats,\n resolution: TokenResolution,\n): TokenStatsByResolution {\n const period = input.periods?.[resolution];\n if (!period) {\n return {};\n }\n\n return {\n buys: toOptionalNumber(period.buys),\n sells: toOptionalNumber(period.sells),\n trades: toOptionalNumber(period.trades),\n buyers: toOptionalNumber(period.buyers),\n sellers: toOptionalNumber(period.sellers),\n traders: toOptionalNumber(period.traders),\n buyVolumes: period.buyVolume,\n sellVolumes: period.sellVolume,\n volumes: period.totalVolumeInNative,\n buyVolumesInUsd: period.buyVolumeInUsd,\n sellVolumesInUsd: period.sellVolumeInUsd,\n volumesInUsd: period.totalVolumeInUsd,\n openPriceInUsd: period.openInUsd,\n closePriceInUsd: period.closeInUsd,\n highPriceInUsd: period.highInUsd,\n lowPriceInUsd: period.lowInUsd,\n priceInUsd: period.closeInUsd,\n priceChange: period.priceChangeRatioInUsd,\n };\n}\n\nexport function fromTokenLiquidityDTO(input: DexPool): TokenLiquidity {\n return {\n poolAddress: input.poolAddress,\n programAddress: input.programAddress ?? undefined,\n protocolFamily: input.protocolFamily ?? undefined,\n tvl: input.tvlInSol ?? undefined,\n tvlInUsd: input.tvlInUsd ?? undefined,\n };\n}\n\nexport function fromTokenMarketDataDTO(\n input: SdkTokenMarketData,\n): TokenMarketData {\n return {\n totalSupply: input.totalSupply ?? undefined,\n marketCap: input.marketCapInSol ?? undefined,\n marketCapInUsd: input.marketCapInUsd ?? undefined,\n price: input.priceInSol ?? undefined,\n priceInUsd: input.priceInUsd ?? undefined,\n tvl: input.totalTvlInSol ?? undefined,\n tvlInUsd: input.totalTvlInUsd ?? undefined,\n holders: input.holders ? parseInt(input.holders) : undefined,\n top10Holdings: input.top10TotalHoldings ?? undefined,\n top10HoldingsRatio: input.top10HoldingsRatio ?? undefined,\n top50Holdings: input.top50TotalHoldings ?? undefined,\n top50HoldingsRatio: input.top50HoldingsRatio ?? undefined,\n top100Holdings: input.top100TotalHoldings ?? undefined,\n top100HoldingsRatio: input.top100HoldingsRatio ?? undefined,\n bluechipHolders: input.bluechipTotalHolders\n ? parseInt(input.bluechipTotalHolders)\n : undefined,\n bluechipHoldings: input.bluechipTotalHoldings ?? undefined,\n bluechipHoldingsRatio: input.bluechipHoldingsRatio ?? undefined,\n kolHolders: input.kolTotalHolders\n ? parseInt(input.kolTotalHolders)\n : undefined,\n kolHoldings: input.kolTotalHoldings ?? undefined,\n kolHoldingsRatio: input.kolHoldingsRatio ?? undefined,\n sniperHolders: input.sniperTotalHolders\n ? parseInt(input.sniperTotalHolders)\n : undefined,\n sniperHoldings: input.sniperTotalHoldings ?? undefined,\n sniperHoldingsRatio: input.sniperHoldingsRatio ?? undefined,\n proHolders: input.proTotalHolders\n ? parseInt(input.proTotalHolders)\n : undefined,\n proHoldings: input.proTotalHoldings ?? undefined,\n proHoldingsRatio: input.proHoldingsRatio ?? undefined,\n insiderHolders: input.insiderTotalHolders\n ? parseInt(input.insiderTotalHolders)\n : undefined,\n insiderHoldings: input.insiderTotalHoldings ?? undefined,\n insiderHoldingsRatio: input.insiderHoldingsRatio ?? undefined,\n sandwichHolders: input.sandwishTotalHolders\n ? parseInt(input.sandwishTotalHolders)\n : undefined,\n sandwichHoldings: input.sandwishTotalHoldings ?? undefined,\n sandwichHoldingsRatio: input.sandwishHoldingsRatio ?? undefined,\n freshHolders: input.freshTotalHolders\n ? parseInt(input.freshTotalHolders)\n : undefined,\n freshHoldings: input.freshTotalHoldings ?? undefined,\n freshHoldingsRatio: input.freshHoldingsRatio ?? undefined,\n bundleHolders: input.bundleTotalHolders\n ? parseInt(input.bundleTotalHolders)\n : undefined,\n bundleHoldings: input.bundleTotalHoldings ?? undefined,\n bundleHoldingsRatio: input.bundleHoldingsRatio ?? undefined,\n devHolders: input.devTotalHolders\n ? parseInt(input.devTotalHolders)\n : undefined,\n devHoldings: input.devTotalHoldings ?? undefined,\n devHoldingsRatio: input.devHoldingsRatio ?? undefined,\n };\n}\n\nexport function fromTokenCandle(\n input: SdkTokenCandle,\n resolution: TokenResolution,\n): TokenCandle {\n return {\n open: input.open,\n close: input.close,\n high: input.high,\n low: input.low,\n volume: input.volume,\n resolution,\n timestamp: new Date(input.timestamp),\n };\n}\n\nfunction fromResolutionDTO(resolution: string): TokenResolution {\n if (resolution === \"1d\") return \"24h\";\n return resolution as TokenResolution;\n}\n\nexport function fromTokenSecurity(\n input: Record<string, unknown>,\n): TokenSecurity {\n return {\n hasTransferFee: input.hasTransferFee as boolean | undefined,\n isTransferFeeUpgradable: input.isTransferFeeUpgradable as\n | boolean\n | undefined,\n isTransferable: input.isTransferable as boolean | undefined,\n isFreezable: input.isFreezable as boolean | undefined,\n isClosable: input.isClosable as boolean | undefined,\n };\n}\nconst solanaChains: ReadonlySet<Chain> = new Set([\n Chain.SOLANA,\n Chain.SOLANA_TESTNET,\n Chain.SOLANA_DEVNET,\n]);\n\n/** EVM chains use this address to denote the native token (ETH, BNB, etc.). */\nconst EVM_NATIVE_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\n/**\n * KyberSwap API expects this sentinel for native token (ETH/BNB/etc.),\n * not the zero address. See KyberSwap docs / 400 on route when using 0x0.\n * Exported for use when building route request bodies outside Client.swapRoute.\n */\nexport const KYBERSWAP_NATIVE_SENTINEL =\n \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\n/**\n * Jupiter does not accept Solana's native SOL address (System Program);\n * it requires the wrapped SOL (WSOL) mint instead.\n */\nfunction toJupiterMint(address: string): string {\n return address === SOLANA_TOKENS.native.address\n ? SOLANA_TOKENS.wrapped.address\n : address;\n}\n\n/**\n * KyberSwap does not accept EVM zero address (0x0) for native token;\n * it requires the native sentinel address 0xEee...\n */\nfunction toKyberSwapMint(address: string): string {\n return address.toLowerCase() === EVM_NATIVE_ADDRESS.toLowerCase()\n ? KYBERSWAP_NATIVE_SENTINEL\n : address;\n}\n\n/**\n * Resolves effective DEX from params: explicit dex or inferred from chain.\n * Mint conversion (native → sentinel) is chosen by this DEX, not by chain alone.\n */\nfunction effectiveDex(params: API.SwapParams): \"jupiter\" | \"kyberswap\" {\n if (params.dex) return params.dex;\n return solanaChains.has(params.chain) ? \"jupiter\" : \"kyberswap\";\n}\n\nfunction toMintForDex(dex: \"jupiter\" | \"kyberswap\", address: string): string {\n return dex === \"jupiter\"\n ? toJupiterMint(address)\n : dex === \"kyberswap\"\n ? toKyberSwapMint(address)\n : address;\n}\n\n/**\n * Returns the token address to send in route API for the given DEX.\n * Use this when building route request bodies manually (e.g. in a BFF or custom fetch).\n * For KyberSwap, EVM native (0x0) is converted to KYBERSWAP_NATIVE_SENTINEL.\n */\nexport function toMintForRoute(\n dex: \"jupiter\" | \"kyberswap\",\n address: string,\n): string {\n return toMintForDex(dex, address);\n}\n\nexport function toSwapRouteInput(params: API.SwapParams): SwapRouteInput {\n const dex = effectiveDex(params);\n const inputMint = toMintForDex(dex, params.input);\n const outputMint = toMintForDex(dex, params.output);\n return {\n dex: dex as SwapRouteInput[\"dex\"],\n userAddress: params.userAddress,\n amount: params.amount,\n swapMode: (params.mode === API.SwapMode.EXACT_IN\n ? SwapRouteInputSwapMode.ExactIn\n : SwapRouteInputSwapMode.ExactOut) as SwapRouteInput[\"swapMode\"],\n slippage: params.slippage ?? 1,\n inputMint,\n outputMint,\n priorityFee: params.priorityFee,\n ...(params.tipFee && { tipFee: params.tipFee }),\n ...(params.isAntiMev != null && { isAntiMev: params.isAntiMev }),\n ...(params.permit && { permit: params.permit }),\n ...(params.deadline != null && { deadline: params.deadline }),\n };\n}\n\nexport function toSendTxInput(params: API.SendTxParams): SendTxInput {\n return {\n signedTx: params.serializedTx,\n };\n}\n\nfunction toDateFromMs(ms: number | null | undefined): Date | undefined {\n return ms == null ? undefined : new Date(ms);\n}\n\nfunction toTagArray<T extends string>(\n input: Array<string> | null | undefined,\n): Array<T> | undefined {\n if (!input || input.length === 0) return undefined;\n return input as Array<T>;\n}\n\nexport function fromTokenHolderPage(\n input: CursorPageDTO<Phase3TokenHolderDTO>,\n): API.CursorList<TokenHolder> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n data: input.data.map((holder) => ({\n address: holder.walletAddress,\n amount: holder.amount,\n amountInUsd: holder.amountInUsd,\n ratio: holder.percentage,\n tags: toTagArray<HolderTag>(holder.tags),\n lastActiveAt: toDateFromMs(holder.lastActiveAt),\n startHoldingAt: toDateFromMs(holder.startHoldingAt),\n })),\n };\n}\n\nexport function fromTokenPage(\n input: ChainStreamTokenPage,\n): API.SearchTokenCursorList {\n const pageExtra = input as ChainStreamTokenPage & {\n countsByProtocols?: Record<string, unknown>;\n };\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n data: input.data.map(fromTokenDTO),\n extra: nullToUndefined(pageExtra.countsByProtocols),\n };\n}\n\nexport function fromSwapRoute(input: SwapRouteResponse): API.SwapRoute {\n return {\n serializedTx: input.serializedTx,\n recentBlockhash: nullToUndefined(input.recentBlockhash),\n lastValidBlockHeight: nullToUndefined(input.lastValidBlockHeight),\n plans: [],\n extra: input.routeInfo,\n };\n}\n\nexport function fromLatestBlock(\n input: SdkBlockchainLatestBlock,\n): API.BlockchainLatestBlock {\n return {\n blockhash: input.blockhash,\n lastValidBlockHeight: input.lastValidBlockHeight,\n };\n}\n\nexport function fromSendTxResult(input: SendTxResponse): API.SendTxResult {\n return {\n txHash: input.signature,\n extra: { jobId: input.jobId, elapsedTime: input.elapsedTime },\n };\n}\n\nexport function fromWalletPortfolios(\n chain: Chain,\n input: WalletNetWorthPage,\n): WalletPortfolios {\n const portfolios: Portfolio[] = (input.data ?? []).map((item) => ({\n chain: fromChainDTO(item.chain),\n address: item.tokenAddress,\n name: item.name,\n symbol: item.symbol,\n image: nullToUndefined(item.logoUri),\n priceInUsd: item.priceInUsd,\n priceInNative: item.priceInNative,\n amount: item.amount,\n amountInUsd: item.valueInUsd,\n amountInNative: item.valueInNative,\n decimals: item.decimals,\n }));\n\n return {\n chain: portfolios[0]?.chain ?? chain,\n address: input.walletAddress,\n balanceInUsd: input.totalValueInUsd,\n balanceInNative: input.totalValueInNative,\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n portfolios,\n };\n}\n\nexport function fromWalletPnlSummary(\n chain: Chain,\n address: string,\n input: WalletPnlSummary,\n): WalletPnl {\n return {\n chain,\n address,\n tokens: input.tokens ? Number(input.tokens) : undefined,\n buys: input.buys ? Number(input.buys) : undefined,\n sells: input.sells ? Number(input.sells) : undefined,\n totalTrades: input.totalTrades ? Number(input.totalTrades) : undefined,\n wins: input.wins ? Number(input.wins) : undefined,\n losses: input.losses ? Number(input.losses) : undefined,\n winRate: nullToUndefined(input.winRate),\n buyAmountInUsd: nullToUndefined(input.buyAmountInUsd),\n sellAmountInUsd: nullToUndefined(input.sellAmountInUsd),\n totalCostInUsd: nullToUndefined(input.totalCostInUsd),\n realizedProfitInUsd: nullToUndefined(input.realizedProfitInUsd),\n realizedProfitRatio: nullToUndefined(input.realizedProfitRatio),\n unrealizedProfitInUsd: nullToUndefined(input.unrealizedProfitInUsd),\n unrealizedProfitRatio: nullToUndefined(input.unrealizedProfitRatio),\n totalProfitInUsd: nullToUndefined(input.totalProfitInUsd),\n totalProfitRatio: nullToUndefined(input.totalProfitRatio),\n avgProfitPerTradeInUsd: nullToUndefined(input.avgProfitPerTradeInUsd),\n };\n}\n\nfunction fromPnlItemDTO(chain: Chain, item: Phase3PnlItemDTO): PortfolioPnl {\n return {\n chain,\n address: item.tokenAddress,\n name: item.name ?? \"\",\n symbol: item.symbol ?? \"\",\n image: nullToUndefined(item.logoUri),\n amount: item.balance,\n amountInUsd: item.currentValue,\n priceInUsd: item.priceInUsd,\n decimals: item.decimals ?? 0,\n totalTrades:\n item.totalTrades != null ? Number(item.totalTrades) : undefined,\n buys: item.buys != null ? Number(item.buys) : undefined,\n buyVolumes: item.buyAmount,\n buyVolumesInUsd: item.buyAmountInUsd,\n buyAvgPriceInUsd: item.avgBuyPriceInUsd,\n sells: item.sells != null ? Number(item.sells) : undefined,\n sellVolumes: item.sellAmount,\n sellVolumesInUsd: item.sellAmountInUsd,\n sellAvgPriceInUsd: item.avgSellPriceInUsd,\n realizedProfitInUsd: item.realizedProfitInUsd,\n realizedProfitRatio: item.realizedProfitRatio,\n unrealizedProfitInUsd: item.unrealizedProfitInUsd,\n unrealizedProfitRatio: item.unrealizedProfitRatio,\n totalProfitInUsd: item.totalProfitInUsd,\n totalProfitRatio: item.totalProfitRatio,\n isClosed: item.isClosed,\n firstBuyAt: toDateFromMs(item.firstBuyAt),\n lastSellAt: toDateFromMs(item.lastSellAt),\n };\n}\n\nexport function fromPnlDetailsPage(\n chain: Chain,\n address: string,\n input: Phase3PnlDetailsDTO,\n): WalletPortfolioPnls {\n return {\n chain,\n address,\n tokens:\n input.summary.tokens != null ? Number(input.summary.tokens) : undefined,\n buys: input.summary.buys != null ? Number(input.summary.buys) : undefined,\n sells:\n input.summary.sells != null ? Number(input.summary.sells) : undefined,\n totalTrades:\n input.summary.totalTrades != null\n ? Number(input.summary.totalTrades)\n : undefined,\n wins: input.summary.wins != null ? Number(input.summary.wins) : undefined,\n losses:\n input.summary.losses != null ? Number(input.summary.losses) : undefined,\n winRate: nullToUndefined(input.summary.winRate),\n buyAmountInUsd: nullToUndefined(input.summary.buyAmountInUsd),\n sellAmountInUsd: nullToUndefined(input.summary.sellAmountInUsd),\n totalCostInUsd: input.summary.totalCostInUsd,\n realizedProfitInUsd: nullToUndefined(input.summary.realizedProfitInUsd),\n unrealizedProfitInUsd: nullToUndefined(input.summary.unrealizedProfitInUsd),\n totalProfitInUsd: nullToUndefined(input.summary.totalProfitInUsd),\n totalProfitRatio: nullToUndefined(input.summary.totalProfitRatio),\n avgProfitPerTradeInUsd: nullToUndefined(\n input.summary.avgProfitPerTradeInUsd,\n ),\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n portfolios: input.data.map((item) => fromPnlItemDTO(chain, item)),\n };\n}\n\nexport function fromWalletNetWorthByTokens(\n chain: Chain,\n input: Phase3NetWorthByTokensDTO,\n): Portfolio[] {\n return (input.data ?? []).map((item) => ({\n chain: fromChainDTO(item.chain),\n address: item.tokenAddress,\n name: item.name,\n symbol: item.symbol,\n image: nullToUndefined(item.logoUri),\n priceInUsd: item.priceInUsd,\n priceInNative: item.priceInNative,\n amount: item.amount,\n amountInUsd: item.valueInUsd,\n amountInNative: item.valueInNative,\n decimals: item.decimals,\n isActive: item.isActive,\n avgCostUsd: nullToUndefined(item.avgCostUsd),\n lastActiveAt: toDateFromMs(item.lastActiveAt),\n walletTokenTags: toTagArray<WalletTokenTag>(item.walletTokenTags),\n }));\n}\n\nexport function fromPnlDetailItems(\n chain: Chain,\n input: PnlDetailsResult,\n): PortfolioPnl[] {\n return input.data.map((item) => ({\n chain,\n address: item.tokenAddress,\n name: item.name ?? \"\",\n symbol: item.symbol ?? \"\",\n image: nullToUndefined(item.logoUri),\n amount: item.balance,\n amountInUsd: item.currentValue,\n priceInUsd: item.priceInUsd,\n decimals: item.decimals ?? 0,\n totalTrades: Number(item.totalTrades),\n buys: Number(item.buys),\n buyVolumes: item.buyAmount,\n buyVolumesInUsd: item.buyAmountInUsd,\n buyAvgPriceInUsd: item.avgBuyPriceInUsd,\n sells: Number(item.sells),\n sellVolumes: item.sellAmount,\n sellVolumesInUsd: item.sellAmountInUsd,\n sellAvgPriceInUsd: item.avgSellPriceInUsd,\n realizedProfitInUsd: item.realizedProfitInUsd,\n realizedProfitRatio: item.realizedProfitRatio,\n unrealizedProfitInUsd: item.unrealizedProfitInUsd,\n unrealizedProfitRatio: item.unrealizedProfitRatio,\n totalProfitInUsd: item.totalProfitInUsd,\n totalProfitRatio: item.totalProfitRatio,\n }));\n}\n\nexport function fromTradePage(\n input: PageResponseTradeDetail,\n): API.CursorList<Trade> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n data: input.data.map(fromTradeDetailDTO),\n };\n}\n\nfunction fromTradeDetailDTO(\n input: PageResponseTradeDetail[\"data\"][number],\n): Trade {\n const isBuy = input.type.toLowerCase() === \"buy\";\n return {\n chain: fromChainDTO(input.chain),\n walletAddress: input.accountOwnerAddress,\n txHash: input.transactionSignature,\n type: isBuy ? \"buy\" : \"sell\",\n from: {\n address: isBuy ? input.sideTokenAddress : input.tokenAddress,\n symbol: isBuy ? input.sideTokenSymbol : input.tokenSymbol,\n name: isBuy ? input.sideTokenName : input.tokenName,\n image: nullToUndefined(\n isBuy ? input.sideTokenImageUrl : input.tokenImageUrl,\n ),\n amount: isBuy ? input.sideTokenAmount : input.tokenAmount,\n amountInUsd: isBuy ? input.sideTokenAmountInUsd : input.tokenAmountInUsd,\n priceInUsd: isBuy ? input.sideTokenPriceInUsd : input.tokenPriceInUsd,\n },\n to: {\n address: isBuy ? input.tokenAddress : input.sideTokenAddress,\n symbol: isBuy ? input.tokenSymbol : input.sideTokenSymbol,\n name: isBuy ? input.tokenName : input.sideTokenName,\n image: nullToUndefined(\n isBuy ? input.tokenImageUrl : input.sideTokenImageUrl,\n ),\n amount: isBuy ? input.tokenAmount : input.sideTokenAmount,\n amountInUsd: isBuy ? input.tokenAmountInUsd : input.sideTokenAmountInUsd,\n priceInUsd: isBuy ? input.tokenPriceInUsd : input.sideTokenPriceInUsd,\n },\n dex: {\n programAddress: nullToUndefined(input.dexProgramAddress),\n protocolFamily: nullToUndefined(input.dexProtocolFamily),\n image: nullToUndefined(input.dexImage),\n },\n poolAddress: nullToUndefined(input.poolAddress),\n status: (input.status as Trade[\"status\"]) ?? \"success\",\n time: new Date(input.blockTimestamp * 1000),\n };\n}\n\nexport function fromActivityPage(\n input: CursorPageDTO<Phase3ActivityDTO>,\n): API.CursorList<Activity> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n data: input.data.map(fromActivityDetailDTO),\n };\n}\n\nfunction fromActivityDetailDTO(input: Phase3ActivityDTO): Activity {\n const type = input.type.toLowerCase().replace(/ /g, \"_\") as ActivityType;\n const isBuy = type === \"buy\";\n // Phase 3 delivers blockTimestamp as ms epoch directly; older manual maps used\n // `* 1000`. Detect second-vs-millisecond timestamp to stay robust during the\n // SDK transition: values below 10^12 are treated as seconds.\n const tsMs =\n input.blockTimestamp < 1e12\n ? input.blockTimestamp * 1000\n : input.blockTimestamp;\n return {\n chain: fromChainDTO(input.chain),\n walletAddress: input.accountOwnerAddress,\n txHash: input.transactionSignature,\n type,\n from: {\n address: isBuy ? input.sideTokenAddress : input.tokenAddress,\n symbol: isBuy ? input.sideTokenSymbol : input.tokenSymbol,\n name: isBuy ? input.sideTokenName : input.tokenName,\n image: nullToUndefined(\n isBuy ? input.sideTokenImageUrl : input.tokenImageUrl,\n ),\n amount: isBuy ? input.sideTokenAmount : input.tokenAmount,\n amountInUsd: isBuy ? input.sideTokenAmountInUsd : input.tokenAmountInUsd,\n priceInUsd: isBuy ? input.sideTokenPriceInUsd : input.tokenPriceInUsd,\n },\n to: {\n address: isBuy ? input.tokenAddress : input.sideTokenAddress,\n symbol: isBuy ? input.tokenSymbol : input.sideTokenSymbol,\n name: isBuy ? input.tokenName : input.sideTokenName,\n image: nullToUndefined(\n isBuy ? input.tokenImageUrl : input.sideTokenImageUrl,\n ),\n amount: isBuy ? input.tokenAmount : input.sideTokenAmount,\n amountInUsd: isBuy ? input.tokenAmountInUsd : input.sideTokenAmountInUsd,\n priceInUsd: isBuy ? input.tokenPriceInUsd : input.sideTokenPriceInUsd,\n },\n dex: {\n programAddress: nullToUndefined(input.dexProgramAddress),\n protocolFamily: nullToUndefined(input.dexProtocolFamily),\n image: nullToUndefined(input.dexImage),\n },\n poolAddress: nullToUndefined(input.poolAddress),\n status: (input.status as Activity[\"status\"]) ?? \"success\",\n time: new Date(tsMs),\n gasFee: input.gasFee != null ? String(input.gasFee) : undefined,\n traderTags: toTagArray<TraderTag>(input.traderTags),\n };\n}\n\nexport function fromTokenSubscribed(\n chain: Chain,\n input: WsNewToken,\n): API.TokenSubscribed {\n return {\n chain,\n address: input.tokenAddress,\n name: input.name,\n symbol: input.symbol,\n decimals: input.decimals,\n createdAt: input.createdAtMs ? new Date(input.createdAtMs) : undefined,\n launchedFrom: input.launchFrom\n ? {\n programAddress: input.launchFrom.programAddress,\n protocolFamily: input.launchFrom.protocolFamily,\n }\n : undefined,\n };\n}\n\nexport function fromTokenMetadataSubscribed(\n chain: Chain,\n input: WsTokenMetadata,\n): API.TokenSubscribed {\n return {\n chain,\n address: input.tokenAddress,\n name: input.name,\n symbol: input.symbol,\n decimals: input.decimals,\n image: input.imageUrl,\n description: input.description,\n socialMedias: input.socialMedia ? { ...input.socialMedia } : undefined,\n createdAt: input.createdAtMs ? new Date(input.createdAtMs) : undefined,\n launchedFrom: input.launchFrom\n ? {\n programAddress: input.launchFrom.programAddress,\n protocolFamily: input.launchFrom.protocolFamily,\n }\n : undefined,\n migratedTo: input.migratedTo\n ? {\n programAddress: input.migratedTo.programAddress,\n protocolFamily: input.migratedTo.protocolFamily,\n }\n : undefined,\n };\n}\n\n// ====================================\n// WebSocket data conversion functions\n// ====================================\n\nexport function fromWsCandle(input: WsCandle): TokenCandle {\n return {\n open: input.open,\n close: input.close,\n high: input.high,\n low: input.low,\n volume: input.volume,\n resolution: fromResolutionDTO(input.resolution),\n timestamp: new Date(input.time),\n };\n}\n\nexport function fromWsTokenStats(input: WsTokenStat): TokenStats {\n const timeframes = [\"1m\", \"5m\", \"15m\", \"30m\", \"1h\", \"4h\", \"24h\"] as const;\n const record = input as unknown as Record<\n string,\n number | string | undefined\n >;\n const result: TokenStats = {};\n\n for (const tf of timeframes) {\n const buys = record[`buys${tf}`] as number | undefined;\n const sells = record[`sells${tf}`] as number | undefined;\n const buyers = record[`buyers${tf}`] as number | undefined;\n const sellers = record[`sellers${tf}`] as number | undefined;\n const buyVolumeInUsd = record[`buyVolumeInUsd${tf}`] as string | undefined;\n const sellVolumeInUsd = record[`sellVolumeInUsd${tf}`] as\n | string\n | undefined;\n const trades = record[`trades${tf}`] as number | undefined;\n const price = record[`price${tf}`] as string | undefined;\n const openInUsd = record[`openInUsd${tf}`] as string | undefined;\n const closeInUsd = record[`closeInUsd${tf}`] as string | undefined;\n\n const hasData =\n buys !== undefined ||\n sells !== undefined ||\n trades !== undefined ||\n price !== undefined;\n\n if (!hasData) continue;\n\n const totalTrades =\n trades ??\n (buys !== undefined && sells !== undefined ? buys + sells : undefined);\n const totalTraders =\n buyers !== undefined && sellers !== undefined\n ? buyers + sellers\n : undefined;\n const totalVolumesInUsd =\n buyVolumeInUsd !== undefined && sellVolumeInUsd !== undefined\n ? new SafeBigNumber(buyVolumeInUsd).plus(sellVolumeInUsd).toString()\n : undefined;\n const priceChange =\n openInUsd && closeInUsd && new SafeBigNumber(openInUsd).gt(0)\n ? new SafeBigNumber(closeInUsd)\n .minus(openInUsd)\n .div(openInUsd)\n .toString()\n : undefined;\n\n result[tf] = {\n buys,\n sells,\n trades: totalTrades,\n buyers,\n sellers,\n traders: totalTraders,\n buyVolumesInUsd: buyVolumeInUsd,\n sellVolumesInUsd: sellVolumeInUsd,\n volumesInUsd: totalVolumesInUsd,\n openPriceInUsd: openInUsd,\n closePriceInUsd: closeInUsd,\n priceInUsd: price ?? closeInUsd,\n priceChange,\n };\n }\n\n return result;\n}\n\nexport function fromWsTokenMarketDataFromStats(\n input: WsTokenStat,\n): TokenMarketData {\n return {\n priceInUsd: input.price,\n };\n}\n\nexport function fromWsTokenDataSubscribed(\n chain: Chain,\n input: WsTokenStat,\n): API.TokenSubscribed {\n return {\n chain,\n address: input.address,\n stats: fromWsTokenStats(input),\n marketData: fromWsTokenMarketDataFromStats(input),\n };\n}\n\nexport function fromWsTokenSupplyToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenSupply,\n): API.TokenSubscribed {\n return {\n chain,\n address,\n marketData: {\n totalSupply: input.supply,\n marketCapInUsd: input.marketCapInUsd,\n },\n };\n}\n\nexport function fromWsTokenHolderToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenHolderDTO,\n): API.TokenSubscribed {\n return {\n chain,\n address,\n marketData: fromWsTokenMarketDataFromHolder(input),\n };\n}\n\nexport function fromWsTokenLiquidityToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenLiquidity,\n): API.TokenSubscribed {\n if (input.metricType === WsMetricType.LIQUIDITY_IN_USD) {\n return {\n chain,\n address,\n marketData: { tvlInUsd: input.value },\n };\n }\n if (input.metricType === WsMetricType.MIGRATED_RATIO) {\n return {\n chain,\n address,\n migrateProgress: new SafeBigNumber(input.value).shiftedBy(2).toString(),\n };\n }\n return { chain, address };\n}\n\nexport function fromWsTokenBondingCurveToSubscribed(\n chain: Chain,\n input: WsTokenBondingCurve,\n): API.TokenSubscribed {\n return {\n chain,\n address: input.tokenAddress ?? \"\",\n migrateProgress: input.progressRatio\n ? new SafeBigNumber(input.progressRatio).shiftedBy(2).toString()\n : undefined,\n };\n}\n\nexport function fromWsTokenMaxLiquidityToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenMaxLiquidity,\n): API.TokenSubscribed {\n return {\n chain,\n address,\n liquidities: [\n {\n poolAddress: input.poolAddress,\n tvlInUsd: input.liquidityInUsd,\n tvl: input.liquidityInNative,\n },\n ],\n };\n}\n\nexport function fromWsTokenTotalLiquidityToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenTotalLiquidity,\n): API.TokenSubscribed {\n return {\n chain,\n address,\n marketData: {\n tvlInUsd: input.liquidityInUsd,\n tvl: input.liquidityInNative,\n },\n };\n}\n\nexport function fromWsTokenMarketDataFromHolder(\n input: WsTokenHolderDTO,\n): Partial<TokenMarketData> {\n return {\n holders: input.holders,\n top10Holdings: input.top10HoldersAmount,\n top10HoldingsRatio: input.top10HoldersRatio,\n top50Holdings: input.top50HoldersAmount,\n top50HoldingsRatio: input.top50HoldersRatio,\n top100Holdings: input.top100HoldersAmount,\n top100HoldingsRatio: input.top100HoldersRatio,\n devHolders:\n input.balanceTagDevHolders === undefined\n ? undefined\n : input.balanceTagDevHolders,\n devHoldings: input.balanceTagDevAmount,\n devHoldingsRatio: input.balanceTagDevRatio,\n sniperHolders:\n input.balanceTagSniperHolders === undefined\n ? undefined\n : input.balanceTagSniperHolders,\n sniperHoldings: input.balanceTagSniperAmount,\n sniperHoldingsRatio: input.balanceTagSniperRatio,\n freshHolders:\n input.balanceTagFreshHolders === undefined\n ? undefined\n : input.balanceTagFreshHolders,\n freshHoldings: input.balanceTagFreshAmount,\n freshHoldingsRatio: input.balanceTagFreshRatio,\n bundleHolders:\n input.balanceTagBundleHolders === undefined\n ? undefined\n : input.balanceTagBundleHolders,\n bundleHoldings: input.balanceTagBundleAmount,\n bundleHoldingsRatio: input.balanceTagBundleRatio,\n sandwichHolders:\n input.balanceTagSandwichHolders === undefined\n ? undefined\n : input.balanceTagSandwichHolders,\n sandwichHoldings: input.balanceTagSandwichAmount,\n sandwichHoldingsRatio: input.balanceTagSandwichRatio,\n };\n}\n\nexport function fromWsTradeActivity(\n chain: Chain,\n input: WsTradeActivity,\n): Trade {\n const isBuy = input.kind.toLowerCase() === \"buy\";\n return {\n chain,\n walletAddress: isBuy ? input.buyWalletAddress : input.sellWalletAddress,\n txHash: input.txHash,\n type: isBuy ? \"buy\" : \"sell\",\n from: {\n address: input.sellTokenAddress,\n symbol: input.sellTokenSymbol,\n name: input.sellTokenName,\n amount: input.sellAmount,\n amountInUsd: input.sellAmountInUsd,\n },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n },\n status: \"success\",\n time: new Date(input.timestamp),\n };\n}\n\nexport function fromWsActivity(chain: Chain, input: WsTradeActivity): Activity {\n const type = input.kind.toLowerCase().replace(/ /g, \"_\") as ActivityType;\n const isBuy = type === \"buy\";\n return {\n chain,\n walletAddress: isBuy ? input.buyWalletAddress : input.sellWalletAddress,\n txHash: input.txHash,\n type,\n from: {\n address: input.sellTokenAddress,\n symbol: input.sellTokenSymbol,\n name: input.sellTokenName,\n amount: input.sellAmount,\n amountInUsd: input.sellAmountInUsd,\n },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n },\n status: \"success\",\n time: new Date(input.timestamp),\n };\n}\n","import {\n ChainStreamClient,\n ChainSymbol,\n TokenField,\n SortDirection,\n TradeType,\n SearchSortBy,\n WsNewToken,\n WsTokenMetadata,\n WsCandle,\n WsTokenStat,\n WsTradeActivity,\n WsWalletBalance,\n WsWalletTokenPnl,\n WsChannelType,\n WsWalletPnl,\n WsTokenSupply,\n WsTokenHolder,\n WsTokenLiquidity,\n WsTokenMaxLiquidity,\n WsTokenTotalLiquidity,\n WsTokenBondingCurve,\n} from \"@chainstream-io/sdk\";\nimport {\n API,\n Chain,\n Token,\n TokenCandle,\n TokenHolder,\n TokenMarketData,\n TokenResolution,\n TokenSecurity,\n TokenStats,\n Activity,\n ActivityType,\n Trade,\n Portfolio,\n PortfolioPnl,\n WalletPnl,\n WalletPortfolioPnls,\n WalletPortfolios,\n} from \"@liberfi.io/types\";\nimport { NotImplementedError } from \"./errors\";\nimport {\n buildPhase3Context,\n getActivities as phase3GetActivities,\n getTokenHolders as phase3GetTokenHolders,\n getWalletNetWorthByTokens as phase3GetWalletNetWorthByTokens,\n getWalletPnlDetails as phase3GetWalletPnlDetails,\n type Phase3RequestContext,\n} from \"./phase3Http\";\nimport {\n toChainDTO,\n toResolutionDTO,\n fromTokenStatsDTO,\n fromTokenMarketDataDTO,\n toSortDirectionDTO,\n toFieldDTO,\n toRangeFiltersDTO,\n toSearchFieldDTO,\n fromTokenPage,\n fromSwapRoute,\n fromSendTxResult,\n fromWalletPortfolios,\n fromTradePage,\n fromTokenSubscribed,\n fromTokenMetadataSubscribed,\n fromTokenDTO,\n fromTokenCandle,\n fromTokenSecurity,\n fromTokenHolderPage,\n toSendTxInput,\n toSwapRouteInput,\n fromWsCandle,\n fromWsTokenDataSubscribed,\n fromWsTokenSupplyToSubscribed,\n fromWsTokenHolderToSubscribed,\n fromWsTokenLiquidityToSubscribed,\n fromWsTokenMaxLiquidityToSubscribed,\n fromWsTokenTotalLiquidityToSubscribed,\n fromWsTokenBondingCurveToSubscribed,\n fromWsTradeActivity,\n fromActivityPage,\n fromWsActivity,\n fromWalletPnlSummary,\n fromPnlDetailsPage,\n fromWalletNetWorthByTokens,\n fromPnlDetailItems,\n fromLatestBlock,\n} from \"./utils\";\n\n/** Async or sync token provider for authentication. */\nexport interface ClientTokenProviderFn {\n getToken(): Promise<string> | string;\n}\n\nexport type ClientTokenProvider = ClientTokenProviderFn | string;\n\nexport interface ClientOptions {\n debug?: boolean;\n serverUrl?: string;\n streamUrl?: string;\n autoConnectWebSocket?: boolean;\n /**\n * Temporary fallback: when set, all token balances (native + SPL / ERC-20)\n * are fetched from this URL instead of the upstream wallet API.\n * Expected endpoint: `GET {url}?chain=sol|eth|bnb&address=<wallet>[&tokens=addr1,addr2,...]`\n * Response shape: `{ balances: Array<{ address: string; balance: string; decimals: number }> }`\n * Remove this option once the upstream balance API is fixed.\n */\n nativeBalanceApiUrl?: string;\n}\n\nexport class Client implements API.IClient, API.ISubscribeClient {\n // ChainStream client instance\n private readonly _client: ChainStreamClient;\n // Phase 3 HTTP context; used to bypass the SDK for endpoints whose\n // response / request schema hasn't been picked up by the bundled SDK yet.\n private readonly _phase3: Phase3RequestContext;\n\n constructor(\n private readonly accessToken: ClientTokenProvider,\n private readonly options?: ClientOptions,\n ) {\n this._client = new ChainStreamClient(this.accessToken, this.options);\n this._phase3 = buildPhase3Context(\n this.accessToken,\n this.options?.serverUrl,\n );\n }\n\n async getToken(chain: Chain, address: string): Promise<Token> {\n const token = await this._client.token.getToken(toChainDTO(chain), address);\n return fromTokenDTO(token);\n }\n\n async getTokens(\n chain: Chain,\n addresses: Array<string>,\n ): Promise<Array<Token>> {\n const tokens = await this._client.token.getTokens(toChainDTO(chain), {\n tokenAddresses: addresses.join(\",\"),\n });\n return tokens.map(fromTokenDTO);\n }\n\n async getTokenCandles(\n chain: Chain,\n address: string,\n resolution: TokenResolution,\n options?: API.GetTokenCandlesOptions,\n ): Promise<Array<TokenCandle>> {\n const candles = await this._client.token.getCandles(\n toChainDTO(chain),\n address,\n {\n resolution: toResolutionDTO(resolution),\n from: options?.after?.getTime(),\n to: options?.before?.getTime(),\n limit: options?.limit,\n },\n );\n return candles.map((c) => fromTokenCandle(c, resolution));\n }\n\n async getTokenSecurity(\n chain: Chain,\n address: string,\n ): Promise<TokenSecurity> {\n const security = await this._client.token.getSecurity(\n toChainDTO(chain),\n address,\n );\n return fromTokenSecurity(security as Record<string, unknown>);\n }\n\n async getTokenStats(chain: Chain, address: string): Promise<TokenStats> {\n const stats = await this._client.token.getStats(toChainDTO(chain), address);\n return fromTokenStatsDTO(stats);\n }\n\n async getTokenHolders(\n chain: Chain,\n address: string,\n options?: API.GetTokenHoldersOptions,\n ): Promise<API.CursorList<TokenHolder>> {\n // Phase 3 bypass: the bundled SDK does not support `sortBy` or the new\n // `tags` / `lastActiveAt` / `startHoldingAt` response fields yet.\n const holders = await phase3GetTokenHolders(\n this._phase3,\n toChainDTO(chain),\n address,\n {\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n sortBy: options?.sortBy,\n },\n );\n return fromTokenHolderPage(holders);\n }\n\n async getTokenMarketData(\n chain: Chain,\n address: string,\n ): Promise<TokenMarketData> {\n const marketData = await this._client.token.getMarketData(\n toChainDTO(chain),\n address,\n );\n return fromTokenMarketDataDTO(marketData);\n }\n\n async getNewTokens(\n chain: Chain,\n options?: API.GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getNewTokens(\n toChainDTO(chain),\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async getFinalStretchTokens(\n chain: Chain,\n options?: API.GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getFinalStretchTokens(\n toChainDTO(chain),\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async getMigratedTokens(\n chain: Chain,\n options?: API.GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getMigratedTokens(\n toChainDTO(chain),\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async getTrendingTokens(\n chain: Chain,\n resolution: \"1m\" | \"5m\" | \"1h\" | \"4h\" | \"24h\",\n options?: API.GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getHotTokens(\n toChainDTO(chain),\n resolution,\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async getStockTokens(\n chain: Chain,\n options?: API.GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getStocksTokens(\n toChainDTO(chain),\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async searchTokens(\n options?: API.SearchTokensOptions,\n ): Promise<API.SearchTokenCursorList> {\n const tokenPage = await this._client.token.search({\n chains: options?.chains?.map(toChainDTO),\n q: options?.keyword,\n limit: options?.limit,\n cursor: options?.cursor,\n sortBy: options?.sortBy\n ? (toSearchFieldDTO(options.sortBy) as SearchSortBy)\n : undefined,\n sort: options?.sortDirection,\n // TODO protocols\n });\n return fromTokenPage(tokenPage);\n }\n\n async swapRoute(params: API.SwapParams): Promise<API.SwapRoute> {\n const route = await this._client.dex.route(\n toChainDTO(params.chain) as ChainSymbol,\n toSwapRouteInput(params),\n );\n return fromSwapRoute(route);\n }\n\n async getLatestBlock(\n params: API.LatestBlockParams,\n ): Promise<API.BlockchainLatestBlock> {\n const latestBlock = await this._client.blockchain.getLatestBlock(\n toChainDTO(params.chain),\n );\n return fromLatestBlock(latestBlock);\n }\n\n async sendTx(params: API.SendTxParams): Promise<API.SendTxResult> {\n const result = await this._client.transaction.send(\n toChainDTO(params.chain),\n toSendTxInput(params),\n );\n return fromSendTxResult(result);\n }\n\n async checkTxSuccess(\n chain: Chain,\n txHash: string,\n timeout?: number,\n ): Promise<boolean> {\n const { success } = await this._client.waitForJob<{\n id: string;\n status: string;\n success: boolean;\n }>(txHash, timeout);\n return success;\n }\n\n async getWalletPortfolios(\n chain: Chain,\n address: string,\n options?: { cursor?: string; limit?: number },\n ): Promise<WalletPortfolios> {\n const chainParam = Client._CHAIN_TO_BALANCE_PARAM[chain];\n if (chainParam && this.options?.nativeBalanceApiUrl) {\n return this._getWalletPortfoliosFromBalanceApi(\n chain,\n chainParam,\n address,\n );\n }\n const netWorth = await this._client.wallet.getNetWorth(\n toChainDTO(chain),\n address,\n { cursor: options?.cursor, limit: options?.limit ?? 100 },\n );\n return fromWalletPortfolios(chain, netWorth);\n }\n\n async getWalletPnl(\n chain: Chain,\n address: string,\n resolution?: string,\n ): Promise<WalletPnl> {\n const pnl = await this._client.wallet.getPnl(\n toChainDTO(chain),\n address,\n resolution\n ? { resolution: resolution as \"1d\" | \"7d\" | \"30d\" | \"all\" }\n : undefined,\n );\n return fromWalletPnlSummary(chain, address, pnl);\n }\n\n async getWalletPortfolioPnls(\n chain: Chain,\n address: string,\n options?: API.GetWalletPortfolioPnlsOptions,\n ): Promise<WalletPortfolioPnls> {\n // Phase 3 bypass: SDK does not accept resolution / positionState / sortBy.\n // `resolution` is server-required; default to `30d` for backward compat.\n const detailsPage = await phase3GetWalletPnlDetails(\n this._phase3,\n toChainDTO(chain),\n address,\n {\n resolution: options?.resolution ?? \"30d\",\n positionState: options?.positionState,\n sortBy: options?.sortBy,\n cursor: options?.cursor,\n limit: options?.limit ?? 100,\n direction: options?.direction,\n },\n );\n return fromPnlDetailsPage(chain, address, detailsPage);\n }\n\n async getWalletPortfoliosByTokens(\n chain: Chain,\n address: string,\n tokenAddresses: Array<string>,\n ): Promise<Array<Portfolio>> {\n const chainParam = Client._CHAIN_TO_BALANCE_PARAM[chain];\n if (chainParam && this.options?.nativeBalanceApiUrl) {\n return this._getPortfoliosFromBalanceApi(\n chain,\n chainParam,\n address,\n tokenAddresses,\n );\n }\n // Phase 3 bypass: SDK omits the new isActive / avgCostUsd /\n // lastActiveAt / walletTokenTags fields.\n const result = await phase3GetWalletNetWorthByTokens(\n this._phase3,\n toChainDTO(chain),\n address,\n { tokenAddresses: tokenAddresses.join(\",\") },\n );\n return fromWalletNetWorthByTokens(chain, result);\n }\n\n async getWalletPortfolioPnlsByTokens(\n chain: Chain,\n address: string,\n tokenAddresses: Array<string>,\n ): Promise<Array<PortfolioPnl>> {\n const detailsPage = await this._client.wallet.getPnlByToken(\n toChainDTO(chain),\n address,\n { tokenAddresses: tokenAddresses.join(\",\") },\n );\n return fromPnlDetailItems(chain, detailsPage);\n }\n\n async getWalletTrades(\n chain: Chain,\n address: string,\n options?: API.GetTradesOptions,\n ): Promise<API.CursorList<Trade>> {\n return this._getTrades(chain, { walletAddress: address }, options);\n }\n\n async getTokenTrades(\n chain: Chain,\n address: string,\n options?: API.GetTradesOptions,\n ): Promise<API.CursorList<Trade>> {\n return this._getTrades(chain, { tokenAddress: address }, options);\n }\n\n async getWalletActivities(\n chain: Chain,\n address: string,\n options?: API.GetActivitiesOptions,\n ): Promise<API.CursorList<Activity>> {\n return this._getActivities(chain, { walletAddress: address }, options);\n }\n\n async getTokenActivities(\n chain: Chain,\n address: string,\n options?: API.GetActivitiesOptions,\n ): Promise<API.CursorList<Activity>> {\n return this._getActivities(chain, { tokenAddress: address }, options);\n }\n\n async getPresignedUploadUrl(): Promise<string> {\n const result = await this._client.ipfs.presign();\n return result.presignUrl;\n }\n\n async getWalletLimitOrders(\n _chain: Chain,\n _address: string,\n _options?: API.GetWalletLimitOrdersOptions,\n ): Promise<API.CursorList<import(\"@liberfi.io/types\").LimitOrder>> {\n throw new NotImplementedError(\n \"Client.getWalletLimitOrders\",\n \"no limit-orders endpoint on the backend yet\",\n );\n }\n\n async getTokensByCreator(\n _chain: Chain,\n _creator: string,\n _options?: API.GetTokensByCreatorOptions,\n ): Promise<API.CursorList<Token>> {\n throw new NotImplementedError(\n \"Client.getTokensByCreator\",\n \"no creator-index endpoint on the backend yet\",\n );\n }\n\n subscribeToken(\n chain: Chain,\n address: string,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n const chainDTO = toChainDTO(chain);\n const subs = [\n this._client.stream.subscribeTokenStats({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenStat) =>\n callback([fromWsTokenDataSubscribed(chain, data)]),\n }),\n this._client.stream.subscribeTokenSupply({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenSupply) =>\n callback([fromWsTokenSupplyToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenHolders({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenHolder) =>\n callback([fromWsTokenHolderToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenLiquidity({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenLiquidity) =>\n callback([fromWsTokenLiquidityToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenMaxLiquidity({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenMaxLiquidity) =>\n callback([fromWsTokenMaxLiquidityToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenTotalLiquidity({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenTotalLiquidity) =>\n callback([\n fromWsTokenTotalLiquidityToSubscribed(chain, address, data),\n ]),\n }),\n ];\n return { unsubscribe: () => subs.forEach((s) => s.unsubscribe()) };\n }\n\n subscribeTokenCandles(\n chain: Chain,\n address: string,\n resolution: TokenResolution,\n callback: (candles: Array<TokenCandle>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeTokenCandles({\n chain: toChainDTO(chain),\n tokenAddress: address,\n resolution: toResolutionDTO(resolution),\n callback: (data: WsCandle) => callback([fromWsCandle(data)]),\n });\n }\n\n subscribeWalletPnl(\n chain: Chain,\n address: string,\n callback: (pnls: Array<API.WalletPnlSubscribed>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeWalletPnlList({\n chain: toChainDTO(chain),\n walletAddress: address,\n callback: (data: WsWalletPnl[]) =>\n callback(\n data.map((item) => ({\n chain,\n address: item.walletAddress,\n buys: item.buys,\n buyAmountInUsd: item.buyAmountInUsd,\n sells: item.sells,\n sellAmountInUsd: item.sellAmountInUsd,\n wins: item.wins,\n winRate: item.winRatio,\n totalProfitInUsd: item.pnlInUsd,\n totalProfitRatio: item.pnlRatio,\n avgProfitPerTradeInUsd: item.averagePnlInUsd,\n tokens: item.tokens,\n resolution: item.resolution,\n })),\n ),\n });\n }\n\n subscribeWalletPortfolios(\n chain: Chain,\n address: string,\n callback: (portfolios: Array<API.PortfolioSubscribed>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeWalletBalance({\n chain: toChainDTO(chain),\n walletAddress: address,\n callback: (data: WsWalletBalance[]) =>\n callback(\n data.map(\n (it) =>\n ({\n chain,\n walletAddress: it.walletAddress,\n tokenAddress: it.tokenAddress,\n priceInUsd: it.tokenPriceInUsd,\n amount: it.balance,\n }) as API.PortfolioSubscribed,\n ),\n ),\n });\n }\n\n subscribeWalletPortfolioPnls(\n chain: Chain,\n address: string,\n callback: (portfolioPnls: Array<API.PortfolioPnlSubscribed>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeWalletPnl({\n chain: toChainDTO(chain),\n walletAddress: address,\n callback: (data: WsWalletTokenPnl) =>\n callback([\n {\n chain,\n walletAddress: data.walletAddress,\n tokenAddress: data.tokenAddress,\n openTime: data.opentime ? new Date(data.opentime) : undefined,\n closeTime: data.closetime ? new Date(data.closetime) : undefined,\n buys: data.buyCount,\n buyVolumes: data.buyAmount,\n buyVolumesInUsd: data.buyAmountInUsd,\n buyAvgPriceInUsd: data.averageBuyPriceInUsd,\n sells: data.sellCount,\n sellVolumes: data.sellAmount,\n sellVolumesInUsd: data.sellAmountInUsd,\n sellAvgPriceInUsd: data.averageSellPriceInUsd,\n realizedProfitInUsd: data.realizedProfitInUsd,\n realizedProfitRatio: data.realizedProfitRatio,\n unrealizedProfitInUsd: data.unrealizedProfitInUsd,\n unrealizedProfitRatio: data.unrealizedProfitRatio,\n totalProfitInUsd: data.totalRealizedProfitInUsd,\n totalProfitRatio: data.totalRealizedProfitRatio,\n } as API.PortfolioPnlSubscribed,\n ]),\n });\n }\n\n subscribeWalletTrades(\n chain: Chain,\n address: string,\n callback: (trades: Array<Trade>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeWalletTrade({\n chain: toChainDTO(chain),\n walletAddress: address,\n callback: (data: WsTradeActivity) =>\n callback([fromWsTradeActivity(chain, data)]),\n });\n }\n\n subscribeTokenTrades(\n chain: Chain,\n address: string,\n callback: (trades: Array<Trade>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeTokenTrade({\n chain: toChainDTO(chain),\n tokenAddress: address,\n callback: (data: WsTradeActivity) =>\n callback([fromWsTradeActivity(chain, data)]),\n });\n }\n\n subscribeWalletActivities(\n chain: Chain,\n address: string,\n callback: (activities: Array<Activity>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeWalletTrade({\n chain: toChainDTO(chain),\n walletAddress: address,\n callback: (data: WsTradeActivity) =>\n callback([fromWsActivity(chain, data)]),\n });\n }\n\n subscribeTokenActivities(\n chain: Chain,\n address: string,\n callback: (activities: Array<Activity>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeTokenTrade({\n chain: toChainDTO(chain),\n tokenAddress: address,\n callback: (data: WsTradeActivity) =>\n callback([fromWsActivity(chain, data)]),\n });\n }\n\n subscribeNewTokens(\n chain: Chain,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n const chainDTO = toChainDTO(chain);\n const rankingSub = this._subscribeRankingTokens(\n chain,\n WsChannelType.New,\n callback,\n );\n const subs = [\n this._client.stream.subscribeNewToken({\n chain: chainDTO,\n callback: (data: WsNewToken) =>\n callback([fromTokenSubscribed(chain, data)]),\n }),\n this._client.stream.subscribeNewTokensMetadata({\n chain: chainDTO,\n callback: (data: WsTokenMetadata[]) =>\n callback(data.map((it) => fromTokenMetadataSubscribed(chain, it))),\n }),\n this._client.stream.subscribeRankingTokensBondingCurve({\n chain: chainDTO,\n callback: (data: WsTokenBondingCurve[]) =>\n callback(\n data.map((d) => fromWsTokenBondingCurveToSubscribed(chain, d)),\n ),\n }),\n ];\n return {\n unsubscribe: () => {\n rankingSub.unsubscribe();\n subs.forEach((s) => s.unsubscribe());\n },\n };\n }\n\n subscribeTrendingTokens(\n chain: Chain,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n return this._subscribeRankingTokens(chain, WsChannelType.HOT, callback);\n }\n\n subscribeMigratedTokens(\n chain: Chain,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n return this._subscribeRankingTokens(\n chain,\n WsChannelType.MIGRATED,\n callback,\n );\n }\n\n subscribeFinalStretchTokens(\n chain: Chain,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n const chainDTO = toChainDTO(chain);\n const rankingSub = this._subscribeRankingTokens(\n chain,\n WsChannelType.FINAL_STRETCH,\n callback,\n );\n const bondingSub = this._client.stream.subscribeRankingTokensBondingCurve({\n chain: chainDTO,\n callback: (data: WsTokenBondingCurve[]) =>\n callback(\n data.map((d) => fromWsTokenBondingCurveToSubscribed(chain, d)),\n ),\n });\n return {\n unsubscribe: () => {\n rankingSub.unsubscribe();\n bondingSub.unsubscribe();\n },\n };\n }\n\n subscribeStockTokens(\n chain: Chain,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n return this._subscribeRankingTokens(\n chain,\n WsChannelType.US_STOCKS,\n callback,\n );\n }\n\n // ── RPC balance fallback (temporary) ─────────────────────────────────────\n\n private static readonly _CHAIN_TO_BALANCE_PARAM: Partial<\n Record<Chain, string>\n > = {\n [Chain.SOLANA]: \"sol\",\n [Chain.ETHEREUM]: \"eth\",\n [Chain.BINANCE]: \"bnb\",\n };\n\n private static readonly _NATIVE_TOKEN_ADDRESS: Partial<\n Record<Chain, string>\n > = {\n [Chain.SOLANA]: \"11111111111111111111111111111111\",\n [Chain.ETHEREUM]: \"0x0000000000000000000000000000000000000000\",\n [Chain.BINANCE]: \"0x0000000000000000000000000000000000000000\",\n };\n\n /**\n * Fetch token balances from the local `/api/balance` RPC proxy and convert\n * the raw `{ address, balance, decimals }` entries into `Portfolio` objects.\n */\n private async _getPortfoliosFromBalanceApi(\n chain: Chain,\n chainParam: string,\n walletAddress: string,\n tokenAddresses?: Array<string>,\n ): Promise<Array<Portfolio>> {\n const base = this.options!.nativeBalanceApiUrl!;\n const qs = new URLSearchParams({\n chain: chainParam,\n address: walletAddress,\n });\n if (tokenAddresses?.length) {\n qs.set(\"tokens\", tokenAddresses.join(\",\"));\n }\n\n const res = await fetch(`${base}?${qs.toString()}`);\n if (!res.ok) {\n throw new Error(`Balance API returned ${res.status}`);\n }\n\n const data = (await res.json()) as {\n balances: Array<{ address: string; balance: string; decimals: number }>;\n };\n\n return data.balances.map((item) => {\n const raw = BigInt(item.balance);\n const decimals = item.decimals;\n const divisor = BigInt(10) ** BigInt(decimals);\n const whole = raw / divisor;\n const frac = raw % divisor;\n const fracStr = frac.toString().padStart(decimals, \"0\");\n const amount = `${whole}.${fracStr}`.replace(/\\.?0+$/, \"\") || \"0\";\n\n return {\n chain,\n address: item.address,\n name: \"\",\n symbol: \"\",\n priceInUsd: \"0\",\n priceInNative: \"0\",\n amount,\n amountInUsd: \"0\",\n amountInNative: \"0\",\n decimals: item.decimals,\n };\n });\n }\n\n /**\n * Fetch all holdings from the balance API and wrap as `WalletPortfolios`.\n */\n private async _getWalletPortfoliosFromBalanceApi(\n chain: Chain,\n chainParam: string,\n walletAddress: string,\n ): Promise<WalletPortfolios> {\n const portfolios = await this._getPortfoliosFromBalanceApi(\n chain,\n chainParam,\n walletAddress,\n );\n\n const nativeAddr = Client._NATIVE_TOKEN_ADDRESS[chain];\n const nativePortfolio = nativeAddr\n ? portfolios.find((p) => p.address === nativeAddr)\n : undefined;\n\n return {\n chain,\n address: walletAddress,\n balanceInUsd: \"0\",\n balanceInNative: nativePortfolio?.amount ?? \"0\",\n portfolios,\n hasPrev: false,\n hasNext: false,\n };\n }\n\n // ── End RPC balance fallback ───────────────────────────────────────────\n\n private _buildRankingParams(options?: API.GetTokenListOptions) {\n return {\n sortBy: options?.sortBy\n ? (toFieldDTO(options.sortBy) as TokenField)\n : undefined,\n sortDirection: options?.sortDirection\n ? (toSortDirectionDTO(options.sortDirection) as SortDirection)\n : undefined,\n rangeFilters: options?.filters\n ? toRangeFiltersDTO(options.filters)\n : undefined,\n launchpadPlatform: options?.filters\n ? parseLaunchPlatformFromFilters(options.filters)\n : undefined,\n searchKeywords: options?.keywords,\n excludeKeywords: options?.excludeKeywords,\n };\n }\n\n private async _getTrades(\n chain: Chain,\n target: { walletAddress?: string; tokenAddress?: string },\n options?: API.GetTradesOptions,\n ): Promise<API.CursorList<Trade>> {\n const tradePage = await this._client.trade.getTrades(toChainDTO(chain), {\n ...target,\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n beforeTimestamp: options?.before?.getTime(),\n afterTimestamp: options?.after?.getTime(),\n beforeBlockHeight: options?.beforeBlockHeight,\n afterBlockHeight: options?.afterBlockHeight,\n poolAddress: options?.poolAddress,\n type: options?.type\n ? (options.type.toUpperCase() as TradeType)\n : undefined,\n });\n return fromTradePage(tradePage);\n }\n\n private async _getActivities(\n chain: Chain,\n target: { walletAddress?: string; tokenAddress?: string },\n options?: API.GetActivitiesOptions,\n ): Promise<API.CursorList<Activity>> {\n // Phase 3 bypass: SDK does not accept `sortBy` or deliver the new\n // `gasFee` / `traderTags` response fields.\n const page = await phase3GetActivities(this._phase3, toChainDTO(chain), {\n ...target,\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n beforeTimestamp: options?.before?.getTime(),\n afterTimestamp: options?.after?.getTime(),\n beforeBlockHeight: options?.beforeBlockHeight,\n afterBlockHeight: options?.afterBlockHeight,\n poolAddress: options?.poolAddress,\n type: options?.type ? options.type.toUpperCase() : undefined,\n sortBy: options?.sortBy,\n });\n return fromActivityPage(page);\n }\n\n private _subscribeRankingTokens(\n chain: Chain,\n channelType: WsChannelType,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n const chainDTO = toChainDTO(chain);\n const subs = [\n this._client.stream.subscribeRankingTokensStats({\n chain: chainDTO,\n channelType,\n callback: (data: WsTokenStat[]) =>\n callback(data.map((d) => fromWsTokenDataSubscribed(chain, d))),\n }),\n this._client.stream.subscribeRankingTokensHolders({\n chain: chainDTO,\n channelType,\n callback: (data: WsTokenHolder[]) =>\n callback(\n data.map((d) =>\n fromWsTokenHolderToSubscribed(chain, d.tokenAddress, d),\n ),\n ),\n }),\n this._client.stream.subscribeRankingTokensSupply({\n chain: chainDTO,\n channelType,\n callback: (data: WsTokenSupply[]) =>\n callback(\n data.map((d) =>\n fromWsTokenSupplyToSubscribed(chain, d.tokenAddress, d),\n ),\n ),\n }),\n this._client.stream.subscribeRankingTokensLiquidity({\n chain: chainDTO,\n channelType,\n callback: (data: WsTokenLiquidity[]) =>\n callback(\n data.map((d) =>\n fromWsTokenLiquidityToSubscribed(chain, d.tokenAddress, d),\n ),\n ),\n }),\n ];\n return { unsubscribe: () => subs.forEach((s) => s.unsubscribe()) };\n }\n}\n\nfunction parseLaunchPlatformFromFilters(\n filters: Array<API.TokenFilterOption>,\n): Array<string> | undefined {\n const filter = filters.find(\n (it) => it.field === \"launchedFromProtocolFamily\",\n );\n if (!filter) {\n return undefined;\n }\n if (filter.operator === \"eq\") {\n return [filter.value as string];\n }\n if (filter.operator === \"in\") {\n return filter.value as Array<string>;\n }\n console.warn(\"invalid launchedFromProtocolFamily filter\", filter);\n return undefined;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/errors.ts","../src/phase3Http.ts","../src/utils.ts","../src/client.ts"],"names":["version_default","NotImplementedError","method","detail","isNotImplementedError","error","DEFAULT_SERVER_URL","resolveAccessToken","provider","appendQuery","params","key","value","request","ctx","path","query","url","v","search","token","res","body","buildPhase3Context","accessToken","serverUrl","getTokenHolders","chain","tokenAddress","getActivities","getWalletNetWorthByTokens","walletAddress","getWalletPnlDetails","nullToUndefined","toChainDTO","Chain","ChainSymbol","toResolutionDTO","resolution","Resolution","toSortDirectionDTO","direction","toSearchFieldDTO","field","SearchSortBy","toFieldDTO","TokenField","toRangeFiltersDTO","filters","it","cond","SafeBigNumber","fromChainDTO","fromTokenCreatorDTO","input","fromTokenDTO","k","fromTokenStatsDTO","fromTokenMarketDataDTO","parseTokenStatsByResolution","toOptionalNumber","period","fromTokenLiquidityDTO","fromTokenCandle","fromResolutionDTO","fromTokenSecurity","solanaChains","EVM_NATIVE_ADDRESS","KYBERSWAP_NATIVE_SENTINEL","toJupiterMint","address","SOLANA_TOKENS","toKyberSwapMint","effectiveDex","toMintForDex","dex","toMintForRoute","toSwapRouteInput","inputMint","outputMint","API","SwapRouteInputSwapMode","toSendTxInput","toDateFromMs","ms","toTagArray","fromTokenHolderPage","holder","fromTokenPage","pageExtra","fromSwapRoute","fromLatestBlock","fromSendTxResult","fromWalletPortfolios","portfolios","item","fromWalletPnlSummary","fromPnlItemDTO","fromPnlDetailsPage","fromWalletNetWorthByTokens","fromPnlDetailItems","fromTradePage","fromTradeDetailDTO","isBuy","fromActivityPage","fromActivityDetailDTO","type","tsMs","fromTokenSubscribed","fromTokenMetadataSubscribed","fromWsCandle","fromWsTokenStats","timeframes","record","result","tf","buys","sells","buyers","sellers","buyVolumeInUsd","sellVolumeInUsd","trades","price","openInUsd","closeInUsd","totalTrades","totalTraders","totalVolumesInUsd","priceChange","fromWsTokenMarketDataFromStats","fromWsTokenDataSubscribed","fromWsTokenSupplyToSubscribed","fromWsTokenHolderToSubscribed","fromWsTokenMarketDataFromHolder","fromWsTokenLiquidityToSubscribed","WsMetricType","fromWsTokenBondingCurveToSubscribed","fromWsTokenMaxLiquidityToSubscribed","fromWsTokenTotalLiquidityToSubscribed","fromWsTradeActivity","fromWsActivity","Client","_Client","options","ChainStreamClient","addresses","c","security","stats","holders","marketData","tokenPage","route","latestBlock","txHash","timeout","success","chainParam","netWorth","pnl","detailsPage","tokenAddresses","_chain","_address","_options","_creator","callback","chainDTO","subs","data","s","rankingSub","WsChannelType","d","bondingSub","base","qs","raw","decimals","divisor","whole","fracStr","amount","nativeAddr","nativePortfolio","p","parseLaunchPlatformFromFilters","target","tradePage","page","channelType","filter"],"mappings":"0HAOI,OAAO,OAAW,GAAA,GACpB,MAAA,CAAO,oBAAsB,MAAA,CAAO,mBAAA,EAAuB,EAAC,CAC5D,MAAA,CAAO,mBAAA,CAAoB,oBAAoB,EAAI,OAAA,CAAA,CAGrD,IAAOA,GAAQ,QCHR,IAAMC,CAAAA,CAAN,cAAkC,KAAM,CAEpC,KAAO,gBAAA,CAEhB,WAAA,CAAYC,EAAgBC,CAAAA,CAAiB,CAC3C,MACEA,CAAAA,CACI,CAAA,EAAGD,CAAM,CAAA,wCAAA,EAA2CC,CAAM,CAAA,CAAA,CAC1D,CAAA,EAAGD,CAAM,CAAA,sCAAA,CACf,CAAA,CACA,KAAK,IAAA,CAAO,sBACd,CACF,EAGO,SAASE,EAAAA,CACdC,CAAAA,CAC8B,CAC9B,OACEA,CAAAA,YAAiB,OAChBA,CAAAA,CAA4B,IAAA,GAAS,gBAE1C,CCZA,IAAMC,EAAAA,CAAqB,4BAAA,CAO3B,eAAeC,EAAAA,CACbC,CAAAA,CACiB,CACjB,OAAI,OAAOA,GAAa,QAAA,CAAiBA,CAAAA,CAClC,QAAQ,OAAA,CAAQA,CAAAA,CAAS,UAAU,CAC5C,CAEA,SAASC,EAAAA,CAAYC,EAAyBC,CAAAA,CAAaC,CAAAA,CAAgB,CACzE,GAA2BA,GAAU,IAAA,CACrC,CAAA,GAAIA,aAAiB,IAAA,CAAM,CACzBF,EAAO,GAAA,CAAIC,CAAAA,CAAK,MAAA,CAAOC,CAAAA,CAAM,SAAS,CAAC,EACvC,MACF,CACAF,EAAO,GAAA,CAAIC,CAAAA,CAAK,MAAA,CAAOC,CAAK,CAAC,EAAA,CAC/B,CAEA,eAAeC,CAAAA,CACbC,CAAAA,CACAC,EACAC,CAAAA,CACY,CACZ,IAAMC,CAAAA,CAAM,IAAI,IAAIF,CAAAA,CAAMD,CAAAA,CAAI,OAAO,CAAA,CAC/BJ,CAAAA,CAAS,IAAI,eAAA,CACnB,IAAA,GAAW,CAAC,CAAA,CAAGQ,CAAC,CAAA,GAAK,MAAA,CAAO,QAAQF,CAAK,CAAA,CAAGP,GAAYC,CAAAA,CAAQ,CAAA,CAAGQ,CAAC,CAAA,CACpE,IAAMC,CAAAA,CAAST,CAAAA,CAAO,UAAS,CAC3BS,CAAAA,GAAQF,EAAI,MAAA,CAASE,CAAAA,CAAAA,CAEzB,IAAMC,CAAAA,CAAQ,MAAMb,EAAAA,CAAmBO,CAAAA,CAAI,WAAW,CAAA,CAChDO,CAAAA,CAAM,MAAM,KAAA,CAAMJ,CAAAA,CAAI,UAAS,CAAG,CACtC,OAAQ,KAAA,CACR,OAAA,CAAS,CACP,MAAA,CAAQ,kBAAA,CACR,cAAe,CAAA,OAAA,EAAUG,CAAK,CAAA,CAChC,CACF,CAAC,CAAA,CAED,GAAI,CAACC,CAAAA,CAAI,EAAA,CAAI,CACX,IAAMC,CAAAA,CAAO,MAAMD,CAAAA,CAAI,MAAK,CAAE,KAAA,CAAM,IAAM,EAAE,CAAA,CAC5C,MAAM,IAAI,KAAA,CACR,CAAA,aAAA,EAAgBA,CAAAA,CAAI,MAAM,CAAA,CAAA,EAAIA,CAAAA,CAAI,UAAU,CAAA,CAAA,EAAIJ,CAAAA,CAAI,QAAQ,CAAA,EAAA,EAAKK,CAAI,EACvE,CACF,CACA,OAAQ,MAAMD,CAAAA,CAAI,MACpB,CAEO,SAASE,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACsB,CACtB,OAAO,CACL,OAAA,CAASA,GAAanB,EAAAA,CACtB,WAAA,CAAAkB,CACF,CACF,CA2MO,SAASE,CAAAA,CACdZ,EACAa,CAAAA,CACAC,CAAAA,CACAZ,EAC8C,CAC9C,OAAOH,EACLC,CAAAA,CACA,CAAA,UAAA,EAAa,kBAAA,CAAmBa,CAAK,CAAC,CAAA,CAAA,EAAI,kBAAA,CACxCC,CACF,CAAC,CAAA,QAAA,CAAA,CACDZ,CACF,CACF,CAGO,SAASa,CAAAA,CACdf,CAAAA,CACAa,EACAX,CAAAA,CAC2C,CAC3C,OAAOH,CAAAA,CACLC,CAAAA,CACA,aAAa,kBAAA,CAAmBa,CAAK,CAAC,CAAA,WAAA,CAAA,CACtCX,CACF,CACF,CAGO,SAASc,CAAAA,CACdhB,CAAAA,CACAa,EACAI,CAAAA,CACAf,CAAAA,CACoC,CACpC,OAAOH,EACLC,CAAAA,CACA,CAAA,WAAA,EAAc,mBAAmBa,CAAK,CAAC,IAAI,kBAAA,CACzCI,CACF,CAAC,CAAA,iBAAA,CAAA,CACDf,CACF,CACF,CAGO,SAASgB,CAAAA,CACdlB,CAAAA,CACAa,EACAI,CAAAA,CACAf,CAAAA,CAC8B,CAC9B,OAAOH,CAAAA,CACLC,EACA,CAAA,WAAA,EAAc,kBAAA,CAAmBa,CAAK,CAAC,CAAA,CAAA,EAAI,mBACzCI,CACF,CAAC,CAAA,YAAA,CAAA,CACDf,CACF,CACF,CC5QA,SAASiB,CAAAA,CAAmBrB,CAAAA,CAA4C,CACtE,OAAOA,CAAAA,EAAS,MAClB,CAEO,SAASsB,EAAWP,CAAAA,CAA2B,CACpD,OAAQA,CAAAA,EACN,KAAKQ,WAAAA,CAAM,SACT,OAAOC,eAAAA,CAAY,IACrB,KAAKD,WAAAA,CAAM,QACT,OAAOC,eAAAA,CAAY,GAAA,CACrB,KAAKD,YAAM,MAAA,CACT,OAAOC,gBAAY,GACvB,CACA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsBT,CAAK,EAAE,CAC/C,CAEO,SAASU,CAAAA,CAAgBC,CAAAA,CAAyC,CACvE,OAAQA,CAAAA,EACN,KAAK,IAAA,CACH,OAAOC,cAAAA,CAAW,IAAI,EACxB,KAAK,KAAA,CACH,OAAOA,cAAAA,CAAW,KAAK,CAAA,CACzB,KAAK,MACH,OAAOA,cAAAA,CAAW,KAAK,CAAA,CACzB,KAAK,KACH,OAAOA,cAAAA,CAAW,IAAI,CAAA,CACxB,KAAK,IAAA,CACH,OAAOA,eAAW,IAAI,CAAA,CACxB,KAAK,KAAA,CACH,OAAOA,cAAAA,CAAW,KAAK,EACzB,KAAK,KAAA,CACL,KAAK,IAAA,CACH,OAAOA,eAAW,IAAI,CAAA,CACxB,KAAK,IAAA,CACH,OAAOA,eAAW,IAAI,CAAA,CACxB,KAAK,KAAA,CACH,OAAOA,eAAW,KAAK,CAAA,CACzB,KAAK,KAAA,CACH,OAAOA,cAAAA,CAAW,IAAI,CAC1B,CACF,CAEO,SAASC,EAAAA,CAAmBC,CAAAA,CAAmC,CACpE,OAAOA,CACT,CAEO,SAASC,GAAiBC,CAAAA,CAAqC,CACpE,OAAQA,CAAAA,EACN,KAAK,WAAA,CACH,OAAOC,gBAAAA,CAAa,cAAA,CACtB,KAAK,KAAA,CACH,OAAOA,iBAAa,cAAA,CACtB,KAAK,QACH,OAAOA,gBAAAA,CAAa,WACtB,KAAK,SAAA,CACH,OAAOA,gBAAAA,CAAa,WAAA,CACtB,KAAK,YAAA,CACH,OAAOA,gBAAAA,CAAa,cAAA,CACtB,KAAK,WAAA,CACH,OAAOA,iBAAa,eAAA,CACtB,KAAK,YACH,OAAOA,gBAAAA,CAAa,cACxB,CACA,MAAM,IAAI,KAAA,CAAM,6BAA6BD,CAAK,CAAA,CAAE,CACtD,CAEO,SAASE,CAAAA,CAAWF,CAAAA,CAAqC,CAC9D,OAAQA,CAAAA,EACN,KAAK,OAAA,CACH,OAAOG,cAAAA,CAAW,oBAAA,CACpB,KAAK,eAAA,CACH,OAAOA,eAAW,4BAAA,CACpB,KAAK,gBACH,OAAOA,cAAAA,CAAW,6BACpB,KAAK,eAAA,CACH,OAAOA,cAAAA,CAAW,6BACpB,KAAK,eAAA,CACH,OAAOA,cAAAA,CAAW,4BAAA,CACpB,KAAK,gBAAA,CACH,OAAOA,cAAAA,CAAW,6BAAA,CACpB,KAAK,WAAA,CACH,OAAOA,eAAW,wBAAA,CACpB,KAAK,MACH,OAAOA,cAAAA,CAAW,yBAAA,CACpB,KAAK,gBACH,OAAOA,cAAAA,CAAW,6BACpB,KAAK,YAAA,CACH,OAAOA,cAAAA,CAAW,4BAAA,CACpB,KAAK,gBAAA,CACH,OAAOA,eAAW,6BAAA,CACpB,KAAK,cACH,OAAOA,cAAAA,CAAW,8BACpB,KAAK,SAAA,CACH,OAAOA,cAAAA,CAAW,kBACpB,KAAK,kBAAA,CACH,OAAOA,cAAAA,CAAW,yBAAA,CACpB,KAAK,eAAA,CACH,OAAOA,cAAAA,CAAW,8BAAA,CACpB,KAAK,QAAA,CACH,OAAOA,eAAW,WAAA,CACpB,KAAK,SACH,OAAOA,cAAAA,CAAW,WAAA,CACpB,KAAK,UACH,OAAOA,cAAAA,CAAW,aACpB,KAAK,SAAA,CACH,OAAOA,cAAAA,CAAW,YAAA,CACpB,KAAK,QAAA,CACH,OAAOA,eAAW,WAAA,CACpB,KAAK,SACH,OAAOA,cAAAA,CAAW,YACpB,KAAK,SAAA,CACH,OAAOA,cAAAA,CAAW,aACpB,KAAK,SAAA,CACH,OAAOA,cAAAA,CAAW,YAAA,CACpB,KAAK,SAAA,CACH,OAAOA,cAAAA,CAAW,YAAA,CACpB,KAAK,UAAA,CACH,OAAOA,eAAW,aAAA,CACpB,KAAK,WACH,OAAOA,cAAAA,CAAW,aAAA,CACpB,KAAK,UACH,OAAOA,cAAAA,CAAW,aACpB,KAAK,SAAA,CACH,OAAOA,cAAAA,CAAW,YAAA,CACpB,KAAK,UAAA,CACH,OAAOA,eAAW,aAAA,CACpB,KAAK,WACH,OAAOA,cAAAA,CAAW,cACpB,KAAK,UAAA,CACH,OAAOA,cAAAA,CAAW,cACpB,KAAK,UAAA,CACH,OAAOA,cAAAA,CAAW,aAAA,CACpB,KAAK,UAAA,CACH,OAAOA,eAAW,aAAA,CACpB,KAAK,YACH,OAAOA,cAAAA,CAAW,eACpB,KAAK,WAAA,CACH,OAAOA,cAAAA,CAAW,cAAA,CACpB,KAAK,WAAA,CACH,OAAOA,cAAAA,CAAW,cAAA,CACpB,KAAK,WAAA,CACH,OAAOA,eAAW,cAAA,CACpB,KAAK,YACH,OAAOA,cAAAA,CAAW,eACpB,KAAK,YAAA,CACH,OAAOA,cAAAA,CAAW,eAAA,CACpB,KAAK,WAAA,CACH,OAAOA,cAAAA,CAAW,mBAAA,CACpB,KAAK,WAAA,CACH,OAAOA,eAAW,mBAAA,CACpB,KAAK,YACH,OAAOA,cAAAA,CAAW,mBAAA,CACpB,KAAK,YACH,OAAOA,cAAAA,CAAW,oBACpB,KAAK,YAAA,CACH,OAAOA,cAAAA,CAAW,oBAAA,CACpB,KAAK,WAAA,CACH,OAAOA,cAAAA,CAAW,cACtB,CACA,MAAM,IAAI,MAAM,CAAA,oBAAA,EAAuBH,CAAK,EAAE,CAChD,CAEO,SAASI,EAAAA,CACdC,CAAAA,CAC6B,CAC7B,OAAOA,CAAAA,CACJ,OACEC,CAAAA,EAAO,CAAC,IAAA,CAAM,KAAA,CAAO,KAAM,KAAA,CAAO,SAAS,EAAE,OAAA,CAAQA,CAAAA,CAAG,QAAQ,CAAA,EAAK,CACxE,CAAA,CACC,GAAA,CAAKA,GAAO,CACX,IAAMC,EAAO,CAAE,KAAA,CAAOL,EAAWI,CAAAA,CAAG,KAAK,CAAE,CAAA,CAC3C,OAAI,CAAC,IAAA,CAAM,MAAO,SAAS,CAAA,CAAE,QAAQA,CAAAA,CAAG,QAAQ,GAAK,CAAA,GACnDC,CAAAA,CAAK,IACH,OAAOD,CAAAA,CAAG,OAAU,QAAA,CAChB,IAAIE,oBAAcF,CAAAA,CAAG,KAAK,CAAA,CAAE,QAAA,GAC3BA,CAAAA,CAAG,KAAA,CAAA,CAER,CAAC,IAAA,CAAM,KAAA,CAAO,SAAS,CAAA,CAAE,OAAA,CAAQA,CAAAA,CAAG,QAAQ,GAAK,CAAA,GACnDC,CAAAA,CAAK,IACH,OAAOD,CAAAA,CAAG,OAAU,QAAA,CAChB,IAAIE,mBAAAA,CAAcF,CAAAA,CAAG,KAAK,CAAA,CAAE,QAAA,GAC3BA,CAAAA,CAAG,KAAA,CAAA,CAELC,CACT,CAAC,CACL,CAEO,SAASE,CAAAA,CAAazB,EAAsB,CACjD,OAAQA,GACN,KAAKS,gBAAY,GAAA,CACf,OAAOD,WAAAA,CAAM,QAAA,CACf,KAAKC,eAAAA,CAAY,GAAA,CACf,OAAOD,WAAAA,CAAM,OAAA,CACf,KAAKC,eAAAA,CAAY,GAAA,CACjB,KAAK,QAAA,CACH,OAAOD,WAAAA,CAAM,MACjB,CACA,MAAM,IAAI,MAAM,CAAA,mBAAA,EAAsBR,CAAK,CAAA,CAAE,CAC/C,CAEO,SAAS0B,EAAAA,CAAoBC,EAAsC,CACxE,OAAO,CACL,OAAA,CAASA,CAAAA,CAAM,SAAW,MAAA,CAC1B,KAAA,CAAOA,EAAM,KAAA,EAAS,MAAA,CACtB,WAAYA,CAAAA,CAAM,UAAA,EAAc,MAClC,CACF,CAEO,SAASC,CAAAA,CAAaD,EAAwB,CACnD,OAAO,CACL,KAAA,CAAOF,CAAAA,CAAaE,EAAM,KAAK,CAAA,CAC/B,IAAA,CAAMA,CAAAA,CAAM,KACZ,MAAA,CAAQA,CAAAA,CAAM,OACd,OAAA,CAASA,CAAAA,CAAM,QACf,QAAA,CAAUA,CAAAA,CAAM,QAAA,CAChB,KAAA,CAAOA,EAAM,QAAA,EAAY,MAAA,CACzB,YAAaA,CAAAA,CAAM,WAAA,EAAe,OAClC,QAAA,CAAUA,CAAAA,CAAM,eAAe,GAAA,CAAID,EAAmB,EACtD,YAAA,CAAc,CACZ,eAAgBC,CAAAA,CAAM,KAAA,EAAO,0BAA4B,MAAA,CACzD,cAAA,CAAgBA,CAAAA,CAAM,KAAA,EAAO,0BAA4B,MAC3D,CAAA,CACA,gBAAiBA,CAAAA,CAAM,UAAA,EAAY,gBAC/B,IAAIH,mBAAAA,CAAcG,CAAAA,CAAM,UAAA,CAAW,eAAe,CAAA,CAC/C,SAAA,CAAU,CAAC,CAAA,CACX,QAAA,GACH,MAAA,CACJ,UAAA,CAAY,CACV,cAAA,CAAgBA,EAAM,KAAA,EAAO,wBAAA,EAA4B,OACzD,cAAA,CAAgBA,CAAAA,CAAM,OAAO,wBAAA,EAA4B,MAAA,CACzD,YAAaA,CAAAA,CAAM,KAAA,EAAO,uBAAyB,MAAA,CACnD,UAAA,CAAYA,EAAM,KAAA,EAAO,UAAA,CACrB,IAAI,IAAA,CAAKA,CAAAA,CAAM,KAAA,CAAM,UAAU,EAC/B,MACN,CAAA,CACA,aAAcA,CAAAA,CAAM,YAAA,CAChB,OAAO,WAAA,CACL,MAAA,CAAO,OAAA,CAAQA,CAAAA,CAAM,YAAY,CAAA,CAC9B,MAAA,CAAO,CAAC,EAAGpC,CAAC,CAAA,GAAMA,CAAAA,EAAK,IAAI,CAAA,CAC3B,IAAI,CAAC,CAACsC,EAAGtC,CAAC,CAAA,GAAM,CAACsC,CAAAA,CAAGtC,CAAW,CAAC,CACrC,CAAA,CACA,OACJ,KAAA,CAAOoC,CAAAA,CAAM,MAAQG,CAAAA,CAAkBH,CAAAA,CAAM,KAAK,CAAA,CAAI,MAAA,CACtD,UAAA,CAAYA,CAAAA,CAAM,WACdI,CAAAA,CAAuBJ,CAAAA,CAAM,UAAU,CAAA,CACvC,MAAA,CACJ,UAAWA,CAAAA,CAAM,cAAA,CACb,IAAI,IAAA,CAAKA,EAAM,cAAc,CAAA,CAC7B,MACN,CACF,CAEO,SAASG,CAAAA,CAAkBH,CAAAA,CAAkC,CAClE,OAAO,CACJ,IAAA,CAAOK,CAAAA,CAA4BL,EAAO,IAAI,CAAA,CAC9C,KAAOK,CAAAA,CAA4BL,CAAAA,CAAO,IAAI,CAAA,CAC9C,KAAA,CAAQK,EAA4BL,CAAAA,CAAO,KAAK,EAChD,KAAA,CAAQK,CAAAA,CAA4BL,EAAO,KAAK,CAAA,CAChD,IAAA,CAAOK,CAAAA,CAA4BL,EAAO,IAAI,CAAA,CAC9C,KAAOK,CAAAA,CAA4BL,CAAAA,CAAO,IAAI,CAAA,CAC9C,KAAA,CAAQK,CAAAA,CAA4BL,CAAAA,CAAO,KAAK,CACnD,CACF,CAEA,SAASM,CAAAA,CAAiBhD,EAA+C,CACvE,OAAOA,CAAAA,GAAU,MAAA,CAAY,OAAY,QAAA,CAASA,CAAK,CACzD,CAEA,SAAS+C,EACPL,CAAAA,CACAhB,CAAAA,CACwB,CACxB,IAAMuB,CAAAA,CAASP,EAAM,OAAA,GAAUhB,CAAU,EACzC,OAAKuB,CAAAA,CAIE,CACL,IAAA,CAAMD,CAAAA,CAAiBC,CAAAA,CAAO,IAAI,EAClC,KAAA,CAAOD,CAAAA,CAAiBC,EAAO,KAAK,CAAA,CACpC,OAAQD,CAAAA,CAAiBC,CAAAA,CAAO,MAAM,CAAA,CACtC,OAAQD,CAAAA,CAAiBC,CAAAA,CAAO,MAAM,CAAA,CACtC,OAAA,CAASD,EAAiBC,CAAAA,CAAO,OAAO,CAAA,CACxC,OAAA,CAASD,EAAiBC,CAAAA,CAAO,OAAO,EACxC,UAAA,CAAYA,CAAAA,CAAO,UACnB,WAAA,CAAaA,CAAAA,CAAO,WACpB,OAAA,CAASA,CAAAA,CAAO,oBAChB,eAAA,CAAiBA,CAAAA,CAAO,eACxB,gBAAA,CAAkBA,CAAAA,CAAO,gBACzB,YAAA,CAAcA,CAAAA,CAAO,gBAAA,CACrB,cAAA,CAAgBA,EAAO,SAAA,CACvB,eAAA,CAAiBA,EAAO,UAAA,CACxB,cAAA,CAAgBA,EAAO,SAAA,CACvB,aAAA,CAAeA,CAAAA,CAAO,QAAA,CACtB,WAAYA,CAAAA,CAAO,UAAA,CACnB,YAAaA,CAAAA,CAAO,qBACtB,EAtBS,EAuBX,CAEO,SAASC,GAAsBR,CAAAA,CAAgC,CACpE,OAAO,CACL,WAAA,CAAaA,EAAM,WAAA,CACnB,cAAA,CAAgBA,EAAM,cAAA,EAAkB,MAAA,CACxC,eAAgBA,CAAAA,CAAM,cAAA,EAAkB,OACxC,GAAA,CAAKA,CAAAA,CAAM,UAAY,MAAA,CACvB,QAAA,CAAUA,CAAAA,CAAM,QAAA,EAAY,MAC9B,CACF,CAEO,SAASI,CAAAA,CACdJ,CAAAA,CACiB,CACjB,OAAO,CACL,WAAA,CAAaA,CAAAA,CAAM,aAAe,MAAA,CAClC,SAAA,CAAWA,EAAM,cAAA,EAAkB,MAAA,CACnC,eAAgBA,CAAAA,CAAM,cAAA,EAAkB,MAAA,CACxC,KAAA,CAAOA,EAAM,UAAA,EAAc,MAAA,CAC3B,WAAYA,CAAAA,CAAM,UAAA,EAAc,OAChC,GAAA,CAAKA,CAAAA,CAAM,eAAiB,MAAA,CAC5B,QAAA,CAAUA,EAAM,aAAA,EAAiB,MAAA,CACjC,QAASA,CAAAA,CAAM,OAAA,CAAU,SAASA,CAAAA,CAAM,OAAO,CAAA,CAAI,MAAA,CACnD,cAAeA,CAAAA,CAAM,kBAAA,EAAsB,OAC3C,kBAAA,CAAoBA,CAAAA,CAAM,oBAAsB,MAAA,CAChD,aAAA,CAAeA,CAAAA,CAAM,kBAAA,EAAsB,OAC3C,kBAAA,CAAoBA,CAAAA,CAAM,oBAAsB,MAAA,CAChD,cAAA,CAAgBA,EAAM,mBAAA,EAAuB,MAAA,CAC7C,mBAAA,CAAqBA,CAAAA,CAAM,qBAAuB,MAAA,CAClD,eAAA,CAAiBA,EAAM,oBAAA,CACnB,QAAA,CAASA,EAAM,oBAAoB,CAAA,CACnC,OACJ,gBAAA,CAAkBA,CAAAA,CAAM,uBAAyB,MAAA,CACjD,qBAAA,CAAuBA,EAAM,qBAAA,EAAyB,MAAA,CACtD,WAAYA,CAAAA,CAAM,eAAA,CACd,QAAA,CAASA,CAAAA,CAAM,eAAe,CAAA,CAC9B,MAAA,CACJ,YAAaA,CAAAA,CAAM,gBAAA,EAAoB,OACvC,gBAAA,CAAkBA,CAAAA,CAAM,gBAAA,EAAoB,MAAA,CAC5C,cAAeA,CAAAA,CAAM,kBAAA,CACjB,SAASA,CAAAA,CAAM,kBAAkB,EACjC,MAAA,CACJ,cAAA,CAAgBA,CAAAA,CAAM,mBAAA,EAAuB,OAC7C,mBAAA,CAAqBA,CAAAA,CAAM,qBAAuB,MAAA,CAClD,UAAA,CAAYA,EAAM,eAAA,CACd,QAAA,CAASA,EAAM,eAAe,CAAA,CAC9B,OACJ,WAAA,CAAaA,CAAAA,CAAM,kBAAoB,MAAA,CACvC,gBAAA,CAAkBA,EAAM,gBAAA,EAAoB,MAAA,CAC5C,cAAA,CAAgBA,CAAAA,CAAM,oBAClB,QAAA,CAASA,CAAAA,CAAM,mBAAmB,CAAA,CAClC,MAAA,CACJ,gBAAiBA,CAAAA,CAAM,oBAAA,EAAwB,MAAA,CAC/C,oBAAA,CAAsBA,EAAM,oBAAA,EAAwB,MAAA,CACpD,gBAAiBA,CAAAA,CAAM,oBAAA,CACnB,SAASA,CAAAA,CAAM,oBAAoB,CAAA,CACnC,MAAA,CACJ,iBAAkBA,CAAAA,CAAM,qBAAA,EAAyB,OACjD,qBAAA,CAAuBA,CAAAA,CAAM,uBAAyB,MAAA,CACtD,YAAA,CAAcA,EAAM,iBAAA,CAChB,QAAA,CAASA,EAAM,iBAAiB,CAAA,CAChC,OACJ,aAAA,CAAeA,CAAAA,CAAM,oBAAsB,MAAA,CAC3C,kBAAA,CAAoBA,CAAAA,CAAM,kBAAA,EAAsB,OAChD,aAAA,CAAeA,CAAAA,CAAM,mBACjB,QAAA,CAASA,CAAAA,CAAM,kBAAkB,CAAA,CACjC,MAAA,CACJ,eAAgBA,CAAAA,CAAM,mBAAA,EAAuB,OAC7C,mBAAA,CAAqBA,CAAAA,CAAM,qBAAuB,MAAA,CAClD,UAAA,CAAYA,EAAM,eAAA,CACd,QAAA,CAASA,CAAAA,CAAM,eAAe,EAC9B,MAAA,CACJ,WAAA,CAAaA,EAAM,gBAAA,EAAoB,MAAA,CACvC,iBAAkBA,CAAAA,CAAM,gBAAA,EAAoB,MAC9C,CACF,CAEO,SAASS,EAAAA,CACdT,CAAAA,CACAhB,EACa,CACb,OAAO,CACL,IAAA,CAAMgB,CAAAA,CAAM,IAAA,CACZ,KAAA,CAAOA,EAAM,KAAA,CACb,IAAA,CAAMA,EAAM,IAAA,CACZ,GAAA,CAAKA,EAAM,GAAA,CACX,MAAA,CAAQA,CAAAA,CAAM,MAAA,CACd,WAAAhB,CAAAA,CACA,SAAA,CAAW,IAAI,IAAA,CAAKgB,CAAAA,CAAM,SAAS,CACrC,CACF,CAEA,SAASU,GAAkB1B,CAAAA,CAAqC,CAC9D,OAAIA,CAAAA,GAAe,IAAA,CAAa,MACzBA,CACT,CAEO,SAAS2B,EAAAA,CACdX,CAAAA,CACe,CACf,OAAO,CACL,eAAgBA,CAAAA,CAAM,cAAA,CACtB,wBAAyBA,CAAAA,CAAM,uBAAA,CAG/B,cAAA,CAAgBA,CAAAA,CAAM,eACtB,WAAA,CAAaA,CAAAA,CAAM,YACnB,UAAA,CAAYA,CAAAA,CAAM,UACpB,CACF,CACA,IAAMY,EAAAA,CAAmC,IAAI,GAAA,CAAI,CAC/C/B,YAAM,MAAA,CACNA,WAAAA,CAAM,eACNA,WAAAA,CAAM,aACR,CAAC,CAAA,CAGKgC,GAAqB,4CAAA,CAOdC,EAAAA,CACX,6CAMF,SAASC,EAAAA,CAAcC,EAAyB,CAC9C,OAAOA,IAAYC,mBAAAA,CAAc,MAAA,CAAO,QACpCA,mBAAAA,CAAc,OAAA,CAAQ,QACtBD,CACN,CAMA,SAASE,EAAAA,CAAgBF,CAAAA,CAAyB,CAChD,OAAOA,EAAQ,WAAA,EAAY,GAAMH,GAAmB,WAAA,EAAY,CAC5DC,GACAE,CACN,CAMA,SAASG,EAAAA,CAAa/D,EAAiD,CACrE,OAAIA,EAAO,GAAA,CAAYA,CAAAA,CAAO,IACvBwD,EAAAA,CAAa,GAAA,CAAIxD,CAAAA,CAAO,KAAK,EAAI,SAAA,CAAY,WACtD,CAEA,SAASgE,CAAAA,CAAaC,EAA8BL,CAAAA,CAAyB,CAC3E,OAAOK,CAAAA,GAAQ,SAAA,CACXN,GAAcC,CAAO,CAAA,CACrBK,IAAQ,WAAA,CACNH,EAAAA,CAAgBF,CAAO,CAAA,CACvBA,CACR,CAOO,SAASM,GACdD,CAAAA,CACAL,CAAAA,CACQ,CACR,OAAOI,CAAAA,CAAaC,EAAKL,CAAO,CAClC,CAEO,SAASO,GAAiBnE,CAAAA,CAAwC,CACvE,IAAMiE,CAAAA,CAAMF,EAAAA,CAAa/D,CAAM,CAAA,CACzBoE,CAAAA,CAAYJ,CAAAA,CAAaC,CAAAA,CAAKjE,EAAO,KAAK,CAAA,CAC1CqE,EAAaL,CAAAA,CAAaC,CAAAA,CAAKjE,EAAO,MAAM,CAAA,CAClD,OAAO,CACL,GAAA,CAAKiE,EACL,WAAA,CAAajE,CAAAA,CAAO,YACpB,MAAA,CAAQA,CAAAA,CAAO,OACf,QAAA,CAAWA,CAAAA,CAAO,IAAA,GAASsE,SAAAA,CAAI,SAAS,QAAA,CACpCC,0BAAAA,CAAuB,QACvBA,0BAAAA,CAAuB,QAAA,CAC3B,SAAUvE,CAAAA,CAAO,QAAA,EAAY,CAAA,CAC7B,SAAA,CAAAoE,EACA,UAAA,CAAAC,CAAAA,CACA,YAAarE,CAAAA,CAAO,WAAA,CACpB,GAAIA,CAAAA,CAAO,MAAA,EAAU,CAAE,MAAA,CAAQA,EAAO,MAAO,CAAA,CAC7C,GAAIA,CAAAA,CAAO,SAAA,EAAa,MAAQ,CAAE,SAAA,CAAWA,EAAO,SAAU,CAAA,CAC9D,GAAIA,CAAAA,CAAO,MAAA,EAAU,CAAE,MAAA,CAAQA,CAAAA,CAAO,MAAO,CAAA,CAC7C,GAAIA,CAAAA,CAAO,QAAA,EAAY,MAAQ,CAAE,QAAA,CAAUA,EAAO,QAAS,CAC7D,CACF,CAEO,SAASwE,EAAAA,CAAcxE,CAAAA,CAAuC,CACnE,OAAO,CACL,SAAUA,CAAAA,CAAO,YACnB,CACF,CAEA,SAASyE,CAAAA,CAAaC,CAAAA,CAAiD,CACrE,OAAOA,CAAAA,EAAM,KAAO,MAAA,CAAY,IAAI,KAAKA,CAAE,CAC7C,CAEA,SAASC,CAAAA,CACP/B,EACsB,CACtB,GAAI,GAACA,CAAAA,EAASA,CAAAA,CAAM,SAAW,CAAA,CAAA,CAC/B,OAAOA,CACT,CAEO,SAASgC,EAAAA,CACdhC,CAAAA,CAC6B,CAC7B,OAAO,CACL,YAAarB,CAAAA,CAAgBqB,CAAAA,CAAM,WAAW,CAAA,CAC9C,UAAWrB,CAAAA,CAAgBqB,CAAAA,CAAM,SAAS,CAAA,CAC1C,OAAA,CAASA,EAAM,OAAA,CACf,OAAA,CAASA,CAAAA,CAAM,OAAA,CACf,KAAMA,CAAAA,CAAM,IAAA,CAAK,IAAKiC,CAAAA,GAAY,CAChC,QAASA,CAAAA,CAAO,aAAA,CAChB,OAAQA,CAAAA,CAAO,MAAA,CACf,YAAaA,CAAAA,CAAO,WAAA,CACpB,MAAOA,CAAAA,CAAO,UAAA,CACd,KAAMF,CAAAA,CAAsBE,CAAAA,CAAO,IAAI,CAAA,CACvC,aAAcJ,CAAAA,CAAaI,CAAAA,CAAO,YAAY,CAAA,CAC9C,cAAA,CAAgBJ,EAAaI,CAAAA,CAAO,cAAc,CACpD,CAAA,CAAE,CACJ,CACF,CAEO,SAASC,EAAAA,CACdlC,CAAAA,CAC2B,CAC3B,IAAMmC,CAAAA,CAAYnC,CAAAA,CAGlB,OAAO,CACL,WAAA,CAAarB,CAAAA,CAAgBqB,EAAM,WAAW,CAAA,CAC9C,UAAWrB,CAAAA,CAAgBqB,CAAAA,CAAM,SAAS,CAAA,CAC1C,OAAA,CAASA,EAAM,OAAA,CACf,OAAA,CAASA,EAAM,OAAA,CACf,IAAA,CAAMA,EAAM,IAAA,CAAK,GAAA,CAAIC,CAAY,CAAA,CACjC,MAAOtB,CAAAA,CAAgBwD,CAAAA,CAAU,iBAAiB,CACpD,CACF,CAEO,SAASC,EAAAA,CAAcpC,CAAAA,CAAyC,CACrE,OAAO,CACL,YAAA,CAAcA,EAAM,YAAA,CACpB,eAAA,CAAiBrB,EAAgBqB,CAAAA,CAAM,eAAe,CAAA,CACtD,oBAAA,CAAsBrB,EAAgBqB,CAAAA,CAAM,oBAAoB,EAChE,KAAA,CAAO,GACP,KAAA,CAAOA,CAAAA,CAAM,SACf,CACF,CAEO,SAASqC,EAAAA,CACdrC,CAAAA,CAC2B,CAC3B,OAAO,CACL,UAAWA,CAAAA,CAAM,SAAA,CACjB,oBAAA,CAAsBA,CAAAA,CAAM,oBAC9B,CACF,CAEO,SAASsC,EAAAA,CAAiBtC,CAAAA,CAAyC,CACxE,OAAO,CACL,MAAA,CAAQA,CAAAA,CAAM,UACd,KAAA,CAAO,CAAE,MAAOA,CAAAA,CAAM,KAAA,CAAO,YAAaA,CAAAA,CAAM,WAAY,CAC9D,CACF,CAEO,SAASuC,EAAAA,CACdlE,EACA2B,CAAAA,CACkB,CAClB,IAAMwC,CAAAA,CAAAA,CAA2BxC,CAAAA,CAAM,MAAQ,EAAC,EAAG,IAAKyC,CAAAA,GAAU,CAChE,MAAO3C,CAAAA,CAAa2C,CAAAA,CAAK,KAAK,CAAA,CAC9B,OAAA,CAASA,CAAAA,CAAK,YAAA,CACd,KAAMA,CAAAA,CAAK,IAAA,CACX,OAAQA,CAAAA,CAAK,MAAA,CACb,MAAO9D,CAAAA,CAAgB8D,CAAAA,CAAK,OAAO,CAAA,CACnC,WAAYA,CAAAA,CAAK,UAAA,CACjB,cAAeA,CAAAA,CAAK,aAAA,CACpB,OAAQA,CAAAA,CAAK,MAAA,CACb,WAAA,CAAaA,CAAAA,CAAK,WAClB,cAAA,CAAgBA,CAAAA,CAAK,cACrB,QAAA,CAAUA,CAAAA,CAAK,QACjB,CAAA,CAAE,CAAA,CAEF,OAAO,CACL,KAAA,CAAOD,EAAW,CAAC,CAAA,EAAG,OAASnE,CAAAA,CAC/B,OAAA,CAAS2B,EAAM,aAAA,CACf,YAAA,CAAcA,CAAAA,CAAM,eAAA,CACpB,gBAAiBA,CAAAA,CAAM,kBAAA,CACvB,YAAarB,CAAAA,CAAgBqB,CAAAA,CAAM,WAAW,CAAA,CAC9C,SAAA,CAAWrB,CAAAA,CAAgBqB,CAAAA,CAAM,SAAS,CAAA,CAC1C,OAAA,CAASA,EAAM,OAAA,CACf,OAAA,CAASA,EAAM,OAAA,CACf,UAAA,CAAAwC,CACF,CACF,CAEO,SAASE,EAAAA,CACdrE,EACA2C,CAAAA,CACAhB,CAAAA,CACW,CACX,OAAO,CACL,MAAA3B,CAAAA,CACA,OAAA,CAAA2C,EACA,MAAA,CAAQhB,CAAAA,CAAM,OAAS,MAAA,CAAOA,CAAAA,CAAM,MAAM,CAAA,CAAI,MAAA,CAC9C,IAAA,CAAMA,CAAAA,CAAM,KAAO,MAAA,CAAOA,CAAAA,CAAM,IAAI,CAAA,CAAI,MAAA,CACxC,MAAOA,CAAAA,CAAM,KAAA,CAAQ,MAAA,CAAOA,CAAAA,CAAM,KAAK,CAAA,CAAI,MAAA,CAC3C,YAAaA,CAAAA,CAAM,WAAA,CAAc,OAAOA,CAAAA,CAAM,WAAW,CAAA,CAAI,MAAA,CAC7D,KAAMA,CAAAA,CAAM,IAAA,CAAO,OAAOA,CAAAA,CAAM,IAAI,EAAI,MAAA,CACxC,MAAA,CAAQA,EAAM,MAAA,CAAS,MAAA,CAAOA,EAAM,MAAM,CAAA,CAAI,OAC9C,OAAA,CAASrB,CAAAA,CAAgBqB,EAAM,OAAO,CAAA,CACtC,cAAA,CAAgBrB,CAAAA,CAAgBqB,EAAM,cAAc,CAAA,CACpD,gBAAiBrB,CAAAA,CAAgBqB,CAAAA,CAAM,eAAe,CAAA,CACtD,cAAA,CAAgBrB,CAAAA,CAAgBqB,CAAAA,CAAM,cAAc,CAAA,CACpD,mBAAA,CAAqBrB,EAAgBqB,CAAAA,CAAM,mBAAmB,EAC9D,mBAAA,CAAqBrB,CAAAA,CAAgBqB,CAAAA,CAAM,mBAAmB,EAC9D,qBAAA,CAAuBrB,CAAAA,CAAgBqB,EAAM,qBAAqB,CAAA,CAClE,sBAAuBrB,CAAAA,CAAgBqB,CAAAA,CAAM,qBAAqB,CAAA,CAClE,gBAAA,CAAkBrB,EAAgBqB,CAAAA,CAAM,gBAAgB,EACxD,gBAAA,CAAkBrB,CAAAA,CAAgBqB,EAAM,gBAAgB,CAAA,CACxD,sBAAA,CAAwBrB,CAAAA,CAAgBqB,EAAM,sBAAsB,CACtE,CACF,CAEA,SAAS2C,GAAetE,CAAAA,CAAcoE,CAAAA,CAAsC,CAC1E,OAAO,CACL,KAAA,CAAApE,CAAAA,CACA,QAASoE,CAAAA,CAAK,YAAA,CACd,KAAMA,CAAAA,CAAK,IAAA,EAAQ,EAAA,CACnB,MAAA,CAAQA,EAAK,MAAA,EAAU,EAAA,CACvB,MAAO9D,CAAAA,CAAgB8D,CAAAA,CAAK,OAAO,CAAA,CACnC,MAAA,CAAQA,EAAK,OAAA,CACb,WAAA,CAAaA,EAAK,YAAA,CAClB,UAAA,CAAYA,EAAK,UAAA,CACjB,QAAA,CAAUA,EAAK,QAAA,EAAY,CAAA,CAC3B,WAAA,CACEA,CAAAA,CAAK,aAAe,IAAA,CAAO,MAAA,CAAOA,EAAK,WAAW,CAAA,CAAI,OACxD,IAAA,CAAMA,CAAAA,CAAK,MAAQ,IAAA,CAAO,MAAA,CAAOA,EAAK,IAAI,CAAA,CAAI,OAC9C,UAAA,CAAYA,CAAAA,CAAK,UACjB,eAAA,CAAiBA,CAAAA,CAAK,cAAA,CACtB,gBAAA,CAAkBA,EAAK,gBAAA,CACvB,KAAA,CAAOA,EAAK,KAAA,EAAS,IAAA,CAAO,OAAOA,CAAAA,CAAK,KAAK,EAAI,MAAA,CACjD,WAAA,CAAaA,EAAK,UAAA,CAClB,gBAAA,CAAkBA,EAAK,eAAA,CACvB,iBAAA,CAAmBA,EAAK,iBAAA,CACxB,mBAAA,CAAqBA,CAAAA,CAAK,mBAAA,CAC1B,oBAAqBA,CAAAA,CAAK,mBAAA,CAC1B,sBAAuBA,CAAAA,CAAK,qBAAA,CAC5B,sBAAuBA,CAAAA,CAAK,qBAAA,CAC5B,gBAAA,CAAkBA,CAAAA,CAAK,iBACvB,gBAAA,CAAkBA,CAAAA,CAAK,iBACvB,QAAA,CAAUA,CAAAA,CAAK,SACf,UAAA,CAAYZ,CAAAA,CAAaY,CAAAA,CAAK,UAAU,EACxC,UAAA,CAAYZ,CAAAA,CAAaY,EAAK,UAAU,CAC1C,CACF,CAEO,SAASG,GACdvE,CAAAA,CACA2C,CAAAA,CACAhB,EACqB,CACrB,OAAO,CACL,KAAA,CAAA3B,CAAAA,CACA,QAAA2C,CAAAA,CACA,MAAA,CACEhB,CAAAA,CAAM,OAAA,CAAQ,QAAU,IAAA,CAAO,MAAA,CAAOA,EAAM,OAAA,CAAQ,MAAM,EAAI,MAAA,CAChE,IAAA,CAAMA,CAAAA,CAAM,OAAA,CAAQ,MAAQ,IAAA,CAAO,MAAA,CAAOA,EAAM,OAAA,CAAQ,IAAI,EAAI,MAAA,CAChE,KAAA,CACEA,CAAAA,CAAM,OAAA,CAAQ,OAAS,IAAA,CAAO,MAAA,CAAOA,EAAM,OAAA,CAAQ,KAAK,EAAI,MAAA,CAC9D,WAAA,CACEA,EAAM,OAAA,CAAQ,WAAA,EAAe,KACzB,MAAA,CAAOA,CAAAA,CAAM,QAAQ,WAAW,CAAA,CAChC,OACN,IAAA,CAAMA,CAAAA,CAAM,OAAA,CAAQ,IAAA,EAAQ,KAAO,MAAA,CAAOA,CAAAA,CAAM,QAAQ,IAAI,CAAA,CAAI,OAChE,MAAA,CACEA,CAAAA,CAAM,OAAA,CAAQ,MAAA,EAAU,KAAO,MAAA,CAAOA,CAAAA,CAAM,QAAQ,MAAM,CAAA,CAAI,OAChE,OAAA,CAASrB,CAAAA,CAAgBqB,CAAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAC9C,cAAA,CAAgBrB,EAAgBqB,CAAAA,CAAM,OAAA,CAAQ,cAAc,CAAA,CAC5D,eAAA,CAAiBrB,EAAgBqB,CAAAA,CAAM,OAAA,CAAQ,eAAe,CAAA,CAC9D,cAAA,CAAgBA,EAAM,OAAA,CAAQ,cAAA,CAC9B,oBAAqBrB,CAAAA,CAAgBqB,CAAAA,CAAM,OAAA,CAAQ,mBAAmB,EACtE,qBAAA,CAAuBrB,CAAAA,CAAgBqB,EAAM,OAAA,CAAQ,qBAAqB,EAC1E,gBAAA,CAAkBrB,CAAAA,CAAgBqB,CAAAA,CAAM,OAAA,CAAQ,gBAAgB,CAAA,CAChE,gBAAA,CAAkBrB,EAAgBqB,CAAAA,CAAM,OAAA,CAAQ,gBAAgB,CAAA,CAChE,sBAAA,CAAwBrB,CAAAA,CACtBqB,CAAAA,CAAM,QAAQ,sBAChB,CAAA,CACA,YAAarB,CAAAA,CAAgBqB,CAAAA,CAAM,WAAW,CAAA,CAC9C,SAAA,CAAWrB,EAAgBqB,CAAAA,CAAM,SAAS,EAC1C,OAAA,CAASA,CAAAA,CAAM,QACf,OAAA,CAASA,CAAAA,CAAM,QACf,UAAA,CAAYA,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAKyC,GAASE,EAAAA,CAAetE,CAAAA,CAAOoE,CAAI,CAAC,CAClE,CACF,CAEO,SAASI,EAAAA,CACdxE,CAAAA,CACA2B,EACa,CACb,OAAA,CAAQA,EAAM,IAAA,EAAQ,IAAI,GAAA,CAAKyC,CAAAA,GAAU,CACvC,KAAA,CAAO3C,EAAa2C,CAAAA,CAAK,KAAK,EAC9B,OAAA,CAASA,CAAAA,CAAK,aACd,IAAA,CAAMA,CAAAA,CAAK,KACX,MAAA,CAAQA,CAAAA,CAAK,OACb,KAAA,CAAO9D,CAAAA,CAAgB8D,EAAK,OAAO,CAAA,CACnC,WAAYA,CAAAA,CAAK,UAAA,CACjB,aAAA,CAAeA,CAAAA,CAAK,cACpB,MAAA,CAAQA,CAAAA,CAAK,OACb,WAAA,CAAaA,CAAAA,CAAK,WAClB,cAAA,CAAgBA,CAAAA,CAAK,aAAA,CACrB,QAAA,CAAUA,EAAK,QAAA,CACf,QAAA,CAAUA,EAAK,QAAA,CACf,UAAA,CAAY9D,EAAgB8D,CAAAA,CAAK,UAAU,CAAA,CAC3C,YAAA,CAAcZ,EAAaY,CAAAA,CAAK,YAAY,EAC5C,eAAA,CAAiBV,CAAAA,CAA2BU,EAAK,eAAe,CAClE,EAAE,CACJ,CAEO,SAASK,EAAAA,CACdzE,CAAAA,CACA2B,EACgB,CAChB,OAAOA,EAAM,IAAA,CAAK,GAAA,CAAKyC,CAAAA,GAAU,CAC/B,MAAApE,CAAAA,CACA,OAAA,CAASoE,EAAK,YAAA,CACd,IAAA,CAAMA,EAAK,IAAA,EAAQ,EAAA,CACnB,MAAA,CAAQA,CAAAA,CAAK,QAAU,EAAA,CACvB,KAAA,CAAO9D,EAAgB8D,CAAAA,CAAK,OAAO,EACnC,MAAA,CAAQA,CAAAA,CAAK,OAAA,CACb,WAAA,CAAaA,EAAK,YAAA,CAClB,UAAA,CAAYA,EAAK,UAAA,CACjB,QAAA,CAAUA,EAAK,QAAA,EAAY,CAAA,CAC3B,YAAa,MAAA,CAAOA,CAAAA,CAAK,WAAW,CAAA,CACpC,IAAA,CAAM,OAAOA,CAAAA,CAAK,IAAI,EACtB,UAAA,CAAYA,CAAAA,CAAK,SAAA,CACjB,eAAA,CAAiBA,EAAK,cAAA,CACtB,gBAAA,CAAkBA,EAAK,gBAAA,CACvB,KAAA,CAAO,OAAOA,CAAAA,CAAK,KAAK,EACxB,WAAA,CAAaA,CAAAA,CAAK,WAClB,gBAAA,CAAkBA,CAAAA,CAAK,gBACvB,iBAAA,CAAmBA,CAAAA,CAAK,kBACxB,mBAAA,CAAqBA,CAAAA,CAAK,mBAAA,CAC1B,mBAAA,CAAqBA,EAAK,mBAAA,CAC1B,qBAAA,CAAuBA,EAAK,qBAAA,CAC5B,qBAAA,CAAuBA,EAAK,qBAAA,CAC5B,gBAAA,CAAkBA,EAAK,gBAAA,CACvB,gBAAA,CAAkBA,EAAK,gBACzB,CAAA,CAAE,CACJ,CAEO,SAASM,GACd/C,CAAAA,CACuB,CACvB,OAAO,CACL,YAAarB,CAAAA,CAAgBqB,CAAAA,CAAM,WAAW,CAAA,CAC9C,SAAA,CAAWrB,EAAgBqB,CAAAA,CAAM,SAAS,CAAA,CAC1C,OAAA,CAASA,EAAM,OAAA,CACf,OAAA,CAASA,EAAM,OAAA,CACf,IAAA,CAAMA,EAAM,IAAA,CAAK,GAAA,CAAIgD,EAAkB,CACzC,CACF,CAEA,SAASA,GACPhD,CAAAA,CACO,CACP,IAAMiD,CAAAA,CAAQjD,CAAAA,CAAM,KAAK,WAAA,EAAY,GAAM,MAC3C,OAAO,CACL,MAAOF,CAAAA,CAAaE,CAAAA,CAAM,KAAK,CAAA,CAC/B,aAAA,CAAeA,CAAAA,CAAM,mBAAA,CACrB,OAAQA,CAAAA,CAAM,oBAAA,CACd,KAAMiD,CAAAA,CAAQ,KAAA,CAAQ,OACtB,IAAA,CAAM,CACJ,OAAA,CAASA,CAAAA,CAAQjD,EAAM,gBAAA,CAAmBA,CAAAA,CAAM,aAChD,MAAA,CAAQiD,CAAAA,CAAQjD,EAAM,eAAA,CAAkBA,CAAAA,CAAM,WAAA,CAC9C,IAAA,CAAMiD,EAAQjD,CAAAA,CAAM,aAAA,CAAgBA,EAAM,SAAA,CAC1C,KAAA,CAAOrB,EACLsE,CAAAA,CAAQjD,CAAAA,CAAM,kBAAoBA,CAAAA,CAAM,aAC1C,EACA,MAAA,CAAQiD,CAAAA,CAAQjD,EAAM,eAAA,CAAkBA,CAAAA,CAAM,YAC9C,WAAA,CAAaiD,CAAAA,CAAQjD,CAAAA,CAAM,oBAAA,CAAuBA,EAAM,gBAAA,CACxD,UAAA,CAAYiD,EAAQjD,CAAAA,CAAM,mBAAA,CAAsBA,EAAM,eACxD,CAAA,CACA,EAAA,CAAI,CACF,QAASiD,CAAAA,CAAQjD,CAAAA,CAAM,aAAeA,CAAAA,CAAM,gBAAA,CAC5C,OAAQiD,CAAAA,CAAQjD,CAAAA,CAAM,WAAA,CAAcA,CAAAA,CAAM,gBAC1C,IAAA,CAAMiD,CAAAA,CAAQjD,EAAM,SAAA,CAAYA,CAAAA,CAAM,cACtC,KAAA,CAAOrB,CAAAA,CACLsE,EAAQjD,CAAAA,CAAM,aAAA,CAAgBA,EAAM,iBACtC,CAAA,CACA,OAAQiD,CAAAA,CAAQjD,CAAAA,CAAM,YAAcA,CAAAA,CAAM,eAAA,CAC1C,WAAA,CAAaiD,CAAAA,CAAQjD,EAAM,gBAAA,CAAmBA,CAAAA,CAAM,qBACpD,UAAA,CAAYiD,CAAAA,CAAQjD,EAAM,eAAA,CAAkBA,CAAAA,CAAM,mBACpD,CAAA,CACA,IAAK,CACH,cAAA,CAAgBrB,EAAgBqB,CAAAA,CAAM,iBAAiB,EACvD,cAAA,CAAgBrB,CAAAA,CAAgBqB,CAAAA,CAAM,iBAAiB,EACvD,KAAA,CAAOrB,CAAAA,CAAgBqB,EAAM,QAAQ,CACvC,EACA,WAAA,CAAarB,CAAAA,CAAgBqB,EAAM,WAAW,CAAA,CAC9C,OAASA,CAAAA,CAAM,MAAA,EAA8B,UAC7C,IAAA,CAAM,IAAI,KAAKA,CAAAA,CAAM,cAAA,CAAiB,GAAI,CAC5C,CACF,CAEO,SAASkD,GACdlD,CAAAA,CAC0B,CAC1B,OAAO,CACL,WAAA,CAAarB,CAAAA,CAAgBqB,CAAAA,CAAM,WAAW,CAAA,CAC9C,SAAA,CAAWrB,EAAgBqB,CAAAA,CAAM,SAAS,EAC1C,OAAA,CAASA,CAAAA,CAAM,OAAA,CACf,OAAA,CAASA,EAAM,OAAA,CACf,IAAA,CAAMA,EAAM,IAAA,CAAK,GAAA,CAAImD,EAAqB,CAC5C,CACF,CAEA,SAASA,EAAAA,CAAsBnD,EAAoC,CACjE,IAAMoD,EAAOpD,CAAAA,CAAM,IAAA,CAAK,aAAY,CAAE,OAAA,CAAQ,IAAA,CAAM,GAAG,EACjDiD,CAAAA,CAAQG,CAAAA,GAAS,MAIjBC,CAAAA,CACJrD,CAAAA,CAAM,eAAiB,IAAA,CACnBA,CAAAA,CAAM,cAAA,CAAiB,GAAA,CACvBA,EAAM,cAAA,CACZ,OAAO,CACL,KAAA,CAAOF,CAAAA,CAAaE,EAAM,KAAK,CAAA,CAC/B,aAAA,CAAeA,CAAAA,CAAM,oBACrB,MAAA,CAAQA,CAAAA,CAAM,qBACd,IAAA,CAAAoD,CAAAA,CACA,KAAM,CACJ,OAAA,CAASH,EAAQjD,CAAAA,CAAM,gBAAA,CAAmBA,EAAM,YAAA,CAChD,MAAA,CAAQiD,EAAQjD,CAAAA,CAAM,eAAA,CAAkBA,EAAM,WAAA,CAC9C,IAAA,CAAMiD,CAAAA,CAAQjD,CAAAA,CAAM,cAAgBA,CAAAA,CAAM,SAAA,CAC1C,MAAOrB,CAAAA,CACLsE,CAAAA,CAAQjD,EAAM,iBAAA,CAAoBA,CAAAA,CAAM,aAC1C,CAAA,CACA,OAAQiD,CAAAA,CAAQjD,CAAAA,CAAM,gBAAkBA,CAAAA,CAAM,WAAA,CAC9C,YAAaiD,CAAAA,CAAQjD,CAAAA,CAAM,oBAAA,CAAuBA,CAAAA,CAAM,iBACxD,UAAA,CAAYiD,CAAAA,CAAQjD,EAAM,mBAAA,CAAsBA,CAAAA,CAAM,eACxD,CAAA,CACA,EAAA,CAAI,CACF,OAAA,CAASiD,CAAAA,CAAQjD,EAAM,YAAA,CAAeA,CAAAA,CAAM,iBAC5C,MAAA,CAAQiD,CAAAA,CAAQjD,EAAM,WAAA,CAAcA,CAAAA,CAAM,eAAA,CAC1C,IAAA,CAAMiD,EAAQjD,CAAAA,CAAM,SAAA,CAAYA,EAAM,aAAA,CACtC,KAAA,CAAOrB,EACLsE,CAAAA,CAAQjD,CAAAA,CAAM,cAAgBA,CAAAA,CAAM,iBACtC,EACA,MAAA,CAAQiD,CAAAA,CAAQjD,EAAM,WAAA,CAAcA,CAAAA,CAAM,gBAC1C,WAAA,CAAaiD,CAAAA,CAAQjD,CAAAA,CAAM,gBAAA,CAAmBA,EAAM,oBAAA,CACpD,UAAA,CAAYiD,EAAQjD,CAAAA,CAAM,eAAA,CAAkBA,EAAM,mBACpD,CAAA,CACA,IAAK,CACH,cAAA,CAAgBrB,EAAgBqB,CAAAA,CAAM,iBAAiB,EACvD,cAAA,CAAgBrB,CAAAA,CAAgBqB,EAAM,iBAAiB,CAAA,CACvD,KAAA,CAAOrB,CAAAA,CAAgBqB,EAAM,QAAQ,CACvC,EACA,WAAA,CAAarB,CAAAA,CAAgBqB,EAAM,WAAW,CAAA,CAC9C,MAAA,CAASA,CAAAA,CAAM,QAAiC,SAAA,CAChD,IAAA,CAAM,IAAI,IAAA,CAAKqD,CAAI,EACnB,MAAA,CAAQrD,CAAAA,CAAM,MAAA,EAAU,IAAA,CAAO,OAAOA,CAAAA,CAAM,MAAM,EAAI,MAAA,CACtD,UAAA,CAAY+B,EAAsB/B,CAAAA,CAAM,UAAU,CACpD,CACF,CAEO,SAASsD,EAAAA,CACdjF,CAAAA,CACA2B,EACqB,CACrB,OAAO,CACL,KAAA,CAAA3B,CAAAA,CACA,OAAA,CAAS2B,CAAAA,CAAM,aACf,IAAA,CAAMA,CAAAA,CAAM,KACZ,MAAA,CAAQA,CAAAA,CAAM,OACd,QAAA,CAAUA,CAAAA,CAAM,QAAA,CAChB,SAAA,CAAWA,EAAM,WAAA,CAAc,IAAI,KAAKA,CAAAA,CAAM,WAAW,EAAI,MAAA,CAC7D,YAAA,CAAcA,CAAAA,CAAM,UAAA,CAChB,CACE,cAAA,CAAgBA,CAAAA,CAAM,WAAW,cAAA,CACjC,cAAA,CAAgBA,EAAM,UAAA,CAAW,cACnC,EACA,MACN,CACF,CAEO,SAASuD,EAAAA,CACdlF,EACA2B,CAAAA,CACqB,CACrB,OAAO,CACL,KAAA,CAAA3B,CAAAA,CACA,OAAA,CAAS2B,EAAM,YAAA,CACf,IAAA,CAAMA,EAAM,IAAA,CACZ,MAAA,CAAQA,EAAM,MAAA,CACd,QAAA,CAAUA,CAAAA,CAAM,QAAA,CAChB,MAAOA,CAAAA,CAAM,QAAA,CACb,YAAaA,CAAAA,CAAM,WAAA,CACnB,aAAcA,CAAAA,CAAM,WAAA,CAAc,CAAE,GAAGA,EAAM,WAAY,CAAA,CAAI,OAC7D,SAAA,CAAWA,CAAAA,CAAM,YAAc,IAAI,IAAA,CAAKA,EAAM,WAAW,CAAA,CAAI,OAC7D,YAAA,CAAcA,CAAAA,CAAM,WAChB,CACE,cAAA,CAAgBA,EAAM,UAAA,CAAW,cAAA,CACjC,cAAA,CAAgBA,CAAAA,CAAM,WAAW,cACnC,CAAA,CACA,OACJ,UAAA,CAAYA,CAAAA,CAAM,WACd,CACE,cAAA,CAAgBA,CAAAA,CAAM,UAAA,CAAW,eACjC,cAAA,CAAgBA,CAAAA,CAAM,WAAW,cACnC,CAAA,CACA,MACN,CACF,CAMO,SAASwD,EAAAA,CAAaxD,EAA8B,CACzD,OAAO,CACL,IAAA,CAAMA,CAAAA,CAAM,KACZ,KAAA,CAAOA,CAAAA,CAAM,MACb,IAAA,CAAMA,CAAAA,CAAM,KACZ,GAAA,CAAKA,CAAAA,CAAM,IACX,MAAA,CAAQA,CAAAA,CAAM,OACd,UAAA,CAAYU,EAAAA,CAAkBV,CAAAA,CAAM,UAAU,EAC9C,SAAA,CAAW,IAAI,KAAKA,CAAAA,CAAM,IAAI,CAChC,CACF,CAEO,SAASyD,EAAAA,CAAiBzD,EAAgC,CAC/D,IAAM0D,EAAa,CAAC,IAAA,CAAM,KAAM,KAAA,CAAO,KAAA,CAAO,IAAA,CAAM,IAAA,CAAM,KAAK,CAAA,CACzDC,CAAAA,CAAS3D,EAIT4D,CAAAA,CAAqB,GAE3B,IAAA,IAAWC,CAAAA,IAAMH,EAAY,CAC3B,IAAMI,EAAOH,CAAAA,CAAO,CAAA,IAAA,EAAOE,CAAE,CAAA,CAAE,CAAA,CACzBE,EAAQJ,CAAAA,CAAO,CAAA,KAAA,EAAQE,CAAE,CAAA,CAAE,EAC3BG,CAAAA,CAASL,CAAAA,CAAO,SAASE,CAAE,CAAA,CAAE,EAC7BI,CAAAA,CAAUN,CAAAA,CAAO,CAAA,OAAA,EAAUE,CAAE,EAAE,CAAA,CAC/BK,CAAAA,CAAiBP,EAAO,CAAA,cAAA,EAAiBE,CAAE,EAAE,CAAA,CAC7CM,CAAAA,CAAkBR,CAAAA,CAAO,CAAA,eAAA,EAAkBE,CAAE,CAAA,CAAE,CAAA,CAG/CO,EAAST,CAAAA,CAAO,CAAA,MAAA,EAASE,CAAE,CAAA,CAAE,CAAA,CAC7BQ,EAAQV,CAAAA,CAAO,CAAA,KAAA,EAAQE,CAAE,CAAA,CAAE,CAAA,CAC3BS,EAAYX,CAAAA,CAAO,CAAA,SAAA,EAAYE,CAAE,CAAA,CAAE,CAAA,CACnCU,CAAAA,CAAaZ,CAAAA,CAAO,aAAaE,CAAE,CAAA,CAAE,EAQ3C,GAAI,EALFC,IAAS,MAAA,EACTC,CAAAA,GAAU,MAAA,EACVK,CAAAA,GAAW,QACXC,CAAAA,GAAU,MAAA,CAAA,CAEE,SAEd,IAAMG,CAAAA,CACJJ,IACCN,CAAAA,GAAS,MAAA,EAAaC,CAAAA,GAAU,MAAA,CAAYD,EAAOC,CAAAA,CAAQ,MAAA,CAAA,CACxDU,GACJT,CAAAA,GAAW,MAAA,EAAaC,IAAY,MAAA,CAChCD,CAAAA,CAASC,EACT,MAAA,CACAS,EAAAA,CACJR,IAAmB,MAAA,EAAaC,CAAAA,GAAoB,OAChD,IAAItE,mBAAAA,CAAcqE,CAAc,CAAA,CAAE,IAAA,CAAKC,CAAe,CAAA,CAAE,UAAS,CACjE,MAAA,CACAQ,GACJL,CAAAA,EAAaC,CAAAA,EAAc,IAAI1E,mBAAAA,CAAcyE,CAAS,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,CACxD,IAAIzE,oBAAc0E,CAAU,CAAA,CACzB,MAAMD,CAAS,CAAA,CACf,GAAA,CAAIA,CAAS,EACb,QAAA,EAAS,CACZ,OAENV,CAAAA,CAAOC,CAAE,EAAI,CACX,IAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CACA,OAAQS,CAAAA,CACR,MAAA,CAAAR,EACA,OAAA,CAAAC,CAAAA,CACA,QAASQ,EAAAA,CACT,eAAA,CAAiBP,CAAAA,CACjB,gBAAA,CAAkBC,EAClB,YAAA,CAAcO,EAAAA,CACd,eAAgBJ,CAAAA,CAChB,eAAA,CAAiBC,EACjB,UAAA,CAAYF,CAAAA,EAASE,CAAAA,CACrB,WAAA,CAAAI,EACF,EACF,CAEA,OAAOf,CACT,CAEO,SAASgB,EAAAA,CACd5E,CAAAA,CACiB,CACjB,OAAO,CACL,UAAA,CAAYA,CAAAA,CAAM,KACpB,CACF,CAEO,SAAS6E,CAAAA,CACdxG,CAAAA,CACA2B,EACqB,CACrB,OAAO,CACL,KAAA,CAAA3B,CAAAA,CACA,QAAS2B,CAAAA,CAAM,OAAA,CACf,MAAOyD,EAAAA,CAAiBzD,CAAK,CAAA,CAC7B,UAAA,CAAY4E,GAA+B5E,CAAK,CAClD,CACF,CAEO,SAAS8E,EACdzG,CAAAA,CACA2C,CAAAA,CACAhB,CAAAA,CACqB,CACrB,OAAO,CACL,KAAA,CAAA3B,EACA,OAAA,CAAA2C,CAAAA,CACA,WAAY,CACV,WAAA,CAAahB,CAAAA,CAAM,MAAA,CACnB,eAAgBA,CAAAA,CAAM,cACxB,CACF,CACF,CAEO,SAAS+E,CAAAA,CACd1G,CAAAA,CACA2C,EACAhB,CAAAA,CACqB,CACrB,OAAO,CACL,KAAA,CAAA3B,EACA,OAAA,CAAA2C,CAAAA,CACA,WAAYgE,EAAAA,CAAgChF,CAAK,CACnD,CACF,CAEO,SAASiF,CAAAA,CACd5G,EACA2C,CAAAA,CACAhB,CAAAA,CACqB,CACrB,OAAIA,CAAAA,CAAM,UAAA,GAAekF,gBAAAA,CAAa,iBAC7B,CACL,KAAA,CAAA7G,EACA,OAAA,CAAA2C,CAAAA,CACA,WAAY,CAAE,QAAA,CAAUhB,CAAAA,CAAM,KAAM,CACtC,CAAA,CAEEA,CAAAA,CAAM,aAAekF,gBAAAA,CAAa,cAAA,CAC7B,CACL,KAAA,CAAA7G,CAAAA,CACA,QAAA2C,CAAAA,CACA,eAAA,CAAiB,IAAInB,mBAAAA,CAAcG,CAAAA,CAAM,KAAK,CAAA,CAAE,SAAA,CAAU,CAAC,CAAA,CAAE,QAAA,EAC/D,CAAA,CAEK,CAAE,KAAA,CAAA3B,CAAAA,CAAO,QAAA2C,CAAQ,CAC1B,CAEO,SAASmE,CAAAA,CACd9G,CAAAA,CACA2B,CAAAA,CACqB,CACrB,OAAO,CACL,MAAA3B,CAAAA,CACA,OAAA,CAAS2B,EAAM,YAAA,EAAgB,EAAA,CAC/B,eAAA,CAAiBA,CAAAA,CAAM,cACnB,IAAIH,mBAAAA,CAAcG,EAAM,aAAa,CAAA,CAAE,UAAU,CAAC,CAAA,CAAE,UAAS,CAC7D,MACN,CACF,CAEO,SAASoF,GACd/G,CAAAA,CACA2C,CAAAA,CACAhB,EACqB,CACrB,OAAO,CACL,KAAA,CAAA3B,EACA,OAAA,CAAA2C,CAAAA,CACA,YAAa,CACX,CACE,YAAahB,CAAAA,CAAM,WAAA,CACnB,QAAA,CAAUA,CAAAA,CAAM,eAChB,GAAA,CAAKA,CAAAA,CAAM,iBACb,CACF,CACF,CACF,CAEO,SAASqF,EAAAA,CACdhH,CAAAA,CACA2C,EACAhB,CAAAA,CACqB,CACrB,OAAO,CACL,KAAA,CAAA3B,EACA,OAAA,CAAA2C,CAAAA,CACA,WAAY,CACV,QAAA,CAAUhB,EAAM,cAAA,CAChB,GAAA,CAAKA,EAAM,iBACb,CACF,CACF,CAEO,SAASgF,EAAAA,CACdhF,CAAAA,CAC0B,CAC1B,OAAO,CACL,QAASA,CAAAA,CAAM,OAAA,CACf,cAAeA,CAAAA,CAAM,kBAAA,CACrB,kBAAA,CAAoBA,CAAAA,CAAM,kBAC1B,aAAA,CAAeA,CAAAA,CAAM,mBACrB,kBAAA,CAAoBA,CAAAA,CAAM,kBAC1B,cAAA,CAAgBA,CAAAA,CAAM,mBAAA,CACtB,mBAAA,CAAqBA,EAAM,kBAAA,CAC3B,UAAA,CACEA,EAAM,oBAAA,GAAyB,MAAA,CAC3B,OACAA,CAAAA,CAAM,oBAAA,CACZ,YAAaA,CAAAA,CAAM,mBAAA,CACnB,iBAAkBA,CAAAA,CAAM,kBAAA,CACxB,cACEA,CAAAA,CAAM,uBAAA,GAA4B,OAC9B,MAAA,CACAA,CAAAA,CAAM,uBAAA,CACZ,cAAA,CAAgBA,EAAM,sBAAA,CACtB,mBAAA,CAAqBA,EAAM,qBAAA,CAC3B,YAAA,CACEA,EAAM,sBAAA,GAA2B,MAAA,CAC7B,MAAA,CACAA,CAAAA,CAAM,uBACZ,aAAA,CAAeA,CAAAA,CAAM,sBACrB,kBAAA,CAAoBA,CAAAA,CAAM,qBAC1B,aAAA,CACEA,CAAAA,CAAM,uBAAA,GAA4B,MAAA,CAC9B,OACAA,CAAAA,CAAM,uBAAA,CACZ,eAAgBA,CAAAA,CAAM,sBAAA,CACtB,oBAAqBA,CAAAA,CAAM,qBAAA,CAC3B,gBACEA,CAAAA,CAAM,yBAAA,GAA8B,OAChC,MAAA,CACAA,CAAAA,CAAM,0BACZ,gBAAA,CAAkBA,CAAAA,CAAM,yBACxB,qBAAA,CAAuBA,CAAAA,CAAM,uBAC/B,CACF,CAEO,SAASsF,CAAAA,CACdjH,EACA2B,CAAAA,CACO,CACP,IAAMiD,CAAAA,CAAQjD,CAAAA,CAAM,KAAK,WAAA,EAAY,GAAM,MAC3C,OAAO,CACL,MAAA3B,CAAAA,CACA,aAAA,CAAe4E,EAAQjD,CAAAA,CAAM,gBAAA,CAAmBA,CAAAA,CAAM,iBAAA,CACtD,OAAQA,CAAAA,CAAM,MAAA,CACd,KAAMiD,CAAAA,CAAQ,KAAA,CAAQ,OACtB,IAAA,CAAM,CACJ,QAASjD,CAAAA,CAAM,gBAAA,CACf,OAAQA,CAAAA,CAAM,eAAA,CACd,KAAMA,CAAAA,CAAM,aAAA,CACZ,OAAQA,CAAAA,CAAM,UAAA,CACd,WAAA,CAAaA,CAAAA,CAAM,eACrB,CAAA,CACA,EAAA,CAAI,CACF,OAAA,CAASA,CAAAA,CAAM,gBACf,MAAA,CAAQA,CAAAA,CAAM,cAAA,CACd,IAAA,CAAMA,EAAM,YAAA,CACZ,MAAA,CAAQA,EAAM,SAAA,CACd,WAAA,CAAaA,EAAM,cACrB,CAAA,CACA,MAAA,CAAQ,SAAA,CACR,KAAM,IAAI,IAAA,CAAKA,EAAM,SAAS,CAChC,CACF,CAEO,SAASuF,EAAelH,CAAAA,CAAc2B,CAAAA,CAAkC,CAC7E,IAAMoD,CAAAA,CAAOpD,EAAM,IAAA,CAAK,WAAA,GAAc,OAAA,CAAQ,IAAA,CAAM,GAAG,CAAA,CAEvD,OAAO,CACL,KAAA,CAAA3B,EACA,aAAA,CAHY+E,CAAAA,GAAS,MAGEpD,CAAAA,CAAM,gBAAA,CAAmBA,CAAAA,CAAM,iBAAA,CACtD,OAAQA,CAAAA,CAAM,MAAA,CACd,KAAAoD,CAAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAASpD,CAAAA,CAAM,gBAAA,CACf,MAAA,CAAQA,EAAM,eAAA,CACd,IAAA,CAAMA,EAAM,aAAA,CACZ,MAAA,CAAQA,EAAM,UAAA,CACd,WAAA,CAAaA,EAAM,eACrB,CAAA,CACA,GAAI,CACF,OAAA,CAASA,EAAM,eAAA,CACf,MAAA,CAAQA,EAAM,cAAA,CACd,IAAA,CAAMA,CAAAA,CAAM,YAAA,CACZ,OAAQA,CAAAA,CAAM,SAAA,CACd,YAAaA,CAAAA,CAAM,cACrB,EACA,MAAA,CAAQ,SAAA,CACR,IAAA,CAAM,IAAI,KAAKA,CAAAA,CAAM,SAAS,CAChC,CACF,KC/pCawF,EAAAA,CAAN,MAAMC,CAAoD,CAO/D,YACmBvH,CAAAA,CACAwH,CAAAA,CACjB,CAFiB,IAAA,CAAA,WAAA,CAAAxH,CAAAA,CACA,aAAAwH,CAAAA,CAEjB,IAAA,CAAK,QAAU,IAAIC,qBAAAA,CAAkB,KAAK,WAAA,CAAa,IAAA,CAAK,OAAO,CAAA,CACnE,IAAA,CAAK,QAAU1H,CAAAA,CACb,IAAA,CAAK,WAAA,CACL,IAAA,CAAK,SAAS,SAChB,EACF,CAdiB,OAAA,CAGA,OAAA,CAajB,MAAM,QAAA,CAASI,CAAAA,CAAc2C,CAAAA,CAAiC,CAC5D,IAAMlD,CAAAA,CAAQ,MAAM,KAAK,OAAA,CAAQ,KAAA,CAAM,SAASc,CAAAA,CAAWP,CAAK,CAAA,CAAG2C,CAAO,EAC1E,OAAOf,CAAAA,CAAanC,CAAK,CAC3B,CAEA,MAAM,SAAA,CACJO,CAAAA,CACAuH,EACuB,CAIvB,OAAA,CAHe,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,SAAA,CAAUhH,CAAAA,CAAWP,CAAK,CAAA,CAAG,CACnE,cAAA,CAAgBuH,CAAAA,CAAU,KAAK,GAAG,CACpC,CAAC,CAAA,EACa,GAAA,CAAI3F,CAAY,CAChC,CAEA,MAAM,eAAA,CACJ5B,EACA2C,CAAAA,CACAhC,CAAAA,CACA0G,EAC6B,CAW7B,OAAA,CAVgB,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,UAAA,CACvC9G,EAAWP,CAAK,CAAA,CAChB2C,EACA,CACE,UAAA,CAAYjC,EAAgBC,CAAU,CAAA,CACtC,KAAM0G,CAAAA,EAAS,KAAA,EAAO,SAAQ,CAC9B,EAAA,CAAIA,GAAS,MAAA,EAAQ,OAAA,GACrB,KAAA,CAAOA,CAAAA,EAAS,KAClB,CACF,GACe,GAAA,CAAKG,CAAAA,EAAMpF,GAAgBoF,CAAAA,CAAG7G,CAAU,CAAC,CAC1D,CAEA,MAAM,gBAAA,CACJX,EACA2C,CAAAA,CACwB,CACxB,IAAM8E,CAAAA,CAAW,MAAM,KAAK,OAAA,CAAQ,KAAA,CAAM,WAAA,CACxClH,CAAAA,CAAWP,CAAK,CAAA,CAChB2C,CACF,EACA,OAAOL,EAAAA,CAAkBmF,CAAmC,CAC9D,CAEA,MAAM,aAAA,CAAczH,CAAAA,CAAc2C,EAAsC,CACtE,IAAM+E,EAAQ,MAAM,IAAA,CAAK,QAAQ,KAAA,CAAM,QAAA,CAASnH,CAAAA,CAAWP,CAAK,EAAG2C,CAAO,CAAA,CAC1E,OAAOb,CAAAA,CAAkB4F,CAAK,CAChC,CAEA,MAAM,eAAA,CACJ1H,CAAAA,CACA2C,EACA0E,CAAAA,CACsC,CAGtC,IAAMM,CAAAA,CAAU,MAAM5H,EACpB,IAAA,CAAK,OAAA,CACLQ,CAAAA,CAAWP,CAAK,EAChB2C,CAAAA,CACA,CACE,OAAQ0E,CAAAA,EAAS,MAAA,CACjB,MAAOA,CAAAA,EAAS,KAAA,CAChB,UAAWA,CAAAA,EAAS,SAAA,CACpB,OAAQA,CAAAA,EAAS,MACnB,CACF,CAAA,CACA,OAAO1D,GAAoBgE,CAAO,CACpC,CAEA,MAAM,mBACJ3H,CAAAA,CACA2C,CAAAA,CAC0B,CAC1B,IAAMiF,CAAAA,CAAa,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,aAAA,CAC1CrH,CAAAA,CAAWP,CAAK,CAAA,CAChB2C,CACF,EACA,OAAOZ,CAAAA,CAAuB6F,CAAU,CAC1C,CAEA,MAAM,YAAA,CACJ5H,EACAqH,CAAAA,CACuB,CAKvB,QAJe,MAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,YAAA,CACxC9G,EAAWP,CAAK,CAAA,CAChB,KAAK,mBAAA,CAAoBqH,CAAO,CAClC,CAAA,EACc,GAAA,CAAIzF,CAAY,CAChC,CAEA,MAAM,qBAAA,CACJ5B,EACAqH,CAAAA,CACuB,CAKvB,QAJe,MAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,qBAAA,CACxC9G,CAAAA,CAAWP,CAAK,EAChB,IAAA,CAAK,mBAAA,CAAoBqH,CAAO,CAClC,CAAA,EACc,IAAIzF,CAAY,CAChC,CAEA,MAAM,kBACJ5B,CAAAA,CACAqH,CAAAA,CACuB,CAKvB,OAAA,CAJe,MAAM,KAAK,OAAA,CAAQ,OAAA,CAAQ,kBACxC9G,CAAAA,CAAWP,CAAK,EAChB,IAAA,CAAK,mBAAA,CAAoBqH,CAAO,CAClC,CAAA,EACc,IAAIzF,CAAY,CAChC,CAEA,MAAM,kBACJ5B,CAAAA,CACAW,CAAAA,CACA0G,EACuB,CAMvB,OAAA,CALe,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,YAAA,CACxC9G,EAAWP,CAAK,CAAA,CAChBW,EACA,IAAA,CAAK,mBAAA,CAAoB0G,CAAO,CAClC,CAAA,EACc,GAAA,CAAIzF,CAAY,CAChC,CAEA,MAAM,eACJ5B,CAAAA,CACAqH,CAAAA,CACuB,CAKvB,OAAA,CAJe,MAAM,KAAK,OAAA,CAAQ,OAAA,CAAQ,gBACxC9G,CAAAA,CAAWP,CAAK,EAChB,IAAA,CAAK,mBAAA,CAAoBqH,CAAO,CAClC,CAAA,EACc,GAAA,CAAIzF,CAAY,CAChC,CAEA,MAAM,aACJyF,CAAAA,CACoC,CACpC,IAAMQ,CAAAA,CAAY,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,MAAA,CAAO,CAChD,OAAQR,CAAAA,EAAS,MAAA,EAAQ,IAAI9G,CAAU,CAAA,CACvC,CAAA,CAAG8G,CAAAA,EAAS,QACZ,KAAA,CAAOA,CAAAA,EAAS,MAChB,MAAA,CAAQA,CAAAA,EAAS,OACjB,MAAA,CAAQA,CAAAA,EAAS,OACZtG,EAAAA,CAAiBsG,CAAAA,CAAQ,MAAM,CAAA,CAChC,MAAA,CACJ,KAAMA,CAAAA,EAAS,aAEjB,CAAC,CAAA,CACD,OAAOxD,EAAAA,CAAcgE,CAAS,CAChC,CAEA,MAAM,UAAU9I,CAAAA,CAAgD,CAC9D,IAAM+I,CAAAA,CAAQ,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,KAAA,CACnCvH,CAAAA,CAAWxB,EAAO,KAAK,CAAA,CACvBmE,GAAiBnE,CAAM,CACzB,CAAA,CACA,OAAOgF,GAAc+D,CAAK,CAC5B,CAEA,MAAM,cAAA,CACJ/I,EACoC,CACpC,IAAMgJ,EAAc,MAAM,IAAA,CAAK,QAAQ,UAAA,CAAW,cAAA,CAChDxH,EAAWxB,CAAAA,CAAO,KAAK,CACzB,CAAA,CACA,OAAOiF,EAAAA,CAAgB+D,CAAW,CACpC,CAEA,MAAM,OAAOhJ,CAAAA,CAAqD,CAChE,IAAMwG,CAAAA,CAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,YAAY,IAAA,CAC5ChF,CAAAA,CAAWxB,EAAO,KAAK,CAAA,CACvBwE,GAAcxE,CAAM,CACtB,CAAA,CACA,OAAOkF,GAAiBsB,CAAM,CAChC,CAEA,MAAM,cAAA,CACJvF,EACAgI,CAAAA,CACAC,CAAAA,CACkB,CAClB,GAAM,CAAE,QAAAC,CAAQ,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,WAIpCF,CAAAA,CAAQC,CAAO,CAAA,CAClB,OAAOC,CACT,CAEA,MAAM,oBACJlI,CAAAA,CACA2C,CAAAA,CACA0E,EAC2B,CAC3B,IAAMc,CAAAA,CAAaf,CAAAA,CAAO,wBAAwBpH,CAAK,CAAA,CACvD,GAAImI,CAAAA,EAAc,IAAA,CAAK,SAAS,mBAAA,CAC9B,OAAO,IAAA,CAAK,kCAAA,CACVnI,EACAmI,CAAAA,CACAxF,CACF,EAEF,IAAMyF,CAAAA,CAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAO,WAAA,CACzC7H,CAAAA,CAAWP,CAAK,CAAA,CAChB2C,CAAAA,CACA,CAAE,MAAA,CAAQ0E,CAAAA,EAAS,OAAQ,KAAA,CAAOA,CAAAA,EAAS,KAAA,EAAS,GAAI,CAC1D,CAAA,CACA,OAAOnD,GAAqBlE,CAAAA,CAAOoI,CAAQ,CAC7C,CAEA,MAAM,YAAA,CACJpI,CAAAA,CACA2C,EACAhC,CAAAA,CACoB,CACpB,IAAM0H,CAAAA,CAAM,MAAM,KAAK,OAAA,CAAQ,MAAA,CAAO,MAAA,CACpC9H,CAAAA,CAAWP,CAAK,CAAA,CAChB2C,CAAAA,CACAhC,EACI,CAAE,UAAA,CAAYA,CAA0C,CAAA,CACxD,MACN,EACA,OAAO0D,EAAAA,CAAqBrE,EAAO2C,CAAAA,CAAS0F,CAAG,CACjD,CAEA,MAAM,uBACJrI,CAAAA,CACA2C,CAAAA,CACA0E,CAAAA,CAC8B,CAG9B,IAAMiB,CAAAA,CAAc,MAAMjI,EACxB,IAAA,CAAK,OAAA,CACLE,EAAWP,CAAK,CAAA,CAChB2C,EACA,CACE,UAAA,CAAY0E,GAAS,UAAA,EAAc,KAAA,CACnC,cAAeA,CAAAA,EAAS,aAAA,CACxB,OAAQA,CAAAA,EAAS,MAAA,CACjB,MAAA,CAAQA,CAAAA,EAAS,OACjB,KAAA,CAAOA,CAAAA,EAAS,OAAS,GAAA,CACzB,SAAA,CAAWA,GAAS,SACtB,CACF,EACA,OAAO9C,EAAAA,CAAmBvE,EAAO2C,CAAAA,CAAS2F,CAAW,CACvD,CAEA,MAAM,4BACJtI,CAAAA,CACA2C,CAAAA,CACA4F,CAAAA,CAC2B,CAC3B,IAAMJ,CAAAA,CAAaf,CAAAA,CAAO,wBAAwBpH,CAAK,CAAA,CACvD,GAAImI,CAAAA,EAAc,IAAA,CAAK,OAAA,EAAS,mBAAA,CAC9B,OAAO,IAAA,CAAK,4BAAA,CACVnI,EACAmI,CAAAA,CACAxF,CAAAA,CACA4F,CACF,CAAA,CAIF,IAAMhD,CAAAA,CAAS,MAAMpF,EACnB,IAAA,CAAK,OAAA,CACLI,EAAWP,CAAK,CAAA,CAChB2C,EACA,CAAE,cAAA,CAAgB4F,EAAe,IAAA,CAAK,GAAG,CAAE,CAC7C,CAAA,CACA,OAAO/D,EAAAA,CAA2BxE,CAAAA,CAAOuF,CAAM,CACjD,CAEA,MAAM,8BAAA,CACJvF,EACA2C,CAAAA,CACA4F,CAAAA,CAC8B,CAC9B,IAAMD,CAAAA,CAAc,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,aAAA,CAC5C/H,EAAWP,CAAK,CAAA,CAChB2C,EACA,CAAE,cAAA,CAAgB4F,EAAe,IAAA,CAAK,GAAG,CAAE,CAC7C,EACA,OAAO9D,EAAAA,CAAmBzE,EAAOsI,CAAW,CAC9C,CAEA,MAAM,eAAA,CACJtI,EACA2C,CAAAA,CACA0E,CAAAA,CACgC,CAChC,OAAO,IAAA,CAAK,WAAWrH,CAAAA,CAAO,CAAE,cAAe2C,CAAQ,CAAA,CAAG0E,CAAO,CACnE,CAEA,MAAM,cAAA,CACJrH,EACA2C,CAAAA,CACA0E,CAAAA,CACgC,CAChC,OAAO,IAAA,CAAK,UAAA,CAAWrH,CAAAA,CAAO,CAAE,YAAA,CAAc2C,CAAQ,EAAG0E,CAAO,CAClE,CAEA,MAAM,mBAAA,CACJrH,CAAAA,CACA2C,CAAAA,CACA0E,EACmC,CACnC,OAAO,KAAK,cAAA,CAAerH,CAAAA,CAAO,CAAE,aAAA,CAAe2C,CAAQ,EAAG0E,CAAO,CACvE,CAEA,MAAM,kBAAA,CACJrH,EACA2C,CAAAA,CACA0E,CAAAA,CACmC,CACnC,OAAO,IAAA,CAAK,cAAA,CAAerH,CAAAA,CAAO,CAAE,YAAA,CAAc2C,CAAQ,EAAG0E,CAAO,CACtE,CAEA,MAAM,qBAAA,EAAyC,CAE7C,OAAA,CADe,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,OAAA,EAAQ,EACjC,UAChB,CAEA,MAAM,oBAAA,CACJmB,CAAAA,CACAC,EACAC,CAAAA,CACiE,CACjE,MAAM,IAAIpK,CAAAA,CACR,8BACA,6CACF,CACF,CAEA,MAAM,kBAAA,CACJkK,EACAG,CAAAA,CACAD,CAAAA,CACgC,CAChC,MAAM,IAAIpK,EACR,2BAAA,CACA,8CACF,CACF,CAEA,eACE0B,CAAAA,CACA2C,CAAAA,CACAiG,EACmB,CACnB,IAAMC,EAAWtI,CAAAA,CAAWP,CAAK,CAAA,CAC3B8I,CAAAA,CAAO,CACX,IAAA,CAAK,OAAA,CAAQ,OAAO,mBAAA,CAAoB,CACtC,MAAOD,CAAAA,CACP,YAAA,CAAclG,CAAAA,CACd,QAAA,CAAWoG,GACTH,CAAAA,CAAS,CAACpC,EAA0BxG,CAAAA,CAAO+I,CAAI,CAAC,CAAC,CACrD,CAAC,CAAA,CACD,IAAA,CAAK,QAAQ,MAAA,CAAO,oBAAA,CAAqB,CACvC,KAAA,CAAOF,CAAAA,CACP,aAAclG,CAAAA,CACd,QAAA,CAAWoG,CAAAA,EACTH,CAAAA,CAAS,CAACnC,CAAAA,CAA8BzG,CAAAA,CAAO2C,EAASoG,CAAI,CAAC,CAAC,CAClE,CAAC,CAAA,CACD,IAAA,CAAK,QAAQ,MAAA,CAAO,qBAAA,CAAsB,CACxC,KAAA,CAAOF,CAAAA,CACP,aAAclG,CAAAA,CACd,QAAA,CAAWoG,CAAAA,EACTH,CAAAA,CAAS,CAAClC,CAAAA,CAA8B1G,CAAAA,CAAO2C,EAASoG,CAAI,CAAC,CAAC,CAClE,CAAC,EACD,IAAA,CAAK,OAAA,CAAQ,OAAO,uBAAA,CAAwB,CAC1C,MAAOF,CAAAA,CACP,YAAA,CAAclG,EACd,QAAA,CAAWoG,CAAAA,EACTH,CAAAA,CAAS,CAAChC,EAAiC5G,CAAAA,CAAO2C,CAAAA,CAASoG,CAAI,CAAC,CAAC,CACrE,CAAC,CAAA,CACD,IAAA,CAAK,OAAA,CAAQ,OAAO,0BAAA,CAA2B,CAC7C,MAAOF,CAAAA,CACP,YAAA,CAAclG,EACd,QAAA,CAAWoG,CAAAA,EACTH,CAAAA,CAAS,CAAC7B,GAAoC/G,CAAAA,CAAO2C,CAAAA,CAASoG,CAAI,CAAC,CAAC,CACxE,CAAC,CAAA,CACD,KAAK,OAAA,CAAQ,MAAA,CAAO,6BAA6B,CAC/C,KAAA,CAAOF,EACP,YAAA,CAAclG,CAAAA,CACd,SAAWoG,CAAAA,EACTH,CAAAA,CAAS,CACP5B,EAAAA,CAAsChH,EAAO2C,CAAAA,CAASoG,CAAI,CAC5D,CAAC,CACL,CAAC,CACH,CAAA,CACA,OAAO,CAAE,YAAa,IAAMD,CAAAA,CAAK,QAASE,CAAAA,EAAMA,CAAAA,CAAE,aAAa,CAAE,CACnE,CAEA,sBACEhJ,CAAAA,CACA2C,CAAAA,CACAhC,EACAiI,CAAAA,CACmB,CACnB,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAO,qBAAA,CAAsB,CAC/C,MAAOrI,CAAAA,CAAWP,CAAK,EACvB,YAAA,CAAc2C,CAAAA,CACd,WAAYjC,CAAAA,CAAgBC,CAAU,CAAA,CACtC,QAAA,CAAWoI,GAAmBH,CAAAA,CAAS,CAACzD,GAAa4D,CAAI,CAAC,CAAC,CAC7D,CAAC,CACH,CAEA,mBACE/I,CAAAA,CACA2C,CAAAA,CACAiG,EACmB,CACnB,OAAO,KAAK,OAAA,CAAQ,MAAA,CAAO,sBAAA,CAAuB,CAChD,MAAOrI,CAAAA,CAAWP,CAAK,EACvB,aAAA,CAAe2C,CAAAA,CACf,SAAWoG,CAAAA,EACTH,CAAAA,CACEG,EAAK,GAAA,CAAK3E,CAAAA,GAAU,CAClB,KAAA,CAAApE,CAAAA,CACA,QAASoE,CAAAA,CAAK,aAAA,CACd,KAAMA,CAAAA,CAAK,IAAA,CACX,cAAA,CAAgBA,CAAAA,CAAK,eACrB,KAAA,CAAOA,CAAAA,CAAK,MACZ,eAAA,CAAiBA,CAAAA,CAAK,gBACtB,IAAA,CAAMA,CAAAA,CAAK,IAAA,CACX,OAAA,CAASA,EAAK,QAAA,CACd,gBAAA,CAAkBA,EAAK,QAAA,CACvB,gBAAA,CAAkBA,EAAK,QAAA,CACvB,sBAAA,CAAwBA,CAAAA,CAAK,eAAA,CAC7B,OAAQA,CAAAA,CAAK,MAAA,CACb,WAAYA,CAAAA,CAAK,UACnB,EAAE,CACJ,CACJ,CAAC,CACH,CAEA,0BACEpE,CAAAA,CACA2C,CAAAA,CACAiG,EACmB,CACnB,OAAO,KAAK,OAAA,CAAQ,MAAA,CAAO,sBAAA,CAAuB,CAChD,MAAOrI,CAAAA,CAAWP,CAAK,EACvB,aAAA,CAAe2C,CAAAA,CACf,SAAWoG,CAAAA,EACTH,CAAAA,CACEG,CAAAA,CAAK,GAAA,CACFzH,IACE,CACC,KAAA,CAAAtB,EACA,aAAA,CAAesB,CAAAA,CAAG,cAClB,YAAA,CAAcA,CAAAA,CAAG,YAAA,CACjB,UAAA,CAAYA,EAAG,eAAA,CACf,MAAA,CAAQA,EAAG,OACb,CAAA,CACJ,CACF,CACJ,CAAC,CACH,CAEA,4BAAA,CACEtB,EACA2C,CAAAA,CACAiG,CAAAA,CACmB,CACnB,OAAO,IAAA,CAAK,QAAQ,MAAA,CAAO,kBAAA,CAAmB,CAC5C,KAAA,CAAOrI,EAAWP,CAAK,CAAA,CACvB,cAAe2C,CAAAA,CACf,QAAA,CAAWoG,GACTH,CAAAA,CAAS,CACP,CACE,KAAA,CAAA5I,EACA,aAAA,CAAe+I,CAAAA,CAAK,cACpB,YAAA,CAAcA,CAAAA,CAAK,aACnB,QAAA,CAAUA,CAAAA,CAAK,QAAA,CAAW,IAAI,KAAKA,CAAAA,CAAK,QAAQ,EAAI,MAAA,CACpD,SAAA,CAAWA,EAAK,SAAA,CAAY,IAAI,KAAKA,CAAAA,CAAK,SAAS,EAAI,MAAA,CACvD,IAAA,CAAMA,EAAK,QAAA,CACX,UAAA,CAAYA,EAAK,SAAA,CACjB,eAAA,CAAiBA,CAAAA,CAAK,cAAA,CACtB,iBAAkBA,CAAAA,CAAK,oBAAA,CACvB,MAAOA,CAAAA,CAAK,SAAA,CACZ,YAAaA,CAAAA,CAAK,UAAA,CAClB,gBAAA,CAAkBA,CAAAA,CAAK,gBACvB,iBAAA,CAAmBA,CAAAA,CAAK,sBACxB,mBAAA,CAAqBA,CAAAA,CAAK,oBAC1B,mBAAA,CAAqBA,CAAAA,CAAK,mBAAA,CAC1B,qBAAA,CAAuBA,EAAK,qBAAA,CAC5B,qBAAA,CAAuBA,EAAK,qBAAA,CAC5B,gBAAA,CAAkBA,EAAK,wBAAA,CACvB,gBAAA,CAAkBA,EAAK,wBACzB,CACF,CAAC,CACL,CAAC,CACH,CAEA,qBAAA,CACE/I,EACA2C,CAAAA,CACAiG,CAAAA,CACmB,CACnB,OAAO,KAAK,OAAA,CAAQ,MAAA,CAAO,qBAAqB,CAC9C,KAAA,CAAOrI,EAAWP,CAAK,CAAA,CACvB,aAAA,CAAe2C,CAAAA,CACf,SAAWoG,CAAAA,EACTH,CAAAA,CAAS,CAAC3B,CAAAA,CAAoBjH,CAAAA,CAAO+I,CAAI,CAAC,CAAC,CAC/C,CAAC,CACH,CAEA,oBAAA,CACE/I,EACA2C,CAAAA,CACAiG,CAAAA,CACmB,CACnB,OAAO,IAAA,CAAK,QAAQ,MAAA,CAAO,mBAAA,CAAoB,CAC7C,KAAA,CAAOrI,CAAAA,CAAWP,CAAK,CAAA,CACvB,YAAA,CAAc2C,EACd,QAAA,CAAWoG,CAAAA,EACTH,CAAAA,CAAS,CAAC3B,EAAoBjH,CAAAA,CAAO+I,CAAI,CAAC,CAAC,CAC/C,CAAC,CACH,CAEA,yBAAA,CACE/I,CAAAA,CACA2C,EACAiG,CAAAA,CACmB,CACnB,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAO,oBAAA,CAAqB,CAC9C,KAAA,CAAOrI,CAAAA,CAAWP,CAAK,CAAA,CACvB,aAAA,CAAe2C,EACf,QAAA,CAAWoG,CAAAA,EACTH,EAAS,CAAC1B,CAAAA,CAAelH,EAAO+I,CAAI,CAAC,CAAC,CAC1C,CAAC,CACH,CAEA,wBAAA,CACE/I,EACA2C,CAAAA,CACAiG,CAAAA,CACmB,CACnB,OAAO,KAAK,OAAA,CAAQ,MAAA,CAAO,oBAAoB,CAC7C,KAAA,CAAOrI,EAAWP,CAAK,CAAA,CACvB,aAAc2C,CAAAA,CACd,QAAA,CAAWoG,GACTH,CAAAA,CAAS,CAAC1B,EAAelH,CAAAA,CAAO+I,CAAI,CAAC,CAAC,CAC1C,CAAC,CACH,CAEA,kBAAA,CACE/I,CAAAA,CACA4I,EACmB,CACnB,IAAMC,EAAWtI,CAAAA,CAAWP,CAAK,EAC3BiJ,CAAAA,CAAa,IAAA,CAAK,wBACtBjJ,CAAAA,CACAkJ,iBAAAA,CAAc,IACdN,CACF,CAAA,CACME,EAAO,CACX,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,kBAAkB,CACpC,KAAA,CAAOD,EACP,QAAA,CAAWE,CAAAA,EACTH,EAAS,CAAC3D,EAAAA,CAAoBjF,CAAAA,CAAO+I,CAAI,CAAC,CAAC,CAC/C,CAAC,CAAA,CACD,IAAA,CAAK,QAAQ,MAAA,CAAO,0BAAA,CAA2B,CAC7C,KAAA,CAAOF,EACP,QAAA,CAAWE,CAAAA,EACTH,EAASG,CAAAA,CAAK,GAAA,CAAKzH,GAAO4D,EAAAA,CAA4BlF,CAAAA,CAAOsB,CAAE,CAAC,CAAC,CACrE,CAAC,CAAA,CACD,KAAK,OAAA,CAAQ,MAAA,CAAO,mCAAmC,CACrD,KAAA,CAAOuH,CAAAA,CACP,QAAA,CAAWE,GACTH,CAAAA,CACEG,CAAAA,CAAK,IAAKI,CAAAA,EAAMrC,CAAAA,CAAoC9G,EAAOmJ,CAAC,CAAC,CAC/D,CACJ,CAAC,CACH,CAAA,CACA,OAAO,CACL,WAAA,CAAa,IAAM,CACjBF,CAAAA,CAAW,WAAA,EAAY,CACvBH,EAAK,OAAA,CAASE,CAAAA,EAAMA,EAAE,WAAA,EAAa,EACrC,CACF,CACF,CAEA,uBAAA,CACEhJ,CAAAA,CACA4I,EACmB,CACnB,OAAO,KAAK,uBAAA,CAAwB5I,CAAAA,CAAOkJ,kBAAc,GAAA,CAAKN,CAAQ,CACxE,CAEA,wBACE5I,CAAAA,CACA4I,CAAAA,CACmB,CACnB,OAAO,IAAA,CAAK,wBACV5I,CAAAA,CACAkJ,iBAAAA,CAAc,QAAA,CACdN,CACF,CACF,CAEA,2BAAA,CACE5I,EACA4I,CAAAA,CACmB,CACnB,IAAMC,CAAAA,CAAWtI,CAAAA,CAAWP,CAAK,CAAA,CAC3BiJ,EAAa,IAAA,CAAK,uBAAA,CACtBjJ,EACAkJ,iBAAAA,CAAc,aAAA,CACdN,CACF,CAAA,CACMQ,CAAAA,CAAa,KAAK,OAAA,CAAQ,MAAA,CAAO,mCAAmC,CACxE,KAAA,CAAOP,EACP,QAAA,CAAWE,CAAAA,EACTH,EACEG,CAAAA,CAAK,GAAA,CAAKI,CAAAA,EAAMrC,CAAAA,CAAoC9G,EAAOmJ,CAAC,CAAC,CAC/D,CACJ,CAAC,EACD,OAAO,CACL,WAAA,CAAa,IAAM,CACjBF,CAAAA,CAAW,WAAA,GACXG,CAAAA,CAAW,WAAA,GACb,CACF,CACF,CAEA,oBAAA,CACEpJ,EACA4I,CAAAA,CACmB,CACnB,OAAO,IAAA,CAAK,uBAAA,CACV5I,EACAkJ,iBAAAA,CAAc,SAAA,CACdN,CACF,CACF,CAIA,OAAwB,uBAAA,CAEpB,CACF,CAACpI,WAAAA,CAAM,MAAM,EAAG,KAAA,CAChB,CAACA,WAAAA,CAAM,QAAQ,EAAG,KAAA,CAClB,CAACA,YAAM,OAAO,EAAG,KACnB,CAAA,CAEA,OAAwB,qBAAA,CAEpB,CACF,CAACA,WAAAA,CAAM,MAAM,EAAG,kCAAA,CAChB,CAACA,YAAM,QAAQ,EAAG,4CAAA,CAClB,CAACA,YAAM,OAAO,EAAG,4CACnB,CAAA,CAMA,MAAc,6BACZR,CAAAA,CACAmI,CAAAA,CACA/H,EACAmI,CAAAA,CAC2B,CAC3B,IAAMc,CAAAA,CAAO,IAAA,CAAK,QAAS,mBAAA,CACrBC,CAAAA,CAAK,IAAI,eAAA,CAAgB,CAC7B,KAAA,CAAOnB,CAAAA,CACP,QAAS/H,CACX,CAAC,EACGmI,CAAAA,EAAgB,MAAA,EAClBe,EAAG,GAAA,CAAI,QAAA,CAAUf,CAAAA,CAAe,IAAA,CAAK,GAAG,CAAC,CAAA,CAG3C,IAAM7I,CAAAA,CAAM,MAAM,MAAM,CAAA,EAAG2J,CAAI,CAAA,CAAA,EAAIC,CAAAA,CAAG,UAAU,CAAA,CAAE,EAClD,GAAI,CAAC5J,EAAI,EAAA,CACP,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwBA,EAAI,MAAM,CAAA,CAAE,EAOtD,OAAA,CAJc,MAAMA,EAAI,IAAA,EAAK,EAIjB,QAAA,CAAS,GAAA,CAAK0E,GAAS,CACjC,IAAMmF,EAAM,MAAA,CAAOnF,CAAAA,CAAK,OAAO,CAAA,CACzBoF,CAAAA,CAAWpF,CAAAA,CAAK,QAAA,CAChBqF,EAAU,MAAA,CAAO,EAAE,GAAK,MAAA,CAAOD,CAAQ,EACvCE,CAAAA,CAAQH,CAAAA,CAAME,CAAAA,CAEdE,CAAAA,CAAAA,CADOJ,EAAME,CAAAA,EACE,QAAA,GAAW,QAAA,CAASD,CAAAA,CAAU,GAAG,CAAA,CAChDI,CAAAA,CAAS,GAAGF,CAAK,CAAA,CAAA,EAAIC,CAAO,CAAA,CAAA,CAAG,OAAA,CAAQ,SAAU,EAAE,CAAA,EAAK,IAE9D,OAAO,CACL,KAAA,CAAA3J,CAAAA,CACA,QAASoE,CAAAA,CAAK,OAAA,CACd,KAAM,EAAA,CACN,MAAA,CAAQ,GACR,UAAA,CAAY,GAAA,CACZ,cAAe,GAAA,CACf,MAAA,CAAAwF,EACA,WAAA,CAAa,GAAA,CACb,eAAgB,GAAA,CAChB,QAAA,CAAUxF,EAAK,QACjB,CACF,CAAC,CACH,CAKA,MAAc,kCAAA,CACZpE,EACAmI,CAAAA,CACA/H,CAAAA,CAC2B,CAC3B,IAAM+D,CAAAA,CAAa,MAAM,IAAA,CAAK,4BAAA,CAC5BnE,EACAmI,CAAAA,CACA/H,CACF,EAEMyJ,CAAAA,CAAazC,CAAAA,CAAO,sBAAsBpH,CAAK,CAAA,CAC/C8J,CAAAA,CAAkBD,CAAAA,CACpB1F,EAAW,IAAA,CAAM4F,CAAAA,EAAMA,EAAE,OAAA,GAAYF,CAAU,EAC/C,MAAA,CAEJ,OAAO,CACL,KAAA,CAAA7J,EACA,OAAA,CAASI,CAAAA,CACT,aAAc,GAAA,CACd,eAAA,CAAiB0J,GAAiB,MAAA,EAAU,GAAA,CAC5C,UAAA,CAAA3F,CAAAA,CACA,QAAS,KAAA,CACT,OAAA,CAAS,KACX,CACF,CAIQ,oBAAoBkD,CAAAA,CAAmC,CAC7D,OAAO,CACL,MAAA,CAAQA,GAAS,MAAA,CACZnG,CAAAA,CAAWmG,EAAQ,MAAM,CAAA,CAC1B,OACJ,aAAA,CAAeA,CAAAA,EAAS,aAAA,CACAA,CAAAA,CAAQ,cAC5B,MAAA,CACJ,YAAA,CAAcA,GAAS,OAAA,CACnBjG,EAAAA,CAAkBiG,EAAQ,OAAO,CAAA,CACjC,MAAA,CACJ,iBAAA,CAAmBA,GAAS,OAAA,CACxB2C,EAAAA,CAA+B3C,EAAQ,OAAO,CAAA,CAC9C,OACJ,cAAA,CAAgBA,CAAAA,EAAS,QAAA,CACzB,eAAA,CAAiBA,GAAS,eAC5B,CACF,CAEA,MAAc,UAAA,CACZrH,EACAiK,CAAAA,CACA5C,CAAAA,CACgC,CAChC,IAAM6C,CAAAA,CAAY,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,SAAA,CAAU3J,CAAAA,CAAWP,CAAK,CAAA,CAAG,CACtE,GAAGiK,CAAAA,CACH,OAAQ5C,CAAAA,EAAS,MAAA,CACjB,MAAOA,CAAAA,EAAS,KAAA,CAChB,UAAWA,CAAAA,EAAS,SAAA,CACpB,eAAA,CAAiBA,CAAAA,EAAS,QAAQ,OAAA,EAAQ,CAC1C,eAAgBA,CAAAA,EAAS,KAAA,EAAO,SAAQ,CACxC,iBAAA,CAAmBA,CAAAA,EAAS,iBAAA,CAC5B,iBAAkBA,CAAAA,EAAS,gBAAA,CAC3B,YAAaA,CAAAA,EAAS,WAAA,CACtB,KAAMA,CAAAA,EAAS,IAAA,CACVA,EAAQ,IAAA,CAAK,WAAA,GACd,MACN,CAAC,EACD,OAAO3C,EAAAA,CAAcwF,CAAS,CAChC,CAEA,MAAc,cAAA,CACZlK,EACAiK,CAAAA,CACA5C,CAAAA,CACmC,CAGnC,IAAM8C,CAAAA,CAAO,MAAMjK,CAAAA,CAAoB,IAAA,CAAK,OAAA,CAASK,CAAAA,CAAWP,CAAK,CAAA,CAAG,CACtE,GAAGiK,CAAAA,CACH,MAAA,CAAQ5C,GAAS,MAAA,CACjB,KAAA,CAAOA,CAAAA,EAAS,KAAA,CAChB,UAAWA,CAAAA,EAAS,SAAA,CACpB,gBAAiBA,CAAAA,EAAS,MAAA,EAAQ,SAAQ,CAC1C,cAAA,CAAgBA,GAAS,KAAA,EAAO,OAAA,GAChC,iBAAA,CAAmBA,CAAAA,EAAS,kBAC5B,gBAAA,CAAkBA,CAAAA,EAAS,iBAC3B,WAAA,CAAaA,CAAAA,EAAS,WAAA,CACtB,IAAA,CAAMA,GAAS,IAAA,CAAOA,CAAAA,CAAQ,KAAK,WAAA,EAAY,CAAI,OACnD,MAAA,CAAQA,CAAAA,EAAS,MACnB,CAAC,EACD,OAAOxC,EAAAA,CAAiBsF,CAAI,CAC9B,CAEQ,wBACNnK,CAAAA,CACAoK,CAAAA,CACAxB,CAAAA,CACmB,CACnB,IAAMC,CAAAA,CAAWtI,CAAAA,CAAWP,CAAK,CAAA,CAC3B8I,CAAAA,CAAO,CACX,IAAA,CAAK,OAAA,CAAQ,OAAO,2BAAA,CAA4B,CAC9C,MAAOD,CAAAA,CACP,WAAA,CAAAuB,EACA,QAAA,CAAWrB,CAAAA,EACTH,EAASG,CAAAA,CAAK,GAAA,CAAKI,CAAAA,EAAM3C,CAAAA,CAA0BxG,EAAOmJ,CAAC,CAAC,CAAC,CACjE,CAAC,EACD,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,6BAAA,CAA8B,CAChD,KAAA,CAAON,CAAAA,CACP,YAAAuB,CAAAA,CACA,QAAA,CAAWrB,GACTH,CAAAA,CACEG,CAAAA,CAAK,GAAA,CAAKI,CAAAA,EACRzC,EAA8B1G,CAAAA,CAAOmJ,CAAAA,CAAE,aAAcA,CAAC,CACxD,CACF,CACJ,CAAC,EACD,IAAA,CAAK,OAAA,CAAQ,OAAO,4BAAA,CAA6B,CAC/C,MAAON,CAAAA,CACP,WAAA,CAAAuB,EACA,QAAA,CAAWrB,CAAAA,EACTH,CAAAA,CACEG,CAAAA,CAAK,IAAKI,CAAAA,EACR1C,CAAAA,CAA8BzG,EAAOmJ,CAAAA,CAAE,YAAA,CAAcA,CAAC,CACxD,CACF,CACJ,CAAC,EACD,IAAA,CAAK,OAAA,CAAQ,OAAO,+BAAA,CAAgC,CAClD,MAAON,CAAAA,CACP,WAAA,CAAAuB,CAAAA,CACA,QAAA,CAAWrB,GACTH,CAAAA,CACEG,CAAAA,CAAK,IAAKI,CAAAA,EACRvC,CAAAA,CAAiC5G,EAAOmJ,CAAAA,CAAE,YAAA,CAAcA,CAAC,CAC3D,CACF,CACJ,CAAC,CACH,EACA,OAAO,CAAE,YAAa,IAAML,CAAAA,CAAK,OAAA,CAASE,CAAAA,EAAMA,EAAE,WAAA,EAAa,CAAE,CACnE,CACF,EAEA,SAASgB,EAAAA,CACP3I,EAC2B,CAC3B,IAAMgJ,EAAShJ,CAAAA,CAAQ,IAAA,CACpBC,GAAOA,CAAAA,CAAG,KAAA,GAAU,4BACvB,CAAA,CACA,GAAK+I,CAAAA,CAGL,CAAA,GAAIA,EAAO,QAAA,GAAa,IAAA,CACtB,OAAO,CAACA,CAAAA,CAAO,KAAe,CAAA,CAEhC,GAAIA,EAAO,QAAA,GAAa,IAAA,CACtB,OAAOA,CAAAA,CAAO,KAAA,CAEhB,QAAQ,IAAA,CAAK,2CAAA,CAA6CA,CAAM,EAAA,CAElE","file":"index.js","sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/client\"] = \"0.3.6\";\n}\n\nexport default \"0.3.6\";\n","/**\n * Error thrown when a Client method is called against a server endpoint\n * that has not yet shipped. This is distinct from a network / auth error:\n * the SDK is structurally ready to call the endpoint but the backend\n * side is not.\n *\n * Widgets can use `instanceof NotImplementedError` (or check `code`) to\n * render a \"coming soon\" empty state instead of a generic error surface.\n */\nexport class NotImplementedError extends Error {\n /** Stable discriminant, useful across package boundaries where `instanceof` may be brittle. */\n readonly code = \"NotImplemented\" as const;\n\n constructor(method: string, detail?: string) {\n super(\n detail\n ? `${method} is not yet implemented by the backend: ${detail}`\n : `${method} is not yet implemented by the backend`,\n );\n this.name = \"NotImplementedError\";\n }\n}\n\n/** Type guard using the stable code so it survives bundling across realms. */\nexport function isNotImplementedError(\n error: unknown,\n): error is NotImplementedError {\n return (\n error instanceof Error &&\n (error as { code?: string }).code === \"NotImplemented\"\n );\n}\n","/**\n * Phase 3 HTTP helpers.\n *\n * The bundled `@chainstream-io/sdk` version pins an older schema that does not\n * recognize the Phase 3 parameters (`sortBy`, `positionState`, `resolution`) or\n * response fields (`gasFee`, `traderTags`, `tags`, `lastActiveAt`, `avgCostUsd`,\n * `isActive`, `walletTokenTags`, `isClosed`, `firstBuyAt`, `lastSellAt`).\n *\n * Rather than wait for the SDK to be regenerated, this module issues direct\n * `fetch` calls against the same REST endpoints the SDK would have hit, and\n * types the raw DTOs as described in the 2026-05-01 Phase 3 spec. Mapping from\n * DTO → domain type stays in `utils.ts`.\n *\n * Once the SDK adopts Phase 3, this module can be deleted and Client can call\n * the SDK methods again without touching any consumer code.\n */\nimport { ClientTokenProvider } from \"./client\";\n\n/** Shared default; matches the SDK's built-in default. */\nconst DEFAULT_SERVER_URL = \"https://api.chainstream.io\";\n\nexport interface Phase3RequestContext {\n baseUrl: string;\n accessToken: ClientTokenProvider;\n}\n\nasync function resolveAccessToken(\n provider: ClientTokenProvider,\n): Promise<string> {\n if (typeof provider === \"string\") return provider;\n return Promise.resolve(provider.getToken());\n}\n\nfunction appendQuery(params: URLSearchParams, key: string, value: unknown) {\n if (value === undefined || value === null) return;\n if (value instanceof Date) {\n params.set(key, String(value.getTime()));\n return;\n }\n params.set(key, String(value));\n}\n\nasync function request<T>(\n ctx: Phase3RequestContext,\n path: string,\n query: Record<string, unknown>,\n): Promise<T> {\n const url = new URL(path, ctx.baseUrl);\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) appendQuery(params, k, v);\n const search = params.toString();\n if (search) url.search = search;\n\n const token = await resolveAccessToken(ctx.accessToken);\n const res = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n throw new Error(\n `[phase3Http] ${res.status} ${res.statusText} ${url.pathname}: ${body}`,\n );\n }\n return (await res.json()) as T;\n}\n\nexport function buildPhase3Context(\n accessToken: ClientTokenProvider,\n serverUrl?: string,\n): Phase3RequestContext {\n return {\n baseUrl: serverUrl ?? DEFAULT_SERVER_URL,\n accessToken,\n };\n}\n\n// ============================================================================\n// DTO shapes (Phase 3)\n// ----------------------------------------------------------------------------\n// These mirror the response bodies documented in `servicesapi-interface-manual-\n// 2026-05-01.md`. They are intentionally defined here (rather than imported\n// from the SDK) because the SDK's generated types omit Phase 3 fields.\n// ============================================================================\n\nexport interface CursorPageDTO<T> {\n data: Array<T>;\n hasNext: boolean;\n hasPrev: boolean;\n startCursor?: string | null;\n endCursor?: string | null;\n}\n\nexport interface Phase3TokenHolderDTO {\n walletAddress: string;\n amount: string;\n amountInUsd: string;\n percentage: string;\n tags?: Array<string>;\n lastActiveAt?: number | null;\n startHoldingAt?: number | null;\n}\n\nexport interface Phase3ActivityDTO {\n transactionSignature: string;\n chain: string;\n blockHeight?: number;\n blockTimestamp: number;\n type: string;\n\n tokenAddress: string;\n tokenName?: string;\n tokenSymbol: string;\n tokenImageUrl?: string | null;\n tokenAmount: string;\n tokenAmountInUsd: string;\n tokenPriceInUsd?: string;\n tokenAmountInNative?: string;\n tokenPriceInNative?: string;\n\n sideTokenAddress: string;\n sideTokenName?: string;\n sideTokenSymbol: string;\n sideTokenImageUrl?: string | null;\n sideTokenAmount: string;\n sideTokenAmountInUsd: string;\n sideTokenPriceInUsd?: string;\n\n accountOwnerAddress: string;\n gasFee?: number | null;\n traderTags?: Array<string>;\n\n poolAddress?: string | null;\n dexProgramAddress?: string | null;\n dexProtocolFamily?: string | null;\n dexImage?: string | null;\n\n status?: string;\n}\n\nexport interface Phase3NetWorthTokenDTO {\n chain: string;\n tokenAddress: string;\n name: string;\n symbol: string;\n decimals: number;\n logoUri?: string | null;\n amount: string;\n priceInUsd: string;\n priceInNative: string;\n valueInUsd: string;\n valueInNative: string;\n isActive?: boolean;\n avgCostUsd?: string | null;\n lastActiveAt?: number | null;\n walletTokenTags?: Array<string>;\n}\n\nexport interface Phase3NetWorthByTokensDTO {\n walletAddress: string;\n totalValueInUsd: string;\n totalValueInNative: string;\n currentTimestamp?: number;\n data: Array<Phase3NetWorthTokenDTO>;\n}\n\nexport interface Phase3PnlSummaryDTO {\n tokens?: number | string;\n totalTrades?: number | string;\n buys?: number | string;\n sells?: number | string;\n wins?: number | string;\n losses?: number | string;\n winRate?: string | null;\n realizedProfitInUsd?: string | null;\n unrealizedProfitInUsd?: string | null;\n totalProfitInUsd?: string | null;\n totalProfitRatio?: string | null;\n currentValue?: string | null;\n buyAmountInUsd?: string | null;\n sellAmountInUsd?: string | null;\n totalCostInUsd?: string;\n avgProfitPerTradeInUsd?: string | null;\n}\n\nexport interface Phase3PnlItemDTO {\n tokenAddress: string;\n symbol?: string;\n name?: string;\n decimals?: number;\n logoUri?: string | null;\n walletAddress?: string;\n chain?: string;\n\n balance: string;\n priceInUsd: string;\n currentValue: string;\n\n realizedProfitInUsd?: string;\n realizedProfitRatio?: string;\n unrealizedProfitInUsd?: string;\n unrealizedProfitRatio?: string;\n totalProfitInUsd?: string;\n totalProfitRatio?: string;\n\n buys?: number | string;\n sells?: number | string;\n totalTrades?: number | string;\n wins?: number | string;\n losses?: number | string;\n buyAmount?: string;\n sellAmount?: string;\n buyAmountInUsd?: string;\n sellAmountInUsd?: string;\n avgBuyPriceInUsd?: string;\n avgSellPriceInUsd?: string;\n avgProfitPerTradeInUsd?: string;\n totalCostInUsd?: string;\n\n isClosed?: boolean;\n firstBuyAt?: number | null;\n lastSellAt?: number | null;\n}\n\nexport interface Phase3PnlDetailsDTO extends CursorPageDTO<Phase3PnlItemDTO> {\n summary: Phase3PnlSummaryDTO;\n}\n\n// ============================================================================\n// Query param types\n// ============================================================================\n\nexport interface GetTokenHoldersQuery {\n /**\n * Sort field. `realizedPnl` is accepted by newer servers for the Top\n * Traders view; if the backend does not recognize it, it typically falls\n * back to `holdingUsd` and the widget surfaces an empty state cue.\n */\n sortBy?: \"holdingUsd\" | \"lastActiveAt\" | \"realizedPnl\";\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\nexport interface GetActivitiesQuery {\n tokenAddress?: string;\n walletAddress?: string;\n poolAddress?: string;\n type?: string;\n sortBy?: \"timestamp\" | \"totalUsd\";\n beforeTimestamp?: number;\n afterTimestamp?: number;\n beforeBlockHeight?: number;\n afterBlockHeight?: number;\n transactionsSignature?: string;\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\nexport interface GetNetWorthByTokensQuery {\n tokenAddresses: string;\n}\n\nexport interface GetPnlDetailsQuery {\n resolution: \"7d\" | \"30d\" | \"90d\";\n positionState?: \"open\" | \"closed\" | \"all\";\n sortBy?: \"totalPnl\" | \"realizedPnl\" | \"unrealizedPnl\";\n limit?: number;\n cursor?: string;\n direction?: \"next\" | \"prev\";\n}\n\n// ============================================================================\n// Endpoint wrappers\n// ============================================================================\n\n/** `GET /v2/token/{chain}/{tokenAddress}/holders` */\nexport function getTokenHolders(\n ctx: Phase3RequestContext,\n chain: string,\n tokenAddress: string,\n query: GetTokenHoldersQuery,\n): Promise<CursorPageDTO<Phase3TokenHolderDTO>> {\n return request(\n ctx,\n `/v2/token/${encodeURIComponent(chain)}/${encodeURIComponent(\n tokenAddress,\n )}/holders`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/trade/{chain}/activities` */\nexport function getActivities(\n ctx: Phase3RequestContext,\n chain: string,\n query: GetActivitiesQuery,\n): Promise<CursorPageDTO<Phase3ActivityDTO>> {\n return request(\n ctx,\n `/v2/trade/${encodeURIComponent(chain)}/activities`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/wallet/{chain}/{walletAddress}/net-worth/tokens` */\nexport function getWalletNetWorthByTokens(\n ctx: Phase3RequestContext,\n chain: string,\n walletAddress: string,\n query: GetNetWorthByTokensQuery,\n): Promise<Phase3NetWorthByTokensDTO> {\n return request(\n ctx,\n `/v2/wallet/${encodeURIComponent(chain)}/${encodeURIComponent(\n walletAddress,\n )}/net-worth/tokens`,\n query as unknown as Record<string, unknown>,\n );\n}\n\n/** `GET /v2/wallet/{chain}/{walletAddress}/pnl-details` */\nexport function getWalletPnlDetails(\n ctx: Phase3RequestContext,\n chain: string,\n walletAddress: string,\n query: GetPnlDetailsQuery,\n): Promise<Phase3PnlDetailsDTO> {\n return request(\n ctx,\n `/v2/wallet/${encodeURIComponent(chain)}/${encodeURIComponent(\n walletAddress,\n )}/pnl-details`,\n query as unknown as Record<string, unknown>,\n );\n}\n","import {\n Token as TokenDTO,\n Resolution,\n TokenCandle as SdkTokenCandle,\n TokenStats as SdkTokenStats,\n TokenMarketData as SdkTokenMarketData,\n TokenField,\n RangeFilterCondition,\n SearchSortBy,\n TokenPage as ChainStreamTokenPage,\n SwapRouteResponse,\n SwapRouteInput,\n SwapRouteInputSwapMode,\n SendTxInput,\n SendTxResponse,\n WalletNetWorthPage,\n PageResponseTradeDetail,\n DexPool,\n ChainSymbol,\n TokenCreator as SdkTokenCreator,\n WsNewToken,\n WsTokenMetadata,\n WsCandle,\n WsTokenStat,\n WsTradeActivity,\n WsTokenHolder as WsTokenHolderDTO,\n WsTokenSupply,\n WsTokenLiquidity,\n WsTokenMaxLiquidity,\n WsTokenTotalLiquidity,\n WsTokenBondingCurve,\n WsMetricType,\n WalletPnlSummary,\n PnlDetailsResult,\n NetWorthByTokensResult,\n BlockchainLatestBlock as SdkBlockchainLatestBlock,\n} from \"@chainstream-io/sdk\";\nimport {\n API,\n Chain,\n Token,\n TokenCandle,\n TokenCreator,\n TokenHolder,\n TokenLiquidity,\n TokenMarketData,\n TokenResolution,\n TokenSecurity,\n TokenStats,\n TokenStatsByResolution,\n Activity,\n ActivityType,\n HolderTag,\n TraderTag,\n Trade,\n Portfolio,\n PortfolioPnl,\n WalletPnl,\n WalletPortfolioPnls,\n WalletPortfolios,\n WalletTokenTag,\n} from \"@liberfi.io/types\";\nimport { SafeBigNumber, SOLANA_TOKENS } from \"@liberfi.io/utils\";\nimport type {\n CursorPageDTO,\n Phase3ActivityDTO,\n Phase3NetWorthByTokensDTO,\n Phase3PnlDetailsDTO,\n Phase3PnlItemDTO,\n Phase3TokenHolderDTO,\n} from \"./phase3Http\";\n\nfunction nullToUndefined<T>(value: T | null | undefined): T | undefined {\n return value ?? undefined;\n}\n\nexport function toChainDTO(chain: Chain): ChainSymbol {\n switch (chain) {\n case Chain.ETHEREUM:\n return ChainSymbol.eth;\n case Chain.BINANCE:\n return ChainSymbol.bsc;\n case Chain.SOLANA:\n return ChainSymbol.sol;\n }\n throw new Error(`Unsupported chain: ${chain}`);\n}\n\nexport function toResolutionDTO(resolution: TokenResolution): Resolution {\n switch (resolution) {\n case \"1s\":\n return Resolution[\"1s\"];\n case \"15s\":\n return Resolution[\"15s\"];\n case \"30s\":\n return Resolution[\"30s\"];\n case \"1m\":\n return Resolution[\"1m\"];\n case \"5m\":\n return Resolution[\"5m\"];\n case \"15m\":\n return Resolution[\"15m\"];\n case \"30m\":\n case \"1h\":\n return Resolution[\"1h\"];\n case \"4h\":\n return Resolution[\"4h\"];\n case \"12h\":\n return Resolution[\"12h\"];\n case \"24h\":\n return Resolution[\"1d\"];\n }\n}\n\nexport function toSortDirectionDTO(direction: \"asc\" | \"desc\"): string {\n return direction;\n}\n\nexport function toSearchFieldDTO(field: API.TokenFieldOption): string {\n switch (field) {\n case \"marketCap\":\n return SearchSortBy.marketCapInUsd;\n case \"tvl\":\n return SearchSortBy.liquidityInUsd;\n case \"price\":\n return SearchSortBy.priceInUsd;\n case \"holders\":\n return SearchSortBy.holderCount;\n case \"volumes24h\":\n return SearchSortBy.h24VolumeInUsd;\n case \"trades24h\":\n return SearchSortBy.h24Transactions;\n case \"createdAt\":\n return SearchSortBy.tokenCreatedAt;\n }\n throw new Error(`Unsupported search field: ${field}`);\n}\n\nexport function toFieldDTO(field: API.TokenFieldOption): string {\n switch (field) {\n case \"price\":\n return TokenField.marketDatapriceInUsd;\n case \"priceChange1m\":\n return TokenField.statspriceChangeRatioInUsd1m;\n case \"priceChange5m\":\n return TokenField.statspriceChangeRatioInUsd5m;\n case \"priceChange1h\":\n return TokenField.statspriceChangeRatioInUsd1h;\n case \"priceChange4h\":\n return TokenField.statspriceChangeRatioInUsd4h;\n case \"priceChange24h\":\n return TokenField.statspriceChangeRatioInUsd24h;\n case \"marketCap\":\n return TokenField.marketDatamarketCapInUsd;\n case \"tvl\":\n return TokenField.marketDatamaxPoolTvlInUsd;\n case \"top10Holdings\":\n return TokenField.marketDatatop10TotalHoldings;\n case \"top10Ratio\":\n return TokenField.marketDatatop10HoldingsRatio;\n case \"top100Holdings\":\n return TokenField.marketDatatop100TotalHoldings;\n case \"top100Ratio\":\n return TokenField.marketDatatop100HoldingsRatio;\n case \"holders\":\n return TokenField.marketDataholders;\n case \"creatorsHoldings\":\n return TokenField.marketDatacreatorHoldings;\n case \"creatorsRatio\":\n return TokenField.marketDatacreatorHoldingsRatio;\n case \"buys1m\":\n return TokenField.statsbuys1m;\n case \"buys5m\":\n return TokenField.statsbuys5m;\n case \"buys15m\":\n return TokenField.statsbuys15m;\n case \"buys30m\":\n return TokenField.statsbuys30m;\n case \"buys1h\":\n return TokenField.statsbuys1h;\n case \"buys4h\":\n return TokenField.statsbuys4h;\n case \"buys24h\":\n return TokenField.statsbuys24h;\n case \"sells1m\":\n return TokenField.statssells1m;\n case \"sells5m\":\n return TokenField.statssells5m;\n case \"sells15m\":\n return TokenField.statssells15m;\n case \"sells30m\":\n return TokenField.statssells30m;\n case \"sells1h\":\n return TokenField.statssells1h;\n case \"sells4h\":\n return TokenField.statssells4h;\n case \"sells24h\":\n return TokenField.statssells24h;\n case \"trades1m\":\n return TokenField.statstrades1m;\n case \"trades5m\":\n return TokenField.statstrades5m;\n case \"trades1h\":\n return TokenField.statstrades1h;\n case \"trades4h\":\n return TokenField.statstrades4h;\n case \"trades24h\":\n return TokenField.statstrades24h;\n case \"traders1m\":\n return TokenField.statstraders1m;\n case \"traders5m\":\n return TokenField.statstraders5m;\n case \"traders1h\":\n return TokenField.statstraders1h;\n case \"traders4h\":\n return TokenField.statstraders4h;\n case \"traders24h\":\n return TokenField.statstraders24h;\n case \"volumes1m\":\n return TokenField.statsvolumesInUsd1m;\n case \"volumes5m\":\n return TokenField.statsvolumesInUsd5m;\n case \"volumes1h\":\n return TokenField.statsvolumesInUsd1h;\n case \"volumes4h\":\n return TokenField.statsvolumesInUsd4h;\n case \"volumes24h\":\n return TokenField.statsvolumesInUsd24h;\n case \"createdAt\":\n return TokenField.tokenCreatedAt;\n }\n throw new Error(`Unsupported sortBy: ${field}`);\n}\n\nexport function toRangeFiltersDTO(\n filters: Array<API.TokenFilterOption>,\n): Array<RangeFilterCondition> {\n return filters\n .filter(\n (it) => [\"gt\", \"gte\", \"lt\", \"lte\", \"between\"].indexOf(it.operator) >= 0,\n )\n .map((it) => {\n const cond = { field: toFieldDTO(it.field) } as RangeFilterCondition;\n if ([\"gt\", \"gte\", \"between\"].indexOf(it.operator) >= 0) {\n cond.min =\n typeof it.value === \"number\"\n ? new SafeBigNumber(it.value).toString()\n : (it.value as string);\n }\n if ([\"lt\", \"lte\", \"between\"].indexOf(it.operator) >= 0) {\n cond.max =\n typeof it.value === \"number\"\n ? new SafeBigNumber(it.value).toString()\n : (it.value as string);\n }\n return cond;\n });\n}\n\nexport function fromChainDTO(chain: string): Chain {\n switch (chain) {\n case ChainSymbol.eth:\n return Chain.ETHEREUM;\n case ChainSymbol.bsc:\n return Chain.BINANCE;\n case ChainSymbol.sol:\n case \"solana\":\n return Chain.SOLANA;\n }\n throw new Error(`Unsupported chain: ${chain}`);\n}\n\nexport function fromTokenCreatorDTO(input: SdkTokenCreator): TokenCreator {\n return {\n address: input.address ?? undefined,\n share: input.share ?? undefined,\n isVerified: input.isVerified ?? undefined,\n };\n}\n\nexport function fromTokenDTO(input: TokenDTO): Token {\n return {\n chain: fromChainDTO(input.chain),\n name: input.name,\n symbol: input.symbol,\n address: input.address,\n decimals: input.decimals,\n image: input.imageUrl ?? undefined,\n description: input.description ?? undefined,\n creators: input.tokenCreators?.map(fromTokenCreatorDTO),\n launchedFrom: {\n programAddress: input.extra?.launchFromProgramAddress ?? undefined,\n protocolFamily: input.extra?.launchFromProtocolFamily ?? undefined,\n },\n migrateProgress: input.marketData?.completionRatio\n ? new SafeBigNumber(input.marketData.completionRatio)\n .shiftedBy(2)\n .toString()\n : undefined,\n migratedTo: {\n programAddress: input.extra?.migratedToProgramAddress ?? undefined,\n protocolFamily: input.extra?.migratedToProtocolFamily ?? undefined,\n poolAddress: input.extra?.migratedToPoolAddress ?? undefined,\n migratedAt: input.extra?.migratedAt\n ? new Date(input.extra.migratedAt)\n : undefined,\n },\n socialMedias: input.socialMedias\n ? Object.fromEntries(\n Object.entries(input.socialMedias)\n .filter(([, v]) => v != null)\n .map(([k, v]) => [k, v as string]),\n )\n : undefined,\n stats: input.stats ? fromTokenStatsDTO(input.stats) : undefined,\n marketData: input.marketData\n ? fromTokenMarketDataDTO(input.marketData)\n : undefined,\n createdAt: input.tokenCreatedAt\n ? new Date(input.tokenCreatedAt)\n : undefined,\n };\n}\n\nexport function fromTokenStatsDTO(input: SdkTokenStats): TokenStats {\n return {\n [\"1m\"]: parseTokenStatsByResolution(input, \"1m\"),\n [\"5m\"]: parseTokenStatsByResolution(input, \"5m\"),\n [\"15m\"]: parseTokenStatsByResolution(input, \"15m\"),\n [\"30m\"]: parseTokenStatsByResolution(input, \"30m\"),\n [\"1h\"]: parseTokenStatsByResolution(input, \"1h\"),\n [\"4h\"]: parseTokenStatsByResolution(input, \"4h\"),\n [\"24h\"]: parseTokenStatsByResolution(input, \"24h\"),\n };\n}\n\nfunction toOptionalNumber(value: string | undefined): number | undefined {\n return value === undefined ? undefined : parseInt(value);\n}\n\nfunction parseTokenStatsByResolution(\n input: SdkTokenStats,\n resolution: TokenResolution,\n): TokenStatsByResolution {\n const period = input.periods?.[resolution];\n if (!period) {\n return {};\n }\n\n return {\n buys: toOptionalNumber(period.buys),\n sells: toOptionalNumber(period.sells),\n trades: toOptionalNumber(period.trades),\n buyers: toOptionalNumber(period.buyers),\n sellers: toOptionalNumber(period.sellers),\n traders: toOptionalNumber(period.traders),\n buyVolumes: period.buyVolume,\n sellVolumes: period.sellVolume,\n volumes: period.totalVolumeInNative,\n buyVolumesInUsd: period.buyVolumeInUsd,\n sellVolumesInUsd: period.sellVolumeInUsd,\n volumesInUsd: period.totalVolumeInUsd,\n openPriceInUsd: period.openInUsd,\n closePriceInUsd: period.closeInUsd,\n highPriceInUsd: period.highInUsd,\n lowPriceInUsd: period.lowInUsd,\n priceInUsd: period.closeInUsd,\n priceChange: period.priceChangeRatioInUsd,\n };\n}\n\nexport function fromTokenLiquidityDTO(input: DexPool): TokenLiquidity {\n return {\n poolAddress: input.poolAddress,\n programAddress: input.programAddress ?? undefined,\n protocolFamily: input.protocolFamily ?? undefined,\n tvl: input.tvlInSol ?? undefined,\n tvlInUsd: input.tvlInUsd ?? undefined,\n };\n}\n\nexport function fromTokenMarketDataDTO(\n input: SdkTokenMarketData,\n): TokenMarketData {\n return {\n totalSupply: input.totalSupply ?? undefined,\n marketCap: input.marketCapInSol ?? undefined,\n marketCapInUsd: input.marketCapInUsd ?? undefined,\n price: input.priceInSol ?? undefined,\n priceInUsd: input.priceInUsd ?? undefined,\n tvl: input.totalTvlInSol ?? undefined,\n tvlInUsd: input.totalTvlInUsd ?? undefined,\n holders: input.holders ? parseInt(input.holders) : undefined,\n top10Holdings: input.top10TotalHoldings ?? undefined,\n top10HoldingsRatio: input.top10HoldingsRatio ?? undefined,\n top50Holdings: input.top50TotalHoldings ?? undefined,\n top50HoldingsRatio: input.top50HoldingsRatio ?? undefined,\n top100Holdings: input.top100TotalHoldings ?? undefined,\n top100HoldingsRatio: input.top100HoldingsRatio ?? undefined,\n bluechipHolders: input.bluechipTotalHolders\n ? parseInt(input.bluechipTotalHolders)\n : undefined,\n bluechipHoldings: input.bluechipTotalHoldings ?? undefined,\n bluechipHoldingsRatio: input.bluechipHoldingsRatio ?? undefined,\n kolHolders: input.kolTotalHolders\n ? parseInt(input.kolTotalHolders)\n : undefined,\n kolHoldings: input.kolTotalHoldings ?? undefined,\n kolHoldingsRatio: input.kolHoldingsRatio ?? undefined,\n sniperHolders: input.sniperTotalHolders\n ? parseInt(input.sniperTotalHolders)\n : undefined,\n sniperHoldings: input.sniperTotalHoldings ?? undefined,\n sniperHoldingsRatio: input.sniperHoldingsRatio ?? undefined,\n proHolders: input.proTotalHolders\n ? parseInt(input.proTotalHolders)\n : undefined,\n proHoldings: input.proTotalHoldings ?? undefined,\n proHoldingsRatio: input.proHoldingsRatio ?? undefined,\n insiderHolders: input.insiderTotalHolders\n ? parseInt(input.insiderTotalHolders)\n : undefined,\n insiderHoldings: input.insiderTotalHoldings ?? undefined,\n insiderHoldingsRatio: input.insiderHoldingsRatio ?? undefined,\n sandwichHolders: input.sandwishTotalHolders\n ? parseInt(input.sandwishTotalHolders)\n : undefined,\n sandwichHoldings: input.sandwishTotalHoldings ?? undefined,\n sandwichHoldingsRatio: input.sandwishHoldingsRatio ?? undefined,\n freshHolders: input.freshTotalHolders\n ? parseInt(input.freshTotalHolders)\n : undefined,\n freshHoldings: input.freshTotalHoldings ?? undefined,\n freshHoldingsRatio: input.freshHoldingsRatio ?? undefined,\n bundleHolders: input.bundleTotalHolders\n ? parseInt(input.bundleTotalHolders)\n : undefined,\n bundleHoldings: input.bundleTotalHoldings ?? undefined,\n bundleHoldingsRatio: input.bundleHoldingsRatio ?? undefined,\n devHolders: input.devTotalHolders\n ? parseInt(input.devTotalHolders)\n : undefined,\n devHoldings: input.devTotalHoldings ?? undefined,\n devHoldingsRatio: input.devHoldingsRatio ?? undefined,\n };\n}\n\nexport function fromTokenCandle(\n input: SdkTokenCandle,\n resolution: TokenResolution,\n): TokenCandle {\n return {\n open: input.open,\n close: input.close,\n high: input.high,\n low: input.low,\n volume: input.volume,\n resolution,\n timestamp: new Date(input.timestamp),\n };\n}\n\nfunction fromResolutionDTO(resolution: string): TokenResolution {\n if (resolution === \"1d\") return \"24h\";\n return resolution as TokenResolution;\n}\n\nexport function fromTokenSecurity(\n input: Record<string, unknown>,\n): TokenSecurity {\n return {\n hasTransferFee: input.hasTransferFee as boolean | undefined,\n isTransferFeeUpgradable: input.isTransferFeeUpgradable as\n | boolean\n | undefined,\n isTransferable: input.isTransferable as boolean | undefined,\n isFreezable: input.isFreezable as boolean | undefined,\n isClosable: input.isClosable as boolean | undefined,\n };\n}\nconst solanaChains: ReadonlySet<Chain> = new Set([\n Chain.SOLANA,\n Chain.SOLANA_TESTNET,\n Chain.SOLANA_DEVNET,\n]);\n\n/** EVM chains use this address to denote the native token (ETH, BNB, etc.). */\nconst EVM_NATIVE_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\n/**\n * KyberSwap API expects this sentinel for native token (ETH/BNB/etc.),\n * not the zero address. See KyberSwap docs / 400 on route when using 0x0.\n * Exported for use when building route request bodies outside Client.swapRoute.\n */\nexport const KYBERSWAP_NATIVE_SENTINEL =\n \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\n/**\n * Jupiter does not accept Solana's native SOL address (System Program);\n * it requires the wrapped SOL (WSOL) mint instead.\n */\nfunction toJupiterMint(address: string): string {\n return address === SOLANA_TOKENS.native.address\n ? SOLANA_TOKENS.wrapped.address\n : address;\n}\n\n/**\n * KyberSwap does not accept EVM zero address (0x0) for native token;\n * it requires the native sentinel address 0xEee...\n */\nfunction toKyberSwapMint(address: string): string {\n return address.toLowerCase() === EVM_NATIVE_ADDRESS.toLowerCase()\n ? KYBERSWAP_NATIVE_SENTINEL\n : address;\n}\n\n/**\n * Resolves effective DEX from params: explicit dex or inferred from chain.\n * Mint conversion (native → sentinel) is chosen by this DEX, not by chain alone.\n */\nfunction effectiveDex(params: API.SwapParams): \"jupiter\" | \"kyberswap\" {\n if (params.dex) return params.dex;\n return solanaChains.has(params.chain) ? \"jupiter\" : \"kyberswap\";\n}\n\nfunction toMintForDex(dex: \"jupiter\" | \"kyberswap\", address: string): string {\n return dex === \"jupiter\"\n ? toJupiterMint(address)\n : dex === \"kyberswap\"\n ? toKyberSwapMint(address)\n : address;\n}\n\n/**\n * Returns the token address to send in route API for the given DEX.\n * Use this when building route request bodies manually (e.g. in a BFF or custom fetch).\n * For KyberSwap, EVM native (0x0) is converted to KYBERSWAP_NATIVE_SENTINEL.\n */\nexport function toMintForRoute(\n dex: \"jupiter\" | \"kyberswap\",\n address: string,\n): string {\n return toMintForDex(dex, address);\n}\n\nexport function toSwapRouteInput(params: API.SwapParams): SwapRouteInput {\n const dex = effectiveDex(params);\n const inputMint = toMintForDex(dex, params.input);\n const outputMint = toMintForDex(dex, params.output);\n return {\n dex: dex as SwapRouteInput[\"dex\"],\n userAddress: params.userAddress,\n amount: params.amount,\n swapMode: (params.mode === API.SwapMode.EXACT_IN\n ? SwapRouteInputSwapMode.ExactIn\n : SwapRouteInputSwapMode.ExactOut) as SwapRouteInput[\"swapMode\"],\n slippage: params.slippage ?? 1,\n inputMint,\n outputMint,\n priorityFee: params.priorityFee,\n ...(params.tipFee && { tipFee: params.tipFee }),\n ...(params.isAntiMev != null && { isAntiMev: params.isAntiMev }),\n ...(params.permit && { permit: params.permit }),\n ...(params.deadline != null && { deadline: params.deadline }),\n };\n}\n\nexport function toSendTxInput(params: API.SendTxParams): SendTxInput {\n return {\n signedTx: params.serializedTx,\n };\n}\n\nfunction toDateFromMs(ms: number | null | undefined): Date | undefined {\n return ms == null ? undefined : new Date(ms);\n}\n\nfunction toTagArray<T extends string>(\n input: Array<string> | null | undefined,\n): Array<T> | undefined {\n if (!input || input.length === 0) return undefined;\n return input as Array<T>;\n}\n\nexport function fromTokenHolderPage(\n input: CursorPageDTO<Phase3TokenHolderDTO>,\n): API.CursorList<TokenHolder> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n data: input.data.map((holder) => ({\n address: holder.walletAddress,\n amount: holder.amount,\n amountInUsd: holder.amountInUsd,\n ratio: holder.percentage,\n tags: toTagArray<HolderTag>(holder.tags),\n lastActiveAt: toDateFromMs(holder.lastActiveAt),\n startHoldingAt: toDateFromMs(holder.startHoldingAt),\n })),\n };\n}\n\nexport function fromTokenPage(\n input: ChainStreamTokenPage,\n): API.SearchTokenCursorList {\n const pageExtra = input as ChainStreamTokenPage & {\n countsByProtocols?: Record<string, unknown>;\n };\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n data: input.data.map(fromTokenDTO),\n extra: nullToUndefined(pageExtra.countsByProtocols),\n };\n}\n\nexport function fromSwapRoute(input: SwapRouteResponse): API.SwapRoute {\n return {\n serializedTx: input.serializedTx,\n recentBlockhash: nullToUndefined(input.recentBlockhash),\n lastValidBlockHeight: nullToUndefined(input.lastValidBlockHeight),\n plans: [],\n extra: input.routeInfo,\n };\n}\n\nexport function fromLatestBlock(\n input: SdkBlockchainLatestBlock,\n): API.BlockchainLatestBlock {\n return {\n blockhash: input.blockhash,\n lastValidBlockHeight: input.lastValidBlockHeight,\n };\n}\n\nexport function fromSendTxResult(input: SendTxResponse): API.SendTxResult {\n return {\n txHash: input.signature,\n extra: { jobId: input.jobId, elapsedTime: input.elapsedTime },\n };\n}\n\nexport function fromWalletPortfolios(\n chain: Chain,\n input: WalletNetWorthPage,\n): WalletPortfolios {\n const portfolios: Portfolio[] = (input.data ?? []).map((item) => ({\n chain: fromChainDTO(item.chain),\n address: item.tokenAddress,\n name: item.name,\n symbol: item.symbol,\n image: nullToUndefined(item.logoUri),\n priceInUsd: item.priceInUsd,\n priceInNative: item.priceInNative,\n amount: item.amount,\n amountInUsd: item.valueInUsd,\n amountInNative: item.valueInNative,\n decimals: item.decimals,\n }));\n\n return {\n chain: portfolios[0]?.chain ?? chain,\n address: input.walletAddress,\n balanceInUsd: input.totalValueInUsd,\n balanceInNative: input.totalValueInNative,\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n portfolios,\n };\n}\n\nexport function fromWalletPnlSummary(\n chain: Chain,\n address: string,\n input: WalletPnlSummary,\n): WalletPnl {\n return {\n chain,\n address,\n tokens: input.tokens ? Number(input.tokens) : undefined,\n buys: input.buys ? Number(input.buys) : undefined,\n sells: input.sells ? Number(input.sells) : undefined,\n totalTrades: input.totalTrades ? Number(input.totalTrades) : undefined,\n wins: input.wins ? Number(input.wins) : undefined,\n losses: input.losses ? Number(input.losses) : undefined,\n winRate: nullToUndefined(input.winRate),\n buyAmountInUsd: nullToUndefined(input.buyAmountInUsd),\n sellAmountInUsd: nullToUndefined(input.sellAmountInUsd),\n totalCostInUsd: nullToUndefined(input.totalCostInUsd),\n realizedProfitInUsd: nullToUndefined(input.realizedProfitInUsd),\n realizedProfitRatio: nullToUndefined(input.realizedProfitRatio),\n unrealizedProfitInUsd: nullToUndefined(input.unrealizedProfitInUsd),\n unrealizedProfitRatio: nullToUndefined(input.unrealizedProfitRatio),\n totalProfitInUsd: nullToUndefined(input.totalProfitInUsd),\n totalProfitRatio: nullToUndefined(input.totalProfitRatio),\n avgProfitPerTradeInUsd: nullToUndefined(input.avgProfitPerTradeInUsd),\n };\n}\n\nfunction fromPnlItemDTO(chain: Chain, item: Phase3PnlItemDTO): PortfolioPnl {\n return {\n chain,\n address: item.tokenAddress,\n name: item.name ?? \"\",\n symbol: item.symbol ?? \"\",\n image: nullToUndefined(item.logoUri),\n amount: item.balance,\n amountInUsd: item.currentValue,\n priceInUsd: item.priceInUsd,\n decimals: item.decimals ?? 0,\n totalTrades:\n item.totalTrades != null ? Number(item.totalTrades) : undefined,\n buys: item.buys != null ? Number(item.buys) : undefined,\n buyVolumes: item.buyAmount,\n buyVolumesInUsd: item.buyAmountInUsd,\n buyAvgPriceInUsd: item.avgBuyPriceInUsd,\n sells: item.sells != null ? Number(item.sells) : undefined,\n sellVolumes: item.sellAmount,\n sellVolumesInUsd: item.sellAmountInUsd,\n sellAvgPriceInUsd: item.avgSellPriceInUsd,\n realizedProfitInUsd: item.realizedProfitInUsd,\n realizedProfitRatio: item.realizedProfitRatio,\n unrealizedProfitInUsd: item.unrealizedProfitInUsd,\n unrealizedProfitRatio: item.unrealizedProfitRatio,\n totalProfitInUsd: item.totalProfitInUsd,\n totalProfitRatio: item.totalProfitRatio,\n isClosed: item.isClosed,\n firstBuyAt: toDateFromMs(item.firstBuyAt),\n lastSellAt: toDateFromMs(item.lastSellAt),\n };\n}\n\nexport function fromPnlDetailsPage(\n chain: Chain,\n address: string,\n input: Phase3PnlDetailsDTO,\n): WalletPortfolioPnls {\n return {\n chain,\n address,\n tokens:\n input.summary.tokens != null ? Number(input.summary.tokens) : undefined,\n buys: input.summary.buys != null ? Number(input.summary.buys) : undefined,\n sells:\n input.summary.sells != null ? Number(input.summary.sells) : undefined,\n totalTrades:\n input.summary.totalTrades != null\n ? Number(input.summary.totalTrades)\n : undefined,\n wins: input.summary.wins != null ? Number(input.summary.wins) : undefined,\n losses:\n input.summary.losses != null ? Number(input.summary.losses) : undefined,\n winRate: nullToUndefined(input.summary.winRate),\n buyAmountInUsd: nullToUndefined(input.summary.buyAmountInUsd),\n sellAmountInUsd: nullToUndefined(input.summary.sellAmountInUsd),\n totalCostInUsd: input.summary.totalCostInUsd,\n realizedProfitInUsd: nullToUndefined(input.summary.realizedProfitInUsd),\n unrealizedProfitInUsd: nullToUndefined(input.summary.unrealizedProfitInUsd),\n totalProfitInUsd: nullToUndefined(input.summary.totalProfitInUsd),\n totalProfitRatio: nullToUndefined(input.summary.totalProfitRatio),\n avgProfitPerTradeInUsd: nullToUndefined(\n input.summary.avgProfitPerTradeInUsd,\n ),\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n portfolios: input.data.map((item) => fromPnlItemDTO(chain, item)),\n };\n}\n\nexport function fromWalletNetWorthByTokens(\n chain: Chain,\n input: Phase3NetWorthByTokensDTO,\n): Portfolio[] {\n return (input.data ?? []).map((item) => ({\n chain: fromChainDTO(item.chain),\n address: item.tokenAddress,\n name: item.name,\n symbol: item.symbol,\n image: nullToUndefined(item.logoUri),\n priceInUsd: item.priceInUsd,\n priceInNative: item.priceInNative,\n amount: item.amount,\n amountInUsd: item.valueInUsd,\n amountInNative: item.valueInNative,\n decimals: item.decimals,\n isActive: item.isActive,\n avgCostUsd: nullToUndefined(item.avgCostUsd),\n lastActiveAt: toDateFromMs(item.lastActiveAt),\n walletTokenTags: toTagArray<WalletTokenTag>(item.walletTokenTags),\n }));\n}\n\nexport function fromPnlDetailItems(\n chain: Chain,\n input: PnlDetailsResult,\n): PortfolioPnl[] {\n return input.data.map((item) => ({\n chain,\n address: item.tokenAddress,\n name: item.name ?? \"\",\n symbol: item.symbol ?? \"\",\n image: nullToUndefined(item.logoUri),\n amount: item.balance,\n amountInUsd: item.currentValue,\n priceInUsd: item.priceInUsd,\n decimals: item.decimals ?? 0,\n totalTrades: Number(item.totalTrades),\n buys: Number(item.buys),\n buyVolumes: item.buyAmount,\n buyVolumesInUsd: item.buyAmountInUsd,\n buyAvgPriceInUsd: item.avgBuyPriceInUsd,\n sells: Number(item.sells),\n sellVolumes: item.sellAmount,\n sellVolumesInUsd: item.sellAmountInUsd,\n sellAvgPriceInUsd: item.avgSellPriceInUsd,\n realizedProfitInUsd: item.realizedProfitInUsd,\n realizedProfitRatio: item.realizedProfitRatio,\n unrealizedProfitInUsd: item.unrealizedProfitInUsd,\n unrealizedProfitRatio: item.unrealizedProfitRatio,\n totalProfitInUsd: item.totalProfitInUsd,\n totalProfitRatio: item.totalProfitRatio,\n }));\n}\n\nexport function fromTradePage(\n input: PageResponseTradeDetail,\n): API.CursorList<Trade> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n data: input.data.map(fromTradeDetailDTO),\n };\n}\n\nfunction fromTradeDetailDTO(\n input: PageResponseTradeDetail[\"data\"][number],\n): Trade {\n const isBuy = input.type.toLowerCase() === \"buy\";\n return {\n chain: fromChainDTO(input.chain),\n walletAddress: input.accountOwnerAddress,\n txHash: input.transactionSignature,\n type: isBuy ? \"buy\" : \"sell\",\n from: {\n address: isBuy ? input.sideTokenAddress : input.tokenAddress,\n symbol: isBuy ? input.sideTokenSymbol : input.tokenSymbol,\n name: isBuy ? input.sideTokenName : input.tokenName,\n image: nullToUndefined(\n isBuy ? input.sideTokenImageUrl : input.tokenImageUrl,\n ),\n amount: isBuy ? input.sideTokenAmount : input.tokenAmount,\n amountInUsd: isBuy ? input.sideTokenAmountInUsd : input.tokenAmountInUsd,\n priceInUsd: isBuy ? input.sideTokenPriceInUsd : input.tokenPriceInUsd,\n },\n to: {\n address: isBuy ? input.tokenAddress : input.sideTokenAddress,\n symbol: isBuy ? input.tokenSymbol : input.sideTokenSymbol,\n name: isBuy ? input.tokenName : input.sideTokenName,\n image: nullToUndefined(\n isBuy ? input.tokenImageUrl : input.sideTokenImageUrl,\n ),\n amount: isBuy ? input.tokenAmount : input.sideTokenAmount,\n amountInUsd: isBuy ? input.tokenAmountInUsd : input.sideTokenAmountInUsd,\n priceInUsd: isBuy ? input.tokenPriceInUsd : input.sideTokenPriceInUsd,\n },\n dex: {\n programAddress: nullToUndefined(input.dexProgramAddress),\n protocolFamily: nullToUndefined(input.dexProtocolFamily),\n image: nullToUndefined(input.dexImage),\n },\n poolAddress: nullToUndefined(input.poolAddress),\n status: (input.status as Trade[\"status\"]) ?? \"success\",\n time: new Date(input.blockTimestamp * 1000),\n };\n}\n\nexport function fromActivityPage(\n input: CursorPageDTO<Phase3ActivityDTO>,\n): API.CursorList<Activity> {\n return {\n startCursor: nullToUndefined(input.startCursor),\n endCursor: nullToUndefined(input.endCursor),\n hasPrev: input.hasPrev,\n hasNext: input.hasNext,\n data: input.data.map(fromActivityDetailDTO),\n };\n}\n\nfunction fromActivityDetailDTO(input: Phase3ActivityDTO): Activity {\n const type = input.type.toLowerCase().replace(/ /g, \"_\") as ActivityType;\n const isBuy = type === \"buy\";\n // Phase 3 delivers blockTimestamp as ms epoch directly; older manual maps used\n // `* 1000`. Detect second-vs-millisecond timestamp to stay robust during the\n // SDK transition: values below 10^12 are treated as seconds.\n const tsMs =\n input.blockTimestamp < 1e12\n ? input.blockTimestamp * 1000\n : input.blockTimestamp;\n return {\n chain: fromChainDTO(input.chain),\n walletAddress: input.accountOwnerAddress,\n txHash: input.transactionSignature,\n type,\n from: {\n address: isBuy ? input.sideTokenAddress : input.tokenAddress,\n symbol: isBuy ? input.sideTokenSymbol : input.tokenSymbol,\n name: isBuy ? input.sideTokenName : input.tokenName,\n image: nullToUndefined(\n isBuy ? input.sideTokenImageUrl : input.tokenImageUrl,\n ),\n amount: isBuy ? input.sideTokenAmount : input.tokenAmount,\n amountInUsd: isBuy ? input.sideTokenAmountInUsd : input.tokenAmountInUsd,\n priceInUsd: isBuy ? input.sideTokenPriceInUsd : input.tokenPriceInUsd,\n },\n to: {\n address: isBuy ? input.tokenAddress : input.sideTokenAddress,\n symbol: isBuy ? input.tokenSymbol : input.sideTokenSymbol,\n name: isBuy ? input.tokenName : input.sideTokenName,\n image: nullToUndefined(\n isBuy ? input.tokenImageUrl : input.sideTokenImageUrl,\n ),\n amount: isBuy ? input.tokenAmount : input.sideTokenAmount,\n amountInUsd: isBuy ? input.tokenAmountInUsd : input.sideTokenAmountInUsd,\n priceInUsd: isBuy ? input.tokenPriceInUsd : input.sideTokenPriceInUsd,\n },\n dex: {\n programAddress: nullToUndefined(input.dexProgramAddress),\n protocolFamily: nullToUndefined(input.dexProtocolFamily),\n image: nullToUndefined(input.dexImage),\n },\n poolAddress: nullToUndefined(input.poolAddress),\n status: (input.status as Activity[\"status\"]) ?? \"success\",\n time: new Date(tsMs),\n gasFee: input.gasFee != null ? String(input.gasFee) : undefined,\n traderTags: toTagArray<TraderTag>(input.traderTags),\n };\n}\n\nexport function fromTokenSubscribed(\n chain: Chain,\n input: WsNewToken,\n): API.TokenSubscribed {\n return {\n chain,\n address: input.tokenAddress,\n name: input.name,\n symbol: input.symbol,\n decimals: input.decimals,\n createdAt: input.createdAtMs ? new Date(input.createdAtMs) : undefined,\n launchedFrom: input.launchFrom\n ? {\n programAddress: input.launchFrom.programAddress,\n protocolFamily: input.launchFrom.protocolFamily,\n }\n : undefined,\n };\n}\n\nexport function fromTokenMetadataSubscribed(\n chain: Chain,\n input: WsTokenMetadata,\n): API.TokenSubscribed {\n return {\n chain,\n address: input.tokenAddress,\n name: input.name,\n symbol: input.symbol,\n decimals: input.decimals,\n image: input.imageUrl,\n description: input.description,\n socialMedias: input.socialMedia ? { ...input.socialMedia } : undefined,\n createdAt: input.createdAtMs ? new Date(input.createdAtMs) : undefined,\n launchedFrom: input.launchFrom\n ? {\n programAddress: input.launchFrom.programAddress,\n protocolFamily: input.launchFrom.protocolFamily,\n }\n : undefined,\n migratedTo: input.migratedTo\n ? {\n programAddress: input.migratedTo.programAddress,\n protocolFamily: input.migratedTo.protocolFamily,\n }\n : undefined,\n };\n}\n\n// ====================================\n// WebSocket data conversion functions\n// ====================================\n\nexport function fromWsCandle(input: WsCandle): TokenCandle {\n return {\n open: input.open,\n close: input.close,\n high: input.high,\n low: input.low,\n volume: input.volume,\n resolution: fromResolutionDTO(input.resolution),\n timestamp: new Date(input.time),\n };\n}\n\nexport function fromWsTokenStats(input: WsTokenStat): TokenStats {\n const timeframes = [\"1m\", \"5m\", \"15m\", \"30m\", \"1h\", \"4h\", \"24h\"] as const;\n const record = input as unknown as Record<\n string,\n number | string | undefined\n >;\n const result: TokenStats = {};\n\n for (const tf of timeframes) {\n const buys = record[`buys${tf}`] as number | undefined;\n const sells = record[`sells${tf}`] as number | undefined;\n const buyers = record[`buyers${tf}`] as number | undefined;\n const sellers = record[`sellers${tf}`] as number | undefined;\n const buyVolumeInUsd = record[`buyVolumeInUsd${tf}`] as string | undefined;\n const sellVolumeInUsd = record[`sellVolumeInUsd${tf}`] as\n | string\n | undefined;\n const trades = record[`trades${tf}`] as number | undefined;\n const price = record[`price${tf}`] as string | undefined;\n const openInUsd = record[`openInUsd${tf}`] as string | undefined;\n const closeInUsd = record[`closeInUsd${tf}`] as string | undefined;\n\n const hasData =\n buys !== undefined ||\n sells !== undefined ||\n trades !== undefined ||\n price !== undefined;\n\n if (!hasData) continue;\n\n const totalTrades =\n trades ??\n (buys !== undefined && sells !== undefined ? buys + sells : undefined);\n const totalTraders =\n buyers !== undefined && sellers !== undefined\n ? buyers + sellers\n : undefined;\n const totalVolumesInUsd =\n buyVolumeInUsd !== undefined && sellVolumeInUsd !== undefined\n ? new SafeBigNumber(buyVolumeInUsd).plus(sellVolumeInUsd).toString()\n : undefined;\n const priceChange =\n openInUsd && closeInUsd && new SafeBigNumber(openInUsd).gt(0)\n ? new SafeBigNumber(closeInUsd)\n .minus(openInUsd)\n .div(openInUsd)\n .toString()\n : undefined;\n\n result[tf] = {\n buys,\n sells,\n trades: totalTrades,\n buyers,\n sellers,\n traders: totalTraders,\n buyVolumesInUsd: buyVolumeInUsd,\n sellVolumesInUsd: sellVolumeInUsd,\n volumesInUsd: totalVolumesInUsd,\n openPriceInUsd: openInUsd,\n closePriceInUsd: closeInUsd,\n priceInUsd: price ?? closeInUsd,\n priceChange,\n };\n }\n\n return result;\n}\n\nexport function fromWsTokenMarketDataFromStats(\n input: WsTokenStat,\n): TokenMarketData {\n return {\n priceInUsd: input.price,\n };\n}\n\nexport function fromWsTokenDataSubscribed(\n chain: Chain,\n input: WsTokenStat,\n): API.TokenSubscribed {\n return {\n chain,\n address: input.address,\n stats: fromWsTokenStats(input),\n marketData: fromWsTokenMarketDataFromStats(input),\n };\n}\n\nexport function fromWsTokenSupplyToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenSupply,\n): API.TokenSubscribed {\n return {\n chain,\n address,\n marketData: {\n totalSupply: input.supply,\n marketCapInUsd: input.marketCapInUsd,\n },\n };\n}\n\nexport function fromWsTokenHolderToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenHolderDTO,\n): API.TokenSubscribed {\n return {\n chain,\n address,\n marketData: fromWsTokenMarketDataFromHolder(input),\n };\n}\n\nexport function fromWsTokenLiquidityToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenLiquidity,\n): API.TokenSubscribed {\n if (input.metricType === WsMetricType.LIQUIDITY_IN_USD) {\n return {\n chain,\n address,\n marketData: { tvlInUsd: input.value },\n };\n }\n if (input.metricType === WsMetricType.MIGRATED_RATIO) {\n return {\n chain,\n address,\n migrateProgress: new SafeBigNumber(input.value).shiftedBy(2).toString(),\n };\n }\n return { chain, address };\n}\n\nexport function fromWsTokenBondingCurveToSubscribed(\n chain: Chain,\n input: WsTokenBondingCurve,\n): API.TokenSubscribed {\n return {\n chain,\n address: input.tokenAddress ?? \"\",\n migrateProgress: input.progressRatio\n ? new SafeBigNumber(input.progressRatio).shiftedBy(2).toString()\n : undefined,\n };\n}\n\nexport function fromWsTokenMaxLiquidityToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenMaxLiquidity,\n): API.TokenSubscribed {\n return {\n chain,\n address,\n liquidities: [\n {\n poolAddress: input.poolAddress,\n tvlInUsd: input.liquidityInUsd,\n tvl: input.liquidityInNative,\n },\n ],\n };\n}\n\nexport function fromWsTokenTotalLiquidityToSubscribed(\n chain: Chain,\n address: string,\n input: WsTokenTotalLiquidity,\n): API.TokenSubscribed {\n return {\n chain,\n address,\n marketData: {\n tvlInUsd: input.liquidityInUsd,\n tvl: input.liquidityInNative,\n },\n };\n}\n\nexport function fromWsTokenMarketDataFromHolder(\n input: WsTokenHolderDTO,\n): Partial<TokenMarketData> {\n return {\n holders: input.holders,\n top10Holdings: input.top10HoldersAmount,\n top10HoldingsRatio: input.top10HoldersRatio,\n top50Holdings: input.top50HoldersAmount,\n top50HoldingsRatio: input.top50HoldersRatio,\n top100Holdings: input.top100HoldersAmount,\n top100HoldingsRatio: input.top100HoldersRatio,\n devHolders:\n input.balanceTagDevHolders === undefined\n ? undefined\n : input.balanceTagDevHolders,\n devHoldings: input.balanceTagDevAmount,\n devHoldingsRatio: input.balanceTagDevRatio,\n sniperHolders:\n input.balanceTagSniperHolders === undefined\n ? undefined\n : input.balanceTagSniperHolders,\n sniperHoldings: input.balanceTagSniperAmount,\n sniperHoldingsRatio: input.balanceTagSniperRatio,\n freshHolders:\n input.balanceTagFreshHolders === undefined\n ? undefined\n : input.balanceTagFreshHolders,\n freshHoldings: input.balanceTagFreshAmount,\n freshHoldingsRatio: input.balanceTagFreshRatio,\n bundleHolders:\n input.balanceTagBundleHolders === undefined\n ? undefined\n : input.balanceTagBundleHolders,\n bundleHoldings: input.balanceTagBundleAmount,\n bundleHoldingsRatio: input.balanceTagBundleRatio,\n sandwichHolders:\n input.balanceTagSandwichHolders === undefined\n ? undefined\n : input.balanceTagSandwichHolders,\n sandwichHoldings: input.balanceTagSandwichAmount,\n sandwichHoldingsRatio: input.balanceTagSandwichRatio,\n };\n}\n\nexport function fromWsTradeActivity(\n chain: Chain,\n input: WsTradeActivity,\n): Trade {\n const isBuy = input.kind.toLowerCase() === \"buy\";\n return {\n chain,\n walletAddress: isBuy ? input.buyWalletAddress : input.sellWalletAddress,\n txHash: input.txHash,\n type: isBuy ? \"buy\" : \"sell\",\n from: {\n address: input.sellTokenAddress,\n symbol: input.sellTokenSymbol,\n name: input.sellTokenName,\n amount: input.sellAmount,\n amountInUsd: input.sellAmountInUsd,\n },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n },\n status: \"success\",\n time: new Date(input.timestamp),\n };\n}\n\nexport function fromWsActivity(chain: Chain, input: WsTradeActivity): Activity {\n const type = input.kind.toLowerCase().replace(/ /g, \"_\") as ActivityType;\n const isBuy = type === \"buy\";\n return {\n chain,\n walletAddress: isBuy ? input.buyWalletAddress : input.sellWalletAddress,\n txHash: input.txHash,\n type,\n from: {\n address: input.sellTokenAddress,\n symbol: input.sellTokenSymbol,\n name: input.sellTokenName,\n amount: input.sellAmount,\n amountInUsd: input.sellAmountInUsd,\n },\n to: {\n address: input.buyTokenAddress,\n symbol: input.buyTokenSymbol,\n name: input.buyTokenName,\n amount: input.buyAmount,\n amountInUsd: input.buyAmountInUsd,\n },\n status: \"success\",\n time: new Date(input.timestamp),\n };\n}\n","import {\n ChainStreamClient,\n ChainSymbol,\n TokenField,\n SortDirection,\n TradeType,\n SearchSortBy,\n WsNewToken,\n WsTokenMetadata,\n WsCandle,\n WsTokenStat,\n WsTradeActivity,\n WsWalletBalance,\n WsWalletTokenPnl,\n WsChannelType,\n WsWalletPnl,\n WsTokenSupply,\n WsTokenHolder,\n WsTokenLiquidity,\n WsTokenMaxLiquidity,\n WsTokenTotalLiquidity,\n WsTokenBondingCurve,\n} from \"@chainstream-io/sdk\";\nimport {\n API,\n Chain,\n Token,\n TokenCandle,\n TokenHolder,\n TokenMarketData,\n TokenResolution,\n TokenSecurity,\n TokenStats,\n Activity,\n ActivityType,\n Trade,\n Portfolio,\n PortfolioPnl,\n WalletPnl,\n WalletPortfolioPnls,\n WalletPortfolios,\n} from \"@liberfi.io/types\";\nimport { NotImplementedError } from \"./errors\";\nimport {\n buildPhase3Context,\n getActivities as phase3GetActivities,\n getTokenHolders as phase3GetTokenHolders,\n getWalletNetWorthByTokens as phase3GetWalletNetWorthByTokens,\n getWalletPnlDetails as phase3GetWalletPnlDetails,\n type Phase3RequestContext,\n} from \"./phase3Http\";\nimport {\n toChainDTO,\n toResolutionDTO,\n fromTokenStatsDTO,\n fromTokenMarketDataDTO,\n toSortDirectionDTO,\n toFieldDTO,\n toRangeFiltersDTO,\n toSearchFieldDTO,\n fromTokenPage,\n fromSwapRoute,\n fromSendTxResult,\n fromWalletPortfolios,\n fromTradePage,\n fromTokenSubscribed,\n fromTokenMetadataSubscribed,\n fromTokenDTO,\n fromTokenCandle,\n fromTokenSecurity,\n fromTokenHolderPage,\n toSendTxInput,\n toSwapRouteInput,\n fromWsCandle,\n fromWsTokenDataSubscribed,\n fromWsTokenSupplyToSubscribed,\n fromWsTokenHolderToSubscribed,\n fromWsTokenLiquidityToSubscribed,\n fromWsTokenMaxLiquidityToSubscribed,\n fromWsTokenTotalLiquidityToSubscribed,\n fromWsTokenBondingCurveToSubscribed,\n fromWsTradeActivity,\n fromActivityPage,\n fromWsActivity,\n fromWalletPnlSummary,\n fromPnlDetailsPage,\n fromWalletNetWorthByTokens,\n fromPnlDetailItems,\n fromLatestBlock,\n} from \"./utils\";\n\n/** Async or sync token provider for authentication. */\nexport interface ClientTokenProviderFn {\n getToken(): Promise<string> | string;\n}\n\nexport type ClientTokenProvider = ClientTokenProviderFn | string;\n\nexport interface ClientOptions {\n debug?: boolean;\n serverUrl?: string;\n streamUrl?: string;\n autoConnectWebSocket?: boolean;\n /**\n * Temporary fallback: when set, all token balances (native + SPL / ERC-20)\n * are fetched from this URL instead of the upstream wallet API.\n * Expected endpoint: `GET {url}?chain=sol|eth|bnb&address=<wallet>[&tokens=addr1,addr2,...]`\n * Response shape: `{ balances: Array<{ address: string; balance: string; decimals: number }> }`\n * Remove this option once the upstream balance API is fixed.\n */\n nativeBalanceApiUrl?: string;\n}\n\nexport class Client implements API.IClient, API.ISubscribeClient {\n // ChainStream client instance\n private readonly _client: ChainStreamClient;\n // Phase 3 HTTP context; used to bypass the SDK for endpoints whose\n // response / request schema hasn't been picked up by the bundled SDK yet.\n private readonly _phase3: Phase3RequestContext;\n\n constructor(\n private readonly accessToken: ClientTokenProvider,\n private readonly options?: ClientOptions,\n ) {\n this._client = new ChainStreamClient(this.accessToken, this.options);\n this._phase3 = buildPhase3Context(\n this.accessToken,\n this.options?.serverUrl,\n );\n }\n\n async getToken(chain: Chain, address: string): Promise<Token> {\n const token = await this._client.token.getToken(toChainDTO(chain), address);\n return fromTokenDTO(token);\n }\n\n async getTokens(\n chain: Chain,\n addresses: Array<string>,\n ): Promise<Array<Token>> {\n const tokens = await this._client.token.getTokens(toChainDTO(chain), {\n tokenAddresses: addresses.join(\",\"),\n });\n return tokens.map(fromTokenDTO);\n }\n\n async getTokenCandles(\n chain: Chain,\n address: string,\n resolution: TokenResolution,\n options?: API.GetTokenCandlesOptions,\n ): Promise<Array<TokenCandle>> {\n const candles = await this._client.token.getCandles(\n toChainDTO(chain),\n address,\n {\n resolution: toResolutionDTO(resolution),\n from: options?.after?.getTime(),\n to: options?.before?.getTime(),\n limit: options?.limit,\n },\n );\n return candles.map((c) => fromTokenCandle(c, resolution));\n }\n\n async getTokenSecurity(\n chain: Chain,\n address: string,\n ): Promise<TokenSecurity> {\n const security = await this._client.token.getSecurity(\n toChainDTO(chain),\n address,\n );\n return fromTokenSecurity(security as Record<string, unknown>);\n }\n\n async getTokenStats(chain: Chain, address: string): Promise<TokenStats> {\n const stats = await this._client.token.getStats(toChainDTO(chain), address);\n return fromTokenStatsDTO(stats);\n }\n\n async getTokenHolders(\n chain: Chain,\n address: string,\n options?: API.GetTokenHoldersOptions,\n ): Promise<API.CursorList<TokenHolder>> {\n // Phase 3 bypass: the bundled SDK does not support `sortBy` or the new\n // `tags` / `lastActiveAt` / `startHoldingAt` response fields yet.\n const holders = await phase3GetTokenHolders(\n this._phase3,\n toChainDTO(chain),\n address,\n {\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n sortBy: options?.sortBy,\n },\n );\n return fromTokenHolderPage(holders);\n }\n\n async getTokenMarketData(\n chain: Chain,\n address: string,\n ): Promise<TokenMarketData> {\n const marketData = await this._client.token.getMarketData(\n toChainDTO(chain),\n address,\n );\n return fromTokenMarketDataDTO(marketData);\n }\n\n async getNewTokens(\n chain: Chain,\n options?: API.GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getNewTokens(\n toChainDTO(chain),\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async getFinalStretchTokens(\n chain: Chain,\n options?: API.GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getFinalStretchTokens(\n toChainDTO(chain),\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async getMigratedTokens(\n chain: Chain,\n options?: API.GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getMigratedTokens(\n toChainDTO(chain),\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async getTrendingTokens(\n chain: Chain,\n resolution: \"1m\" | \"5m\" | \"1h\" | \"4h\" | \"24h\",\n options?: API.GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getHotTokens(\n toChainDTO(chain),\n resolution,\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async getStockTokens(\n chain: Chain,\n options?: API.GetTokenListOptions,\n ): Promise<Array<Token>> {\n const tokens = await this._client.ranking.getStocksTokens(\n toChainDTO(chain),\n this._buildRankingParams(options),\n );\n return tokens.map(fromTokenDTO);\n }\n\n async searchTokens(\n options?: API.SearchTokensOptions,\n ): Promise<API.SearchTokenCursorList> {\n const tokenPage = await this._client.token.search({\n chains: options?.chains?.map(toChainDTO),\n q: options?.keyword,\n limit: options?.limit,\n cursor: options?.cursor,\n sortBy: options?.sortBy\n ? (toSearchFieldDTO(options.sortBy) as SearchSortBy)\n : undefined,\n sort: options?.sortDirection,\n // TODO protocols\n });\n return fromTokenPage(tokenPage);\n }\n\n async swapRoute(params: API.SwapParams): Promise<API.SwapRoute> {\n const route = await this._client.dex.route(\n toChainDTO(params.chain) as ChainSymbol,\n toSwapRouteInput(params),\n );\n return fromSwapRoute(route);\n }\n\n async getLatestBlock(\n params: API.LatestBlockParams,\n ): Promise<API.BlockchainLatestBlock> {\n const latestBlock = await this._client.blockchain.getLatestBlock(\n toChainDTO(params.chain),\n );\n return fromLatestBlock(latestBlock);\n }\n\n async sendTx(params: API.SendTxParams): Promise<API.SendTxResult> {\n const result = await this._client.transaction.send(\n toChainDTO(params.chain),\n toSendTxInput(params),\n );\n return fromSendTxResult(result);\n }\n\n async checkTxSuccess(\n chain: Chain,\n txHash: string,\n timeout?: number,\n ): Promise<boolean> {\n const { success } = await this._client.waitForJob<{\n id: string;\n status: string;\n success: boolean;\n }>(txHash, timeout);\n return success;\n }\n\n async getWalletPortfolios(\n chain: Chain,\n address: string,\n options?: { cursor?: string; limit?: number },\n ): Promise<WalletPortfolios> {\n const chainParam = Client._CHAIN_TO_BALANCE_PARAM[chain];\n if (chainParam && this.options?.nativeBalanceApiUrl) {\n return this._getWalletPortfoliosFromBalanceApi(\n chain,\n chainParam,\n address,\n );\n }\n const netWorth = await this._client.wallet.getNetWorth(\n toChainDTO(chain),\n address,\n { cursor: options?.cursor, limit: options?.limit ?? 100 },\n );\n return fromWalletPortfolios(chain, netWorth);\n }\n\n async getWalletPnl(\n chain: Chain,\n address: string,\n resolution?: string,\n ): Promise<WalletPnl> {\n const pnl = await this._client.wallet.getPnl(\n toChainDTO(chain),\n address,\n resolution\n ? { resolution: resolution as \"1d\" | \"7d\" | \"30d\" | \"all\" }\n : undefined,\n );\n return fromWalletPnlSummary(chain, address, pnl);\n }\n\n async getWalletPortfolioPnls(\n chain: Chain,\n address: string,\n options?: API.GetWalletPortfolioPnlsOptions,\n ): Promise<WalletPortfolioPnls> {\n // Phase 3 bypass: SDK does not accept resolution / positionState / sortBy.\n // `resolution` is server-required; default to `30d` for backward compat.\n const detailsPage = await phase3GetWalletPnlDetails(\n this._phase3,\n toChainDTO(chain),\n address,\n {\n resolution: options?.resolution ?? \"30d\",\n positionState: options?.positionState,\n sortBy: options?.sortBy,\n cursor: options?.cursor,\n limit: options?.limit ?? 100,\n direction: options?.direction,\n },\n );\n return fromPnlDetailsPage(chain, address, detailsPage);\n }\n\n async getWalletPortfoliosByTokens(\n chain: Chain,\n address: string,\n tokenAddresses: Array<string>,\n ): Promise<Array<Portfolio>> {\n const chainParam = Client._CHAIN_TO_BALANCE_PARAM[chain];\n if (chainParam && this.options?.nativeBalanceApiUrl) {\n return this._getPortfoliosFromBalanceApi(\n chain,\n chainParam,\n address,\n tokenAddresses,\n );\n }\n // Phase 3 bypass: SDK omits the new isActive / avgCostUsd /\n // lastActiveAt / walletTokenTags fields.\n const result = await phase3GetWalletNetWorthByTokens(\n this._phase3,\n toChainDTO(chain),\n address,\n { tokenAddresses: tokenAddresses.join(\",\") },\n );\n return fromWalletNetWorthByTokens(chain, result);\n }\n\n async getWalletPortfolioPnlsByTokens(\n chain: Chain,\n address: string,\n tokenAddresses: Array<string>,\n ): Promise<Array<PortfolioPnl>> {\n const detailsPage = await this._client.wallet.getPnlByToken(\n toChainDTO(chain),\n address,\n { tokenAddresses: tokenAddresses.join(\",\") },\n );\n return fromPnlDetailItems(chain, detailsPage);\n }\n\n async getWalletTrades(\n chain: Chain,\n address: string,\n options?: API.GetTradesOptions,\n ): Promise<API.CursorList<Trade>> {\n return this._getTrades(chain, { walletAddress: address }, options);\n }\n\n async getTokenTrades(\n chain: Chain,\n address: string,\n options?: API.GetTradesOptions,\n ): Promise<API.CursorList<Trade>> {\n return this._getTrades(chain, { tokenAddress: address }, options);\n }\n\n async getWalletActivities(\n chain: Chain,\n address: string,\n options?: API.GetActivitiesOptions,\n ): Promise<API.CursorList<Activity>> {\n return this._getActivities(chain, { walletAddress: address }, options);\n }\n\n async getTokenActivities(\n chain: Chain,\n address: string,\n options?: API.GetActivitiesOptions,\n ): Promise<API.CursorList<Activity>> {\n return this._getActivities(chain, { tokenAddress: address }, options);\n }\n\n async getPresignedUploadUrl(): Promise<string> {\n const result = await this._client.ipfs.presign();\n return result.presignUrl;\n }\n\n async getWalletLimitOrders(\n _chain: Chain,\n _address: string,\n _options?: API.GetWalletLimitOrdersOptions,\n ): Promise<API.CursorList<import(\"@liberfi.io/types\").LimitOrder>> {\n throw new NotImplementedError(\n \"Client.getWalletLimitOrders\",\n \"no limit-orders endpoint on the backend yet\",\n );\n }\n\n async getTokensByCreator(\n _chain: Chain,\n _creator: string,\n _options?: API.GetTokensByCreatorOptions,\n ): Promise<API.CursorList<Token>> {\n throw new NotImplementedError(\n \"Client.getTokensByCreator\",\n \"no creator-index endpoint on the backend yet\",\n );\n }\n\n subscribeToken(\n chain: Chain,\n address: string,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n const chainDTO = toChainDTO(chain);\n const subs = [\n this._client.stream.subscribeTokenStats({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenStat) =>\n callback([fromWsTokenDataSubscribed(chain, data)]),\n }),\n this._client.stream.subscribeTokenSupply({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenSupply) =>\n callback([fromWsTokenSupplyToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenHolders({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenHolder) =>\n callback([fromWsTokenHolderToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenLiquidity({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenLiquidity) =>\n callback([fromWsTokenLiquidityToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenMaxLiquidity({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenMaxLiquidity) =>\n callback([fromWsTokenMaxLiquidityToSubscribed(chain, address, data)]),\n }),\n this._client.stream.subscribeTokenTotalLiquidity({\n chain: chainDTO,\n tokenAddress: address,\n callback: (data: WsTokenTotalLiquidity) =>\n callback([\n fromWsTokenTotalLiquidityToSubscribed(chain, address, data),\n ]),\n }),\n ];\n return { unsubscribe: () => subs.forEach((s) => s.unsubscribe()) };\n }\n\n subscribeTokenCandles(\n chain: Chain,\n address: string,\n resolution: TokenResolution,\n callback: (candles: Array<TokenCandle>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeTokenCandles({\n chain: toChainDTO(chain),\n tokenAddress: address,\n resolution: toResolutionDTO(resolution),\n callback: (data: WsCandle) => callback([fromWsCandle(data)]),\n });\n }\n\n subscribeWalletPnl(\n chain: Chain,\n address: string,\n callback: (pnls: Array<API.WalletPnlSubscribed>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeWalletPnlList({\n chain: toChainDTO(chain),\n walletAddress: address,\n callback: (data: WsWalletPnl[]) =>\n callback(\n data.map((item) => ({\n chain,\n address: item.walletAddress,\n buys: item.buys,\n buyAmountInUsd: item.buyAmountInUsd,\n sells: item.sells,\n sellAmountInUsd: item.sellAmountInUsd,\n wins: item.wins,\n winRate: item.winRatio,\n totalProfitInUsd: item.pnlInUsd,\n totalProfitRatio: item.pnlRatio,\n avgProfitPerTradeInUsd: item.averagePnlInUsd,\n tokens: item.tokens,\n resolution: item.resolution,\n })),\n ),\n });\n }\n\n subscribeWalletPortfolios(\n chain: Chain,\n address: string,\n callback: (portfolios: Array<API.PortfolioSubscribed>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeWalletBalance({\n chain: toChainDTO(chain),\n walletAddress: address,\n callback: (data: WsWalletBalance[]) =>\n callback(\n data.map(\n (it) =>\n ({\n chain,\n walletAddress: it.walletAddress,\n tokenAddress: it.tokenAddress,\n priceInUsd: it.tokenPriceInUsd,\n amount: it.balance,\n }) as API.PortfolioSubscribed,\n ),\n ),\n });\n }\n\n subscribeWalletPortfolioPnls(\n chain: Chain,\n address: string,\n callback: (portfolioPnls: Array<API.PortfolioPnlSubscribed>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeWalletPnl({\n chain: toChainDTO(chain),\n walletAddress: address,\n callback: (data: WsWalletTokenPnl) =>\n callback([\n {\n chain,\n walletAddress: data.walletAddress,\n tokenAddress: data.tokenAddress,\n openTime: data.opentime ? new Date(data.opentime) : undefined,\n closeTime: data.closetime ? new Date(data.closetime) : undefined,\n buys: data.buyCount,\n buyVolumes: data.buyAmount,\n buyVolumesInUsd: data.buyAmountInUsd,\n buyAvgPriceInUsd: data.averageBuyPriceInUsd,\n sells: data.sellCount,\n sellVolumes: data.sellAmount,\n sellVolumesInUsd: data.sellAmountInUsd,\n sellAvgPriceInUsd: data.averageSellPriceInUsd,\n realizedProfitInUsd: data.realizedProfitInUsd,\n realizedProfitRatio: data.realizedProfitRatio,\n unrealizedProfitInUsd: data.unrealizedProfitInUsd,\n unrealizedProfitRatio: data.unrealizedProfitRatio,\n totalProfitInUsd: data.totalRealizedProfitInUsd,\n totalProfitRatio: data.totalRealizedProfitRatio,\n } as API.PortfolioPnlSubscribed,\n ]),\n });\n }\n\n subscribeWalletTrades(\n chain: Chain,\n address: string,\n callback: (trades: Array<Trade>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeWalletTrade({\n chain: toChainDTO(chain),\n walletAddress: address,\n callback: (data: WsTradeActivity) =>\n callback([fromWsTradeActivity(chain, data)]),\n });\n }\n\n subscribeTokenTrades(\n chain: Chain,\n address: string,\n callback: (trades: Array<Trade>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeTokenTrade({\n chain: toChainDTO(chain),\n tokenAddress: address,\n callback: (data: WsTradeActivity) =>\n callback([fromWsTradeActivity(chain, data)]),\n });\n }\n\n subscribeWalletActivities(\n chain: Chain,\n address: string,\n callback: (activities: Array<Activity>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeWalletTrade({\n chain: toChainDTO(chain),\n walletAddress: address,\n callback: (data: WsTradeActivity) =>\n callback([fromWsActivity(chain, data)]),\n });\n }\n\n subscribeTokenActivities(\n chain: Chain,\n address: string,\n callback: (activities: Array<Activity>) => void,\n ): API.ISubscription {\n return this._client.stream.subscribeTokenTrade({\n chain: toChainDTO(chain),\n tokenAddress: address,\n callback: (data: WsTradeActivity) =>\n callback([fromWsActivity(chain, data)]),\n });\n }\n\n subscribeNewTokens(\n chain: Chain,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n const chainDTO = toChainDTO(chain);\n const rankingSub = this._subscribeRankingTokens(\n chain,\n WsChannelType.New,\n callback,\n );\n const subs = [\n this._client.stream.subscribeNewToken({\n chain: chainDTO,\n callback: (data: WsNewToken) =>\n callback([fromTokenSubscribed(chain, data)]),\n }),\n this._client.stream.subscribeNewTokensMetadata({\n chain: chainDTO,\n callback: (data: WsTokenMetadata[]) =>\n callback(data.map((it) => fromTokenMetadataSubscribed(chain, it))),\n }),\n this._client.stream.subscribeRankingTokensBondingCurve({\n chain: chainDTO,\n callback: (data: WsTokenBondingCurve[]) =>\n callback(\n data.map((d) => fromWsTokenBondingCurveToSubscribed(chain, d)),\n ),\n }),\n ];\n return {\n unsubscribe: () => {\n rankingSub.unsubscribe();\n subs.forEach((s) => s.unsubscribe());\n },\n };\n }\n\n subscribeTrendingTokens(\n chain: Chain,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n return this._subscribeRankingTokens(chain, WsChannelType.HOT, callback);\n }\n\n subscribeMigratedTokens(\n chain: Chain,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n return this._subscribeRankingTokens(\n chain,\n WsChannelType.MIGRATED,\n callback,\n );\n }\n\n subscribeFinalStretchTokens(\n chain: Chain,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n const chainDTO = toChainDTO(chain);\n const rankingSub = this._subscribeRankingTokens(\n chain,\n WsChannelType.FINAL_STRETCH,\n callback,\n );\n const bondingSub = this._client.stream.subscribeRankingTokensBondingCurve({\n chain: chainDTO,\n callback: (data: WsTokenBondingCurve[]) =>\n callback(\n data.map((d) => fromWsTokenBondingCurveToSubscribed(chain, d)),\n ),\n });\n return {\n unsubscribe: () => {\n rankingSub.unsubscribe();\n bondingSub.unsubscribe();\n },\n };\n }\n\n subscribeStockTokens(\n chain: Chain,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n return this._subscribeRankingTokens(\n chain,\n WsChannelType.US_STOCKS,\n callback,\n );\n }\n\n // ── RPC balance fallback (temporary) ─────────────────────────────────────\n\n private static readonly _CHAIN_TO_BALANCE_PARAM: Partial<\n Record<Chain, string>\n > = {\n [Chain.SOLANA]: \"sol\",\n [Chain.ETHEREUM]: \"eth\",\n [Chain.BINANCE]: \"bnb\",\n };\n\n private static readonly _NATIVE_TOKEN_ADDRESS: Partial<\n Record<Chain, string>\n > = {\n [Chain.SOLANA]: \"11111111111111111111111111111111\",\n [Chain.ETHEREUM]: \"0x0000000000000000000000000000000000000000\",\n [Chain.BINANCE]: \"0x0000000000000000000000000000000000000000\",\n };\n\n /**\n * Fetch token balances from the local `/api/balance` RPC proxy and convert\n * the raw `{ address, balance, decimals }` entries into `Portfolio` objects.\n */\n private async _getPortfoliosFromBalanceApi(\n chain: Chain,\n chainParam: string,\n walletAddress: string,\n tokenAddresses?: Array<string>,\n ): Promise<Array<Portfolio>> {\n const base = this.options!.nativeBalanceApiUrl!;\n const qs = new URLSearchParams({\n chain: chainParam,\n address: walletAddress,\n });\n if (tokenAddresses?.length) {\n qs.set(\"tokens\", tokenAddresses.join(\",\"));\n }\n\n const res = await fetch(`${base}?${qs.toString()}`);\n if (!res.ok) {\n throw new Error(`Balance API returned ${res.status}`);\n }\n\n const data = (await res.json()) as {\n balances: Array<{ address: string; balance: string; decimals: number }>;\n };\n\n return data.balances.map((item) => {\n const raw = BigInt(item.balance);\n const decimals = item.decimals;\n const divisor = BigInt(10) ** BigInt(decimals);\n const whole = raw / divisor;\n const frac = raw % divisor;\n const fracStr = frac.toString().padStart(decimals, \"0\");\n const amount = `${whole}.${fracStr}`.replace(/\\.?0+$/, \"\") || \"0\";\n\n return {\n chain,\n address: item.address,\n name: \"\",\n symbol: \"\",\n priceInUsd: \"0\",\n priceInNative: \"0\",\n amount,\n amountInUsd: \"0\",\n amountInNative: \"0\",\n decimals: item.decimals,\n };\n });\n }\n\n /**\n * Fetch all holdings from the balance API and wrap as `WalletPortfolios`.\n */\n private async _getWalletPortfoliosFromBalanceApi(\n chain: Chain,\n chainParam: string,\n walletAddress: string,\n ): Promise<WalletPortfolios> {\n const portfolios = await this._getPortfoliosFromBalanceApi(\n chain,\n chainParam,\n walletAddress,\n );\n\n const nativeAddr = Client._NATIVE_TOKEN_ADDRESS[chain];\n const nativePortfolio = nativeAddr\n ? portfolios.find((p) => p.address === nativeAddr)\n : undefined;\n\n return {\n chain,\n address: walletAddress,\n balanceInUsd: \"0\",\n balanceInNative: nativePortfolio?.amount ?? \"0\",\n portfolios,\n hasPrev: false,\n hasNext: false,\n };\n }\n\n // ── End RPC balance fallback ───────────────────────────────────────────\n\n private _buildRankingParams(options?: API.GetTokenListOptions) {\n return {\n sortBy: options?.sortBy\n ? (toFieldDTO(options.sortBy) as TokenField)\n : undefined,\n sortDirection: options?.sortDirection\n ? (toSortDirectionDTO(options.sortDirection) as SortDirection)\n : undefined,\n rangeFilters: options?.filters\n ? toRangeFiltersDTO(options.filters)\n : undefined,\n launchpadPlatform: options?.filters\n ? parseLaunchPlatformFromFilters(options.filters)\n : undefined,\n searchKeywords: options?.keywords,\n excludeKeywords: options?.excludeKeywords,\n };\n }\n\n private async _getTrades(\n chain: Chain,\n target: { walletAddress?: string; tokenAddress?: string },\n options?: API.GetTradesOptions,\n ): Promise<API.CursorList<Trade>> {\n const tradePage = await this._client.trade.getTrades(toChainDTO(chain), {\n ...target,\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n beforeTimestamp: options?.before?.getTime(),\n afterTimestamp: options?.after?.getTime(),\n beforeBlockHeight: options?.beforeBlockHeight,\n afterBlockHeight: options?.afterBlockHeight,\n poolAddress: options?.poolAddress,\n type: options?.type\n ? (options.type.toUpperCase() as TradeType)\n : undefined,\n });\n return fromTradePage(tradePage);\n }\n\n private async _getActivities(\n chain: Chain,\n target: { walletAddress?: string; tokenAddress?: string },\n options?: API.GetActivitiesOptions,\n ): Promise<API.CursorList<Activity>> {\n // Phase 3 bypass: SDK does not accept `sortBy` or deliver the new\n // `gasFee` / `traderTags` response fields.\n const page = await phase3GetActivities(this._phase3, toChainDTO(chain), {\n ...target,\n cursor: options?.cursor,\n limit: options?.limit,\n direction: options?.direction,\n beforeTimestamp: options?.before?.getTime(),\n afterTimestamp: options?.after?.getTime(),\n beforeBlockHeight: options?.beforeBlockHeight,\n afterBlockHeight: options?.afterBlockHeight,\n poolAddress: options?.poolAddress,\n type: options?.type ? options.type.toUpperCase() : undefined,\n sortBy: options?.sortBy,\n });\n return fromActivityPage(page);\n }\n\n private _subscribeRankingTokens(\n chain: Chain,\n channelType: WsChannelType,\n callback: (data: Array<API.TokenSubscribed>) => void,\n ): API.ISubscription {\n const chainDTO = toChainDTO(chain);\n const subs = [\n this._client.stream.subscribeRankingTokensStats({\n chain: chainDTO,\n channelType,\n callback: (data: WsTokenStat[]) =>\n callback(data.map((d) => fromWsTokenDataSubscribed(chain, d))),\n }),\n this._client.stream.subscribeRankingTokensHolders({\n chain: chainDTO,\n channelType,\n callback: (data: WsTokenHolder[]) =>\n callback(\n data.map((d) =>\n fromWsTokenHolderToSubscribed(chain, d.tokenAddress, d),\n ),\n ),\n }),\n this._client.stream.subscribeRankingTokensSupply({\n chain: chainDTO,\n channelType,\n callback: (data: WsTokenSupply[]) =>\n callback(\n data.map((d) =>\n fromWsTokenSupplyToSubscribed(chain, d.tokenAddress, d),\n ),\n ),\n }),\n this._client.stream.subscribeRankingTokensLiquidity({\n chain: chainDTO,\n channelType,\n callback: (data: WsTokenLiquidity[]) =>\n callback(\n data.map((d) =>\n fromWsTokenLiquidityToSubscribed(chain, d.tokenAddress, d),\n ),\n ),\n }),\n ];\n return { unsubscribe: () => subs.forEach((s) => s.unsubscribe()) };\n }\n}\n\nfunction parseLaunchPlatformFromFilters(\n filters: Array<API.TokenFilterOption>,\n): Array<string> | undefined {\n const filter = filters.find(\n (it) => it.field === \"launchedFromProtocolFamily\",\n );\n if (!filter) {\n return undefined;\n }\n if (filter.operator === \"eq\") {\n return [filter.value as string];\n }\n if (filter.operator === \"in\") {\n return filter.value as Array<string>;\n }\n console.warn(\"invalid launchedFromProtocolFamily filter\", filter);\n return undefined;\n}\n"]}
|